unplugged-system/external/libavc/common/svc/isvc_structs.h

336 lines
8.5 KiB
C
Raw 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
* isvc_structs.h
*
* @brief
* Contains struct definition used for SVC
*
* @author
* ittiam
*
* @remarks
* None
*
*******************************************************************************
*/
#ifndef _ISVC_STRUCTS_H_
#define _ISVC_STRUCTS_H_
#include "ih264_typedefs.h"
#include "iv2.h"
#include "ih264_defs.h"
#include "ih264_structs.h"
#include "isvc_defs.h"
typedef struct buffer_container_t
{
void *pv_data;
WORD32 i4_data_stride;
} buffer_container_t;
typedef struct yuv_buf_props_t
{
buffer_container_t as_component_bufs[NUM_COMPONENTS];
IV_COLOR_FORMAT_T e_color_format;
UWORD32 u4_width;
UWORD32 u4_height;
UWORD8 u1_bit_depth;
} yuv_buf_props_t;
typedef struct nal_unit_header_t
{
UWORD8 u1_nal_ref_idc;
UWORD8 u1_nal_unit_type;
} nal_unit_header_t;
typedef struct coordinates_t
{
WORD32 i4_abscissa;
WORD32 i4_ordinate;
} coordinates_t;
typedef struct svc_au_buf_t
{
/* Array of structs that contain properties of the buffers used for storing */
yuv_buf_props_t *ps_layer_yuv_buf_props;
/* Temporal ID */
WORD8 i1_temporal_id;
/* Num Spatial Layers */
UWORD8 u1_num_spatial_layers;
/* Resolution ration b/w spatial layers */
DOUBLE d_spatial_res_ratio;
/* absolute value of POC */
WORD32 i4_abs_poc;
/* POC % MaxPicOrderCntLSB */
WORD32 i4_poc_lsb;
/* Lower 32 bits of time stamp */
UWORD32 u4_timestamp_low;
/* Higher 32 bits of time stamp */
UWORD32 u4_timestamp_high;
/* Is Pic used as refPic for future frames? */
WORD32 i4_used_as_ref;
/* frame_num in the slice header */
WORD32 i4_frame_num;
/*
* 0: Top Field
* 1: Bottom Field
*/
WORD8 i1_field_type;
/* buffer ID from frame buffer manager */
WORD32 i4_buf_id;
} svc_au_buf_t;
typedef struct svc_nalu_ext_t
{
nal_unit_header_t s_nalu_header;
/* idr_flag */
UWORD8 u1_idr_flag;
/* priority_id (Range = [0, 63]) */
UWORD8 u1_priority_id;
/* no_inter_layer_pred_flag */
UWORD8 u1_no_inter_layer_pred_flag;
/* dependency_id (Range = [0, 7]) */
UWORD8 u1_dependency_id;
/* quality_id (Range = [0, 15]) */
UWORD8 u1_quality_id;
/* temporal_id (Range = [0, 7]) */
UWORD8 u1_temporal_id;
/* use_ref_base_pic_flag */
UWORD8 u1_use_ref_base_pic_flag;
/* discardable_flag */
UWORD8 u1_discardable_flag;
/* output_flag */
UWORD8 u1_output_flag;
/* reserved_three_2bits */
UWORD8 u1_reserved_three_2bits;
} svc_nalu_ext_t;
typedef struct svc_vui_ext_t
{
/* specifies the maximum layers in the SVC bitstream */
UWORD32 u4_vui_ext_num_entries_minus1;
/* specifies the dependency ID for each layer */
UWORD8 u1_vui_ext_dependency_id[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the quality ID for each layer */
UWORD8 u1_vui_ext_quality_id[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the temporal ID for each layer */
UWORD8 u1_vui_ext_temporal_id[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the timing_info_present_flag value of the i-th sub-bitstream */
UWORD8 u1_vui_ext_timing_info_present_flag[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the num_units_in_tick value of the i-th sub-bitstream */
UWORD32 u4_vui_ext_num_units_in_tick[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the time_scale value of the i-th sub-bitstream */
UWORD32 u4_vui_ext_time_scale[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the fixed_frame_rate_flag value of the i-th sub-bitstream */
UWORD8 u1_vui_ext_fixed_frame_rate_flag[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the nal_hrd_parameters_present_flag value of the i-th */
UWORD8 u1_vui_ext_nal_hrd_params_present_flag[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the vcl_hrd_parameters_present_flag value of the i-th */
UWORD8 u1_vui_ext_vcl_hrd_params_present_flag[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the low_delay_hrd_flag value of the i-th sub-bitstream */
UWORD8 u1_vui_ext_low_delay_hrd_flag[MAX_VUI_EXT_NUM_ENTRIES];
/* specifies the pic_struct_present_flag value of the i-th sub-bitstream */
UWORD8 u1_vui_ext_pic_struct_present_flag[MAX_VUI_EXT_NUM_ENTRIES];
} svc_vui_ext_t;
typedef struct sps_svc_ext_t
{
/* inter_layer_deblocking_filter_control_present_flag */
UWORD8 u1_inter_layer_deblocking_filter_control_present_flag;
/* extended_spatial_scalability_idc */
UWORD8 u1_extended_spatial_scalability_idc;
/* chroma_phase_x_plus1_flag */
UWORD8 u1_chroma_phase_x_plus1;
/* chroma_phase_y_plus1 */
UWORD8 u1_chroma_phase_y_plus1;
/* seq_ref_layer_chroma_phase_x_plus1_flag */
UWORD8 u1_seq_ref_layer_chroma_phase_x_plus1_flag;
/* seq_ref_layer_chroma_phase_y_plus1 */
UWORD8 u1_seq_ref_layer_chroma_phase_y_plus1;
/* seq_scaled_ref_layer_left_offset */
WORD32 i4_seq_scaled_ref_layer_left_offset;
/* seq_scaled_ref_layer_top_offset */
WORD32 i4_seq_scaled_ref_layer_top_offset;
/* seq_scaled_ref_layer_right_offset */
WORD32 i4_seq_scaled_ref_layer_right_offset;
/* seq_scaled_ref_layer_bottom_offset */
WORD32 i4_seq_scaled_ref_layer_bottom_offset;
/* seq_tcoeff_level_prediction_flag */
WORD8 i1_seq_tcoeff_level_prediction_flag;
/* adaptive_tcoeff_level_prediction_flag */
WORD8 i1_adaptive_tcoeff_level_prediction_flag;
/* slice_header_restriction_flag */
WORD8 i1_slice_header_restriction_flag;
} sps_svc_ext_t;
typedef struct subset_sps_t
{
/* SPS structure */
sps_t s_sps;
/* Structure containing flags specific to SVC SPS */
sps_svc_ext_t s_sps_svc_ext;
/* svc_vui_parameters_present_flag */
WORD8 i1_svc_vui_parameters_present_flag;
svc_vui_ext_t s_svc_vui;
/* additional_extension2_data_flag */
WORD8 i1_additional_extension2_flag;
} subset_sps_t;
typedef struct svc_slice_header_t
{
/* ref_layer_dq_id */
UWORD32 u4_ref_layer_dq_id;
/* disable_inter_layer_deblocking_filter_idc */
UWORD32 u4_disable_inter_layer_deblocking_filter_idc;
/* inter_layer_slice_alpha_c0_offset_div2 */
WORD32 i4_inter_layer_slice_alpha_c0_offset_div2;
/* inter_layer_slice_beta_offset_div2 */
WORD32 i4_inter_layer_slice_beta_offset_div2;
/* constrained_intra_resampling_flag */
WORD8 i1_constrained_intra_resampling_flag;
/* ref_layer_chroma_phase_x_plus1_flag */
WORD8 i1_ref_layer_chroma_phase_x_plus1_flag;
/* ref_layer_chroma_phase_y_plus1 */
WORD8 i1_ref_layer_chroma_phase_y_plus1;
/* scaled_ref_layer_left_offset */
WORD32 i4_scaled_ref_layer_left;
/* scaled_ref_layer_top_offset */
WORD32 i4_scaled_ref_layer_top;
/* scaled_ref_layer_right_offset */
WORD32 i4_scaled_ref_layer_right;
/* scaled_ref_layer_bottom_offset */
WORD32 i4_scaled_ref_layer_bottom;
/* slice_skip_flag */
WORD8 i1_slice_skip_flag;
/* num_mbs_in_slice_minus1 */
UWORD32 u4_num_mbs_in_slice_minus1;
/* adaptive_base_mode_flag */
WORD8 i1_adaptive_base_mode_flag;
/* default_base_mode_flag */
WORD8 i1_default_base_mode_flag;
/* adaptive_motion_prediction_flag */
WORD8 i1_adaptive_motion_prediction_flag;
/* default_motion_prediction_flag */
WORD8 i1_default_motion_prediction_flag;
/* adaptive_residual_prediction_flag */
WORD8 i1_adaptive_residual_prediction_flag;
/* default_residual_prediction_flag */
WORD8 i1_default_residual_prediction_flag;
/* tcoeff_level_prediction_flag */
WORD8 i1_tcoeff_level_prediction_flag;
/* scan_idx_start */
UWORD32 u4_scan_idx_start;
/* scan_idx_end */
UWORD32 u4_scan_idx_end;
WORD32 i4_store_ref_base_pic_flag;
slice_header_t s_slice_header;
} svc_slice_header_t;
#endif