xref: /aosp_15_r20/external/libavc/decoder/svc/isvcd_nal.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2022 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker  *
5*495ae853SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker  *
9*495ae853SAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker  *
11*495ae853SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker  * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker  *
17*495ae853SAndroid Build Coastguard Worker  *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker  */
20*495ae853SAndroid Build Coastguard Worker /*!
21*495ae853SAndroid Build Coastguard Worker  **************************************************************************
22*495ae853SAndroid Build Coastguard Worker  * \file isvcd_nal.h
23*495ae853SAndroid Build Coastguard Worker  *
24*495ae853SAndroid Build Coastguard Worker  * \brief
25*495ae853SAndroid Build Coastguard Worker  *    Contains routines that resample for SVC resampling
26*495ae853SAndroid Build Coastguard Worker  *
27*495ae853SAndroid Build Coastguard Worker  * Detailed_description
28*495ae853SAndroid Build Coastguard Worker  *
29*495ae853SAndroid Build Coastguard Worker  * \date
30*495ae853SAndroid Build Coastguard Worker  *
31*495ae853SAndroid Build Coastguard Worker  *
32*495ae853SAndroid Build Coastguard Worker  * \author : Kishore
33*495ae853SAndroid Build Coastguard Worker  **************************************************************************
34*495ae853SAndroid Build Coastguard Worker  */
35*495ae853SAndroid Build Coastguard Worker 
36*495ae853SAndroid Build Coastguard Worker #ifndef _SVCD_NAL_H_
37*495ae853SAndroid Build Coastguard Worker #define _SVCD_NAL_H_
38*495ae853SAndroid Build Coastguard Worker 
39*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
40*495ae853SAndroid Build Coastguard Worker /* File Includes                                                             */
41*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
42*495ae853SAndroid Build Coastguard Worker 
43*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
44*495ae853SAndroid Build Coastguard Worker /* Constant Macros                                                           */
45*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
46*495ae853SAndroid Build Coastguard Worker 
47*495ae853SAndroid Build Coastguard Worker #define START_CODE_NOT_FOUND -1
48*495ae853SAndroid Build Coastguard Worker #define END_OF_STREAM_BUFFER -2
49*495ae853SAndroid Build Coastguard Worker #define END_OF_STREAM -1
50*495ae853SAndroid Build Coastguard Worker 
51*495ae853SAndroid Build Coastguard Worker #define SC_NOT_FOUND (-1)
52*495ae853SAndroid Build Coastguard Worker #define SC_FOUND 1
53*495ae853SAndroid Build Coastguard Worker 
54*495ae853SAndroid Build Coastguard Worker #define NUM_OF_ZERO_BYTES_BEFORE_START_CODE (2)
55*495ae853SAndroid Build Coastguard Worker #define START_CODE_BYTE (0x01)
56*495ae853SAndroid Build Coastguard Worker 
57*495ae853SAndroid Build Coastguard Worker #define EMULATION_PREVENTION_BYTE (0x03)
58*495ae853SAndroid Build Coastguard Worker 
59*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
60*495ae853SAndroid Build Coastguard Worker /* Function Macros                                                           */
61*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
62*495ae853SAndroid Build Coastguard Worker 
63*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
64*495ae853SAndroid Build Coastguard Worker /* Typedefs                                                                  */
65*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
66*495ae853SAndroid Build Coastguard Worker 
67*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
68*495ae853SAndroid Build Coastguard Worker /* Enums                                                                     */
69*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
70*495ae853SAndroid Build Coastguard Worker 
71*495ae853SAndroid Build Coastguard Worker typedef enum
72*495ae853SAndroid Build Coastguard Worker {
73*495ae853SAndroid Build Coastguard Worker     NON_VCL_NAL,
74*495ae853SAndroid Build Coastguard Worker     VCL_NAL
75*495ae853SAndroid Build Coastguard Worker } DERIVED_NAL_UNIT_TYPE_T;
76*495ae853SAndroid Build Coastguard Worker 
77*495ae853SAndroid Build Coastguard Worker typedef enum
78*495ae853SAndroid Build Coastguard Worker {
79*495ae853SAndroid Build Coastguard Worker     NAL_START = 0,
80*495ae853SAndroid Build Coastguard Worker     FIND_NAL_END,
81*495ae853SAndroid Build Coastguard Worker     NAL_END
82*495ae853SAndroid Build Coastguard Worker } NAL_BOUND_DETECT_STATE_T;
83*495ae853SAndroid Build Coastguard Worker 
84*495ae853SAndroid Build Coastguard Worker typedef enum
85*495ae853SAndroid Build Coastguard Worker {
86*495ae853SAndroid Build Coastguard Worker     STUFFED_BYTE = 0,
87*495ae853SAndroid Build Coastguard Worker     /* Should be used for reset purposes */
88*495ae853SAndroid Build Coastguard Worker     NOT_STUFFED_BYTE
89*495ae853SAndroid Build Coastguard Worker } EMULATION_STATE_T;
90*495ae853SAndroid Build Coastguard Worker 
91*495ae853SAndroid Build Coastguard Worker typedef enum
92*495ae853SAndroid Build Coastguard Worker {
93*495ae853SAndroid Build Coastguard Worker     NAL_INSUFFICIENT_DATA = (WORD32) 0x80000000,
94*495ae853SAndroid Build Coastguard Worker     NAL_CORRUPT_DATA = (WORD32) 0x80000001
95*495ae853SAndroid Build Coastguard Worker } NAL_PARSE_ERR_CODES_T;
96*495ae853SAndroid Build Coastguard Worker 
97*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
98*495ae853SAndroid Build Coastguard Worker /* Structure                                                                 */
99*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
100*495ae853SAndroid Build Coastguard Worker typedef struct
101*495ae853SAndroid Build Coastguard Worker {
102*495ae853SAndroid Build Coastguard Worker     WORD32 i4_nal_ref_idc;           /*!< NAL ref idc  - decoded prm from the bitstream */
103*495ae853SAndroid Build Coastguard Worker 
104*495ae853SAndroid Build Coastguard Worker     WORD32 i4_nal_unit_type;         /*!< NAL unit type - decoded prm from the
105*495ae853SAndroid Build Coastguard Worker              bitstream                                                                */
106*495ae853SAndroid Build Coastguard Worker 
107*495ae853SAndroid Build Coastguard Worker     WORD32 i4_priority_id;           /*!< Priority id of NAL -  decoded prm from the
108*495ae853SAndroid Build Coastguard Worker                bitstream. If not present then set to 0                                  */
109*495ae853SAndroid Build Coastguard Worker 
110*495ae853SAndroid Build Coastguard Worker     WORD32 i4_dependency_id;         /*!< dependency id of NAL -  decoded prm from the
111*495ae853SAndroid Build Coastguard Worker              bitstream. If not present then set to 0                                  */
112*495ae853SAndroid Build Coastguard Worker 
113*495ae853SAndroid Build Coastguard Worker     WORD32 i4_quality_id;            /*!< Quality id of NAL - decoded prm from the
114*495ae853SAndroid Build Coastguard Worker                 bitstream. If not present then set to 0                                  */
115*495ae853SAndroid Build Coastguard Worker 
116*495ae853SAndroid Build Coastguard Worker     WORD32 i4_temporal_id;           /*!< Temporal id of NAL - decoded prm from the
117*495ae853SAndroid Build Coastguard Worker                bitstream. If not present then set to 0                                  */
118*495ae853SAndroid Build Coastguard Worker 
119*495ae853SAndroid Build Coastguard Worker     WORD32 i4_no_int_lyr_pred;       /*!< No inter layer predictiion flag of NAL -
120*495ae853SAndroid Build Coastguard Worker            decoded prm from the bitstream. if not present then it is set to 0       */
121*495ae853SAndroid Build Coastguard Worker 
122*495ae853SAndroid Build Coastguard Worker     WORD32 i4_use_ref_base_pic_flag; /*!<Use ref_base_pic flag  - decoded from
123*495ae853SAndroid Build Coastguard Worker      the bitstream. If not present then it is set to 0                        */
124*495ae853SAndroid Build Coastguard Worker 
125*495ae853SAndroid Build Coastguard Worker     WORD32 i4_discard_flag;          /*!<Discard_flag - decoded from the bitstream.
126*495ae853SAndroid Build Coastguard Worker               If not present then it is set to 0                                       */
127*495ae853SAndroid Build Coastguard Worker 
128*495ae853SAndroid Build Coastguard Worker     WORD32 i4_derived_nal_type;      /*! Derived NAL type - Place holder for enum
129*495ae853SAndroid Build Coastguard Worker           which indicates whether the current NAL is VCL NAL or NON_VCL_NAL        */
130*495ae853SAndroid Build Coastguard Worker 
131*495ae853SAndroid Build Coastguard Worker     WORD32 i4_idr_pic_flag;          /*! Derived prm - Indicates whether current NAL
132*495ae853SAndroid Build Coastguard Worker              is idr VCL NAL or not. SVCD_TRUE means IDR PIC NAL otherwsie not         */
133*495ae853SAndroid Build Coastguard Worker 
134*495ae853SAndroid Build Coastguard Worker     WORD32 i4_nal_header_len;        /*! lenght of NAL header in bytes              */
135*495ae853SAndroid Build Coastguard Worker 
136*495ae853SAndroid Build Coastguard Worker     WORD32 i4_dqid;                  /*! Derived parameter. It has same meaning as DQID in the
137*495ae853SAndroid Build Coastguard Worker                       SVC standard                                                             */
138*495ae853SAndroid Build Coastguard Worker 
139*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_first_mb_addr;        /*!< It shall hold the value of first MB address
140*495ae853SAndroid Build Coastguard Worker                                      of the VCL NAL unit (excluding the prefix NAL
141*495ae853SAndroid Build Coastguard Worker                                      unit) */
142*495ae853SAndroid Build Coastguard Worker 
143*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_sps_id;                /*!< It shall have the value of SPS id for the VCL NAL
144*495ae853SAndroid Build Coastguard Worker                                      unit (excluding the prefix NAL unit)*/
145*495ae853SAndroid Build Coastguard Worker 
146*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_pps_id;                /*!< It shall have the value of PPS id for the VCL NAL
147*495ae853SAndroid Build Coastguard Worker                                      unit (excluding the prefix NAL unit)*/
148*495ae853SAndroid Build Coastguard Worker 
149*495ae853SAndroid Build Coastguard Worker     UWORD16 u2_frm_num;              /*!< It shall have the value of frame number for the VCL
150*495ae853SAndroid Build Coastguard Worker                                      NAL unit (excluding the prefix NAL unit)*/
151*495ae853SAndroid Build Coastguard Worker 
152*495ae853SAndroid Build Coastguard Worker     UWORD32 i4_idr_pic_num;          /*!< It shall have the value of IDR picture number when
153*495ae853SAndroid Build Coastguard Worker                                     "i4_idr_pic_flag" is SVCD_TRUE for VCL NAL unit.
154*495ae853SAndroid Build Coastguard Worker                                     (excluding prefix NAL unit) */
155*495ae853SAndroid Build Coastguard Worker 
156*495ae853SAndroid Build Coastguard Worker     WORD32 i4_poc_lsb;               /*!< It shall have the value of "picture order cnt lsb"
157*495ae853SAndroid Build Coastguard Worker                                      when picture order count type is 0 for VCL NAL unit
158*495ae853SAndroid Build Coastguard Worker                                      (excluding the prefix NAL unit). When not present in the
159*495ae853SAndroid Build Coastguard Worker                                      bitstream, it shall be set to 0 */
160*495ae853SAndroid Build Coastguard Worker 
161*495ae853SAndroid Build Coastguard Worker     WORD32 i4_delta_poc_bot;         /*!< It shall have the value of "delta picture order
162*495ae853SAndroid Build Coastguard Worker                                cnt bottom" when picture order count type is 0 for VCL NAL
163*495ae853SAndroid Build Coastguard Worker                                unit (excluding the prefix NAL unit). When not present in
164*495ae853SAndroid Build Coastguard Worker                                the bitstream, it shall be set to 0 */
165*495ae853SAndroid Build Coastguard Worker 
166*495ae853SAndroid Build Coastguard Worker     WORD32 ai4_delta_poc[2];         /*!< It shall have the value of "delta picture order
167*495ae853SAndroid Build Coastguard Worker                                cnt bottom" when picture order count type is 1 for VCL NAL
168*495ae853SAndroid Build Coastguard Worker                                unit (excluding the prefix NAL unit). When not present in
169*495ae853SAndroid Build Coastguard Worker                                the bitstream, it shall be set to 0 */
170*495ae853SAndroid Build Coastguard Worker 
171*495ae853SAndroid Build Coastguard Worker } nal_prms_t;
172*495ae853SAndroid Build Coastguard Worker 
173*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
174*495ae853SAndroid Build Coastguard Worker /* Extern Variable Declarations                                              */
175*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
176*495ae853SAndroid Build Coastguard Worker 
177*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
178*495ae853SAndroid Build Coastguard Worker /* Extern Function Declarations                                              */
179*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
180*495ae853SAndroid Build Coastguard Worker 
181*495ae853SAndroid Build Coastguard Worker void isvcd_nal_buf_reset(void *ps_nal_buf);
182*495ae853SAndroid Build Coastguard Worker 
183*495ae853SAndroid Build Coastguard Worker UWORD32 isvcd_nal_rbsp_to_sodb(UWORD8 *pu1_buf, WORD32 i4_nal_len_in_bytes, UWORD8 u1_ecd_mode);
184*495ae853SAndroid Build Coastguard Worker 
185*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_first_start_code(UWORD8 *pu1_stream_buffer, UWORD32 *pu4_bytes_consumed,
186*495ae853SAndroid Build Coastguard Worker                                   UWORD32 *pu4_num_bytes);
187*495ae853SAndroid Build Coastguard Worker 
188*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_nal_find_start_code(UWORD8 *pu1_buf_start, WORD32 i4_cur_pos, WORD32 i4_max_num_bytes,
189*495ae853SAndroid Build Coastguard Worker                                  WORD32 *pi4_zero_cnt, UWORD32 *pu4_bytes_consumed);
190*495ae853SAndroid Build Coastguard Worker 
191*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_annex_b_nal_unit(UWORD8 *pu1_buf_start, WORD32 i4_cur_pos, WORD32 i4_max_num_bytes,
192*495ae853SAndroid Build Coastguard Worker                                   WORD32 *pi4_state, WORD32 *pi4_zero_byte_cnt,
193*495ae853SAndroid Build Coastguard Worker                                   UWORD32 *pu4_bytes_consumed, void *pv_nal_unit,
194*495ae853SAndroid Build Coastguard Worker                                   WORD32 *pi4_more_data_flag);
195*495ae853SAndroid Build Coastguard Worker 
196*495ae853SAndroid Build Coastguard Worker void isvcd_reset_emulation_ctxt(void *pv_emulation_ctxt);
197*495ae853SAndroid Build Coastguard Worker 
198*495ae853SAndroid Build Coastguard Worker UWORD32 isvcd_nal_byte_swap_emulation(UWORD32 *pu4_out_stream, UWORD32 *pu4_out_len,
199*495ae853SAndroid Build Coastguard Worker                                       UWORD8 *pu1_in_stream, UWORD32 u4_in_len, WORD32 i4_0s_bfr_sc,
200*495ae853SAndroid Build Coastguard Worker                                       void *pv_emulation_ctxt);
201*495ae853SAndroid Build Coastguard Worker 
202*495ae853SAndroid Build Coastguard Worker void isvcd_dec_nal_hdr(void *pv_buf_ptr, WORD32 i4_buf_size, void *pv_nal_header_buf,
203*495ae853SAndroid Build Coastguard Worker                        void *pv_nal_prms, void *pv_prefix_nal_buf, void *pv_prefix_nal_prms,
204*495ae853SAndroid Build Coastguard Worker                        UWORD32 *pu4_err_code);
205*495ae853SAndroid Build Coastguard Worker 
206*495ae853SAndroid Build Coastguard Worker void isvcd_set_default_nal_prms(void *pv_nal_prms);
207*495ae853SAndroid Build Coastguard Worker 
208*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_parse_part_slice_hdr(UWORD8 *pu1_input_buf, WORD32 i4_input_buf_size,
209*495ae853SAndroid Build Coastguard Worker                                   UWORD8 *pu1_temp_buf, void *ps_sps, void *ps_pps,
210*495ae853SAndroid Build Coastguard Worker                                   nal_prms_t *ps_nal_prms, UWORD32 *pu4_err_code,
211*495ae853SAndroid Build Coastguard Worker                                   WORD32 *pi4_sps_pps_status);
212*495ae853SAndroid Build Coastguard Worker 
213*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_discard_nal(void *pv_nal_prms, void *pv_app_attr, void *pv_int_attr,
214*495ae853SAndroid Build Coastguard Worker                          WORD32 i4_update_flag);
215*495ae853SAndroid Build Coastguard Worker 
216*495ae853SAndroid Build Coastguard Worker #endif /* _SVCD_NAL_H_ */
217