217 lines
9.6 KiB
C
217 lines
9.6 KiB
C
|
|
/******************************************************************************
|
||
|
|
*
|
||
|
|
* Copyright (C) 2022 The Android Open Source Project
|
||
|
|
*
|
||
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
|
* you may not use this file except in compliance with the License.
|
||
|
|
* You may obtain a copy of the License at:
|
||
|
|
*
|
||
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
*
|
||
|
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
|
* See the License for the specific language governing permissions and
|
||
|
|
* limitations under the License.
|
||
|
|
*
|
||
|
|
*****************************************************************************
|
||
|
|
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
|
||
|
|
*/
|
||
|
|
/*!
|
||
|
|
**************************************************************************
|
||
|
|
* \file isvcd_nal.h
|
||
|
|
*
|
||
|
|
* \brief
|
||
|
|
* Contains routines that resample for SVC resampling
|
||
|
|
*
|
||
|
|
* Detailed_description
|
||
|
|
*
|
||
|
|
* \date
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* \author : Kishore
|
||
|
|
**************************************************************************
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef _SVCD_NAL_H_
|
||
|
|
#define _SVCD_NAL_H_
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* File Includes */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Constant Macros */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
#define START_CODE_NOT_FOUND -1
|
||
|
|
#define END_OF_STREAM_BUFFER -2
|
||
|
|
#define END_OF_STREAM -1
|
||
|
|
|
||
|
|
#define SC_NOT_FOUND (-1)
|
||
|
|
#define SC_FOUND 1
|
||
|
|
|
||
|
|
#define NUM_OF_ZERO_BYTES_BEFORE_START_CODE (2)
|
||
|
|
#define START_CODE_BYTE (0x01)
|
||
|
|
|
||
|
|
#define EMULATION_PREVENTION_BYTE (0x03)
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Function Macros */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Typedefs */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Enums */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
NON_VCL_NAL,
|
||
|
|
VCL_NAL
|
||
|
|
} DERIVED_NAL_UNIT_TYPE_T;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
NAL_START = 0,
|
||
|
|
FIND_NAL_END,
|
||
|
|
NAL_END
|
||
|
|
} NAL_BOUND_DETECT_STATE_T;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
STUFFED_BYTE = 0,
|
||
|
|
/* Should be used for reset purposes */
|
||
|
|
NOT_STUFFED_BYTE
|
||
|
|
} EMULATION_STATE_T;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
NAL_INSUFFICIENT_DATA = (WORD32) 0x80000000,
|
||
|
|
NAL_CORRUPT_DATA = (WORD32) 0x80000001
|
||
|
|
} NAL_PARSE_ERR_CODES_T;
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Structure */
|
||
|
|
/*****************************************************************************/
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
WORD32 i4_nal_ref_idc; /*!< NAL ref idc - decoded prm from the bitstream */
|
||
|
|
|
||
|
|
WORD32 i4_nal_unit_type; /*!< NAL unit type - decoded prm from the
|
||
|
|
bitstream */
|
||
|
|
|
||
|
|
WORD32 i4_priority_id; /*!< Priority id of NAL - decoded prm from the
|
||
|
|
bitstream. If not present then set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_dependency_id; /*!< dependency id of NAL - decoded prm from the
|
||
|
|
bitstream. If not present then set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_quality_id; /*!< Quality id of NAL - decoded prm from the
|
||
|
|
bitstream. If not present then set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_temporal_id; /*!< Temporal id of NAL - decoded prm from the
|
||
|
|
bitstream. If not present then set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_no_int_lyr_pred; /*!< No inter layer predictiion flag of NAL -
|
||
|
|
decoded prm from the bitstream. if not present then it is set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_use_ref_base_pic_flag; /*!<Use ref_base_pic flag - decoded from
|
||
|
|
the bitstream. If not present then it is set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_discard_flag; /*!<Discard_flag - decoded from the bitstream.
|
||
|
|
If not present then it is set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_derived_nal_type; /*! Derived NAL type - Place holder for enum
|
||
|
|
which indicates whether the current NAL is VCL NAL or NON_VCL_NAL */
|
||
|
|
|
||
|
|
WORD32 i4_idr_pic_flag; /*! Derived prm - Indicates whether current NAL
|
||
|
|
is idr VCL NAL or not. SVCD_TRUE means IDR PIC NAL otherwsie not */
|
||
|
|
|
||
|
|
WORD32 i4_nal_header_len; /*! lenght of NAL header in bytes */
|
||
|
|
|
||
|
|
WORD32 i4_dqid; /*! Derived parameter. It has same meaning as DQID in the
|
||
|
|
SVC standard */
|
||
|
|
|
||
|
|
UWORD32 u4_first_mb_addr; /*!< It shall hold the value of first MB address
|
||
|
|
of the VCL NAL unit (excluding the prefix NAL
|
||
|
|
unit) */
|
||
|
|
|
||
|
|
UWORD8 u1_sps_id; /*!< It shall have the value of SPS id for the VCL NAL
|
||
|
|
unit (excluding the prefix NAL unit)*/
|
||
|
|
|
||
|
|
UWORD8 u1_pps_id; /*!< It shall have the value of PPS id for the VCL NAL
|
||
|
|
unit (excluding the prefix NAL unit)*/
|
||
|
|
|
||
|
|
UWORD16 u2_frm_num; /*!< It shall have the value of frame number for the VCL
|
||
|
|
NAL unit (excluding the prefix NAL unit)*/
|
||
|
|
|
||
|
|
UWORD32 i4_idr_pic_num; /*!< It shall have the value of IDR picture number when
|
||
|
|
"i4_idr_pic_flag" is SVCD_TRUE for VCL NAL unit.
|
||
|
|
(excluding prefix NAL unit) */
|
||
|
|
|
||
|
|
WORD32 i4_poc_lsb; /*!< It shall have the value of "picture order cnt lsb"
|
||
|
|
when picture order count type is 0 for VCL NAL unit
|
||
|
|
(excluding the prefix NAL unit). When not present in the
|
||
|
|
bitstream, it shall be set to 0 */
|
||
|
|
|
||
|
|
WORD32 i4_delta_poc_bot; /*!< It shall have the value of "delta picture order
|
||
|
|
cnt bottom" when picture order count type is 0 for VCL NAL
|
||
|
|
unit (excluding the prefix NAL unit). When not present in
|
||
|
|
the bitstream, it shall be set to 0 */
|
||
|
|
|
||
|
|
WORD32 ai4_delta_poc[2]; /*!< It shall have the value of "delta picture order
|
||
|
|
cnt bottom" when picture order count type is 1 for VCL NAL
|
||
|
|
unit (excluding the prefix NAL unit). When not present in
|
||
|
|
the bitstream, it shall be set to 0 */
|
||
|
|
|
||
|
|
} nal_prms_t;
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Extern Variable Declarations */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* Extern Function Declarations */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
void isvcd_nal_buf_reset(void *ps_nal_buf);
|
||
|
|
|
||
|
|
UWORD32 isvcd_nal_rbsp_to_sodb(UWORD8 *pu1_buf, WORD32 i4_nal_len_in_bytes, UWORD8 u1_ecd_mode);
|
||
|
|
|
||
|
|
WORD32 isvcd_get_first_start_code(UWORD8 *pu1_stream_buffer, UWORD32 *pu4_bytes_consumed,
|
||
|
|
UWORD32 *pu4_num_bytes);
|
||
|
|
|
||
|
|
WORD32 isvcd_nal_find_start_code(UWORD8 *pu1_buf_start, WORD32 i4_cur_pos, WORD32 i4_max_num_bytes,
|
||
|
|
WORD32 *pi4_zero_cnt, UWORD32 *pu4_bytes_consumed);
|
||
|
|
|
||
|
|
WORD32 isvcd_get_annex_b_nal_unit(UWORD8 *pu1_buf_start, WORD32 i4_cur_pos, WORD32 i4_max_num_bytes,
|
||
|
|
WORD32 *pi4_state, WORD32 *pi4_zero_byte_cnt,
|
||
|
|
UWORD32 *pu4_bytes_consumed, void *pv_nal_unit,
|
||
|
|
WORD32 *pi4_more_data_flag);
|
||
|
|
|
||
|
|
void isvcd_reset_emulation_ctxt(void *pv_emulation_ctxt);
|
||
|
|
|
||
|
|
UWORD32 isvcd_nal_byte_swap_emulation(UWORD32 *pu4_out_stream, UWORD32 *pu4_out_len,
|
||
|
|
UWORD8 *pu1_in_stream, UWORD32 u4_in_len, WORD32 i4_0s_bfr_sc,
|
||
|
|
void *pv_emulation_ctxt);
|
||
|
|
|
||
|
|
void isvcd_dec_nal_hdr(void *pv_buf_ptr, WORD32 i4_buf_size, void *pv_nal_header_buf,
|
||
|
|
void *pv_nal_prms, void *pv_prefix_nal_buf, void *pv_prefix_nal_prms,
|
||
|
|
UWORD32 *pu4_err_code);
|
||
|
|
|
||
|
|
void isvcd_set_default_nal_prms(void *pv_nal_prms);
|
||
|
|
|
||
|
|
WORD32 isvcd_parse_part_slice_hdr(UWORD8 *pu1_input_buf, WORD32 i4_input_buf_size,
|
||
|
|
UWORD8 *pu1_temp_buf, void *ps_sps, void *ps_pps,
|
||
|
|
nal_prms_t *ps_nal_prms, UWORD32 *pu4_err_code,
|
||
|
|
WORD32 *pi4_sps_pps_status);
|
||
|
|
|
||
|
|
WORD32 isvcd_discard_nal(void *pv_nal_prms, void *pv_app_attr, void *pv_int_attr,
|
||
|
|
WORD32 i4_update_flag);
|
||
|
|
|
||
|
|
#endif /* _SVCD_NAL_H_ */
|