xref: /rockchip-linux_mpp/mpp/hal/vpu/vp8e/hal_vp8e_base.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __HAL_VP8E_BASE_H__
18*437bfbebSnyanmisaka #define __HAL_VP8E_BASE_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_device.h"
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka #include "vp8e_syntax.h"
23*437bfbebSnyanmisaka #include "vepu_common.h"
24*437bfbebSnyanmisaka #include "hal_enc_task.h"
25*437bfbebSnyanmisaka #include "hal_vp8e_entropy.h"
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka #define VP8_PROB_COUNT_MV_OFFSET     (222)
28*437bfbebSnyanmisaka #define VP8_PROB_COUNT_BUF_SIZE      (244*2)
29*437bfbebSnyanmisaka 
30*437bfbebSnyanmisaka #define mask_7b         (RK_U32)0x0000007F
31*437bfbebSnyanmisaka 
32*437bfbebSnyanmisaka #define INPUT_YUV420PLANAR         0x00
33*437bfbebSnyanmisaka #define INPUT_YUV420SEMIPLANAR     0x01
34*437bfbebSnyanmisaka #define INPUT_YUYV422INTERLEAVED   0x02
35*437bfbebSnyanmisaka #define INPUT_UYVY422INTERLEAVED   0x03
36*437bfbebSnyanmisaka #define INPUT_RGB565               0x04
37*437bfbebSnyanmisaka #define INPUT_RGB555               0x05
38*437bfbebSnyanmisaka #define INPUT_RGB444               0x06
39*437bfbebSnyanmisaka #define INPUT_RGB888               0x07
40*437bfbebSnyanmisaka #define INPUT_RGB101010            0x08
41*437bfbebSnyanmisaka #define INPUT_YUYV422TILED         0x09
42*437bfbebSnyanmisaka 
43*437bfbebSnyanmisaka #define IVF_HDR_BYTES       32
44*437bfbebSnyanmisaka #define IVF_FRM_BYTES       12
45*437bfbebSnyanmisaka 
46*437bfbebSnyanmisaka typedef enum vp8_frm_type_e {
47*437bfbebSnyanmisaka     VP8E_FRM_KEY = 0,
48*437bfbebSnyanmisaka     VP8E_FRM_P,
49*437bfbebSnyanmisaka } Vp8FrmType;
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka typedef struct vp8e_hal_vpu_buffers_t {
52*437bfbebSnyanmisaka     MppBufferGroup  hw_buf_grp;
53*437bfbebSnyanmisaka 
54*437bfbebSnyanmisaka     MppBuffer   hw_rec_buf[2];
55*437bfbebSnyanmisaka     MppBuffer   hw_luma_buf;
56*437bfbebSnyanmisaka     MppBuffer   hw_cbcr_buf[2];
57*437bfbebSnyanmisaka     MppBuffer   hw_cabac_table_buf;
58*437bfbebSnyanmisaka     MppBuffer   hw_size_table_buf;
59*437bfbebSnyanmisaka     MppBuffer   hw_segment_map_buf;
60*437bfbebSnyanmisaka     MppBuffer   hw_prob_count_buf;
61*437bfbebSnyanmisaka     MppBuffer   hw_mv_output_buf;
62*437bfbebSnyanmisaka     MppBuffer   hw_out_buf;
63*437bfbebSnyanmisaka } Vp8eVpuBuf;
64*437bfbebSnyanmisaka 
65*437bfbebSnyanmisaka #define PENALTY_TABLE_SIZE 128
66*437bfbebSnyanmisaka 
67*437bfbebSnyanmisaka /**
68*437bfbebSnyanmisaka  * pps definition
69*437bfbebSnyanmisaka  */
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka #define SGM_CNT 4
72*437bfbebSnyanmisaka 
73*437bfbebSnyanmisaka typedef struct sgm_t {
74*437bfbebSnyanmisaka     RK_U8   map_modified;
75*437bfbebSnyanmisaka     RK_S32  id_cnt[SGM_CNT];
76*437bfbebSnyanmisaka } Sgm;
77*437bfbebSnyanmisaka 
78*437bfbebSnyanmisaka typedef struct {
79*437bfbebSnyanmisaka     Sgm     sgm;
80*437bfbebSnyanmisaka     RK_S32  qp;
81*437bfbebSnyanmisaka     RK_U8   segment_enabled;
82*437bfbebSnyanmisaka     RK_S32  qp_sgm[SGM_CNT];
83*437bfbebSnyanmisaka     RK_S32  level_sgm[SGM_CNT];
84*437bfbebSnyanmisaka } Pps;
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka typedef struct {
87*437bfbebSnyanmisaka     Pps    *store;
88*437bfbebSnyanmisaka     RK_S32 size;
89*437bfbebSnyanmisaka     Pps    *pps;
90*437bfbebSnyanmisaka     Pps    *prev_pps;
91*437bfbebSnyanmisaka     RK_S32 qp_sgm[SGM_CNT];
92*437bfbebSnyanmisaka     RK_S32 level_sgm[SGM_CNT];
93*437bfbebSnyanmisaka } Vp8ePps;
94*437bfbebSnyanmisaka 
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka /**
97*437bfbebSnyanmisaka  * QP definition
98*437bfbebSnyanmisaka  */
99*437bfbebSnyanmisaka 
100*437bfbebSnyanmisaka #define QINDEX_RANGE    128
101*437bfbebSnyanmisaka 
102*437bfbebSnyanmisaka typedef struct {
103*437bfbebSnyanmisaka     RK_S32 quant[2];
104*437bfbebSnyanmisaka     RK_S32 zbin[2];
105*437bfbebSnyanmisaka     RK_S32 round[2];
106*437bfbebSnyanmisaka     RK_S32 dequant[2];
107*437bfbebSnyanmisaka } Vp8eQp;
108*437bfbebSnyanmisaka 
109*437bfbebSnyanmisaka /**
110*437bfbebSnyanmisaka  * sps definition
111*437bfbebSnyanmisaka  */
112*437bfbebSnyanmisaka 
113*437bfbebSnyanmisaka typedef struct vp8e_sps_t {
114*437bfbebSnyanmisaka     RK_S32 pic_width_in_mbs;
115*437bfbebSnyanmisaka     RK_S32 pic_height_in_mbs;
116*437bfbebSnyanmisaka     RK_S32 pic_width_in_pixel;
117*437bfbebSnyanmisaka     RK_S32 pic_height_in_pixel;
118*437bfbebSnyanmisaka     RK_S32 horizontal_scaling;
119*437bfbebSnyanmisaka     RK_S32 vertical_scaling;
120*437bfbebSnyanmisaka     RK_S32 color_type;
121*437bfbebSnyanmisaka     RK_S32 clamp_type;
122*437bfbebSnyanmisaka     RK_S32 dct_partitions;
123*437bfbebSnyanmisaka     RK_S32 partition_cnt;
124*437bfbebSnyanmisaka     RK_S32 profile;
125*437bfbebSnyanmisaka     RK_S32 filter_type;
126*437bfbebSnyanmisaka     RK_S32 filter_level;
127*437bfbebSnyanmisaka     RK_S32 filter_sharpness;
128*437bfbebSnyanmisaka     RK_S32 quarter_pixel_mv;
129*437bfbebSnyanmisaka     RK_S32 split_mv;
130*437bfbebSnyanmisaka     RK_S32 sing_bias[3];
131*437bfbebSnyanmisaka 
132*437bfbebSnyanmisaka     RK_S32 auto_filter_level;
133*437bfbebSnyanmisaka     RK_S32 auto_filter_sharpness;
134*437bfbebSnyanmisaka     RK_U8  filter_delta_enable;
135*437bfbebSnyanmisaka     RK_S32 mode_delta[4];
136*437bfbebSnyanmisaka     RK_S32 old_mode_delta[4];
137*437bfbebSnyanmisaka     RK_S32 ref_delta[4];
138*437bfbebSnyanmisaka     RK_S32 old_ref_delta[4];
139*437bfbebSnyanmisaka     RK_S32 refresh_entropy;
140*437bfbebSnyanmisaka } Vp8eSps;
141*437bfbebSnyanmisaka 
142*437bfbebSnyanmisaka /**
143*437bfbebSnyanmisaka  * entropy definition
144*437bfbebSnyanmisaka  */
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka typedef struct vp8e_hal_entropy_t {
147*437bfbebSnyanmisaka     RK_S32 skip_false_prob;
148*437bfbebSnyanmisaka     RK_S32 intra_prob;
149*437bfbebSnyanmisaka     RK_S32 last_prob;
150*437bfbebSnyanmisaka     RK_S32 gf_prob;
151*437bfbebSnyanmisaka     RK_S32 kf_y_mode_prob[4];
152*437bfbebSnyanmisaka     RK_S32 y_mode_prob[4];
153*437bfbebSnyanmisaka     RK_S32 kf_uv_mode_prob[3];
154*437bfbebSnyanmisaka     RK_S32 uv_mode_prob[3];
155*437bfbebSnyanmisaka     RK_S32 kf_b_mode_prob[10][10][9];
156*437bfbebSnyanmisaka     RK_S32 b_mode_prob[9];
157*437bfbebSnyanmisaka     RK_S32 coeff_prob[4][8][3][11];
158*437bfbebSnyanmisaka     RK_S32 old_coeff_prob[4][8][3][11];
159*437bfbebSnyanmisaka     RK_S32 mv_ref_prob[4];
160*437bfbebSnyanmisaka     RK_S32 mv_prob[2][19];
161*437bfbebSnyanmisaka     RK_S32 old_mv_prob[2][19];
162*437bfbebSnyanmisaka     RK_S32 sub_mv_partprob[3];
163*437bfbebSnyanmisaka     RK_S32 sub_mv_ref_prob[5][3];
164*437bfbebSnyanmisaka     RK_S32 default_coeff_prob_flag;
165*437bfbebSnyanmisaka     RK_S32 update_coeff_prob_flag;
166*437bfbebSnyanmisaka     RK_S32 segment_prob[3];
167*437bfbebSnyanmisaka } Vp8eHalEntropy;
168*437bfbebSnyanmisaka 
169*437bfbebSnyanmisaka /**
170*437bfbebSnyanmisaka  * picture definition
171*437bfbebSnyanmisaka  */
172*437bfbebSnyanmisaka 
173*437bfbebSnyanmisaka #define REF_FRAME_COUNT 3
174*437bfbebSnyanmisaka 
175*437bfbebSnyanmisaka typedef struct {
176*437bfbebSnyanmisaka     RK_S32 lum_width;
177*437bfbebSnyanmisaka     RK_S32 lum_height;
178*437bfbebSnyanmisaka     RK_S32 ch_width;
179*437bfbebSnyanmisaka     RK_S32 ch_height;
180*437bfbebSnyanmisaka     RK_U32 lum;
181*437bfbebSnyanmisaka     RK_U32 cb;
182*437bfbebSnyanmisaka } HalVp8ePic;
183*437bfbebSnyanmisaka 
184*437bfbebSnyanmisaka typedef struct hal_vp8e_refpic_t {
185*437bfbebSnyanmisaka     HalVp8ePic picture;
186*437bfbebSnyanmisaka     Vp8eHalEntropy *entropy;
187*437bfbebSnyanmisaka     RK_S32 poc;
188*437bfbebSnyanmisaka 
189*437bfbebSnyanmisaka     RK_U8 i_frame;
190*437bfbebSnyanmisaka     RK_U8 p_frame;
191*437bfbebSnyanmisaka     RK_U8 show;
192*437bfbebSnyanmisaka     RK_U8 ipf;
193*437bfbebSnyanmisaka     RK_U8 arf;
194*437bfbebSnyanmisaka     RK_U8 grf;
195*437bfbebSnyanmisaka     RK_U8 search;
196*437bfbebSnyanmisaka     struct hal_vp8e_refpic_t *refPic;
197*437bfbebSnyanmisaka } HalVp8eRefPic;
198*437bfbebSnyanmisaka 
199*437bfbebSnyanmisaka typedef struct {
200*437bfbebSnyanmisaka     RK_S32 size;       /* Amount of allocated reference pictures */
201*437bfbebSnyanmisaka     HalVp8ePic    input;      /* Input picture */
202*437bfbebSnyanmisaka     HalVp8eRefPic ref_pic[REF_FRAME_COUNT + 1]; /* Reference picture store */
203*437bfbebSnyanmisaka     HalVp8eRefPic ref_pic_list[REF_FRAME_COUNT]; /* Reference picture list */
204*437bfbebSnyanmisaka     HalVp8eRefPic *cur_pic;    /* Pointer to picture under reconstruction */
205*437bfbebSnyanmisaka     HalVp8eRefPic *last_pic;   /* Last picture */
206*437bfbebSnyanmisaka } HalVp8ePicBuf;
207*437bfbebSnyanmisaka 
208*437bfbebSnyanmisaka typedef struct {
209*437bfbebSnyanmisaka     RK_U32 irq_disable;
210*437bfbebSnyanmisaka     RK_U32 mbs_in_col;
211*437bfbebSnyanmisaka     RK_U32 mbs_in_row;
212*437bfbebSnyanmisaka     RK_U32 rounding_ctrl;
213*437bfbebSnyanmisaka     RK_U32 frame_coding_type;
214*437bfbebSnyanmisaka     RK_U32 coding_type;
215*437bfbebSnyanmisaka     RK_U32 pixels_on_row;
216*437bfbebSnyanmisaka     RK_U32 x_fill;
217*437bfbebSnyanmisaka     RK_U32 y_fill;
218*437bfbebSnyanmisaka     RK_U32 filter_disable;
219*437bfbebSnyanmisaka     RK_U32 enable_cabac;
220*437bfbebSnyanmisaka     RK_U32 input_format;
221*437bfbebSnyanmisaka     RK_U32 input_rotation;
222*437bfbebSnyanmisaka     RK_U32 output_strm_base;
223*437bfbebSnyanmisaka     RK_U32 output_strm_offset;
224*437bfbebSnyanmisaka     RK_U32 output_strm_size;
225*437bfbebSnyanmisaka     RK_U32 first_free_bit;
226*437bfbebSnyanmisaka     RK_U32 strm_start_msb;
227*437bfbebSnyanmisaka     RK_U32 strm_start_lsb;
228*437bfbebSnyanmisaka     RK_U32 size_tbl_base;
229*437bfbebSnyanmisaka     RK_U32 int_slice_ready;
230*437bfbebSnyanmisaka     RK_U32 rec_write_disable;
231*437bfbebSnyanmisaka     RK_U32 recon_img_id;
232*437bfbebSnyanmisaka     RK_U32 internal_img_lum_base_w;
233*437bfbebSnyanmisaka     RK_U32 internal_img_chr_base_w;
234*437bfbebSnyanmisaka     RK_U32 internal_img_lum_base_r[2];
235*437bfbebSnyanmisaka     RK_U32 internal_img_chr_base_r[2];
236*437bfbebSnyanmisaka     RK_U32 input_lum_base;
237*437bfbebSnyanmisaka     RK_U32 input_lum_offset;
238*437bfbebSnyanmisaka     RK_U32 input_cb_base;
239*437bfbebSnyanmisaka     RK_U32 input_cb_offset;
240*437bfbebSnyanmisaka     RK_U32 input_cr_base;
241*437bfbebSnyanmisaka     RK_U32 input_cr_offset;
242*437bfbebSnyanmisaka     RK_U32 cp_distance_mbs; //TODO maybe useless
243*437bfbebSnyanmisaka     RK_U32 rlc_count;    //TODO read from reg
244*437bfbebSnyanmisaka     RK_U32 qp_sum;   //TODO read from reg
245*437bfbebSnyanmisaka     RK_U8  dmv_penalty[PENALTY_TABLE_SIZE];
246*437bfbebSnyanmisaka     RK_U8  dmv_qpel_penalty[PENALTY_TABLE_SIZE];
247*437bfbebSnyanmisaka     RK_U32 input_luma_base_offset;
248*437bfbebSnyanmisaka     RK_U32 input_chroma_base_offset;
249*437bfbebSnyanmisaka     RK_U32 disable_qp_mv;
250*437bfbebSnyanmisaka     RK_U32 vs_next_luma_base;
251*437bfbebSnyanmisaka     RK_U32 vs_mode;
252*437bfbebSnyanmisaka     RK_U32 asic_cfg_reg;
253*437bfbebSnyanmisaka     RK_S32 intra_16_favor;
254*437bfbebSnyanmisaka     RK_S32 prev_mode_favor;
255*437bfbebSnyanmisaka     RK_S32 inter_favor;
256*437bfbebSnyanmisaka     RK_S32 skip_penalty;
257*437bfbebSnyanmisaka     RK_S32 golden_penalty;
258*437bfbebSnyanmisaka     RK_S32 diff_mv_penalty[3];
259*437bfbebSnyanmisaka     RK_U32 mad_count;
260*437bfbebSnyanmisaka     RK_U32 cir_start;
261*437bfbebSnyanmisaka     RK_U32 cir_interval;
262*437bfbebSnyanmisaka     RK_U32 intra_area_top;
263*437bfbebSnyanmisaka     RK_U32 intra_area_left;
264*437bfbebSnyanmisaka     RK_U32 intra_area_bottom;
265*437bfbebSnyanmisaka     RK_U32 intra_area_right;
266*437bfbebSnyanmisaka     RK_U32 roi1_top;
267*437bfbebSnyanmisaka     RK_U32 roi1_left;
268*437bfbebSnyanmisaka     RK_U32 roi1_bottom;
269*437bfbebSnyanmisaka     RK_U32 roi1_right;
270*437bfbebSnyanmisaka     RK_U32 roi2_top;
271*437bfbebSnyanmisaka     RK_U32 roi2_left;
272*437bfbebSnyanmisaka     RK_U32 roi2_bottom;
273*437bfbebSnyanmisaka     RK_U32 roi2_right;
274*437bfbebSnyanmisaka     RK_S32 roi1_delta_qp;
275*437bfbebSnyanmisaka     RK_S32 roi2_delta_qp;
276*437bfbebSnyanmisaka     RK_U32 mv_output_base;
277*437bfbebSnyanmisaka     RK_U32 cabac_tbl_base;
278*437bfbebSnyanmisaka     RK_U32 prob_count_base;
279*437bfbebSnyanmisaka     RK_U32 segment_map_base;
280*437bfbebSnyanmisaka     RK_U16 rgb_coeff_a;
281*437bfbebSnyanmisaka     RK_U16 rgb_coeff_b;
282*437bfbebSnyanmisaka     RK_U16 rgb_coeff_c;
283*437bfbebSnyanmisaka     RK_U16 rgb_coeff_e;
284*437bfbebSnyanmisaka     RK_U16 rgb_coeff_f;
285*437bfbebSnyanmisaka     RK_U8  r_mask_msb;
286*437bfbebSnyanmisaka     RK_U8  g_mask_msb;
287*437bfbebSnyanmisaka     RK_U8  b_mask_msb;
288*437bfbebSnyanmisaka     RK_U32 partition_Base[8];
289*437bfbebSnyanmisaka     RK_U32 partition_offset[8];
290*437bfbebSnyanmisaka     RK_U16 y1_quant_dc[4];
291*437bfbebSnyanmisaka     RK_U16 y1_quant_ac[4];
292*437bfbebSnyanmisaka     RK_U16 y2_quant_dc[4];
293*437bfbebSnyanmisaka     RK_U16 y2_quant_ac[4];
294*437bfbebSnyanmisaka     RK_U16 ch_quant_dc[4];
295*437bfbebSnyanmisaka     RK_U16 ch_quant_ac[4];
296*437bfbebSnyanmisaka     RK_U16 y1_zbin_dc[4];
297*437bfbebSnyanmisaka     RK_U16 y1_zbin_ac[4];
298*437bfbebSnyanmisaka     RK_U16 y2_zbin_dc[4];
299*437bfbebSnyanmisaka     RK_U16 y2_zbin_ac[4];
300*437bfbebSnyanmisaka     RK_U16 ch_zbin_dc[4];
301*437bfbebSnyanmisaka     RK_U16 ch_zbin_ac[4];
302*437bfbebSnyanmisaka     RK_U8  y1_round_dc[4];
303*437bfbebSnyanmisaka     RK_U8  y1_round_ac[4];
304*437bfbebSnyanmisaka     RK_U8  y2_round_dc[4];
305*437bfbebSnyanmisaka     RK_U8  y2_round_ac[4];
306*437bfbebSnyanmisaka     RK_U8  ch_round_dc[4];
307*437bfbebSnyanmisaka     RK_U8  ch_round_ac[4];
308*437bfbebSnyanmisaka     RK_U16 y1_dequant_dc[4];
309*437bfbebSnyanmisaka     RK_U16 y1_dequant_ac[4];
310*437bfbebSnyanmisaka     RK_U16 y2_dequant_dc[4];
311*437bfbebSnyanmisaka     RK_U16 y2_dequant_ac[4];
312*437bfbebSnyanmisaka     RK_U16 ch_dequant_dc[4];
313*437bfbebSnyanmisaka     RK_U16 ch_dequant_ac[4];
314*437bfbebSnyanmisaka     RK_U32 segment_enable;
315*437bfbebSnyanmisaka     RK_U32 segment_map_update;
316*437bfbebSnyanmisaka     RK_U32 mv_ref_idx[2];
317*437bfbebSnyanmisaka     RK_U32 ref2_enable;
318*437bfbebSnyanmisaka     RK_U32 bool_enc_value;
319*437bfbebSnyanmisaka     RK_U32 bool_enc_value_bits;
320*437bfbebSnyanmisaka     RK_U32 bool_enc_range;
321*437bfbebSnyanmisaka     RK_U32 dct_partitions;
322*437bfbebSnyanmisaka     RK_U32 filter_level[4];
323*437bfbebSnyanmisaka     RK_U32 filter_sharpness;
324*437bfbebSnyanmisaka     RK_U32 intra_mode_penalty[4];
325*437bfbebSnyanmisaka     RK_U32 intra_b_mode_penalty[10];
326*437bfbebSnyanmisaka     RK_U32 zero_mv_favor;
327*437bfbebSnyanmisaka     RK_U32 split_mv_mode;
328*437bfbebSnyanmisaka     RK_U32 split_penalty[4];
329*437bfbebSnyanmisaka     RK_S32 lf_ref_delta[4];
330*437bfbebSnyanmisaka     RK_S32 lf_mode_delta[4];
331*437bfbebSnyanmisaka } Vp8eHwCfg;
332*437bfbebSnyanmisaka 
333*437bfbebSnyanmisaka typedef struct hal_vp8e_ctx_s {
334*437bfbebSnyanmisaka     Vp8eFeedback     feedback;
335*437bfbebSnyanmisaka     MppDev           dev;
336*437bfbebSnyanmisaka 
337*437bfbebSnyanmisaka     void             *regs;
338*437bfbebSnyanmisaka     void             *buffers;
339*437bfbebSnyanmisaka     RK_U32           reg_size;
340*437bfbebSnyanmisaka 
341*437bfbebSnyanmisaka     MppEncCfgSet     *cfg;
342*437bfbebSnyanmisaka 
343*437bfbebSnyanmisaka     Vp8eSps          sps;
344*437bfbebSnyanmisaka     Vp8ePps          ppss;
345*437bfbebSnyanmisaka     //TODO remove vp8_rc
346*437bfbebSnyanmisaka     Vp8eRc           *rc;
347*437bfbebSnyanmisaka     Vp8eHwCfg        hw_cfg;
348*437bfbebSnyanmisaka     Vp8eHalEntropy   entropy;
349*437bfbebSnyanmisaka     HalVp8ePicBuf    picbuf;
350*437bfbebSnyanmisaka     Vp8ePutBitBuf    bitbuf[4];
351*437bfbebSnyanmisaka     Vp8eQp           qp_y1[QINDEX_RANGE];
352*437bfbebSnyanmisaka     Vp8eQp           qp_y2[QINDEX_RANGE];
353*437bfbebSnyanmisaka     Vp8eQp           qp_ch[QINDEX_RANGE];
354*437bfbebSnyanmisaka     RK_U32           prev_frame_lost;
355*437bfbebSnyanmisaka     RK_U32           *p_out_buf[9];
356*437bfbebSnyanmisaka     RK_U32           stream_size[9];
357*437bfbebSnyanmisaka     RK_U32           frame_size;
358*437bfbebSnyanmisaka 
359*437bfbebSnyanmisaka     RK_U32           buffer_ready;
360*437bfbebSnyanmisaka     RK_U32           ivf_hdr_rdy;
361*437bfbebSnyanmisaka     RK_U64           frame_cnt;
362*437bfbebSnyanmisaka     RK_U32           last_frm_intra;
363*437bfbebSnyanmisaka     Vp8FrmType       frame_type;
364*437bfbebSnyanmisaka 
365*437bfbebSnyanmisaka     RK_U32           mb_per_frame;
366*437bfbebSnyanmisaka     RK_U32           mb_per_row;
367*437bfbebSnyanmisaka     RK_U32           mb_per_col;
368*437bfbebSnyanmisaka     VepuStrideCfg    stride_cfg;
369*437bfbebSnyanmisaka } HalVp8eCtx;
370*437bfbebSnyanmisaka 
371*437bfbebSnyanmisaka #ifdef  __cplusplus
372*437bfbebSnyanmisaka extern "C" {
373*437bfbebSnyanmisaka #endif
374*437bfbebSnyanmisaka 
375*437bfbebSnyanmisaka MPP_RET hal_vp8e_update_buffers(void *hal, HalEncTask *task);
376*437bfbebSnyanmisaka MPP_RET hal_vp8e_enc_strm_code(void *hal, HalEncTask *info);
377*437bfbebSnyanmisaka MPP_RET hal_vp8e_init_qp_table(void *hal);
378*437bfbebSnyanmisaka MPP_RET hal_vp8e_setup(void *hal);
379*437bfbebSnyanmisaka MPP_RET hal_vp8e_buf_free(void *hal);
380*437bfbebSnyanmisaka void write_ivf_header(void *hal, RK_U8 *dst);
381*437bfbebSnyanmisaka #ifdef  __cplusplus
382*437bfbebSnyanmisaka }
383*437bfbebSnyanmisaka #endif
384*437bfbebSnyanmisaka 
385*437bfbebSnyanmisaka #endif /*__HAL_VP*E_BASE_H__*/
386