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