You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

251 lines
7.7 KiB

//-----------------------------------------------------------------------------
// COPYRIGHT (C) 2020 CHIPS&MEDIA INC. ALL RIGHTS RESERVED
//
// This file is distributed under BSD 3 clause and LGPL2.1 (dual license)
// SPDX License Identifier: BSD-3-Clause
// SPDX License Identifier: LGPL-2.1-only
//
// The entire notice above must be reproduced on all authorized copies.
//
// Description :
//-----------------------------------------------------------------------------
#ifndef __HEADER_STRUCT_H__
#define __HEADER_STRUCT_H__
#define EXTENDED_SAR 255
#define MAX_VPS_MAX_SUB_LAYERS 16
#define MAX_CPB_COUNT 16
typedef struct sei_buffering_period_tag {
Uint32 sub_pic_hrd_params_present_flag; //derived from syntax elements found in the hrd_parameters( )
Uint32 au_cpb_removal_delay_length_minus1; //derived from syntax elements found in the hrd_parameters( )
Uint32 initial_cpb_removal_delay_length_minus1; //derived from syntax elements found in the hrd_parameters( )
Uint32 CpbCnt; //CpbCnt are derived from syntax elements found in the sub_layer_hrd_parameters( ) syntax structure
Uint32 NalHrdBpPresentFlag; // NalHrdBpPresentFlag and VclHrdBpPresentFlag are found in or derived from syntax elements found in the hrd_parameters( )
Uint32 VclHrdBpPresentFlag; //NalHrdBpPresentFlag and VclHrdBpPresentFlag are found in or derived from syntax elements found in the hrd_parameters( )
Uint32 bp_seq_parameter_set_id;
Uint32 irap_cpb_params_present_flag;
Uint32 cpb_delay_offset; //The syntax element has a length in bits given by au_cpb_removal_delay_length_minus1 + 1
Uint32 dpb_delay_offset;
Uint32 concatenation_flag;
Uint32 au_cpb_removal_delay_delta_minus1;
Uint32 nal_initial_cpb_removal_delay[MAX_CPB_COUNT]; //
Uint32 nal_initial_cpb_removal_offset[MAX_CPB_COUNT];
Uint32 nal_initial_alt_cpb_removal_delay[MAX_CPB_COUNT];
Uint32 nal_initial_alt_cpb_removal_offset[MAX_CPB_COUNT];
Uint32 vcl_initial_cpb_removal_delay[MAX_CPB_COUNT];
Uint32 vcl_initial_cpb_removal_offset[MAX_CPB_COUNT];
Uint32 vcl_initial_alt_cpb_removal_delay[MAX_CPB_COUNT];
Uint32 vcl_initial_alt_cpb_removal_offset[MAX_CPB_COUNT];
} sei_buffering_period_t;
typedef struct sei_pic_timing_tag {
Uint32 duplicate_flag;
Uint32 source_scan_type;
Uint32 pic_struct;
Uint32 CpbDpbDelaysPresentFlag; // if nal_hrd_parameters_present_flag or vcl_hrd_parameters_present_flag is 1,
Uint32 au_cpb_removal_delay_minus1;
Uint32 pic_dpb_output_delay;
Uint32 pic_dpb_output_du_delay;
Uint32 num_decoding_units_minus1;
Uint32 du_common_cpb_removal_delay_flag;
Uint32 du_common_cpb_removal_delay_increment_minus1;
#define MAX_NUM_DECODING_UNIT 20
Uint32 num_nalus_in_du_minus1[MAX_NUM_DECODING_UNIT];
Uint32 du_cpb_removal_delay_increment_minus1[MAX_NUM_DECODING_UNIT];
} sei_pic_timing_t;
typedef struct sei_active_parameter_tag {
Uint32 active_video_parameter_set_id;
Uint32 self_contained_cvs_flag;
Uint32 no_parameter_set_update_flag;
Uint32 num_sps_ids_minus1;
#define MAX_NUM_SEQ_ID 20
Uint32 active_seq_parameter_set_id[MAX_NUM_SEQ_ID];
} sei_active_parameter_t;
typedef enum
{
BUFFERING_PERIOD = 0,
PICTURE_TIMING,
FILLER_PAYLOAD = 3,
USER_DATA_REGISTERED_ITU_T_T35,
USER_DATA_UNREGISTERED,
RECOVERY_POINT,
SCENE_INFO = 9,
FULL_FRAME_SNAPSHOT = 15,
PROGRESSIVE_REFINEMENT_SEGMENT_START,
PROGRESSIVE_REFINEMENT_SEGMENT_END,
FILM_GRAIN_CHARACTERISTICS = 19,
POST_FILTER_HINT = 22,
TONE_MAPPING_INFO,
KNEE_FUNCTION_INFO,
FRAME_PACKING = 45,
DISPLAY_ORIENTATION = 47,
SOP_DESCRIPTION,
ACTIVE_PARAMETER_SETS = 129,
DECODING_UNIT_INFO,
TEMPORAL_LEVEL0_INDEX,
DECODED_PICTURE_HASH,
SCALABLE_NESTING = 133,
REGION_REFRESH_INFO,
NO_DISPLAY,
TIME_CODE,
MASTERING_DISPLAY_COLOUR_VOLUME,
SEGM_RECT_FRAME_PACKING,
TEMP_MOTION_CONSTRAINED_TILE_SETS,
CHROMA_SAMPLING_FILTER_HINT
} SeiPayloadType;
enum
{
SNT_TRAIL_N = 0,
SNT_TRAIL_R = 1,
SNT_TSA_N = 2,
SNT_TSA_R = 3,
SNT_STSA_N = 4,
SNT_STSA_R = 5,
SNT_RADL_N = 6,
SNT_RADL_R = 7,
SNT_RASL_N = 8,
SNT_RASL_R = 9,
SNT_RSV_N10 = 10,
SNT_RSV_R11 = 11,
SNT_RSV_N12 = 12,
SNT_RSV_R13 = 13,
SNT_RSV_N14 = 14,
SNT_RSV_R15 = 15,
SNT_BLA_W_LP = 16,
SNT_BLA_W_RADL = 17,
SNT_BLA_N_LP = 18,
SNT_IDR_W_RADL = 19,
SNT_IDR_N_LP = 20,
SNT_CRA = 21,
SNT_RSV_IRAP22 = 22,
SNT_RSV_IRAP23 = 23,
SNT_VPS = 32,
SNT_SPS = 33,
SNT_PPS = 34,
SNT_AUD = 35,
SNT_EOS = 36,
SNT_EOB = 37,
SNT_FD = 38,
SNT_PREFIX_SEI = 39,
SNT_SUFFIX_SEI = 40,
};
typedef struct
{
Uint32 vui_parameters_presesent_flag;
// vui_present_flags
Uint32 neutral_chroma_indication_flag;
Uint32 field_seq_flag; // this syntax shall be 1 when pic_struct in sei_pic_timing is 1 or 2
Uint32 frame_field_info_present_flag; //this syntax shall be 1 when pic_struct in sei_pic_timing is not 0
Uint32 aspect_ratio_info_present_flag;
Uint32 overscan_info_present_flag;
Uint32 video_signal_type_present_flag;
Uint32 colour_description_present_flag;
Uint32 chroma_loc_info_present_flag;
Uint32 default_display_window_flag;
Uint32 vui_timing_info_present_flag;
Uint32 bitstream_restriction_flag;
// vui_aspect_ratio_idc
Uint32 aspect_ratio_idc;
// vui_sar_size
Uint32 sar_width;
Uint32 sar_height;
// vui_overscan_appropriate
Uint32 overscan_appropriate_flag;
// vui_video_signal
Uint32 video_format;
Uint32 video_full_range_flag;
Uint32 colour_primaries;
Uint32 transfer_characteristics;
Uint32 matrix_coeffs;
// vui_chroma_sample_loc
Uint32 chroma_sample_loc_type_top_field;
Uint32 chroma_sample_loc_type_bottom_field;
// vui_disp_win_left_right
Uint32 def_disp_win_left_offset;
Uint32 def_disp_win_right_offset;
// vui_disp_win_top_bot
Uint32 def_disp_win_top_offset;
Uint32 def_disp_win_bottom_offset;
Uint32 vui_hrd_parameters_present_flag;
Uint32 vui_num_units_in_tick;
Uint32 vui_time_scale;
Uint32 vui_poc_proportional_to_timing_flag;
Uint32 vui_num_ticks_poc_diff_one_minus1;
Uint32 tiles_fixed_structure_flag;
Uint32 motion_vectors_over_pic_boundaries_flag;
Uint32 restricted_ref_pic_lists_flag;
Uint32 min_spatial_segmentation_idc;
Uint32 max_bytes_per_pic_denom;
Uint32 max_bits_per_min_cu_denom;
Uint32 log2_max_mv_length_horizontal;
Uint32 log2_max_mv_length_vertical;
} vui_t;
typedef struct
{
Uint32 encodeRbspHrdInVui;
Uint32 encodeRbspHrdInVps;
Uint32 commonInfPresentFlag;
Uint32 vps_max_sub_layers_minus1; // this parameter is from VPS
Uint32 nal_hrd_parameters_present_flag;
Uint32 vcl_hrd_parameters_present_flag;
Uint32 sub_pic_hrd_params_present_flag;
Uint32 tick_divisor_minus2;
Uint32 du_cpb_removal_delay_increment_length_minus1;
Uint32 sub_pic_cpb_params_in_pic_timing_sei_flag;
Uint32 dpb_output_delay_du_length_minus1;
Uint32 bit_rate_scale;
Uint32 cpb_size_scale;
Uint32 cpb_size_du_scale;
Uint32 initial_cpb_removal_delay_length_minus1;
Uint32 au_cpb_removal_delay_length_minus1;
Uint32 dpb_output_delay_length_minus1;
Uint32 fixed_pic_rate_general_flag[MAX_VPS_MAX_SUB_LAYERS];
Uint32 fixed_pic_rate_within_cvs_flag[MAX_VPS_MAX_SUB_LAYERS];
Uint32 elemental_duration_in_tc_minus1[MAX_VPS_MAX_SUB_LAYERS];
Uint32 low_delay_hrd_flag[MAX_VPS_MAX_SUB_LAYERS];
Uint32 cpb_cnt_minus1[MAX_VPS_MAX_SUB_LAYERS];
//sub_layer_hrd_parameters(
Uint32 bit_rate_value_minus1[MAX_CPB_COUNT][MAX_VPS_MAX_SUB_LAYERS];
Uint32 cpb_size_value_minus1[MAX_CPB_COUNT][MAX_VPS_MAX_SUB_LAYERS];
Uint32 cpb_size_du_value_minus1[MAX_CPB_COUNT][MAX_VPS_MAX_SUB_LAYERS];
Uint32 bit_rate_du_value_minus1[MAX_CPB_COUNT][MAX_VPS_MAX_SUB_LAYERS];
Uint32 cbr_flag[MAX_CPB_COUNT][MAX_VPS_MAX_SUB_LAYERS];
} hrd_t;
#endif /* __HEADER_STRUCT_H__ */