unplugged-system/external/libavc/decoder/svc/isvcd_nal.h

217 lines
9.6 KiB
C
Raw Permalink Normal View History

/******************************************************************************
*
* 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_ */