1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2021 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 __AVS2D_GLOBAL_H__ 18*437bfbebSnyanmisaka #define __AVS2D_GLOBAL_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "mpp_list.h" 21*437bfbebSnyanmisaka #include "parser_api.h" 22*437bfbebSnyanmisaka #include "mpp_bitread.h" 23*437bfbebSnyanmisaka 24*437bfbebSnyanmisaka #include "avs2d_syntax.h" 25*437bfbebSnyanmisaka #include "avs2d_api.h" 26*437bfbebSnyanmisaka 27*437bfbebSnyanmisaka #define AVS2D_DBG_ERROR (0x00000001) 28*437bfbebSnyanmisaka #define AVS2D_DBG_ASSERT (0x00000002) 29*437bfbebSnyanmisaka #define AVS2D_DBG_WARNNING (0x00000004) 30*437bfbebSnyanmisaka #define AVS2D_DBG_LOG (0x00000008) 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka #define AVS2D_DBG_INPUT (0x00000010) //!< input packet 33*437bfbebSnyanmisaka #define AVS2D_DBG_TIME (0x00000020) //!< input packet 34*437bfbebSnyanmisaka #define AVS2D_DBG_DPB (0x00000040) 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka #define AVS2D_DBG_CALLBACK (0x00008000) 37*437bfbebSnyanmisaka 38*437bfbebSnyanmisaka extern RK_U32 avs2d_parse_debug; 39*437bfbebSnyanmisaka 40*437bfbebSnyanmisaka #define AVS2D_PARSE_TRACE(fmt, ...)\ 41*437bfbebSnyanmisaka do {\ 42*437bfbebSnyanmisaka if (AVS2D_DBG_LOG & avs2d_parse_debug)\ 43*437bfbebSnyanmisaka { mpp_log_f(fmt, ## __VA_ARGS__); }\ 44*437bfbebSnyanmisaka } while (0) 45*437bfbebSnyanmisaka 46*437bfbebSnyanmisaka #define avs2d_dbg_dpb(fmt, ...)\ 47*437bfbebSnyanmisaka do {\ 48*437bfbebSnyanmisaka if (AVS2D_DBG_DPB & avs2d_parse_debug)\ 49*437bfbebSnyanmisaka { mpp_log_f(fmt, ## __VA_ARGS__); }\ 50*437bfbebSnyanmisaka } while (0) 51*437bfbebSnyanmisaka 52*437bfbebSnyanmisaka 53*437bfbebSnyanmisaka #define AVS2D_DBG(level, fmt, ...)\ 54*437bfbebSnyanmisaka do {\ 55*437bfbebSnyanmisaka if (level & avs2d_parse_debug)\ 56*437bfbebSnyanmisaka { mpp_log(fmt, ## __VA_ARGS__); }\ 57*437bfbebSnyanmisaka } while (0) 58*437bfbebSnyanmisaka 59*437bfbebSnyanmisaka //!< input check 60*437bfbebSnyanmisaka #define INP_CHECK(ret, val, ...)\ 61*437bfbebSnyanmisaka do {\ 62*437bfbebSnyanmisaka if ((val)) {\ 63*437bfbebSnyanmisaka ret = MPP_ERR_INIT; \ 64*437bfbebSnyanmisaka AVS2D_DBG(AVS2D_DBG_WARNNING, "input empty(%d).\n", __LINE__); \ 65*437bfbebSnyanmisaka goto __RETURN; \ 66*437bfbebSnyanmisaka }} while (0) 67*437bfbebSnyanmisaka 68*437bfbebSnyanmisaka //!< memory malloc check 69*437bfbebSnyanmisaka #define MEM_CHECK(ret, val, ...)\ 70*437bfbebSnyanmisaka do {\ 71*437bfbebSnyanmisaka if(!(val)) {\ 72*437bfbebSnyanmisaka ret = MPP_ERR_MALLOC;\ 73*437bfbebSnyanmisaka mpp_err_f("malloc buffer error(%d).\n", __LINE__); \ 74*437bfbebSnyanmisaka goto __FAILED; \ 75*437bfbebSnyanmisaka }} while (0) 76*437bfbebSnyanmisaka 77*437bfbebSnyanmisaka //!< function return check 78*437bfbebSnyanmisaka #define FUN_CHECK(val)\ 79*437bfbebSnyanmisaka do {\ 80*437bfbebSnyanmisaka if ((val) < 0) {\ 81*437bfbebSnyanmisaka AVS2D_DBG(AVS2D_DBG_WARNNING, "Function error(%d).\n", __LINE__); \ 82*437bfbebSnyanmisaka goto __FAILED; \ 83*437bfbebSnyanmisaka }} while (0) 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka //!< read & check marker bit 86*437bfbebSnyanmisaka #define READ_MARKER_BIT(bitctx)\ 87*437bfbebSnyanmisaka do {\ 88*437bfbebSnyanmisaka RK_U8 bval;\ 89*437bfbebSnyanmisaka READ_ONEBIT(bitctx, &bval);\ 90*437bfbebSnyanmisaka if ((bval) != 1) {\ 91*437bfbebSnyanmisaka AVS2D_DBG(AVS2D_DBG_WARNNING, "expected marker_bit 1 while received 0(%d).\n", __LINE__); \ 92*437bfbebSnyanmisaka }} while (0) 93*437bfbebSnyanmisaka 94*437bfbebSnyanmisaka #define MAX_NALU_NUM (20) 95*437bfbebSnyanmisaka #define MAX_HEADER_SIZE (2*1024) 96*437bfbebSnyanmisaka #define MAX_STREAM_SIZE (2*1024*1024) 97*437bfbebSnyanmisaka 98*437bfbebSnyanmisaka #define AVS2_START_CODE (0x00000100) 99*437bfbebSnyanmisaka 100*437bfbebSnyanmisaka //!< NALU type 101*437bfbebSnyanmisaka #define AVS2_SLICE_MIN_START_CODE (AVS2_START_CODE | 0x00) 102*437bfbebSnyanmisaka #define AVS2_SLICE_MAX_START_CODE (AVS2_START_CODE | 0x8F) 103*437bfbebSnyanmisaka #define AVS2_VIDEO_SEQUENCE_START_CODE (AVS2_START_CODE | 0xb0) 104*437bfbebSnyanmisaka #define AVS2_VIDEO_SEQUENCE_END_CODE 0x000001B1 105*437bfbebSnyanmisaka #define AVS2_USER_DATA_START_CODE 0x000001B2 106*437bfbebSnyanmisaka #define AVS2_I_PICTURE_START_CODE 0x000001B3 107*437bfbebSnyanmisaka #define AVS2_EXTENSION_START_CODE 0x000001B5 108*437bfbebSnyanmisaka #define AVS2_PB_PICTURE_START_CODE 0x000001B6 109*437bfbebSnyanmisaka #define AVS2_VIDEO_EDIT_CODE 0x000001B7 110*437bfbebSnyanmisaka 111*437bfbebSnyanmisaka //!< SEQ/PIC EXTENSION 4bit 112*437bfbebSnyanmisaka #define AVS2_SEQUENCE_DISPLAY_EXT_ID (0x2) 113*437bfbebSnyanmisaka #define AVS2_TEMPORAL_SCALABLE_EXT_ID (0x3) 114*437bfbebSnyanmisaka #define AVS2_COPYRIGHT_EXT_ID (0x4) 115*437bfbebSnyanmisaka #define AVS2_HDR_DYNAMIC_METADATA_EXT_ID (0x5) 116*437bfbebSnyanmisaka #define AVS2_PICTURE_DISPLAY_EXT_ID (0x7) 117*437bfbebSnyanmisaka #define AVS2_MASTERING_DISPLAY_AND_CONTENT_METADATA_EXT_ID (0xA) 118*437bfbebSnyanmisaka #define AVS2_CAMERA_PARAMETERS_EXT_ID (0xB) 119*437bfbebSnyanmisaka 120*437bfbebSnyanmisaka //!< profile 121*437bfbebSnyanmisaka #define MAIN_PICTURE_PROFILE 0x12 122*437bfbebSnyanmisaka #define MAIN_PROFILE 0x20 123*437bfbebSnyanmisaka #define MAIN10_PROFILE 0x22 124*437bfbebSnyanmisaka 125*437bfbebSnyanmisaka //!< max reference frame number 126*437bfbebSnyanmisaka #define AVS2_MAX_REFS 7 127*437bfbebSnyanmisaka //!< max rps number 128*437bfbebSnyanmisaka #define AVS2_MAX_RPS_NUM 32 129*437bfbebSnyanmisaka #define AVS2_MAX_BUF_NUM 19 130*437bfbebSnyanmisaka #define AVS2_MAX_DPB_SIZE 15 131*437bfbebSnyanmisaka #define AVS2_DOI_CYCLE 256 132*437bfbebSnyanmisaka #define AVS2_MAX_POC_DISTANCE 128 133*437bfbebSnyanmisaka 134*437bfbebSnyanmisaka #define ALF_MAX_FILTERS 16 135*437bfbebSnyanmisaka #define ALF_MAX_COEFS 9 136*437bfbebSnyanmisaka 137*437bfbebSnyanmisaka #define UNDETAILED 0 138*437bfbebSnyanmisaka #define DETAILED 1 139*437bfbebSnyanmisaka #define WQP_SIZE 6 140*437bfbebSnyanmisaka #define NO_VAL -1 141*437bfbebSnyanmisaka 142*437bfbebSnyanmisaka 143*437bfbebSnyanmisaka //!< chroma format 144*437bfbebSnyanmisaka enum avs2d_chroma_format_e { 145*437bfbebSnyanmisaka CHROMA_400 = 0, 146*437bfbebSnyanmisaka CHROMA_420 = 1, 147*437bfbebSnyanmisaka CHROMA_422 = 2, 148*437bfbebSnyanmisaka CHROMA_444 = 3 149*437bfbebSnyanmisaka }; 150*437bfbebSnyanmisaka 151*437bfbebSnyanmisaka //!< picture type 152*437bfbebSnyanmisaka typedef enum avs2d_picture_type_e { 153*437bfbebSnyanmisaka I_PICTURE = 0, 154*437bfbebSnyanmisaka P_PICTURE = 1, 155*437bfbebSnyanmisaka B_PICTURE = 2, 156*437bfbebSnyanmisaka F_PICTURE = 3, 157*437bfbebSnyanmisaka G_PICTURE = 4, 158*437bfbebSnyanmisaka GB_PICTURE = 5, 159*437bfbebSnyanmisaka S_PICTURE = 6, 160*437bfbebSnyanmisaka } Avs2dPicType; 161*437bfbebSnyanmisaka 162*437bfbebSnyanmisaka #define PICTURE_TYPE_TO_CHAR(x) ((x) == 0 ? 'I' : ((x) == 1 ? 'P' : ((x) == 2 ? 'B' : ((x) == 3 ? 'F' : ((x) == 4 ? 'G' : ((x) == 5 ? 'g' : ((x) == 6 ? 'S' : 'E'))))))) 163*437bfbebSnyanmisaka 164*437bfbebSnyanmisaka typedef struct avs2d_nalu_t { 165*437bfbebSnyanmisaka RK_U32 header; 166*437bfbebSnyanmisaka RK_U32 length; 167*437bfbebSnyanmisaka RK_U32 data_pos; 168*437bfbebSnyanmisaka RK_U8 eof; //!< end of frame stream 169*437bfbebSnyanmisaka } Avs2dNalu_t; 170*437bfbebSnyanmisaka 171*437bfbebSnyanmisaka //!< reference picture set (RPS) 172*437bfbebSnyanmisaka typedef struct avs2d_rps_t { 173*437bfbebSnyanmisaka RK_U8 ref_pic[AVS2_MAX_REFS]; //!< delta DOI of ref pic 174*437bfbebSnyanmisaka RK_U8 remove_pic[8]; //!< delta DOI of removed pic 175*437bfbebSnyanmisaka RK_U8 num_of_ref; //!< number of reference picture 176*437bfbebSnyanmisaka RK_U8 num_to_remove; //!< number of removed picture 177*437bfbebSnyanmisaka RK_U8 refered_by_others; //!< referenced by others 178*437bfbebSnyanmisaka RK_U32 reserved; //!< reserved 4 bytes 179*437bfbebSnyanmisaka } Avs2dRps_t; 180*437bfbebSnyanmisaka 181*437bfbebSnyanmisaka //!< sequence set information 182*437bfbebSnyanmisaka typedef struct avs2d_sequence_header_t { 183*437bfbebSnyanmisaka RK_U8 profile_id; 184*437bfbebSnyanmisaka RK_U8 level_id; 185*437bfbebSnyanmisaka RK_U8 progressive_sequence; 186*437bfbebSnyanmisaka RK_U8 field_coded_sequence; 187*437bfbebSnyanmisaka RK_U32 horizontal_size; 188*437bfbebSnyanmisaka RK_U32 vertical_size; 189*437bfbebSnyanmisaka 190*437bfbebSnyanmisaka RK_U8 chroma_format; 191*437bfbebSnyanmisaka RK_U8 sample_precision; 192*437bfbebSnyanmisaka RK_U8 encoding_precision; 193*437bfbebSnyanmisaka RK_U8 bit_depth; 194*437bfbebSnyanmisaka RK_U8 aspect_ratio; 195*437bfbebSnyanmisaka RK_U8 frame_rate_code; 196*437bfbebSnyanmisaka RK_U32 bit_rate; 197*437bfbebSnyanmisaka RK_U8 low_delay; 198*437bfbebSnyanmisaka RK_U8 enable_temporal_id; 199*437bfbebSnyanmisaka RK_U32 bbv_buffer_size; 200*437bfbebSnyanmisaka RK_U8 lcu_size; 201*437bfbebSnyanmisaka 202*437bfbebSnyanmisaka RK_U8 enable_weighted_quant; //!< weight quant enable? 203*437bfbebSnyanmisaka RK_U8 enable_background_picture;//!< background picture enabled? 204*437bfbebSnyanmisaka RK_U8 enable_mhp_skip; //!< mhpskip enabled? 205*437bfbebSnyanmisaka RK_U8 enable_dhp; //!< dhp enabled? 206*437bfbebSnyanmisaka RK_U8 enable_wsm; //!< wsm enabled? 207*437bfbebSnyanmisaka RK_U8 enable_amp; //!< AMP(asymmetric motion partitions) enabled? 208*437bfbebSnyanmisaka RK_U8 enable_nsqt; //!< use NSQT? 209*437bfbebSnyanmisaka RK_U8 enable_nsip; //!< use NSIP? 210*437bfbebSnyanmisaka RK_U8 enable_2nd_transform; //!< secondary transform enabled? 211*437bfbebSnyanmisaka RK_U8 enable_sao; //!< SAO enabled? 212*437bfbebSnyanmisaka RK_U8 enable_alf; //!< ALF enabled? 213*437bfbebSnyanmisaka RK_U8 enable_pmvr; //!< PMVR enabled? 214*437bfbebSnyanmisaka RK_U8 enable_clf; //!< cross loop filter flag 215*437bfbebSnyanmisaka RK_U8 picture_reorder_delay; //!< picture reorder delay 216*437bfbebSnyanmisaka RK_U8 num_of_rps; //!< rps set number 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka Avs2dRps_t seq_rps[AVS2_MAX_RPS_NUM];//!< RPS at sequence level 219*437bfbebSnyanmisaka RK_U32 seq_wq_matrix[2][64]; //!< sequence base weighting quantization matrix 220*437bfbebSnyanmisaka 221*437bfbebSnyanmisaka } Avs2dSeqHeader_t; 222*437bfbebSnyanmisaka 223*437bfbebSnyanmisaka //!< sequence display extension header 224*437bfbebSnyanmisaka typedef struct avs2d_sequence_extension_header_t { 225*437bfbebSnyanmisaka RK_U8 video_format; 226*437bfbebSnyanmisaka RK_U8 sample_range; 227*437bfbebSnyanmisaka RK_U8 color_description; 228*437bfbebSnyanmisaka RK_U32 color_primaries; 229*437bfbebSnyanmisaka RK_U32 transfer_characteristics; 230*437bfbebSnyanmisaka RK_U32 matrix_coefficients; 231*437bfbebSnyanmisaka RK_U32 display_horizontal_size; 232*437bfbebSnyanmisaka RK_U32 display_vertical_size; 233*437bfbebSnyanmisaka RK_U8 td_mode_flag; 234*437bfbebSnyanmisaka RK_U32 td_packing_mode; 235*437bfbebSnyanmisaka RK_U8 view_reverse_flag; 236*437bfbebSnyanmisaka } Avs2dSeqExtHeader_t; 237*437bfbebSnyanmisaka 238*437bfbebSnyanmisaka //!< intra/inter picture header 239*437bfbebSnyanmisaka typedef struct avs2d_picture_header { 240*437bfbebSnyanmisaka Avs2dPicType picture_type; 241*437bfbebSnyanmisaka RK_U8 picture_coding_type; 242*437bfbebSnyanmisaka RK_U32 bbv_delay; 243*437bfbebSnyanmisaka RK_U8 time_code_flag; 244*437bfbebSnyanmisaka RK_U32 time_code; 245*437bfbebSnyanmisaka RK_U8 background_picture_flag; 246*437bfbebSnyanmisaka RK_U8 background_picture_output_flag; 247*437bfbebSnyanmisaka RK_U8 background_pred_flag; 248*437bfbebSnyanmisaka RK_U8 background_reference_flag; 249*437bfbebSnyanmisaka 250*437bfbebSnyanmisaka RK_S32 doi; 251*437bfbebSnyanmisaka RK_S32 poi; 252*437bfbebSnyanmisaka RK_U8 temporal_id; 253*437bfbebSnyanmisaka RK_U8 picture_output_delay; 254*437bfbebSnyanmisaka RK_U32 bbv_check_times; 255*437bfbebSnyanmisaka RK_U8 progressive_frame; 256*437bfbebSnyanmisaka RK_U8 picture_structure; 257*437bfbebSnyanmisaka RK_U8 top_field_first; 258*437bfbebSnyanmisaka RK_U8 repeat_first_field; 259*437bfbebSnyanmisaka RK_U8 is_top_field; 260*437bfbebSnyanmisaka RK_U8 fixed_picture_qp; 261*437bfbebSnyanmisaka RK_U8 picture_qp; 262*437bfbebSnyanmisaka 263*437bfbebSnyanmisaka RK_U8 enable_random_decodable; 264*437bfbebSnyanmisaka RK_U8 enable_loop_filter; 265*437bfbebSnyanmisaka RK_U8 loop_filter_parameter_flag; 266*437bfbebSnyanmisaka RK_S8 alpha_c_offset; 267*437bfbebSnyanmisaka RK_S8 beta_offset; 268*437bfbebSnyanmisaka RK_U8 enable_chroma_quant_param; 269*437bfbebSnyanmisaka RK_S8 chroma_quant_param_delta_cb; 270*437bfbebSnyanmisaka RK_S8 chroma_quant_param_delta_cr; 271*437bfbebSnyanmisaka RK_U8 enable_pic_weight_quant; 272*437bfbebSnyanmisaka RK_U8 pic_wq_data_index; 273*437bfbebSnyanmisaka RK_U8 wq_param_index; 274*437bfbebSnyanmisaka RK_U8 wq_model; 275*437bfbebSnyanmisaka RK_S32 wq_param_delta1[WQP_SIZE]; 276*437bfbebSnyanmisaka RK_S32 wq_param_delta2[WQP_SIZE]; 277*437bfbebSnyanmisaka 278*437bfbebSnyanmisaka RK_U8 enable_pic_alf_y; 279*437bfbebSnyanmisaka RK_U8 enable_pic_alf_cb; 280*437bfbebSnyanmisaka RK_U8 enable_pic_alf_cr; 281*437bfbebSnyanmisaka RK_U8 alf_filter_num; 282*437bfbebSnyanmisaka RK_U8 alf_filter_pattern[ALF_MAX_FILTERS]; 283*437bfbebSnyanmisaka RK_U8 alf_coeff_idx_tab[ALF_MAX_FILTERS]; 284*437bfbebSnyanmisaka RK_S32 alf_coeff_y[ALF_MAX_FILTERS][ALF_MAX_COEFS]; 285*437bfbebSnyanmisaka RK_S32 alf_coeff_cb[ALF_MAX_COEFS]; 286*437bfbebSnyanmisaka RK_S32 alf_coeff_cr[ALF_MAX_COEFS]; 287*437bfbebSnyanmisaka 288*437bfbebSnyanmisaka RK_U32 pic_wq_matrix[2][64]; //!< picture weighting quantization matrix 289*437bfbebSnyanmisaka RK_U32 pic_wq_param[WQP_SIZE]; 290*437bfbebSnyanmisaka } Avs2dPicHeader_t; 291*437bfbebSnyanmisaka 292*437bfbebSnyanmisaka typedef struct avs2d_frame_t { 293*437bfbebSnyanmisaka MppFrame frame; 294*437bfbebSnyanmisaka RK_U32 frame_mode; //!< mode used for display 295*437bfbebSnyanmisaka RK_U32 frame_coding_mode; //!< mode used for decoding, Field/Frame 296*437bfbebSnyanmisaka Avs2dPicType picture_type; //!< I/G/GB/P/F/B/S 297*437bfbebSnyanmisaka RK_S32 slot_idx; 298*437bfbebSnyanmisaka RK_S32 doi; 299*437bfbebSnyanmisaka RK_S32 poi; 300*437bfbebSnyanmisaka RK_S32 out_delay; 301*437bfbebSnyanmisaka RK_U8 invisible; //!< GB visible = 0 302*437bfbebSnyanmisaka RK_U8 scene_frame_flag; //!< G/GB 303*437bfbebSnyanmisaka RK_U8 intra_frame_flag; //!< I/G/GB 304*437bfbebSnyanmisaka RK_U8 refered_bg_frame; //!< ref G/GB 305*437bfbebSnyanmisaka RK_U8 refered_by_others; 306*437bfbebSnyanmisaka RK_U8 refered_by_scene; 307*437bfbebSnyanmisaka RK_U8 error_flag; 308*437bfbebSnyanmisaka RK_U8 is_output; // mark for picture has been output to display queue 309*437bfbebSnyanmisaka } Avs2dFrame_t; 310*437bfbebSnyanmisaka 311*437bfbebSnyanmisaka typedef enum avs2d_nal_type { 312*437bfbebSnyanmisaka 313*437bfbebSnyanmisaka NAL_SEQ_START = 0xb0, 314*437bfbebSnyanmisaka NAL_SEQ_END = 0xb1, 315*437bfbebSnyanmisaka NAL_USER_DATA = 0xb2, 316*437bfbebSnyanmisaka NAL_INTRA_PIC = 0xb3, 317*437bfbebSnyanmisaka NAL_EXTENSION = 0xb5, 318*437bfbebSnyanmisaka NAL_INTER_PIC = 0xb6, 319*437bfbebSnyanmisaka NAL_VIDEO_EDIT = 0xb7 320*437bfbebSnyanmisaka } Avs2dNalType; 321*437bfbebSnyanmisaka 322*437bfbebSnyanmisaka typedef struct avs2d_nal_t { 323*437bfbebSnyanmisaka RK_U8 *data; 324*437bfbebSnyanmisaka RK_U32 size; 325*437bfbebSnyanmisaka RK_U32 nal_type; 326*437bfbebSnyanmisaka RK_U32 start_found; 327*437bfbebSnyanmisaka RK_U32 end_found; 328*437bfbebSnyanmisaka } Avs2dNal; 329*437bfbebSnyanmisaka 330*437bfbebSnyanmisaka typedef struct avs2d_stream_buf_t { 331*437bfbebSnyanmisaka RK_U8 *pbuf; 332*437bfbebSnyanmisaka RK_U32 size; //Total buffer size 333*437bfbebSnyanmisaka RK_U32 len; // Used length 334*437bfbebSnyanmisaka } Avs2dStreamBuf_t; 335*437bfbebSnyanmisaka 336*437bfbebSnyanmisaka typedef struct avs2d_memory_t { 337*437bfbebSnyanmisaka Avs2dStreamBuf_t nals_buf; 338*437bfbebSnyanmisaka Avs2dStreamBuf_t headerbuf; 339*437bfbebSnyanmisaka Avs2dStreamBuf_t streambuf; 340*437bfbebSnyanmisaka } Avs2dMemory_t; 341*437bfbebSnyanmisaka 342*437bfbebSnyanmisaka typedef struct avs2d_frame_mgr_t { 343*437bfbebSnyanmisaka RK_U32 dpb_size; 344*437bfbebSnyanmisaka RK_U32 dpb_specific_size; 345*437bfbebSnyanmisaka RK_U32 used_size; 346*437bfbebSnyanmisaka Avs2dFrame_t **dpb; 347*437bfbebSnyanmisaka RK_U8 num_of_ref; 348*437bfbebSnyanmisaka Avs2dFrame_t *refs[AVS2_MAX_REFS]; 349*437bfbebSnyanmisaka Avs2dFrame_t *scene_ref; 350*437bfbebSnyanmisaka Avs2dFrame_t *cur_frm; 351*437bfbebSnyanmisaka Avs2dRps_t cur_rps; 352*437bfbebSnyanmisaka 353*437bfbebSnyanmisaka RK_S32 prev_doi; 354*437bfbebSnyanmisaka RK_S32 output_poi; 355*437bfbebSnyanmisaka RK_S32 tr_wrap_cnt; 356*437bfbebSnyanmisaka RK_U8 initial_flag; 357*437bfbebSnyanmisaka } Avs2dFrameMgr_t; 358*437bfbebSnyanmisaka 359*437bfbebSnyanmisaka #define END_NOT_FOUND (-100) 360*437bfbebSnyanmisaka #define START_NOT_FOUND (-101) 361*437bfbebSnyanmisaka #define MPP_INPUT_BUFFER_PADDING_SIZE 8 362*437bfbebSnyanmisaka #define AVS2D_PACKET_SPLIT_LAST_KEPT_LENGTH (3) 363*437bfbebSnyanmisaka #define AVS2D_PACKET_SPLIT_CHECKER_BUFFER_SIZE (7) 364*437bfbebSnyanmisaka #define AVS2D_START_CODE_SIZE (4) 365*437bfbebSnyanmisaka 366*437bfbebSnyanmisaka //!< decoder parameters 367*437bfbebSnyanmisaka typedef struct avs2_dec_ctx_t { 368*437bfbebSnyanmisaka MppBufSlots frame_slots; 369*437bfbebSnyanmisaka MppBufSlots packet_slots; 370*437bfbebSnyanmisaka 371*437bfbebSnyanmisaka MppPacket task_pkt; 372*437bfbebSnyanmisaka Avs2dMemory_t *mem; //!< resotre slice data to decoder 373*437bfbebSnyanmisaka Avs2dStreamBuf_t *p_stream; 374*437bfbebSnyanmisaka Avs2dStreamBuf_t *p_header; 375*437bfbebSnyanmisaka 376*437bfbebSnyanmisaka //-------- input --------------- 377*437bfbebSnyanmisaka ParserCfg init; 378*437bfbebSnyanmisaka RK_U64 frame_no; 379*437bfbebSnyanmisaka RK_U64 pkt_no; 380*437bfbebSnyanmisaka RK_U8 has_get_eos; 381*437bfbebSnyanmisaka 382*437bfbebSnyanmisaka //-------- current -------------- 383*437bfbebSnyanmisaka Avs2dNalu_t *p_nals; 384*437bfbebSnyanmisaka RK_U32 nal_cnt; 385*437bfbebSnyanmisaka RK_U32 nal_allocated; 386*437bfbebSnyanmisaka 387*437bfbebSnyanmisaka //-------- video -------------- 388*437bfbebSnyanmisaka BitReadCtx_t bitctx; 389*437bfbebSnyanmisaka Avs2dSeqHeader_t vsh; 390*437bfbebSnyanmisaka Avs2dSeqExtHeader_t exh; 391*437bfbebSnyanmisaka Avs2dPicHeader_t ph; 392*437bfbebSnyanmisaka MppFrameMasteringDisplayMetadata display_meta; 393*437bfbebSnyanmisaka MppFrameContentLightMetadata content_light; 394*437bfbebSnyanmisaka MppFrameHdrDynamicMeta *hdr_dynamic_meta; 395*437bfbebSnyanmisaka 396*437bfbebSnyanmisaka Avs2dSyntax_t syntax; 397*437bfbebSnyanmisaka Avs2dFrameMgr_t frm_mgr; 398*437bfbebSnyanmisaka RK_U32 cur_wq_matrix[2][64]; 399*437bfbebSnyanmisaka 400*437bfbebSnyanmisaka //!<------------------------------------ 401*437bfbebSnyanmisaka RK_U32 got_vsh; 402*437bfbebSnyanmisaka RK_U32 got_exh; 403*437bfbebSnyanmisaka RK_U32 got_keyframe; 404*437bfbebSnyanmisaka RK_U8 enable_wq;//!< seq&pic weight quant enable 405*437bfbebSnyanmisaka RK_U32 prev_start_code; 406*437bfbebSnyanmisaka RK_U32 new_seq_flag; 407*437bfbebSnyanmisaka RK_U8 prev_tail_data[AVS2D_PACKET_SPLIT_CHECKER_BUFFER_SIZE]; // store the last 3 bytes at the lowest addr 408*437bfbebSnyanmisaka RK_U32 prev_state; 409*437bfbebSnyanmisaka RK_U32 new_frame_flag; 410*437bfbebSnyanmisaka RK_U32 is_hdr; 411*437bfbebSnyanmisaka RK_U32 hdr_dynamic; 412*437bfbebSnyanmisaka } Avs2dCtx_t; 413*437bfbebSnyanmisaka 414*437bfbebSnyanmisaka #endif /*__AVS2D_GLOBAL_H__*/ 415