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