xref: /rockchip-linux_mpp/mpp/codec/dec/avs2/avs2d_global.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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