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.
3190 lines
75 KiB
3190 lines
75 KiB
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
|
|
*
|
|
* 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.
|
|
*
|
|
******************************************************************************/
|
|
|
|
/**
|
|
*******************************************************************************
|
|
* @file
|
|
* ihevc_structs.h
|
|
*
|
|
* @brief
|
|
* Structure definitions used in the code
|
|
*
|
|
* @author
|
|
* Ittiam
|
|
*
|
|
* @par List of Functions:
|
|
*
|
|
* @remarks
|
|
* None
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
|
|
#ifndef _IHEVC_STRUCTS_H_
|
|
#define _IHEVC_STRUCTS_H_
|
|
|
|
|
|
/**
|
|
* Buffering Period SEI parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* specifies SPS Id active for the coded picture assosiated
|
|
* with the bp message.
|
|
*/
|
|
UWORD8 u1_bp_seq_parameter_set_id;
|
|
|
|
/**
|
|
* Derived from Hrd parameters
|
|
*/
|
|
UWORD8 u1_sub_pic_cpb_params_present_flag;
|
|
|
|
/**
|
|
* specifies the presence of the initial_alt_cpb_removal_delay[ i ]
|
|
* and initial_alt_cpb_removal_offset[ i ] syntax elements
|
|
*/
|
|
UWORD8 u1_rap_cpb_params_present_flag;
|
|
|
|
/**
|
|
* cbp removal delay used in buffering period SEI
|
|
*/
|
|
UWORD32 u4_cpb_delay_offset;
|
|
|
|
/**
|
|
* dbp removal delay used in buffering period SEI
|
|
*/
|
|
UWORD32 u4_dpb_delay_offset;
|
|
|
|
/**
|
|
* concatanation flag
|
|
*/
|
|
UWORD8 u1_concatenation_flag;
|
|
|
|
/**
|
|
* delata cbp removal delay
|
|
*/
|
|
UWORD32 u4_au_cpb_removal_delay_delta_minus1;
|
|
|
|
/**
|
|
* specify the default initial CPB removal delays, respectively,
|
|
* for the CPB when the NAL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_nal_initial_cpb_removal_delay[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the alternate initial CPB removal delays, respectively,
|
|
* for the CPB when the NAL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_nal_initial_alt_cpb_removal_delay[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the initial CPB removal delay offset, respectively,
|
|
* for the CPB when the NAL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_nal_initial_cpb_removal_delay_offset[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the alternate initial CPB removal delays offsets, respectively,
|
|
* for the CPB when the NAL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_nal_initial_alt_cpb_removal_delay_offset[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the default initial CPB removal delays, respectively,
|
|
* for the CPB when the VCL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_vcl_initial_cpb_removal_delay[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the initial alt CPB removal delays , respectively,
|
|
* for the CPB when the VCL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_vcl_initial_alt_cpb_removal_delay[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the initial CPB removal delay offset, respectively,
|
|
* for the CPB when the VCL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_vcl_initial_cpb_removal_delay_offset[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specify the alternate initial CPB removal delays offsets, respectively,
|
|
* for the CPB when the VCL HRD parameters are in use
|
|
*/
|
|
UWORD32 au4_vcl_initial_alt_cpb_removal_delay_offset[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* Inital CPB removal delay
|
|
*/
|
|
UWORD32 u4_initial_cpb_removal_delay_length;
|
|
|
|
/**
|
|
* CPB cnt for corr. sublayer
|
|
*/
|
|
UWORD32 u4_cpb_cnt;
|
|
|
|
|
|
/**
|
|
* VBV buffer size used in buffering period SEI
|
|
*/
|
|
UWORD32 u4_buffer_size_sei;
|
|
|
|
/**
|
|
* Encoder buffer fullness used in buffering period SEI
|
|
*/
|
|
UWORD32 u4_dbf_sei;
|
|
|
|
/**
|
|
* target bitrate used in buffering period SEI
|
|
*/
|
|
UWORD32 u4_target_bit_rate_sei;
|
|
|
|
}buf_period_sei_params_t;
|
|
|
|
|
|
/**
|
|
* Picture Timing SEI parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* derived from vui parameters
|
|
*/
|
|
UWORD8 u1_frame_field_info_present_flag;
|
|
|
|
/**
|
|
* indicates whether a picture should be displayed as a
|
|
* frame or as one or more fields
|
|
*/
|
|
UWORD32 u4_pic_struct;
|
|
|
|
UWORD32 u4_source_scan_type;
|
|
|
|
/**
|
|
* if 1, indicates if the current pic is a duplicte pic in output order
|
|
*/
|
|
UWORD8 u1_duplicate_flag;
|
|
|
|
/**
|
|
* specifies the number clock ticks between the nominal CPB removal time
|
|
* au associated with the pt SEI message and
|
|
* the preceding au in decoding order that contained a bp SEI message
|
|
*/
|
|
UWORD32 u4_au_cpb_removal_delay_minus1;
|
|
|
|
/**
|
|
* compute the DPB output time of the picture
|
|
*/
|
|
UWORD32 u4_pic_dpb_output_delay;
|
|
|
|
UWORD32 u4_pic_dpb_output_du_delay;
|
|
|
|
/**
|
|
* specifies the number of decoding units in the access unit
|
|
* the picture timing SEI message is associated with
|
|
*/
|
|
UWORD32 u4_num_decoding_units_minus1;
|
|
|
|
/**
|
|
* if 1 specifies that the du_common_cpb_removal_delay_increment_minus1 is present
|
|
*/
|
|
UWORD8 u1_du_common_cpb_removal_delay_flag;
|
|
|
|
/**
|
|
* specifies the duration, in units of clock sub-ticks,
|
|
* between the nominal CPB removal times of any two consecutive decoding units
|
|
* in decoding order in the access unit associated with the pt_SEI message
|
|
*/
|
|
UWORD32 u4_du_common_cpb_removal_delay_increment_minus1; //same as u4_du_cpb_removal_delay_increment_minus1
|
|
|
|
/**
|
|
* specifies the number of NAL units in the decoding unit of the access unit
|
|
* the picture timing SEI message is associated with.
|
|
* range from 0 to (pic size in ctby - 1)
|
|
*/
|
|
UWORD32 au4_num_nalus_in_du_minus1[4320 / MIN_CTB_SIZE];
|
|
|
|
/**
|
|
* specifies the duration, in units of clock sub-ticks,
|
|
* between the nominal CPB removal times of the ( i + 1 )-th decoding unit and the i-th decoding unit,
|
|
* in decoding order, in the access unit associated with the pt_SEI message
|
|
*/
|
|
UWORD32 au4_du_cpb_removal_delay_increment_minus1[4320 / MIN_CTB_SIZE];
|
|
|
|
}pic_timing_sei_params_t;
|
|
|
|
/**
|
|
* Structure to hold Recovery point SEI parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* specifies the recovery point of output pictures in output order
|
|
*/
|
|
WORD32 i4_recovery_poc_cnt;
|
|
|
|
UWORD8 u1_exact_match_flag;
|
|
|
|
/**
|
|
* indicates the presence or absence of a broken link in the NAL unit
|
|
* stream at the location of the recovery point SEI message
|
|
*/
|
|
|
|
UWORD8 u1_broken_link_flag;
|
|
|
|
}recovery_point_sei_params_t;
|
|
|
|
/**
|
|
* Structure to hold Mastering Display Colour Volume SEI
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Array to store the display_primaries_x values
|
|
*/
|
|
UWORD16 au2_display_primaries_x[3];
|
|
|
|
/**
|
|
* Array to store the display_primaries_y values
|
|
*/
|
|
UWORD16 au2_display_primaries_y[3];
|
|
|
|
/**
|
|
* Variable to store the white point x value
|
|
*/
|
|
UWORD16 u2_white_point_x;
|
|
|
|
/**
|
|
* Variable to store the white point y value
|
|
*/
|
|
UWORD16 u2_white_point_y;
|
|
|
|
/**
|
|
* Variable to store the max display mastering luminance value
|
|
*/
|
|
UWORD32 u4_max_display_mastering_luminance;
|
|
|
|
/**
|
|
* Variable to store the min display mastering luminance value
|
|
*/
|
|
UWORD32 u4_min_display_mastering_luminance;
|
|
|
|
}mastering_dis_col_vol_sei_params_t;
|
|
|
|
/**
|
|
* Structure to hold active parameter parameter set SEI parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/*
|
|
* active vps id
|
|
*/
|
|
|
|
UWORD8 u1_active_video_parameter_set_id;
|
|
|
|
/*
|
|
* default set to zero.
|
|
*/
|
|
UWORD8 u1_self_contained_cvs_flag;
|
|
|
|
UWORD8 u1_no_parameter_set_update_flag;
|
|
|
|
UWORD8 u1_num_sps_ids_minus1;
|
|
|
|
/*
|
|
* active sps id
|
|
*/
|
|
UWORD8 au1_active_seq_parameter_set_id[15];
|
|
|
|
UWORD32 au4_layer_sps_idx[64];
|
|
|
|
}active_parameter_set_sei_param_t;
|
|
|
|
/**
|
|
* Structure to hold SEI Hash values
|
|
*/
|
|
typedef struct
|
|
{
|
|
/*
|
|
* SEI Hash values for each color component
|
|
*/
|
|
UWORD8 au1_sei_hash[3][16];
|
|
|
|
}hash_sei_param_t;
|
|
|
|
/**
|
|
* Structure to hold user data registered SEI param Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Contains country code by Annex A of Recommendation ITU-T T.35
|
|
*/
|
|
UWORD8 u1_itu_t_t35_country_code;
|
|
|
|
/**
|
|
* Contains country code by Annex B of Recommendation ITU-T T.35
|
|
*/
|
|
UWORD8 u1_itu_t_t35_country_code_extension_byte;
|
|
|
|
/**
|
|
* Contains data registered as specified in Recommendation ITU-T T.35
|
|
*/
|
|
UWORD8 u1_itu_t_t35_payload_byte[MAX_USERDATA_PAYLOAD];
|
|
|
|
/**
|
|
* Valid payload size present in this buffer
|
|
*/
|
|
WORD32 i4_valid_payload_size;
|
|
|
|
/**
|
|
* Total payload size incase payloadSize > IHEVCD_MAX_USERDATA_PAYLOAD
|
|
*/
|
|
WORD32 i4_payload_size;
|
|
}user_data_registered_itu_t_t35_t;
|
|
|
|
/**
|
|
* Structure to hold time code SEI param info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Number of sets of clock timestamp syntax elements present for the current picture
|
|
*/
|
|
UWORD8 u1_num_clock_ts;
|
|
|
|
/**
|
|
* Indicates presenc of associated set of clock timestamps
|
|
*/
|
|
UWORD8 au1_clock_timestamp_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Used in calculating clockTimestamp[i]
|
|
*/
|
|
UWORD8 au1_units_field_based_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the method of dropping values of the n_frames[i] syntax element
|
|
*/
|
|
UWORD8 au1_counting_type[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies that the n_frames[i] syntax element is followed by seconds_value[i],
|
|
* minutes_value[i] and hours_value[i]
|
|
*/
|
|
UWORD8 au1_full_timestamp_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Indicates the discontinuity in clockTimestamp
|
|
*/
|
|
UWORD8 au1_discontinuity_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the skipping of one or more values of n_frames[i]
|
|
*/
|
|
UWORD8 au1_cnt_dropped_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the value of nFrames used to compute clockTimestamp[i]
|
|
*/
|
|
UWORD16 au2_n_frames[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the presence of seconds_value[i] and minutes_flag[i]
|
|
*/
|
|
UWORD8 au1_seconds_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the presence of minutes_value[i] and hours_flag[i]
|
|
*/
|
|
UWORD8 au1_minutes_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the presence of hours_value[i]
|
|
*/
|
|
UWORD8 au1_hours_flag[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the value of sS used to compute clockTimestamp[i]
|
|
*/
|
|
UWORD8 au1_seconds_value[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the value of mM used to compute clockTimestamp[i]
|
|
*/
|
|
UWORD8 au1_minutes_value[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the value of hH used to compute clockTimestamp[i]
|
|
*/
|
|
UWORD8 au1_hours_value[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* Specifies the length in bits of the time_offset_value[i]
|
|
*/
|
|
UWORD8 au1_time_offset_length[MAX_NUM_CLOCK_TS];
|
|
|
|
/**
|
|
* pecifies the value of tOffset used to compute clockTimestamp[i]
|
|
*/
|
|
UWORD8 au1_time_offset_value[MAX_NUM_CLOCK_TS];
|
|
|
|
}time_code_t;
|
|
|
|
/**
|
|
* @brief Structure for Content Light Level Info
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* 16bit unsigned number which indicates the maximum pixel intensity of all samples in bit-stream in units of 1 candela per square metre
|
|
*/
|
|
UWORD16 u2_sei_max_cll;
|
|
|
|
/**
|
|
* 16bit unsigned number which indicates the average pixel intensity of all samples in bit-stream in units of 1 candela per square metre
|
|
*/
|
|
UWORD16 u2_sei_avg_cll;
|
|
|
|
}content_light_level_info_sei_params_t;
|
|
|
|
|
|
/**
|
|
* Structure to hold SEI parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
|
|
WORD8 i1_sei_parameters_present_flag;
|
|
|
|
WORD8 i1_aud_present_flag;
|
|
|
|
WORD8 i1_buf_period_params_present_flag;
|
|
|
|
WORD8 i1_pic_timing_params_present_flag;
|
|
|
|
WORD8 i1_recovery_point_params_present_flag;
|
|
|
|
WORD8 i1_active_parameter_set;
|
|
|
|
WORD8 i4_sei_mastering_disp_colour_vol_params_present_flags;
|
|
|
|
WORD8 i1_sei_cll_enable;
|
|
|
|
/* Enable/Disable SEI Hash on the Decoded picture & Hash type */
|
|
/* < 3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable > */
|
|
/* Other values are not supported */
|
|
WORD8 i1_decoded_pic_hash_sei_flag;
|
|
|
|
/* number of user data e.g. CC data, BAR data, AFD data etc */
|
|
WORD32 i4_sei_user_data_cnt;
|
|
|
|
WORD8 i1_user_data_registered_present_flag;
|
|
|
|
WORD8 i1_time_code_present_flag;
|
|
|
|
buf_period_sei_params_t s_buf_period_sei_params;
|
|
|
|
pic_timing_sei_params_t s_pic_timing_sei_params;
|
|
|
|
recovery_point_sei_params_t s_recovery_point_params;
|
|
|
|
active_parameter_set_sei_param_t s_active_parameter_set_sei_params;
|
|
|
|
hash_sei_param_t s_hash_sei_params;
|
|
|
|
content_light_level_info_sei_params_t s_cll_info_sei_params;
|
|
|
|
mastering_dis_col_vol_sei_params_t s_mastering_dis_col_vol_sei_params;
|
|
|
|
user_data_registered_itu_t_t35_t as_user_data_registered_itu_t_t35[USER_DATA_MAX];
|
|
|
|
time_code_t s_time_code;
|
|
} sei_params_t;
|
|
|
|
|
|
/**
|
|
* Sub-layer HRD parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* (together with bit_rate_scale) specifies the
|
|
* maximum input bit rate for the i-th CPB
|
|
*/
|
|
UWORD32 au4_bit_rate_value_minus1[MAX_CPB_CNT];
|
|
/**
|
|
* together with cpb_size_scale to specify the
|
|
* CPB size when the CPB operates at the access unit level.
|
|
*/
|
|
UWORD32 au4_cpb_size_value_minus1[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* together with cpb_size_du_scale to specify the CPB size
|
|
* when the CPB operates at sub-picture level
|
|
*/
|
|
UWORD32 au4_cpb_size_du_value_minus1[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* specifies the maximum input bit rate for the i-th CPB when the CPB
|
|
* operates at the sub-picture level. bit_rate_du_value_minus1[ i ]
|
|
* shall be in the range of 0 to 2^32 - 2
|
|
*/
|
|
UWORD32 au4_bit_rate_du_value_minus1[MAX_CPB_CNT];
|
|
|
|
/**
|
|
* if 1, specifies that the HSS operates in a constant bit rate (CBR) mode
|
|
* if 0, specifies that the HSS operates in a intermittent bit rate (CBR) mode
|
|
*/
|
|
UWORD8 au1_cbr_flag[32];
|
|
|
|
}sub_lyr_hrd_params_t;
|
|
|
|
/**
|
|
* HRD parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Indicates the presence of the
|
|
* num_units_in_ticks, time_scale flag
|
|
*/
|
|
UWORD8 u1_timing_info_present_flag;
|
|
|
|
/**
|
|
* Number of units that
|
|
* correspond to one increment of the
|
|
* clock. Indicates the resolution
|
|
*/
|
|
UWORD32 u4_num_units_in_tick;
|
|
|
|
/**
|
|
* The number of time units that pass in one second
|
|
*/
|
|
UWORD32 u4_time_scale;
|
|
|
|
/**
|
|
* Nal- hrd parameters flag
|
|
*/
|
|
UWORD8 u1_nal_hrd_parameters_present_flag;
|
|
|
|
/**
|
|
* VCL- hrd parameters flag
|
|
*/
|
|
UWORD8 u1_vcl_hrd_parameters_present_flag;
|
|
|
|
/**
|
|
* Indicates the presence of NAL-HRD params or VCL_HRD params
|
|
* in the bitstream
|
|
*/
|
|
UWORD8 u1_cpbdpb_delays_present_flag;
|
|
|
|
/**
|
|
* specifies that sub-picture level CPB removal delay parameters are
|
|
* present in picture timing SEI messages
|
|
*/
|
|
UWORD8 u1_sub_pic_cpb_params_present_flag;
|
|
|
|
/**
|
|
* specify the clock sub-tick
|
|
* (the minimum interval of time that can be represented in the coded data when sub_pic_cpb_params_present_flag is equal to 1)
|
|
*/
|
|
UWORD8 u1_tick_divisor_minus2;
|
|
|
|
/**
|
|
* specifies the length, in bits for the du cpb delay syntax in pt_sei
|
|
*/
|
|
UWORD8 u1_du_cpb_removal_delay_increment_length_minus1;
|
|
|
|
/**
|
|
* Indicates presence of sub_pic_cpb_params in pic timing sei
|
|
*/
|
|
UWORD8 u1_sub_pic_cpb_params_in_pic_timing_sei_flag;
|
|
|
|
/**
|
|
* specifies the length, in bits, of the pic_dpb_output_du_delay syntax
|
|
* element in the picture timing SEI message and the
|
|
* pic_spt_dpb_output_du_delay syntax element in the decoding unit
|
|
* information SEI message
|
|
*/
|
|
UWORD8 u1_dpb_output_delay_du_length_minus1;
|
|
|
|
/**
|
|
* (together with bit_rate_value_minus1) specifies the
|
|
* maximum input bit rate of the i-th CPB
|
|
*/
|
|
UWORD32 u4_bit_rate_scale;
|
|
|
|
/**
|
|
* (together with cpb_size_du_value_minus1) specfies
|
|
* CPB size of the i-th CPB when the CPB operates
|
|
* at the access unit level
|
|
*/
|
|
UWORD32 u4_cpb_size_scale;
|
|
|
|
/**
|
|
* (together with cpb_size_du_value_minus1) specfies
|
|
* CPB size of the i-th CPB when the CPB operates
|
|
* at the sub-picture level
|
|
*/
|
|
UWORD32 u4_cpb_size_du_scale;
|
|
|
|
|
|
/**
|
|
* specifies the length, in bits for initial cpb delay (nal/vcl)sysntax in bp sei
|
|
*/
|
|
UWORD8 u1_initial_cpb_removal_delay_length_minus1;
|
|
|
|
/**
|
|
* specifies the length, in bits for the au cpb delay syntax in pt_sei
|
|
*/
|
|
UWORD8 u1_au_cpb_removal_delay_length_minus1;
|
|
|
|
/**
|
|
* specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message
|
|
*/
|
|
UWORD8 u1_dpb_output_delay_length_minus1;
|
|
|
|
/**
|
|
* if 1, , for the highest temporal sub-layers, the temporal distance between the HRD output times
|
|
* of consecutive pictures in output order is constrained refer to Table E-6
|
|
*/
|
|
UWORD8 au1_fixed_pic_rate_general_flag[VPS_MAX_SUB_LAYERS];
|
|
|
|
UWORD8 au1_fixed_pic_rate_within_cvs_flag[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* if 1, , for the highest temporal sub-layers, the temporal distance (in clock ticks) between the
|
|
* element units that specify HRD output times of consecutive pictures in output order is constrained
|
|
* refer to Table E-6
|
|
*/
|
|
UWORD16 au2_elemental_duration_in_tc_minus1[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* specifies the HRD operational mode
|
|
*/
|
|
UWORD8 au1_low_delay_hrd_flag[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* 1 specifies the number of alternative CPB specifications in the
|
|
* bitstream of the cvs when HighestTid is equal to i
|
|
*/
|
|
UWORD8 au1_cpb_cnt_minus1[VPS_MAX_SUB_LAYERS];
|
|
|
|
|
|
/**
|
|
* VUI level Sub-layer HRD parameters
|
|
*/
|
|
sub_lyr_hrd_params_t as_sub_layer_hrd_params[VPS_MAX_SUB_LAYERS];
|
|
|
|
}hrd_params_t;
|
|
|
|
/**
|
|
* Structure to hold VUI parameters Info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* indicates the presence of aspect_ratio
|
|
*/
|
|
UWORD8 u1_aspect_ratio_info_present_flag;
|
|
|
|
/**
|
|
* specifies the aspect ratio of the luma samples
|
|
*/
|
|
UWORD8 u1_aspect_ratio_idc;
|
|
|
|
/**
|
|
* width of the luma samples. user dependent
|
|
*/
|
|
UWORD16 u2_sar_width;
|
|
|
|
/**
|
|
* hieght of the luma samples. user dependent
|
|
*/
|
|
UWORD16 u2_sar_height;
|
|
|
|
/**
|
|
* if 1, specifies that the overscan_appropriate_flag is present
|
|
* if 0, the preferred display method for the video signal is unspecified
|
|
*/
|
|
UWORD8 u1_overscan_info_present_flag;
|
|
|
|
/**
|
|
* if 1,indicates that the cropped decoded pictures output
|
|
* are suitable for display using overscan
|
|
*/
|
|
UWORD8 u1_overscan_appropriate_flag;
|
|
|
|
/**
|
|
* if 1 specifies that video_format, video_full_range_flag and
|
|
* colour_description_present_flag are present
|
|
*/
|
|
UWORD8 u1_video_signal_type_present_flag;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UWORD8 u1_video_format;
|
|
|
|
/**
|
|
* indicates the black level and range of the luma and chroma signals
|
|
*/
|
|
UWORD8 u1_video_full_range_flag;
|
|
|
|
/**
|
|
* if 1,to 1 specifies that colour_primaries, transfer_characteristics
|
|
* and matrix_coefficients are present
|
|
*/
|
|
UWORD8 u1_colour_description_present_flag;
|
|
|
|
/**
|
|
* indicates the chromaticity coordinates of the source primaries
|
|
*/
|
|
UWORD8 u1_colour_primaries;
|
|
|
|
/**
|
|
* indicates the opto-electronic transfer characteristic of the source picture
|
|
*/
|
|
UWORD8 u1_transfer_characteristics;
|
|
|
|
/**
|
|
* the matrix coefficients used in deriving luma and chroma signals
|
|
* from the green, blue, and red primaries
|
|
*/
|
|
UWORD8 u1_matrix_coefficients;
|
|
|
|
/**
|
|
* if 1, specifies that chroma_sample_loc_type_top_field and
|
|
* chroma_sample_loc_type_bottom_field are present
|
|
*/
|
|
UWORD8 u1_chroma_loc_info_present_flag;
|
|
|
|
/**
|
|
* location of chroma samples
|
|
*/
|
|
UWORD8 u1_chroma_sample_loc_type_top_field;
|
|
|
|
UWORD8 u1_chroma_sample_loc_type_bottom_field;
|
|
|
|
/**
|
|
* if 1, indicates that the value of all decoded chroma samples is
|
|
* equal to 1 << ( BitDepthC - 1 )
|
|
*/
|
|
UWORD8 u1_neutral_chroma_indication_flag;
|
|
|
|
/**
|
|
* 1 indicates that the coded video sequence conveys pictures that represent fields
|
|
* 0 indicates the pictures that represents field
|
|
*/
|
|
UWORD8 u1_field_seq_flag;
|
|
|
|
/**
|
|
* specifies that picture timing SEI messages are present for every picture
|
|
*/
|
|
UWORD8 u1_frame_field_info_present_flag;
|
|
|
|
/**
|
|
* 1 indicates that the default display window parameters follow next in the VUI
|
|
*/
|
|
UWORD8 u1_default_display_window_flag;
|
|
|
|
/**
|
|
* specify the samples of the pictures in the coded video sequence
|
|
* that are within the default display window,
|
|
* in terms of a rectangular region specified in picture coordinates for display
|
|
*/
|
|
UWORD32 u4_def_disp_win_left_offset;
|
|
|
|
UWORD32 u4_def_disp_win_right_offset;
|
|
|
|
UWORD32 u4_def_disp_win_top_offset;
|
|
|
|
UWORD32 u4_def_disp_win_bottom_offset;
|
|
|
|
/**
|
|
* to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue
|
|
*/
|
|
UWORD8 u1_vui_hrd_parameters_present_flag;
|
|
|
|
/**
|
|
* VUI level HRD parameters
|
|
*/
|
|
hrd_params_t s_vui_hrd_parameters;
|
|
|
|
/**
|
|
* Indicates the presence of the
|
|
* num_units_in_ticks, time_scale flag
|
|
*/
|
|
UWORD8 u1_vui_timing_info_present_flag;
|
|
|
|
/**
|
|
* Number of units that
|
|
* correspond to one increment of the
|
|
* clock. Indicates the resolution
|
|
*/
|
|
UWORD32 u4_vui_num_units_in_tick;
|
|
|
|
/**
|
|
* The number of time units that pass in one second
|
|
*/
|
|
UWORD32 u4_vui_time_scale;
|
|
/**
|
|
* if 1, indicates that the POC for each picture in the coded video sequence (cvs) (not the first picture), in decoding order,
|
|
* is proportional to the output time of the picture relative to that of the first picture in the cvs
|
|
*/
|
|
UWORD8 u1_poc_proportional_to_timing_flag;
|
|
|
|
/**
|
|
* num_ticks_poc_diff_one_minus1 plus 1 specifies the number of clock ticks
|
|
* corresponding to a difference of poc values equal to 1
|
|
*/
|
|
UWORD32 u4_num_ticks_poc_diff_one_minus1;
|
|
|
|
/**
|
|
* 1, specifies that the following cvs bitstream restriction parameters are present
|
|
*/
|
|
UWORD8 u1_bitstream_restriction_flag;
|
|
|
|
/**
|
|
* if 1, indicates that each pps that is active in the cvs has
|
|
* the same value of the tile syntax elements
|
|
*/
|
|
UWORD8 u1_tiles_fixed_structure_flag;
|
|
|
|
/**
|
|
* if 0, indicates that no pel outside the pic boundaries and
|
|
* no sub-pels derived using pels outside the pic boundaries is used for inter prediction
|
|
*/
|
|
UWORD8 u1_motion_vectors_over_pic_boundaries_flag;
|
|
|
|
/**
|
|
* if 1, indicates
|
|
* all P/B slices belonging to the same pic have an identical refpic list0,
|
|
* all B slices that belong to the same picture have an identical refpic list1.
|
|
*/
|
|
UWORD8 u1_restricted_ref_pic_lists_flag;
|
|
|
|
/**
|
|
* min_spatial_segmentation_idc, when not equal to 0, establishes a bound on the maximum possible size of distinct
|
|
* coded spatial segmentation regions in the pictures of the CVS. When min_spatial_segmentation_idc is not present, it is
|
|
* inferred to be equal to 0. The value of min_spatial_segmentation_idc shall be in the range of 0 to 4095, inclusive.
|
|
*
|
|
* can be used by a decoder to calculate the maximum number of luma samples to be processed by one processing thread
|
|
*
|
|
* If tiles=0 and entropy_sync=0 then
|
|
* no slice shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
|
|
*
|
|
* If tiles=1 and entropy_sync=0 then
|
|
* no tile shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
|
|
*
|
|
* If tiles=0 and entropy_sync=1 then
|
|
* ( 2 * pic_height_in_luma_samples + pic_width_in_luma_samples ) * CtbSizeY
|
|
* <= ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4
|
|
*/
|
|
UWORD32 u4_min_spatial_segmentation_idc;
|
|
/**
|
|
* Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
|
|
* associated with any coded picture
|
|
*/
|
|
UWORD8 u1_max_bytes_per_pic_denom;
|
|
|
|
/**
|
|
* Indicates an upper bound for the number of bits of coding_unit() data
|
|
*/
|
|
UWORD8 u1_max_bits_per_mincu_denom;
|
|
|
|
/**
|
|
* Indicate the maximum absolute value of a decoded horizontal MV component
|
|
* in quarter-pel luma units
|
|
*/
|
|
UWORD8 u1_log2_max_mv_length_horizontal;
|
|
|
|
/**
|
|
* Indicate the maximum absolute value of a decoded vertical MV component
|
|
* in quarter-pel luma units
|
|
*/
|
|
UWORD8 u1_log2_max_mv_length_vertical;
|
|
}vui_t;
|
|
|
|
/**
|
|
* Picture buffer
|
|
*/
|
|
typedef struct
|
|
{
|
|
UWORD8 *pu1_luma;
|
|
UWORD8 *pu1_chroma;
|
|
|
|
WORD32 i4_abs_poc;
|
|
WORD32 i4_poc_lsb;
|
|
/** Used to store display Timestamp for current buffer */
|
|
WORD32 u4_ts;
|
|
UWORD8 u1_used_as_ref;
|
|
|
|
/** Used to idicate if this buffer needed for output */
|
|
UWORD8 u1_pic_output_flag;
|
|
|
|
UWORD8 u1_free_delay_cnt;
|
|
|
|
/**
|
|
* buffer ID from buffer manager
|
|
*/
|
|
UWORD8 u1_buf_id;
|
|
|
|
|
|
// See IV_FLD_TYPE_T for all field types
|
|
UWORD32 e4_fld_type;
|
|
|
|
sei_params_t s_sei_params;
|
|
|
|
WORD32 i4_vui_present;
|
|
|
|
vui_t s_vui;
|
|
|
|
}pic_buf_t;
|
|
|
|
|
|
/**
|
|
* Reference List
|
|
*/
|
|
typedef struct
|
|
{
|
|
void *pv_pic_buf;
|
|
|
|
void *pv_mv_buf;
|
|
|
|
UWORD8 u1_used_as_ref;
|
|
|
|
}ref_list_t;
|
|
|
|
|
|
/**
|
|
* SAO
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* sao_type_idx_luma
|
|
*/
|
|
UWORD32 b3_y_type_idx : 3;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[1]
|
|
*/
|
|
WORD32 b4_y_offset_1 : 4;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[2]
|
|
*/
|
|
WORD32 b4_y_offset_2 : 4;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[3]
|
|
*/
|
|
WORD32 b4_y_offset_3 : 4;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[4]
|
|
*/
|
|
WORD32 b4_y_offset_4 : 4;
|
|
|
|
/**
|
|
* luma sao_band_position
|
|
*/
|
|
UWORD32 b5_y_band_pos : 5;
|
|
|
|
WORD32 : 0;
|
|
|
|
/**
|
|
* sao_type_idx_chroma
|
|
*/
|
|
UWORD32 b3_cb_type_idx : 3;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[1]
|
|
*/
|
|
WORD32 b4_cb_offset_1 : 4;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[2]
|
|
*/
|
|
WORD32 b4_cb_offset_2 : 4;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[3]
|
|
*/
|
|
WORD32 b4_cb_offset_3 : 4;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[4]
|
|
*/
|
|
WORD32 b4_cb_offset_4 : 4;
|
|
|
|
/**
|
|
* cb sao_band_position
|
|
*/
|
|
UWORD32 b5_cb_band_pos : 5;
|
|
|
|
WORD32 : 0;
|
|
|
|
/**
|
|
* sao_type_idx_chroma
|
|
*/
|
|
UWORD32 b3_cr_type_idx : 3;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[1]
|
|
*/
|
|
WORD32 b4_cr_offset_1 : 4;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[2]
|
|
*/
|
|
WORD32 b4_cr_offset_2 : 4;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[3]
|
|
*/
|
|
WORD32 b4_cr_offset_3 : 4;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[4]
|
|
*/
|
|
WORD32 b4_cr_offset_4 : 4;
|
|
|
|
/**
|
|
* cr sao_band_position
|
|
*/
|
|
UWORD32 b5_cr_band_pos : 5;
|
|
|
|
WORD32 : 0;
|
|
|
|
}sao_t;
|
|
|
|
/**
|
|
* SAO
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* sao_type_idx_luma
|
|
*/
|
|
UWORD32 b3_y_type_idx : 3;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[1]
|
|
*/
|
|
WORD32 b8_y_offset_1 : 8;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[2]
|
|
*/
|
|
WORD32 b8_y_offset_2 : 8;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[3]
|
|
*/
|
|
WORD32 b8_y_offset_3 : 8;
|
|
|
|
/**
|
|
* luma SaoOffsetVal[4]
|
|
*/
|
|
WORD32 b8_y_offset_4 : 8;
|
|
|
|
/**
|
|
* luma sao_band_position
|
|
*/
|
|
UWORD32 b5_y_band_pos : 5;
|
|
|
|
WORD32 : 0;
|
|
|
|
/**
|
|
* sao_type_idx_chroma
|
|
*/
|
|
UWORD32 b3_cb_type_idx : 3;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[1]
|
|
*/
|
|
WORD32 b8_cb_offset_1 : 8;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[2]
|
|
*/
|
|
WORD32 b8_cb_offset_2 : 8;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[3]
|
|
*/
|
|
WORD32 b8_cb_offset_3 : 8;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[4]
|
|
*/
|
|
WORD32 b8_cb_offset_4 : 8;
|
|
|
|
/**
|
|
* cb sao_band_position
|
|
*/
|
|
UWORD32 b5_cb_band_pos : 5;
|
|
|
|
WORD32 : 0;
|
|
|
|
/**
|
|
* sao_type_idx_chroma
|
|
*/
|
|
UWORD32 b3_cr_type_idx : 3;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[1]
|
|
*/
|
|
WORD32 b8_cr_offset_1 : 8;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[2]
|
|
*/
|
|
WORD32 b8_cr_offset_2 : 8;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[3]
|
|
*/
|
|
WORD32 b8_cr_offset_3 : 8;
|
|
|
|
/**
|
|
* chroma SaoOffsetVal[4]
|
|
*/
|
|
WORD32 b8_cr_offset_4 : 8;
|
|
|
|
/**
|
|
* cr sao_band_position
|
|
*/
|
|
UWORD32 b5_cr_band_pos : 5;
|
|
|
|
WORD32 : 0;
|
|
|
|
}sao_10bd_t;
|
|
|
|
/**
|
|
* Motion vector
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Horizontal Motion Vector
|
|
*/
|
|
WORD16 i2_mvx;
|
|
|
|
/**
|
|
* Vertical Motion Vector
|
|
*/
|
|
WORD16 i2_mvy;
|
|
}mv_t;
|
|
|
|
/*****************************************************************************/
|
|
/* Following results in packed 48 bit structure. If mv_t included */
|
|
/* ref_pic_buf_id, then 8 bits will be wasted for each mv for aligning. */
|
|
/* Also using mv_t as elements directly instead of a pointer to l0 and l1 */
|
|
/* mvs. Since pointer takes 4 bytes and MV itself is 4 bytes. It does not */
|
|
/* really help using pointers. */
|
|
/*****************************************************************************/
|
|
|
|
/**
|
|
* PU Motion Vector info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* L0 Motion Vector
|
|
*/
|
|
mv_t s_l0_mv;
|
|
|
|
/**
|
|
* L1 Motion Vector
|
|
*/
|
|
mv_t s_l1_mv;
|
|
|
|
/**
|
|
* L0 Ref index
|
|
*/
|
|
WORD8 i1_l0_ref_idx;
|
|
|
|
/**
|
|
* L1 Ref index
|
|
*/
|
|
WORD8 i1_l1_ref_idx;
|
|
|
|
/**
|
|
* L0 Ref Pic Buf ID
|
|
*/
|
|
WORD8 i1_l0_ref_pic_buf_id;
|
|
|
|
/**
|
|
* L1 Ref Pic Buf ID
|
|
*/
|
|
WORD8 i1_l1_ref_pic_buf_id;
|
|
|
|
}pu_mv_t;
|
|
|
|
/**
|
|
* PU information
|
|
*/
|
|
typedef struct
|
|
{
|
|
|
|
/**
|
|
* PU motion vectors
|
|
*/
|
|
pu_mv_t mv;
|
|
|
|
/**
|
|
* PU X position in terms of min PU (4x4) units
|
|
*/
|
|
UWORD32 b4_pos_x : 4;
|
|
|
|
/**
|
|
* PU Y position in terms of min PU (4x4) units
|
|
*/
|
|
UWORD32 b4_pos_y : 4;
|
|
|
|
/**
|
|
* PU width in pixels = (b4_wd + 1) << 2
|
|
*/
|
|
UWORD32 b4_wd : 4;
|
|
|
|
/**
|
|
* PU height in pixels = (b4_ht + 1) << 2
|
|
*/
|
|
UWORD32 b4_ht : 4;
|
|
|
|
/**
|
|
* Intra or Inter flag for each partition - 0 or 1
|
|
*/
|
|
UWORD32 b1_intra_flag : 1;
|
|
|
|
|
|
/**
|
|
* PRED_L0, PRED_L1, PRED_BI - Initialized in parsing only for MVP case
|
|
*/
|
|
UWORD32 b2_pred_mode : 2;
|
|
|
|
|
|
/**
|
|
* Merge flag for each partition - 0 or 1
|
|
*/
|
|
UWORD32 b1_merge_flag : 1;
|
|
|
|
/**
|
|
* Merge index for each partition - 0 to 4
|
|
*/
|
|
UWORD32 b3_merge_idx : 3;
|
|
|
|
/*************************************************************************/
|
|
/* Following two flags can be overloaded with b3_merge_idx if there */
|
|
/* is need for additional bits */
|
|
/*************************************************************************/
|
|
|
|
/**
|
|
* If merge is zero, following gives presence of mvd for L0 MV
|
|
*/
|
|
UWORD32 b1_l0_mvp_idx : 1;
|
|
|
|
/**
|
|
* If merge is zero, following gives presence of mvd for L1 MV
|
|
*/
|
|
UWORD32 b1_l1_mvp_idx : 1;
|
|
|
|
/**
|
|
* Partition mode - Needed during MV merge stage
|
|
* Note: Part mode can be derived using pu_wd, pu_ht and minCB size
|
|
* If there is a need for bits, the following can be removed at the cost
|
|
* of more control code in MV Merge
|
|
*/
|
|
UWORD32 b3_part_mode : 3;
|
|
|
|
/**
|
|
* Partition index - Needed during MV merge stage
|
|
*/
|
|
UWORD32 b2_part_idx : 2;
|
|
|
|
}pu_t;
|
|
|
|
/**
|
|
* TU information
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* TU X position in terms of min TU (4x4) units
|
|
*/
|
|
UWORD32 b4_pos_x : 4;
|
|
|
|
/**
|
|
* TU Y position in terms of min TU (4x4) units
|
|
*/
|
|
UWORD32 b4_pos_y : 4;
|
|
|
|
/*************************************************************************/
|
|
/* Luma TU size (width or height) = 1 << (b3_size + 2) */
|
|
/* i.e. 0 : 4, 1 : 8, 2: 16, 3: 32, 4: 64 */
|
|
/* Note: Though 64 x 64 TU is not possible, this size is supported to */
|
|
/* signal SKIP CUs or PCM CUs etc where transform is not called */
|
|
/* Chroma width will be half of luma except for 4x4 luma */
|
|
/*************************************************************************/
|
|
/**
|
|
* Luma TU size (width or height)
|
|
*/
|
|
UWORD32 b3_size : 3; //To be changed.
|
|
|
|
/*************************************************************************/
|
|
/* Chroma present : For 4x4 Luma TUs only the fourth one contains Cb */
|
|
/* Cr info. For the first three TUs in 8x8 (for 4x4 luma) this will */
|
|
/* be zero. For all the other cases this will be 1 */
|
|
/*************************************************************************/
|
|
/**
|
|
* 4x4 Luma TUs only the fourth one contains cb,cr
|
|
* TODO: Check if this is really needed, cb_cbf and cr_cbf should be enough
|
|
*/
|
|
|
|
/**
|
|
* Y CBF
|
|
*/
|
|
UWORD32 b1_y_cbf : 1;
|
|
|
|
/**
|
|
* Cb CBF
|
|
*/
|
|
UWORD32 b1_cb_cbf : 1;
|
|
|
|
#ifdef ENABLE_MAIN_REXT_PROFILE
|
|
UWORD32 b1_cb_cbf_subtu1 : 1;
|
|
#endif
|
|
|
|
/**
|
|
* Cr CBF
|
|
*/
|
|
UWORD32 b1_cr_cbf : 1;
|
|
|
|
#ifdef ENABLE_MAIN_REXT_PROFILE
|
|
UWORD32 b1_cr_cbf_subtu1 : 1;
|
|
#endif
|
|
|
|
/**
|
|
* Flag to indicate if it is the first TU in a CU
|
|
*/
|
|
UWORD32 b1_first_tu_in_cu : 1;
|
|
|
|
/**
|
|
* Transform quant bypass flag
|
|
*/
|
|
UWORD32 b1_transquant_bypass : 1;
|
|
|
|
/**
|
|
* Y Qp
|
|
*/
|
|
//UWORD32 b6_qp : 6; // BUG_FIX related to nighbour QP's in case of negative QP for HBD.
|
|
WORD32 b7_qp : 7;
|
|
|
|
|
|
/**
|
|
* Luma Intra Mode 0 - 34
|
|
*/
|
|
UWORD32 b6_luma_intra_mode : 6;
|
|
|
|
/*************************************************************************/
|
|
/* Chroma Intra Mode Index 0 - 4: Actual mode (0, 1, 10, 26, 34, X) to be*/
|
|
/* derived using luma_intra_mode and the following */
|
|
/*************************************************************************/
|
|
/**
|
|
* Chroma Intra Mode Index 0 - 4
|
|
*/
|
|
UWORD32 b3_chroma_intra_mode_idx : 3;
|
|
|
|
}tu_t;
|
|
|
|
/**
|
|
* CU information
|
|
*/
|
|
typedef struct
|
|
{
|
|
|
|
/**
|
|
* CU X position in terms of min CU (8x8) units
|
|
*/
|
|
UWORD32 b3_cu_pos_x :3;
|
|
|
|
/**
|
|
* CU Y position in terms of min CU (8x8) units
|
|
*/
|
|
UWORD32 b3_cu_pos_y :3;
|
|
|
|
/**
|
|
* CU size in terms of min CU (8x8) units
|
|
*/
|
|
UWORD32 b4_cu_size :4;
|
|
|
|
/**
|
|
* transquant bypass flag ; 0 for this encoder
|
|
*/
|
|
UWORD32 b1_tq_bypass_flag :1;
|
|
|
|
/**
|
|
* CU skip flag
|
|
*/
|
|
UWORD32 b1_skip_flag :1;
|
|
|
|
/**
|
|
* intra / inter CU flag
|
|
*/
|
|
UWORD32 b1_pred_mode_flag :1;
|
|
|
|
/**
|
|
* indicates partition information for CU
|
|
* For intra 0 : for 2Nx2N / 1 for NxN iff CU=minCBsize
|
|
* For inter 0 : @sa PART_SIZE_E
|
|
*/
|
|
UWORD32 b3_part_mode :3;
|
|
|
|
/**
|
|
* 0 for this encoder
|
|
*/
|
|
UWORD32 b1_pcm_flag :1;
|
|
|
|
/**
|
|
* only applicable for intra cu
|
|
*/
|
|
UWORD32 b3_chroma_intra_pred_mode :3;
|
|
|
|
/**
|
|
* only applicable for intra cu
|
|
*/
|
|
UWORD32 b1_prev_intra_luma_pred_flag0 :1;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b1_prev_intra_luma_pred_flag1 :1;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b1_prev_intra_luma_pred_flag2 :1;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b1_prev_intra_luma_pred_flag3 :1;
|
|
|
|
/**
|
|
* only applicable for luma intra cu
|
|
*/
|
|
UWORD32 b2_mpm_idx0 :2;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b2_mpm_idx1 :2;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b2_mpm_idx2 :2;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b2_mpm_idx3 :2;
|
|
|
|
/**
|
|
* only applicable for intra cu
|
|
*/
|
|
UWORD32 b5_rem_intra_pred_mode0 :5;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b5_rem_intra_pred_mode1 :5;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b5_rem_intra_pred_mode2 :5;
|
|
|
|
/**
|
|
* only applicable for intra cu and pred_mode=NxN
|
|
*/
|
|
UWORD32 b5_rem_intra_pred_mode3 :5;
|
|
|
|
/**
|
|
* no residue flag for cu
|
|
*/
|
|
UWORD32 b1_no_residual_syntax_flag :1;
|
|
|
|
}cu_t;
|
|
|
|
/*****************************************************************************/
|
|
/* Since the following data will be accessed linearly (no random access */
|
|
/* is needed for this) there is no need to store a frame level offset for */
|
|
/* each CTB's TU data. Only a pointer to this is stored in CTB's structure */
|
|
/*****************************************************************************/
|
|
|
|
typedef struct
|
|
{
|
|
/*************************************************************************/
|
|
/* Number of TUs filled in as_tu */
|
|
/* Having the first entry as 32 bit data, helps in keeping each of */
|
|
/* the structures aligned to 32 bits at CTB level */
|
|
/*************************************************************************/
|
|
/**
|
|
* Number of TUs filled in as_tu
|
|
*/
|
|
WORD32 i4_tu_cnt;
|
|
|
|
/**
|
|
* Array to map each min TU unit to a corresponding entry in as_tu
|
|
*/
|
|
UWORD8 au1_tu_map[MAX_TU_IN_CTB];
|
|
|
|
/*************************************************************************/
|
|
/* TU level information */
|
|
/* Though the allocation for as_pu as done to handle worst case data, */
|
|
/* only valid number of TUs will be filled in the following array. */
|
|
/* Next CTB starts after the valid as_tu entries */
|
|
/*************************************************************************/
|
|
/**
|
|
* TU level information
|
|
*/
|
|
tu_t as_tu[MAX_TU_IN_CTB];
|
|
|
|
}ctb_tu_list_t;
|
|
|
|
/*****************************************************************************/
|
|
/* Info from last TU row of CTB is stored in a row level neighbour buffer */
|
|
/* , which will be used for Boundary Strength computation */
|
|
/*****************************************************************************/
|
|
/**
|
|
* CTB neighbor info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Slice index of the ctb
|
|
*/
|
|
UWORD16 u2_slice_idx;
|
|
|
|
/*************************************************************************/
|
|
/* CBF of bottom TU row (replicated in 4 pixel boundary) */
|
|
/* MSB contains CBF of first TU in the last row and LSB contains CBF */
|
|
/* of last TU in the last row */
|
|
/*************************************************************************/
|
|
/**
|
|
* CBF of bottom TU row
|
|
*/
|
|
UWORD16 u2_packed_cbf;
|
|
|
|
/*************************************************************************/
|
|
/* QP of bottom TU row (replicated at 8 pixel boundary (Since QP can */
|
|
/* not change at less than min CU granularity) */
|
|
/*************************************************************************/
|
|
/**
|
|
* QP of bottom TU row
|
|
*/
|
|
UWORD8 au1_qp[MAX_CU_IN_CTB_ROW];
|
|
|
|
}ctb_top_ny_info_t;
|
|
|
|
/**
|
|
* CTB level info
|
|
*/
|
|
typedef struct _ctb_t
|
|
{
|
|
/*************************************************************************/
|
|
/* Tile boundary can be detected by looking at tile start x and tile */
|
|
/* start y. And based on the tile, slice and frame boundary the */
|
|
/* following will be initialized. */
|
|
/*************************************************************************/
|
|
/**
|
|
* Pointer to left CTB
|
|
*/
|
|
/* If not available, this will be set to NULL */
|
|
struct _ctb_t *ps_ctb_left;
|
|
|
|
/**
|
|
* Pointer to top-left CTB
|
|
*/
|
|
/* If not available, this will be set to NULL */
|
|
ctb_top_ny_info_t *ps_ctb_ny_topleft;
|
|
|
|
/**
|
|
* Pointer to top CTB
|
|
*/
|
|
/* If not available, this will be set to NULL */
|
|
ctb_top_ny_info_t *ps_ctb_ny_top;
|
|
|
|
/**
|
|
* Pointer to top-right CTB
|
|
*/
|
|
/* If not available, this will be set to NULL */
|
|
ctb_top_ny_info_t *ps_ctb_ny_topright;
|
|
|
|
/*************************************************************************/
|
|
/* Pointer to PU data. */
|
|
/* This points to a MV Bank stored at frame level. Though this */
|
|
/* pointer can be derived by reading offset at frame level, it is */
|
|
/* stored here for faster access. Can be removed if storage of CTB */
|
|
/* structure is critical */
|
|
/*************************************************************************/
|
|
/**
|
|
* Pointer to PU data
|
|
*/
|
|
pu_t *ps_pu;
|
|
|
|
/*************************************************************************/
|
|
/* Pointer to a PU map stored at frame level, */
|
|
/* Though this pointer can be derived by multiplying CTB adress with */
|
|
/* number of minTUs in a CTB, it is stored here for faster access. */
|
|
/* Can be removed if storage of CTB structure is critical */
|
|
/*************************************************************************/
|
|
/**
|
|
* Pointer to a PU map stored at frame level
|
|
*/
|
|
UWORD8 *pu1_pu_map;
|
|
|
|
/**
|
|
* Number of TUs filled in as_tu
|
|
*/
|
|
/*************************************************************************/
|
|
/* Having the first entry as 32 bit data, helps in keeping each of */
|
|
/* the structures aligned to 32 bits at CTB level */
|
|
/*************************************************************************/
|
|
WORD32 i4_tu_cnt;
|
|
|
|
/**
|
|
* Array to map each min TU unit to a corresponding entry in as_tu
|
|
*/
|
|
UWORD8 *pu1_tu_map;
|
|
|
|
/**
|
|
* TU level information
|
|
*/
|
|
/*************************************************************************/
|
|
/* Though the allocation for as_pu as done to handle worst case data, */
|
|
/* only valid number of TUs will be filled in the following array. */
|
|
/* Next CTB starts after the valid as_tu entries */
|
|
/*************************************************************************/
|
|
tu_t *ps_tu;
|
|
|
|
/**
|
|
* Pointer to transform coeff data
|
|
*/
|
|
/*************************************************************************/
|
|
/* Following format is repeated for every coded TU */
|
|
/* Luma Block */
|
|
/* num_coeffs : 16 bits */
|
|
/* zero_cols : 8 bits ( 1 bit per 4 columns) */
|
|
/* sig_coeff_map : ((TU Size * TU Size) + 31) >> 5 number of WORD32s */
|
|
/* coeff_data : Non zero coefficients */
|
|
/* Cb Block (only for last TU in 4x4 case else for every luma TU) */
|
|
/* num_coeffs : 16 bits */
|
|
/* zero_cols : 8 bits ( 1 bit per 4 columns) */
|
|
/* sig_coeff_map : ((TU Size * TU Size) + 31) >> 5 number of WORD32s */
|
|
/* coeff_data : Non zero coefficients */
|
|
/* Cr Block (only for last TU in 4x4 case else for every luma TU) */
|
|
/* num_coeffs : 16 bits */
|
|
/* zero_cols : 8 bits ( 1 bit per 4 columns) */
|
|
/* sig_coeff_map : ((TU Size * TU Size) + 31) >> 5 number of WORD32s */
|
|
/* coeff_data : Non zero coefficients */
|
|
/*************************************************************************/
|
|
void *pv_coeff_data;
|
|
|
|
/**
|
|
* Slice to which the CTB belongs to
|
|
*/
|
|
WORD32 i4_slice_idx;
|
|
|
|
/**
|
|
* CTB column position
|
|
*/
|
|
WORD32 i4_pos_x;
|
|
|
|
/**
|
|
* CTB row position
|
|
*/
|
|
WORD32 i4_pos_y;
|
|
|
|
/**
|
|
* Number of PUs filled in ps_pu
|
|
*/
|
|
WORD32 i4_pu_cnt;
|
|
|
|
/**
|
|
* Index of current PU being processed in ps_pu
|
|
*/
|
|
/* Scratch variable set to 0 at the start of any PU processing function */
|
|
WORD32 i4_pu_idx;
|
|
|
|
/**
|
|
* Vertical Boundary strength
|
|
*/
|
|
/* Two bits per edge.
|
|
Stored in format. BS[15] | BS[14] | .. |BS[0]*/
|
|
UWORD32 *pu4_vert_bs;
|
|
|
|
/**
|
|
* Horizontal Boundary strength
|
|
*/
|
|
|
|
/* Two bits per edge.
|
|
Stored in format. BS[15] | BS[14] | .. |BS[0]*/
|
|
UWORD32 *pu4_horz_bs;
|
|
|
|
/**
|
|
* Qp array stored for each 8x8 pixels
|
|
*/
|
|
UWORD8 *pu1_qp;
|
|
|
|
/**
|
|
* Pointer to current frame's pu_t array
|
|
*/
|
|
pu_t *ps_frm_pu;
|
|
|
|
/**
|
|
* Pointer to current frame's pu_t index array, which stores starting index
|
|
* of pu_t for every CTB
|
|
*/
|
|
UWORD32 *pu4_frm_pu_idx;
|
|
|
|
/**
|
|
* Pointer to current frame's pu map array
|
|
*/
|
|
UWORD8 *pu1_frm_pu_map;
|
|
|
|
/*************************************************************************/
|
|
/* Need to add encoder specific elements for identifying the order of */
|
|
/* coding for CU, TU and PU if any */
|
|
/*************************************************************************/
|
|
}ctb_t;
|
|
|
|
/*****************************************************************************/
|
|
/* The following can be used to typecast coefficient data that is stored */
|
|
/* per subblock. Note that though i2_level is shown as an array that */
|
|
/* holds 16 coefficients, only the first few entries will be valid. Next */
|
|
/* subblocks data starts after the valid number of coefficients. Number */
|
|
/* of non-zero coefficients will be derived using number of non-zero bits */
|
|
/* in sig coeff map */
|
|
/*****************************************************************************/
|
|
/**
|
|
* Structure to hold coefficient info for a 4x4 subblock
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* sub block position
|
|
*/
|
|
UWORD16 u2_subblk_pos;
|
|
|
|
/**
|
|
* significant coefficient map
|
|
*/
|
|
UWORD16 u2_sig_coeff_map;
|
|
|
|
/**
|
|
* holds 16 coefficients
|
|
*/
|
|
WORD16 ai2_level[SUBBLK_COEFF_CNT];
|
|
}tu_sblk_coeff_data_t;
|
|
|
|
|
|
/*************************************************************************/
|
|
/* The following describes how each of the CU cases are handled */
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* For SKIP CU */
|
|
/* One Inter PU with appropriate MV */
|
|
/* One TU which says Y, Cb and Cr CBF is zero with size equal to CB size */
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* For Inter CU */
|
|
/* M Inter PU with appropriate MVs (M between 1 to 4) */
|
|
/* N TU (N is number of TU in CU) */
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* For Intra CU */
|
|
/* N TU (N is number of TU in CU) */
|
|
/* N Intra PU with appropriate pred modes for luma and chroma */
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* For Intra PCM CU */
|
|
/* One TU which says transquant bypass is 1 with size equal to CB size */
|
|
/* 1 Intra PU with pcm flag set to 1(which ensures no intra pred is done)*/
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* For a CU where cu_transquant_bypass_flag is 1 */
|
|
/* One TU which says transquant bypass is 1 with size equal to CB size */
|
|
/* N Intra/Inter PUs */
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* For a CU where no_residual_syntax_flag is 1 */
|
|
/* One TU which says Y, Cb, Cr CBF is 0 with size equal to CB size */
|
|
/* N Inter PUs */
|
|
/*************************************************************************/
|
|
|
|
|
|
/**
|
|
* Structure giving information about the tile
|
|
*/
|
|
typedef struct
|
|
{
|
|
/* X position of the tile in the current frame in CTB units */
|
|
UWORD8 u1_pos_x;
|
|
|
|
/* Y position of the tile in the current frame in CTB units */
|
|
UWORD8 u1_pos_y;
|
|
|
|
/* Tile width in CTB units */
|
|
UWORD16 u2_wd;
|
|
|
|
/* Tile height in CTB units */
|
|
UWORD16 u2_ht;
|
|
|
|
}tile_t;
|
|
|
|
/**
|
|
* Structure to hold Profile tier level info for a given layer
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
/**
|
|
* NAL unit type
|
|
*/
|
|
WORD8 i1_nal_unit_type;
|
|
|
|
/**
|
|
* NAL temporal id
|
|
*/
|
|
WORD8 i1_nuh_temporal_id;
|
|
}nal_header_t;
|
|
|
|
/**
|
|
* Structure to hold Profile tier level info for a given layer
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
/**
|
|
* profile_space
|
|
*/
|
|
WORD8 i1_profile_space;
|
|
|
|
/**
|
|
* tier_flag
|
|
*/
|
|
WORD8 i1_tier_flag;
|
|
|
|
/**
|
|
* profile_idc
|
|
*/
|
|
WORD8 i1_profile_idc;
|
|
|
|
/**
|
|
* profile_compatibility_flag[]
|
|
*/
|
|
WORD8 ai1_profile_compatibility_flag[MAX_PROFILE_COMPATBLTY];
|
|
|
|
/**
|
|
* progressive_source_flag
|
|
*/
|
|
WORD8 i1_general_progressive_source_flag;
|
|
|
|
/**
|
|
* interlaced_source_flag
|
|
*/
|
|
WORD8 i1_general_interlaced_source_flag;
|
|
|
|
/**
|
|
* non_packed_constraint_flag
|
|
*/
|
|
WORD8 i1_general_non_packed_constraint_flag;
|
|
|
|
/**
|
|
* frame_only_constraint_flag
|
|
*/
|
|
WORD8 i1_frame_only_constraint_flag;
|
|
|
|
/**
|
|
* general_max_12bit_constraint_flag
|
|
*/
|
|
WORD8 i1_general_max_12bit_constraint_flag;
|
|
|
|
/**
|
|
* general_max_10bit_constraint_flag
|
|
*/
|
|
WORD8 i1_general_max_10bit_constraint_flag;
|
|
|
|
/**
|
|
* general_max_8bit_constraint_flag
|
|
*/
|
|
WORD8 i1_general_max_8bit_constraint_flag;
|
|
|
|
/**
|
|
* general_max_422chroma_constraint_flag
|
|
*/
|
|
WORD8 i1_general_max_422chroma_constraint_flag;
|
|
|
|
/**
|
|
* general_max_420chroma_constraint_flag
|
|
*/
|
|
WORD8 i1_general_max_420chroma_constraint_flag;
|
|
|
|
/**
|
|
* general_max_monochrome_constraint_flag
|
|
*/
|
|
WORD8 i1_general_max_monochrome_constraint_flag;
|
|
|
|
/**
|
|
* general_intra_constraint_flag
|
|
*/
|
|
WORD8 i1_general_intra_constraint_flag;
|
|
|
|
/**
|
|
* general_one_picture_only_constraint_flag
|
|
*/
|
|
WORD8 i1_general_one_picture_only_constraint_flag;
|
|
|
|
/**
|
|
* general_lower_bit_rate_constraint_flag
|
|
*/
|
|
WORD8 i1_general_lower_bit_rate_constraint_flag;
|
|
|
|
/**
|
|
* level_idc
|
|
*/
|
|
UWORD8 u1_level_idc;
|
|
}profile_tier_lvl_t;
|
|
|
|
/**
|
|
* Structure to hold Profile tier level info for all layers
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Profile and tier information for general
|
|
*/
|
|
profile_tier_lvl_t s_ptl_gen;
|
|
|
|
/**
|
|
* sub_layer_profile_present_flag[]
|
|
*/
|
|
WORD8 ai1_sub_layer_profile_present_flag[VPS_MAX_SUB_LAYERS - 1];
|
|
|
|
/**
|
|
* sub_layer_level_present_flag[]
|
|
*/
|
|
WORD8 ai1_sub_layer_level_present_flag[VPS_MAX_SUB_LAYERS - 1];
|
|
|
|
/**
|
|
* Profile and tier information for sub layers
|
|
*/
|
|
profile_tier_lvl_t as_ptl_sub[VPS_MAX_SUB_LAYERS - 1];
|
|
|
|
}profile_tier_lvl_info_t;
|
|
|
|
/**
|
|
* Structure to hold short term reference picture set info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* delta_poc_s0_minus1[ i ] and delta_poc_s1_minus1[ i ]
|
|
*/
|
|
WORD16 ai2_delta_poc[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* inter_ref_pic_set_prediction_flag
|
|
*/
|
|
WORD8 i1_inter_ref_pic_set_prediction_flag;
|
|
|
|
/**
|
|
* num_negative_pics
|
|
*/
|
|
WORD8 i1_num_neg_pics;
|
|
|
|
/**
|
|
* num_positive_pics
|
|
*/
|
|
WORD8 i1_num_pos_pics;
|
|
|
|
/**
|
|
* used_by_curr_pic_s0_flag[ i ] and used_by_curr_pic_s1_flag[i]
|
|
*/
|
|
WORD8 ai1_used[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* Ref Idc
|
|
*/
|
|
WORD8 ai1_ref_idc[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* Sum of positive and negative pics for each refence
|
|
*/
|
|
WORD8 i1_num_delta_pocs;
|
|
|
|
/**
|
|
* Number of ref_idc
|
|
*/
|
|
WORD8 i1_num_ref_idc;
|
|
}stref_picset_t;
|
|
|
|
/**
|
|
* Structure to hold weighted prediction info such as weights and offsets
|
|
*/
|
|
typedef struct
|
|
{
|
|
/** luma_log2_weight_denom */
|
|
WORD8 i1_luma_log2_weight_denom;
|
|
|
|
/** delta_chroma_log2_weight_denom */
|
|
WORD8 i1_chroma_log2_weight_denom;
|
|
|
|
#ifdef ENABLE_MAIN_REXT_PROFILE
|
|
/** WpOffsetBdShiftY */
|
|
WORD8 i1_wp_ofst_bd_shift_luma;
|
|
|
|
/** WpOffsetBdShiftC */
|
|
WORD8 i1_wp_ofst_bd_shift_chroma;
|
|
|
|
/** WpOffsetHalfRangeY */
|
|
WORD32 i4_wp_ofst_half_rng_luma;
|
|
|
|
/** WpOffsetHalfRangeC */
|
|
WORD32 i4_wp_ofst_half_rng_chroma;
|
|
#endif
|
|
|
|
/** luma_weight_l0_flag[ i ] */
|
|
WORD8 i1_luma_weight_l0_flag[MAX_DPB_SIZE];
|
|
|
|
/** chroma_weight_l0_flag[ i ] */
|
|
WORD8 i1_chroma_weight_l0_flag[MAX_DPB_SIZE];
|
|
|
|
/** delta_luma_weight_l0[ i ] */
|
|
WORD16 i2_luma_weight_l0[MAX_DPB_SIZE];
|
|
|
|
/** luma_offset_l0[ i ] */
|
|
WORD16 i2_luma_offset_l0[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_weight_l0[ i ][ j ] */
|
|
WORD16 i2_chroma_weight_l0_cb[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_offset_l0[ i ][ j ] */
|
|
WORD16 i2_chroma_offset_l0_cb[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_weight_l0[ i ][ j ] */
|
|
WORD16 i2_chroma_weight_l0_cr[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_offset_l0[ i ][ j ] */
|
|
WORD16 i2_chroma_offset_l0_cr[MAX_DPB_SIZE];
|
|
|
|
/** luma_weight_l1_flag[ i ] */
|
|
WORD8 i1_luma_weight_l1_flag[MAX_DPB_SIZE];
|
|
|
|
/** chroma_weight_l1_flag[ i ] */
|
|
WORD8 i1_chroma_weight_l1_flag[MAX_DPB_SIZE];
|
|
|
|
/** delta_luma_weight_l1[ i ] */
|
|
WORD16 i2_luma_weight_l1[MAX_DPB_SIZE];
|
|
|
|
/** luma_offset_l1[ i ] */
|
|
WORD16 i2_luma_offset_l1[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_weight_l1[ i ][ j ] */
|
|
WORD16 i2_chroma_weight_l1_cb[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_offset_l1[ i ][ j ] */
|
|
WORD16 i2_chroma_offset_l1_cb[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_weight_l1[ i ][ j ] */
|
|
WORD16 i2_chroma_weight_l1_cr[MAX_DPB_SIZE];
|
|
|
|
/** delta_chroma_offset_l1[ i ][ j ] */
|
|
WORD16 i2_chroma_offset_l1_cr[MAX_DPB_SIZE];
|
|
|
|
}pred_wt_ofst_t;
|
|
|
|
|
|
/**
|
|
* Structure to hold Reference picture list modification info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/* ref_pic_list_modification_flag_l0 */
|
|
WORD8 i1_ref_pic_list_modification_flag_l0;
|
|
|
|
/* list_entry_l0[ i ] */
|
|
WORD8 i1_list_entry_l0[16];
|
|
|
|
/* ref_pic_list_modification_flag_l1 */
|
|
WORD8 i1_ref_pic_list_modification_flag_l1;
|
|
|
|
/* list_entry_l1[ i ] */
|
|
WORD8 i1_list_entry_l1[16];
|
|
|
|
/* Reference POC values for L0,L1 */
|
|
WORD32 i4_ref_poc_l0[16];
|
|
WORD32 i4_ref_poc_l1[16];
|
|
}rplm_t;
|
|
|
|
|
|
/**
|
|
* Structure to hold VPS info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* video_parameter_set_id
|
|
*/
|
|
WORD8 i1_vps_id;
|
|
|
|
/**
|
|
* vps_temporal_id_nesting_flag
|
|
*/
|
|
WORD8 i1_vps_temporal_id_nesting_flag;
|
|
/**
|
|
* sub_layer_ordering_info_present_flag
|
|
*/
|
|
WORD8 i1_sub_layer_ordering_info_present_flag;
|
|
/**
|
|
* vps_max_sub_layers_minus1
|
|
*/
|
|
WORD8 i1_vps_max_sub_layers;
|
|
|
|
/**
|
|
* vps_max_dec_pic_buffering
|
|
*/
|
|
WORD8 ai1_vps_max_dec_pic_buffering[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* vps_max_num_reorder_pics
|
|
*/
|
|
WORD8 ai1_vps_max_num_reorder_pics[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* vps_max_latency_increase
|
|
*/
|
|
WORD8 ai1_vps_max_latency_increase[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* vps_num_hrd_parameters
|
|
*/
|
|
WORD8 i1_vps_num_hrd_parameters;
|
|
|
|
/**
|
|
* vps_max_nuh_reserved_zero_layer_id
|
|
*/
|
|
WORD8 i1_vps_max_nuh_reserved_zero_layer_id;
|
|
|
|
/**
|
|
* vps_num_op_sets
|
|
*/
|
|
WORD8 i1_vps_num_op_sets;
|
|
|
|
/**
|
|
* layer_id_included_flag
|
|
*/
|
|
//WORD8 ai1_layer_id_included_flag[2][MAX_NUH_LAYERS];
|
|
/**
|
|
* Profile, Tier and Level info
|
|
*/
|
|
profile_tier_lvl_info_t s_ptl;
|
|
|
|
/**
|
|
* bit_rate_info_present_flag[i]
|
|
*/
|
|
WORD8 ai1_bit_rate_info_present_flag[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* pic_rate_info_present_flag[i]
|
|
*/
|
|
WORD8 ai1_pic_rate_info_present_flag[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* avg_bit_rate[i]
|
|
*/
|
|
UWORD16 au2_avg_bit_rate[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* max_bit_rate[i]
|
|
*/
|
|
UWORD16 au2_max_bit_rate[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* constant_pic_rate_idc[i]
|
|
*/
|
|
WORD8 ai1_constant_pic_rate_idc[VPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* avg_pic_rate[i]
|
|
*/
|
|
UWORD16 au2_avg_pic_rate[VPS_MAX_SUB_LAYERS];
|
|
}vps_t;
|
|
|
|
|
|
/**
|
|
* Structure to hold SPS info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* pic_width_in_luma_samples
|
|
*/
|
|
WORD16 i2_pic_width_in_luma_samples;
|
|
|
|
/**
|
|
* pic_height_in_luma_samples
|
|
*/
|
|
WORD16 i2_pic_height_in_luma_samples;
|
|
|
|
/**
|
|
* pic_crop_left_offset
|
|
*/
|
|
WORD16 i2_pic_crop_left_offset;
|
|
|
|
/**
|
|
* pic_crop_right_offset
|
|
*/
|
|
WORD16 i2_pic_crop_right_offset;
|
|
|
|
/**
|
|
* pic_crop_top_offset
|
|
*/
|
|
WORD16 i2_pic_crop_top_offset;
|
|
|
|
/**
|
|
* pic_crop_bottom_offset
|
|
*/
|
|
WORD16 i2_pic_crop_bottom_offset;
|
|
|
|
/**
|
|
* seq_parameter_set_id
|
|
*/
|
|
WORD8 i1_sps_id;
|
|
|
|
/**
|
|
* video_parameter_set_id
|
|
*/
|
|
WORD8 i1_vps_id;
|
|
|
|
/**
|
|
* sps_max_sub_layers_minus1
|
|
*/
|
|
WORD8 i1_sps_max_sub_layers;
|
|
|
|
/**
|
|
* chroma_format_idc
|
|
*/
|
|
WORD8 i1_chroma_format_idc;
|
|
|
|
/**
|
|
* Bit depth of luma samples
|
|
*/
|
|
WORD8 i1_bit_depth_luma_minus8;
|
|
|
|
/**
|
|
* Bit depth of chrma samples
|
|
*/
|
|
WORD8 i1_bit_depth_chroma_minus8;
|
|
|
|
/* separate_colour_plane_flag */
|
|
WORD8 i1_separate_colour_plane_flag;
|
|
|
|
/**
|
|
* pic_cropping_flag
|
|
*/
|
|
WORD8 i1_pic_cropping_flag;
|
|
|
|
/**
|
|
* pcm_enabled_flag
|
|
*/
|
|
WORD8 i1_pcm_enabled_flag;
|
|
|
|
/**
|
|
* pcm_sample_bit_depth_luma
|
|
*/
|
|
WORD8 i1_pcm_sample_bit_depth_luma;
|
|
|
|
/**
|
|
* pcm_sample_bit_depth_chroma
|
|
*/
|
|
WORD8 i1_pcm_sample_bit_depth_chroma;
|
|
|
|
/**
|
|
* log2_max_pic_order_cnt_lsb_minus4
|
|
*/
|
|
WORD8 i1_log2_max_pic_order_cnt_lsb;
|
|
/**
|
|
* sps_sub_layer_ordering_info_present_flag
|
|
*/
|
|
WORD8 i1_sps_sub_layer_ordering_info_present_flag;
|
|
/**
|
|
* sps_max_dec_pic_buffering
|
|
*/
|
|
WORD8 ai1_sps_max_dec_pic_buffering[SPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* sps_max_num_reorder_pics
|
|
*/
|
|
WORD8 ai1_sps_max_num_reorder_pics[SPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* sps_max_latency_increase
|
|
*/
|
|
WORD8 ai1_sps_max_latency_increase[SPS_MAX_SUB_LAYERS];
|
|
|
|
/**
|
|
* log2_min_coding_block_size_minus3
|
|
*/
|
|
WORD8 i1_log2_min_coding_block_size;
|
|
|
|
/**
|
|
* log2_diff_max_min_coding_block_size
|
|
*/
|
|
WORD8 i1_log2_diff_max_min_coding_block_size;
|
|
|
|
/**
|
|
* log2_min_transform_block_size_minus2
|
|
*/
|
|
WORD8 i1_log2_min_transform_block_size;
|
|
|
|
/**
|
|
* log2_diff_max_min_transform_block_size
|
|
*/
|
|
WORD8 i1_log2_diff_max_min_transform_block_size;
|
|
|
|
/**
|
|
* log2_min_pcm_coding_block_size_minus3
|
|
*/
|
|
WORD8 i1_log2_min_pcm_coding_block_size;
|
|
|
|
/**
|
|
* log2_diff_max_min_pcm_coding_block_size
|
|
*/
|
|
WORD8 i1_log2_diff_max_min_pcm_coding_block_size;
|
|
|
|
/**
|
|
* max_transform_hierarchy_depth_inter
|
|
*/
|
|
WORD8 i1_max_transform_hierarchy_depth_inter;
|
|
|
|
/**
|
|
* max_transform_hierarchy_depth_intra
|
|
*/
|
|
WORD8 i1_max_transform_hierarchy_depth_intra;
|
|
|
|
/**
|
|
* scaling_list_enable_flag
|
|
*/
|
|
WORD8 i1_scaling_list_enable_flag;
|
|
|
|
/**
|
|
* sps_scaling_list_data_present_flag
|
|
*/
|
|
WORD8 i1_sps_scaling_list_data_present_flag;
|
|
|
|
/**
|
|
* amp_enabled_flag
|
|
*/
|
|
WORD8 i1_amp_enabled_flag;
|
|
|
|
/**
|
|
* sample_adaptive_offset_enabled_flag
|
|
*/
|
|
WORD8 i1_sample_adaptive_offset_enabled_flag;
|
|
|
|
/**
|
|
* pcm_loop_filter_disable_flag
|
|
*/
|
|
WORD8 i1_pcm_loop_filter_disable_flag;
|
|
|
|
/**
|
|
* sps_temporal_id_nesting_flag
|
|
*/
|
|
WORD8 i1_sps_temporal_id_nesting_flag;
|
|
|
|
/**
|
|
* num_short_term_ref_pic_sets
|
|
*/
|
|
WORD8 i1_num_short_term_ref_pic_sets;
|
|
|
|
/**
|
|
* long_term_ref_pics_present_flag
|
|
*/
|
|
WORD8 i1_long_term_ref_pics_present_flag;
|
|
|
|
/**
|
|
* num_long_term_ref_pics_sps
|
|
*/
|
|
WORD8 i1_num_long_term_ref_pics_sps;
|
|
|
|
/**
|
|
* lt_ref_pic_poc_lsb_sps[]
|
|
*/
|
|
UWORD16 au2_lt_ref_pic_poc_lsb_sps[MAX_LTREF_PICS_SPS];
|
|
|
|
/**
|
|
* used_by_curr_pic_lt_sps_flag[]
|
|
*/
|
|
WORD8 ai1_used_by_curr_pic_lt_sps_flag[MAX_LTREF_PICS_SPS];
|
|
|
|
/**
|
|
* sps_temporal_mvp_enable_flag
|
|
*/
|
|
WORD8 i1_sps_temporal_mvp_enable_flag;
|
|
|
|
/**
|
|
* strong_intra_smoothing_enable_flag
|
|
*/
|
|
WORD8 i1_strong_intra_smoothing_enable_flag;
|
|
|
|
/**
|
|
* vui_parameters_present_flag
|
|
*/
|
|
WORD8 i1_vui_parameters_present_flag;
|
|
|
|
/**
|
|
* vui parameters Structure info
|
|
*/
|
|
vui_t s_vui_parameters;
|
|
|
|
/**
|
|
* Log2(CTB Size) in luma units
|
|
*/
|
|
|
|
WORD8 i1_log2_ctb_size;
|
|
|
|
/**
|
|
* Maximum transform block size
|
|
*/
|
|
WORD8 i1_log2_max_transform_block_size;
|
|
|
|
/**
|
|
* Picture width in CTB units
|
|
*/
|
|
|
|
WORD16 i2_pic_wd_in_ctb;
|
|
|
|
/**
|
|
* Picture height in CTB units
|
|
*/
|
|
|
|
WORD16 i2_pic_ht_in_ctb;
|
|
|
|
/**
|
|
* Picture width in min CB units
|
|
*/
|
|
|
|
WORD16 i2_pic_wd_in_min_cb;
|
|
|
|
/**
|
|
* Picture height in min CB units
|
|
*/
|
|
|
|
WORD16 i2_pic_ht_in_min_cb;
|
|
|
|
/**
|
|
* Picture size in CTB units
|
|
*/
|
|
WORD32 i4_pic_size_in_ctb;
|
|
|
|
/**
|
|
* Profile, Tier and Level info
|
|
*/
|
|
|
|
profile_tier_lvl_info_t s_ptl;
|
|
|
|
/**
|
|
* Short term reference pic set
|
|
*/
|
|
stref_picset_t as_stref_picset[MAX_STREF_PICS_SPS];
|
|
|
|
/**
|
|
* Pointer to scaling matrix
|
|
*/
|
|
/*************************************************************************/
|
|
/* Contanis the matrice in the following order in a 1D buffer */
|
|
/* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V */
|
|
/* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V */
|
|
/* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V */
|
|
/* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V */
|
|
/* Intra 16x16 Y, 16x16 U, 16x16 V */
|
|
/* Inter 16x16 Y, 16x16 U, 16x16 V */
|
|
/* Intra 32x32 Y */
|
|
/* Inter 32x32 Y */
|
|
/*************************************************************************/
|
|
WORD16 *pi2_scaling_mat;
|
|
|
|
#ifdef ENABLE_MAIN_REXT_PROFILE
|
|
|
|
/**
|
|
* transform_skip_rotation_enabled_flag
|
|
*/
|
|
WORD8 i1_transform_skip_rotation_enabled_flag;
|
|
|
|
/**
|
|
* transform_skip_context_enabled_flag
|
|
*/
|
|
WORD8 i1_transform_skip_context_enabled_flag;
|
|
|
|
/**
|
|
* implicit_rdpcm_enabled_flag
|
|
*/
|
|
WORD8 i1_implicit_rdpcm_enabled_flag;
|
|
|
|
/**
|
|
* explicit_rdpcm_enabled_flag
|
|
*/
|
|
WORD8 i1_explicit_rdpcm_enabled_flag;
|
|
|
|
/**
|
|
* extended_precision_processing_flag
|
|
*/
|
|
WORD8 i1_extended_precision_processing_flag;
|
|
|
|
/**
|
|
* intra_smoothing_disabled_flag
|
|
*/
|
|
WORD8 i1_intra_smoothing_disabled_flag;
|
|
|
|
/**
|
|
* high_precision_offsets_enabled_flag
|
|
*/
|
|
WORD8 i1_use_high_precision_pred_wt;
|
|
|
|
/**
|
|
* fast_rice_adaptation_enabled_flag
|
|
*/
|
|
WORD8 i1_fast_rice_adaptation_enabled_flag;
|
|
|
|
/**
|
|
* cabac_bypass_alignment_enabled_flag
|
|
*/
|
|
WORD8 i1_align_cabac_before_bypass;
|
|
#endif
|
|
|
|
/*
|
|
* Flag indicating if the SPS is parsed
|
|
*/
|
|
WORD8 i1_sps_valid;
|
|
|
|
}sps_t;
|
|
|
|
/**
|
|
* Structure to hold PPS info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* Pointer to scaling matrix
|
|
*/
|
|
/*************************************************************************/
|
|
/* Contanis the matrice in the following order in a 1D buffer */
|
|
/* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V */
|
|
/* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V */
|
|
/* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V */
|
|
/* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V */
|
|
/* Intra 16x16 Y, 16x16 U, 16x16 V */
|
|
/* Inter 16x16 Y, 16x16 U, 16x16 V */
|
|
/* Intra 32x32 Y */
|
|
/* Inter 32x32 Y */
|
|
/*************************************************************************/
|
|
WORD16 *pi2_scaling_mat;
|
|
|
|
/**
|
|
* Pointer to an array containing tile info such as position, width, height
|
|
* of each tile
|
|
*/
|
|
|
|
/* column_width_minus1[ i ] and row_height_minus1[ i ] */
|
|
tile_t *ps_tile;
|
|
|
|
/**
|
|
* pic_parameter_set_id
|
|
*/
|
|
WORD8 i1_pps_id;
|
|
|
|
/**
|
|
* seq_parameter_set_id
|
|
*/
|
|
WORD8 i1_sps_id;
|
|
|
|
/**
|
|
* sign_data_hiding_flag
|
|
*/
|
|
WORD8 i1_sign_data_hiding_flag;
|
|
|
|
/**
|
|
* cabac_init_present_flag
|
|
*/
|
|
WORD8 i1_cabac_init_present_flag;
|
|
|
|
/**
|
|
* num_ref_idx_l0_default_active_minus1
|
|
*/
|
|
WORD8 i1_num_ref_idx_l0_default_active;
|
|
|
|
/**
|
|
* num_ref_idx_l1_default_active_minus1
|
|
*/
|
|
WORD8 i1_num_ref_idx_l1_default_active;
|
|
|
|
/**
|
|
* pic_init_qp_minus26
|
|
*/
|
|
WORD8 i1_pic_init_qp;
|
|
|
|
/**
|
|
* constrained_intra_pred_flag
|
|
*/
|
|
WORD8 i1_constrained_intra_pred_flag;
|
|
|
|
/**
|
|
* transform_skip_enabled_flag
|
|
*/
|
|
WORD8 i1_transform_skip_enabled_flag;
|
|
|
|
/**
|
|
* cu_qp_delta_enabled_flag
|
|
*/
|
|
WORD8 i1_cu_qp_delta_enabled_flag;
|
|
|
|
/**
|
|
* diff_cu_qp_delta_depth
|
|
*/
|
|
WORD8 i1_diff_cu_qp_delta_depth;
|
|
|
|
/**
|
|
* pic_cb_qp_offset
|
|
*/
|
|
WORD8 i1_pic_cb_qp_offset;
|
|
|
|
/**
|
|
* pic_cr_qp_offset
|
|
*/
|
|
WORD8 i1_pic_cr_qp_offset;
|
|
|
|
/**
|
|
* pic_slice_level_chroma_qp_offsets_present_flag
|
|
*/
|
|
WORD8 i1_pic_slice_level_chroma_qp_offsets_present_flag;
|
|
|
|
/**
|
|
* weighted_pred_flag
|
|
*/
|
|
WORD8 i1_weighted_pred_flag;
|
|
|
|
/**
|
|
* weighted_bipred_flag
|
|
*/
|
|
WORD8 i1_weighted_bipred_flag;
|
|
|
|
/**
|
|
* output_flag_present_flag
|
|
*/
|
|
WORD8 i1_output_flag_present_flag;
|
|
|
|
/**
|
|
* transquant_bypass_enable_flag
|
|
*/
|
|
WORD8 i1_transquant_bypass_enable_flag;
|
|
|
|
/**
|
|
* dependent_slice_enabled_flag
|
|
*/
|
|
WORD8 i1_dependent_slice_enabled_flag;
|
|
|
|
/**
|
|
* tiles_enabled_flag
|
|
*/
|
|
WORD8 i1_tiles_enabled_flag;
|
|
|
|
/**
|
|
* entropy_coding_sync_enabled_flag
|
|
*/
|
|
WORD8 i1_entropy_coding_sync_enabled_flag;
|
|
|
|
/**
|
|
* entropy_slice_enabled_flag
|
|
*/
|
|
WORD8 i1_entropy_slice_enabled_flag;
|
|
|
|
/**
|
|
* num_tile_columns_minus1
|
|
*/
|
|
WORD8 i1_num_tile_columns;
|
|
|
|
/**
|
|
* num_tile_rows_minus1
|
|
*/
|
|
WORD8 i1_num_tile_rows;
|
|
|
|
/**
|
|
* uniform_spacing_flag
|
|
*/
|
|
WORD8 i1_uniform_spacing_flag;
|
|
|
|
/**
|
|
* loop_filter_across_tiles_enabled_flag
|
|
*/
|
|
WORD8 i1_loop_filter_across_tiles_enabled_flag;
|
|
|
|
/**
|
|
* loop_filter_across_slices_enabled_flag
|
|
*/
|
|
WORD8 i1_loop_filter_across_slices_enabled_flag;
|
|
|
|
/**
|
|
* deblocking_filter_control_present_flag
|
|
*/
|
|
WORD8 i1_deblocking_filter_control_present_flag;
|
|
|
|
/**
|
|
* deblocking_filter_override_enabled_flag
|
|
*/
|
|
WORD8 i1_deblocking_filter_override_enabled_flag;
|
|
|
|
/**
|
|
* pic_disable_deblocking_filter_flag
|
|
*/
|
|
WORD8 i1_pic_disable_deblocking_filter_flag;
|
|
|
|
/**
|
|
* beta_offset_div2
|
|
*/
|
|
WORD8 i1_beta_offset_div2;
|
|
|
|
/**
|
|
* tc_offset_div2
|
|
*/
|
|
WORD8 i1_tc_offset_div2;
|
|
|
|
/**
|
|
* pps_scaling_list_data_present_flag
|
|
*/
|
|
WORD8 i1_pps_scaling_list_data_present_flag;
|
|
|
|
/**
|
|
* lists_modification_present_flag
|
|
*/
|
|
WORD8 i1_lists_modification_present_flag;
|
|
|
|
/**
|
|
* num_extra_slice_header_bits
|
|
*/
|
|
WORD8 i1_num_extra_slice_header_bits;
|
|
|
|
/**
|
|
* log2_parallel_merge_level_minus2
|
|
*/
|
|
WORD8 i1_log2_parallel_merge_level;
|
|
|
|
/**
|
|
* slice_header_extension_present_flag
|
|
*/
|
|
WORD8 i1_slice_header_extension_present_flag;
|
|
|
|
/**
|
|
* slice_extension_present_flag
|
|
*/
|
|
WORD8 i1_slice_extension_present_flag;
|
|
|
|
/**
|
|
* scaling_list_dc_coef_minus8
|
|
*/
|
|
/*************************************************************************/
|
|
/* DC value of the scaling list */
|
|
/* Only 16 x 16 and 32 x 32 scaling lists have valid entries. */
|
|
/* Entries stored for all sizes for uniformity. */
|
|
/* Remaining will be initialized to default values if used */
|
|
/*************************************************************************/
|
|
UWORD8 au1_scaling_list_dc_coef[TOTAL_SCALE_MAT_COUNT];
|
|
|
|
/**
|
|
* Log2MinCuQpDeltaSize
|
|
*/
|
|
WORD8 i1_log2_min_cu_qp_delta_size;
|
|
|
|
#ifdef ENABLE_MAIN_REXT_PROFILE
|
|
/**
|
|
* log2_max_transform_skip_block_size_minus2
|
|
*/
|
|
WORD32 i4_log2_max_transform_skip_block_size_minus2;
|
|
|
|
/**
|
|
* cross_component_prediction_enabled_flag
|
|
*/
|
|
WORD8 i1_cross_component_prediction_enabled_flag;
|
|
|
|
/**
|
|
* chroma_qp_offset_list_enabled_flag
|
|
*/
|
|
WORD8 i1_chroma_qp_offset_list_enabled_flag;
|
|
|
|
/**
|
|
* diff_cu_chroma_qp_offset_depth
|
|
*/
|
|
WORD32 i4_diff_cu_chroma_qp_offset_depth;
|
|
|
|
/**
|
|
* chroma_qp_offset_list_len_minus1
|
|
*/
|
|
WORD32 i4_chroma_qp_offset_list_len_minus1;
|
|
|
|
/**
|
|
* cb_qp_offset_list[]
|
|
*/
|
|
WORD32 i4_cb_qp_offset_list[6];
|
|
|
|
/**
|
|
* cr_qp_offset_list[]
|
|
*/
|
|
WORD32 i4_cr_qp_offset_list[6];
|
|
|
|
/**
|
|
* log2_sao_offset_scale_luma
|
|
*/
|
|
WORD8 i1_log2_sao_ofst_scale_luma;
|
|
|
|
/**
|
|
* log2_sao_offset_scale_chroma
|
|
*/
|
|
WORD8 i1_log2_sao_ofst_scale_chroma;
|
|
|
|
#endif
|
|
|
|
/*
|
|
* Flag indicating if the PPS is parsed
|
|
*/
|
|
WORD8 i1_pps_valid;
|
|
|
|
}pps_t;
|
|
|
|
|
|
/**
|
|
* Structure to hold slice header info
|
|
*/
|
|
typedef struct
|
|
{
|
|
/**
|
|
* entry_point_offset[ i ]
|
|
*/
|
|
WORD32 *pi4_entry_point_offset;
|
|
|
|
/**
|
|
* poc_lsb_lt[ i ]
|
|
*/
|
|
WORD32 ai4_poc_lsb_lt[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* slice_header_extension_length
|
|
*/
|
|
WORD16 i2_slice_header_extension_length;
|
|
|
|
/**
|
|
* slice_address
|
|
*/
|
|
WORD16 i2_slice_address;
|
|
|
|
/**
|
|
* first_slice_in_pic_flag
|
|
*/
|
|
WORD8 i1_first_slice_in_pic_flag;
|
|
|
|
/* PPS id */
|
|
WORD8 i1_pps_id;
|
|
/**
|
|
* no_output_of_prior_pics_flag
|
|
*/
|
|
WORD8 i1_no_output_of_prior_pics_flag;
|
|
|
|
/**
|
|
* dependent_slice_flag
|
|
*/
|
|
WORD8 i1_dependent_slice_flag;
|
|
|
|
/**
|
|
* slice_type
|
|
*/
|
|
WORD8 i1_slice_type;
|
|
|
|
/**
|
|
* pic_output_flag
|
|
*/
|
|
WORD8 i1_pic_output_flag;
|
|
|
|
/**
|
|
* colour_plane_id
|
|
*/
|
|
WORD8 i1_colour_plane_id;
|
|
|
|
/**
|
|
* pic_order_cnt_lsb
|
|
*/
|
|
WORD32 i4_pic_order_cnt_lsb;
|
|
|
|
/**
|
|
* absolute pic_order_cnt
|
|
*/
|
|
WORD32 i4_abs_pic_order_cnt;
|
|
|
|
/**
|
|
* short_term_ref_pic_set_sps_flag
|
|
*/
|
|
WORD8 i1_short_term_ref_pic_set_sps_flag;
|
|
|
|
/**
|
|
* short_term_ref_pic_set_idx
|
|
*/
|
|
WORD8 i1_short_term_ref_pic_set_idx;
|
|
|
|
/**
|
|
* num_long_term_sps
|
|
*/
|
|
WORD8 i1_num_long_term_sps;
|
|
|
|
/**
|
|
* num_long_term_pics
|
|
*/
|
|
WORD8 i1_num_long_term_pics;
|
|
|
|
/**
|
|
* lt_idx_sps[ i ]
|
|
*/
|
|
WORD8 ai1_lt_idx_sps[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* used_by_curr_pic_lt_flag[ i ]
|
|
*/
|
|
WORD8 ai1_used_by_curr_pic_lt_flag[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* delta_poc_msb_present_flag[ i ]
|
|
*/
|
|
WORD8 ai1_delta_poc_msb_present_flag[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* delta_poc_msb_cycle_lt[ i ]
|
|
*/
|
|
WORD8 ai1_delta_poc_msb_cycle_lt[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* slice_sao_luma_flag
|
|
*/
|
|
WORD8 i1_slice_sao_luma_flag;
|
|
|
|
/**
|
|
* slice_sao_chroma_flag
|
|
*/
|
|
WORD8 i1_slice_sao_chroma_flag;
|
|
|
|
/**
|
|
* slice_temporal_mvp_enable_flag
|
|
*/
|
|
WORD8 i1_slice_temporal_mvp_enable_flag;
|
|
|
|
/**
|
|
* num_ref_idx_active_override_flag
|
|
*/
|
|
WORD8 i1_num_ref_idx_active_override_flag;
|
|
|
|
/**
|
|
* num_ref_idx_l0_active_minus1
|
|
*/
|
|
WORD8 i1_num_ref_idx_l0_active;
|
|
|
|
/**
|
|
* num_ref_idx_l1_active_minus1
|
|
*/
|
|
WORD8 i1_num_ref_idx_l1_active;
|
|
|
|
/**
|
|
* mvd_l1_zero_flag
|
|
*/
|
|
WORD8 i1_mvd_l1_zero_flag;
|
|
|
|
/**
|
|
* cabac_init_flag
|
|
*/
|
|
WORD8 i1_cabac_init_flag;
|
|
|
|
/**
|
|
* collocated_from_l0_flag
|
|
*/
|
|
WORD8 i1_collocated_from_l0_flag;
|
|
|
|
/**
|
|
* collocated_ref_idx
|
|
*/
|
|
WORD8 i1_collocated_ref_idx;
|
|
|
|
/**
|
|
* five_minus_max_num_merge_cand
|
|
*/
|
|
WORD8 i1_max_num_merge_cand;
|
|
|
|
/**
|
|
* slice_qp_delta
|
|
*/
|
|
WORD8 i1_slice_qp_delta;
|
|
|
|
/**
|
|
* slice_cb_qp_offset
|
|
*/
|
|
WORD8 i1_slice_cb_qp_offset;
|
|
|
|
/**
|
|
* slice_cr_qp_offset
|
|
*/
|
|
WORD8 i1_slice_cr_qp_offset;
|
|
|
|
/**
|
|
* deblocking_filter_override_flag
|
|
*/
|
|
WORD8 i1_deblocking_filter_override_flag;
|
|
|
|
/**
|
|
* slice_disable_deblocking_filter_flag
|
|
*/
|
|
WORD8 i1_slice_disable_deblocking_filter_flag;
|
|
|
|
/**
|
|
* beta_offset_div2
|
|
*/
|
|
WORD8 i1_beta_offset_div2;
|
|
|
|
/**
|
|
* tc_offset_div2
|
|
*/
|
|
WORD8 i1_tc_offset_div2;
|
|
|
|
/**
|
|
* slice_loop_filter_across_slices_enabled_flag
|
|
*/
|
|
WORD8 i1_slice_loop_filter_across_slices_enabled_flag;
|
|
|
|
/**
|
|
* NUmber of entry point offsets
|
|
*/
|
|
WORD32 i4_num_entry_point_offsets;
|
|
|
|
/**
|
|
* offset_len_minus1
|
|
*/
|
|
WORD8 i1_offset_len;
|
|
|
|
/**
|
|
* Entry point offsets
|
|
*/
|
|
WORD32 *pu4_entry_point_offset;
|
|
|
|
/**
|
|
* Short term reference picture set
|
|
*/
|
|
stref_picset_t s_stref_picset;
|
|
|
|
/**
|
|
* Weight and offset info for Weighted prediction
|
|
*/
|
|
pred_wt_ofst_t s_wt_ofst;
|
|
|
|
/**
|
|
* Reference prediction list modification
|
|
*/
|
|
rplm_t s_rplm;
|
|
|
|
/**
|
|
* First CTB' X pos : slice_address % i2_pic_wd_in_ctb
|
|
*/
|
|
WORD16 i2_ctb_x;
|
|
|
|
/**
|
|
* First CTB' Y pos : slice_address / i2_pic_wd_in_ctb
|
|
*/
|
|
WORD16 i2_ctb_y;
|
|
|
|
/**
|
|
* L0 Reference pic lists
|
|
*/
|
|
ref_list_t as_ref_pic_list0[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* L1 Reference pic lists
|
|
*/
|
|
ref_list_t as_ref_pic_list1[MAX_DPB_SIZE];
|
|
|
|
/**
|
|
* NAL unit type of the slice
|
|
*/
|
|
WORD8 i1_nal_unit_type;
|
|
|
|
/**
|
|
* Low delay check flag
|
|
*/
|
|
WORD8 i1_low_delay_flag;
|
|
|
|
/**
|
|
* The last independent slice's start ctb_x
|
|
* If the current slice is independent, it is the same as the current CTBs ctb_x
|
|
*/
|
|
WORD16 i2_independent_ctb_x;
|
|
|
|
/**
|
|
* The last independent slice's start ctb_y
|
|
* If the current slice is independent, it is the same as the current CTBs ctb_y
|
|
*/
|
|
WORD16 i2_independent_ctb_y;
|
|
|
|
#ifdef ENABLE_MAIN_REXT_PROFILE
|
|
/**
|
|
* cu_chroma_qp_offset_enabled_flag
|
|
*/
|
|
WORD8 i1_cu_chroma_qp_offset_enabled_flag;
|
|
#endif
|
|
|
|
UWORD8 u1_parse_data_init_done;
|
|
|
|
/**
|
|
* Temporal ID in NAL header
|
|
*/
|
|
WORD32 u4_nuh_temporal_id;
|
|
}slice_header_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* _IHEVC_STRUCTS_H_ */
|