2
0
Ficheiros
rocm-systems/src/parser/avc_defines.h
T
Aryan Salmanpour 3624040ce7 Update Copyright year to 2025 (#486)
* Update Copyright year to 2025

* update year to 2025
2025-01-05 16:25:39 -05:00

337 linhas
20 KiB
C

Este ficheiro contém caracteres Unicode ambíguos
Este ficheiro contém caracteres Unicode que podem ser confundidos com outros caracteres. Se acha que é intencional, pode ignorar este aviso com segurança. Use o botão Revelar para os mostrar.
/*
Copyright (c) 2023 - 2025 Advanced Micro Devices, Inc. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#pragma once
#include <stdint.h>
#define AVC_MAX_SPS_NUM 32
#define AVC_MAX_PPS_NUM 256
#define AVC_MAX_SLICE_NUM 256
#define AVC_MAX_CPB_COUNT 32
#define AVC_MAX_NUM_SLICE_GROUPS_MINUS 8
#define AVC_MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE 256
#define AVC_MAX_REF_FRAME_NUM 16
#define AVC_MAX_REF_PICTURE_NUM 32
#define AVC_MAX_DPB_FRAMES 16
#define AVC_MAX_DPB_FIELDS AVC_MAX_DPB_FRAMES * 2
#define AVC_MACRO_BLOCK_SIZE 16
#define NO_LONG_TERM_FRAME_INDICES -1
// AVC spec. Table 7-1 NAL unit type codes, syntax element categories, and NAL unit type classes.
enum AvcNalUnitType {
kAvcNalTypeUnspecified = 0,
kAvcNalTypeSlice_Non_IDR = 1,
kAvcNalTypeSlice_Data_Partition_A = 2,
kAvcNalTypeSlice_Data_Partition_B = 3,
kAvcNalTypeSlice_Data_Partition_C = 4,
kAvcNalTypeSlice_IDR = 5,
kAvcNalTypeSEI_Info = 6,
kAvcNalTypeSeq_Parameter_Set = 7,
kAvcNalTypePic_Parameter_Set = 8,
kAvcNalTypeAccess_Unit_Delimiter = 9,
kAvcNalTypeEnd_Of_Seq = 10,
kAvcNalTypeEnd_Of_Stream = 11,
kAvcNalTypeFiller_Data = 12,
kAvcNalTypeSeq_Parameter_Set_Ext = 13,
kAvcNalTypePrefix_NAL_Unit = 14,
kAvcNalTypeSubset_Seq_Parameter_Set = 15,
kAvcNalTypeDepth_Parameter_Set = 16,
};
// AVC spec. Table 7-6 Name association to slice_type.
enum AvcSliceType {
kAvcSliceTypeP = 0,
kAvcSliceTypeB = 1,
kAvcSliceTypeI = 2,
kAvcSliceTypeSP = 3,
kAvcSliceTypeSI = 4,
kAvcSliceTypeP_5 = 5,
kAvcSliceTypeB_6 = 6,
kAvcSliceTypeI_7 = 7,
kAvcSliceTypeSP_8 = 8,
kAvcSliceTypeSI_9 = 9
};
// AVC spec. Annex A.2.
enum AvcProfile {
kAvcBaselineProfile = 66,
kAvcMainProfile = 77,
kAvcExtendedProfile = 88,
kAvcHighProfile = 100,
kAvcHigh10Profile = 110,
kAvcHigh422Profile = 122,
kAvcHigh444Profile = 144
};
// AVC spec. Annex A.3.
enum AvcLevel {
kAvcLevel1 = 10,
kAvcLevel1_1 = 11,
kAvcLevel1_2 = 12,
kAvcLevel1_3 = 13,
kAvcLevel2 = 20,
kAvcLevel2_1 = 21,
kAvcLevel2_2 = 22,
kAvcLevel3 = 30,
kAvcLevel3_1 = 31,
kAvcLevel3_2 = 32,
kAvcLevel4 = 40,
kAvcLevel4_1 = 41,
kAvcLevel4_2 = 42,
kAvcLevel5 = 50,
kAvcLevel5_1 = 51,
kAvcLevel5_2 = 52,
kAvcLevel6 = 60,
kAvcLevel6_1 = 61,
kAvcLevel6_2 = 62
};
// NAL unit header syntax. AVC spec. Section 7.3.1.
typedef struct {
uint32_t forbidden_zero_bit; // f(1)
uint32_t nal_ref_idc; // u(2)
uint32_t nal_unit_type; // u(5)
} AvcNalUnitHeader;
// HRD parameters syntax. AVC spec. Section E.1.2.
typedef struct {
uint32_t cpb_cnt_minus1; // ue(v)
uint32_t bit_rate_scale; // u(4)
uint32_t cpb_size_scale; // u(4)
uint32_t bit_rate_value_minus1[AVC_MAX_CPB_COUNT]; // ue(v)
uint32_t cpb_size_value_minus1[AVC_MAX_CPB_COUNT]; // ue(v)
uint32_t cbr_flag[AVC_MAX_CPB_COUNT]; // u(1)
uint32_t initial_cpb_removal_delay_length_minus1; // u(5)
uint32_t cpb_removal_delay_length_minus1; // u(5
uint32_t dpb_output_delay_length_minus1; // u(5)
uint32_t time_offset_length; // u(5)
} AvcHrdParameters;
// VUI parameters syntax. AVC spec. Section E.1.1.
typedef struct {
uint32_t aspect_ratio_info_present_flag; // u(1)
uint32_t aspect_ratio_idc; // u(8)
uint32_t sar_width; // u(16)
uint32_t sar_height; // u(16)
uint32_t overscan_info_present_flag; // u(1)
uint32_t overscan_appropriate_flag; // u(1)
uint32_t video_signal_type_present_flag; // u(1)
uint32_t video_format; // u(3)
uint32_t video_full_range_flag; // u(1)
uint32_t colour_description_present_flag; // u(1)
uint32_t colour_primaries; // u(8)
uint32_t transfer_characteristics; // u(8)
uint32_t matrix_coefficients; // u(8)
uint32_t chroma_loc_info_present_flag; // u(1)
uint32_t chroma_sample_loc_type_top_field; // ue(v)
uint32_t chroma_sample_loc_type_bottom_field; // ue(v)
uint32_t timing_info_present_flag; // u(1)
uint32_t num_units_in_tick; // u(32)
uint32_t time_scale; // u(32)
uint32_t fixed_frame_rate_flag; // u(1)
uint32_t nal_hrd_parameters_present_flag; // u(1)
AvcHrdParameters nal_hrd_parameters; // hrd_paramters()
uint32_t vcl_hrd_parameters_present_flag; // u(1)
AvcHrdParameters vcl_hrd_parameters; // hrd_paramters()
uint32_t low_delay_hrd_flag; // u(1)
uint32_t pic_struct_present_flag; // u(1)
uint32_t bitstream_restriction_flag; // u(1)
uint32_t motion_vectors_over_pic_boundaries_flag; // u(1)
uint32_t max_bytes_per_pic_denom; // ue(v)
uint32_t max_bits_per_mb_denom; // ue(v)
uint32_t log2_max_mv_length_vertical; // ue(v)
uint32_t log2_max_mv_length_horizontal; // ue(v)
uint32_t num_reorder_frames; // ue(v)
uint32_t max_dec_frame_buffering; // ue(v)
} AvcVuiSeqParameters;
// Sequence parameter set data syntax. AVC spec. 7.3.2.1.1.
typedef struct {
uint32_t is_received; // received with seq_parameter_set_id
uint32_t profile_idc; // u(8)
uint32_t constraint_set0_flag; // u(1)
uint32_t constraint_set1_flag; // u(1)
uint32_t constraint_set2_flag; // u(1)
uint32_t constraint_set3_flag; // u(1)
uint32_t constraint_set4_flag; // u(1)
uint32_t constraint_set5_flag; // u(1)
uint32_t reserved_zero_2bits; // u(2)
uint32_t level_idc; // u(8)
uint32_t seq_parameter_set_id; // ue(v)
uint32_t chroma_format_idc; // ue(v)
uint32_t separate_colour_plane_flag; // u(1)
uint32_t bit_depth_luma_minus8; // ue(v)
uint32_t bit_depth_chroma_minus8; // ue(v)
uint32_t qpprime_y_zero_transform_bypass_flag; // u(1)
uint32_t seq_scaling_matrix_present_flag; // u(1)
uint32_t seq_scaling_list_present_flag[12]; // u(1)
uint32_t scaling_list_4x4[6][16]; // ScalingList4x4
uint32_t scaling_list_8x8[6][64]; // ScalingList8x8
uint32_t use_default_scaling_matrix_4x4_flag[6]; // UseDefaultScalingMatrix4x4Flag
uint32_t use_default_scaling_matrix_8x8_flag[6]; // UseDefaultScalingMatrix8x8Flag
uint32_t log2_max_frame_num_minus4; // ue(v)
uint32_t pic_order_cnt_type; // ue(v)
uint32_t log2_max_pic_order_cnt_lsb_minus4; // ue(v)
uint32_t delta_pic_order_always_zero_flag; // u(1)
int32_t offset_for_non_ref_pic; // se(v)
int32_t offset_for_top_to_bottom_field; // se(v)
uint32_t num_ref_frames_in_pic_order_cnt_cycle; // ue(v)
int32_t offset_for_ref_frame[AVC_MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE]; // se(v)
uint32_t max_num_ref_frames; // ue(v)
uint32_t gaps_in_frame_num_value_allowed_flag; // u(1)
uint32_t pic_width_in_mbs_minus1; // ue(v)
uint32_t pic_height_in_map_units_minus1; // ue(v)
uint32_t frame_mbs_only_flag; // u(1)
uint32_t mb_adaptive_frame_field_flag; // u(1)
uint32_t direct_8x8_inference_flag; // u(1)
uint32_t frame_cropping_flag; // u(1)
uint32_t frame_crop_left_offset; // ue(v)
uint32_t frame_crop_right_offset; // ue(v)
uint32_t frame_crop_top_offset; // ue(v)
uint32_t frame_crop_bottom_offset; // ue(v)
uint32_t vui_parameters_present_flag; // u(1)
AvcVuiSeqParameters vui_seq_parameters; // vui_parameters()
} AvcSeqParameterSet;
// Picture parameter set RBSP syntax. AVC Spec. 7.3.2.2.
typedef struct {
uint32_t is_received; // is received with pic_parameter_set_id
uint32_t pic_parameter_set_id; // ue(v)
uint32_t seq_parameter_set_id; // ue(v)
uint32_t entropy_coding_mode_flag; // u(1)
uint32_t bottom_field_pic_order_in_frame_present_flag; // u(1)
uint32_t num_slice_groups_minus1; // ue(v)
uint32_t slice_group_map_type; // ue(v)
uint32_t run_length_minus1[AVC_MAX_NUM_SLICE_GROUPS_MINUS]; // ue(v)
uint32_t top_left[AVC_MAX_NUM_SLICE_GROUPS_MINUS]; // ue(v)
uint32_t bottom_right[AVC_MAX_NUM_SLICE_GROUPS_MINUS]; // ue(v)
uint32_t slice_group_change_direction_flag; // u(1)
uint32_t slice_group_change_rate_minus1; // ue(v)
uint32_t pic_size_in_map_units_minus1; // ue(v)
uint32_t *slice_group_id; // complete MBAmap u(v)
uint32_t num_ref_idx_l0_default_active_minus1; // ue(v)
uint32_t num_ref_idx_l1_default_active_minus1; // ue(v)
uint32_t weighted_pred_flag; // u(1)
uint32_t weighted_bipred_idc; // u(2)
int32_t pic_init_qp_minus26; // se(v)
int32_t pic_init_qs_minus26; // se(v)
int32_t chroma_qp_index_offset; // se(v)
uint32_t deblocking_filter_control_present_flag; // u(1)
uint32_t constrained_intra_pred_flag; // u(1)
uint32_t redundant_pic_cnt_present_flag; // u(1)
uint32_t transform_8x8_mode_flag; // u(1)
uint32_t pic_scaling_matrix_present_flag; // u(1)
uint32_t pic_scaling_list_present_flag[12]; // u(1)
uint32_t scaling_list_4x4[6][16]; // ScalingList4x4
uint32_t scaling_list_8x8[6][64]; // ScalingList8x8
uint32_t use_default_scaling_matrix_4x4_flag[6]; // UseDefaultScalingMatrix4x4Flag
uint32_t use_default_scaling_matrix_8x8_flag[6]; // UseDefaultScalingMatrix8x8Flag
int32_t second_chroma_qp_index_offset; // se(v)
} AvcPicParameterSet;
// Reference picture list modification syntax. AVC spec. 7.3.3.1.
typedef struct {
uint32_t modification_of_pic_nums_idc; // ue(v)
uint32_t abs_diff_pic_num_minus1; // ue(v)
uint32_t long_term_pic_num; // ue(v)
} AvcListMod;
typedef struct {
uint32_t ref_pic_list_modification_flag_l0; // u(1)
AvcListMod modification_l0[AVC_MAX_REF_PICTURE_NUM];
uint32_t ref_pic_list_modification_flag_l1; // u(1)
AvcListMod modification_l1[AVC_MAX_REF_PICTURE_NUM];
} AvcRefPicListMod;
// Prediction weight table syntax. AVC spec. 7.3.3.2.
typedef struct {
uint32_t luma_weight_l0_flag; // u(1)
int32_t luma_weight_l0; // se(v)
int32_t luma_offset_l0; // se(v)
uint32_t chroma_weight_l0_flag; // u(1)
int32_t chroma_weight_l0[2]; // se(v)
int32_t chroma_offset_l0[2]; // se(v)
uint32_t luma_weight_l1_flag; // u(1)
int32_t luma_weight_l1; // se(v)
int32_t luma_offset_l1; // se(v)
uint32_t chroma_weight_l1_flag; // u(1)
int32_t chroma_weight_l1[2]; // se(v)
int32_t chroma_offset_l1[2]; // se(v)
} AvcWeightFactor;
typedef struct {
uint32_t luma_log2_weight_denom; // ue(v)
uint32_t chroma_log2_weight_denom; // ue(v)
AvcWeightFactor weight_factor[AVC_MAX_REF_PICTURE_NUM];
} AvcPredWeightTable;
// Decoded reference picture marking syntax. AVC spec. 7.3.3.3.
typedef struct {
uint32_t memory_management_control_operation; // ue(v)
uint32_t difference_of_pic_nums_minus1; // ue(v)
uint32_t long_term_pic_num; // ue(v)
uint32_t long_term_frame_idx; // ue(v)
uint32_t max_long_term_frame_idx_plus1; // ue(v)
} AvcMmco;
typedef struct {
uint32_t no_output_of_prior_pics_flag; // u(1)
uint32_t long_term_reference_flag; // u(1)
uint32_t adaptive_ref_pic_marking_mode_flag; // u(1)
AvcMmco mmco[AVC_MAX_REF_PICTURE_NUM];
uint32_t mmco_count;
} AvcDecRefPicMarking;
// Slice header syntax. AVC Spec. 7.3.3.
typedef struct {
uint32_t first_mb_in_slice; // ue(v)
uint32_t slice_type; // ue(v)
uint32_t pic_parameter_set_id; // ue(v)
uint32_t colour_plane_id; // u(2)
uint32_t frame_num; // u(v)
uint32_t field_pic_flag; // u(1)
uint32_t bottom_field_flag; // u(1)
uint32_t idr_pic_id; // ue(v)
uint32_t pic_order_cnt_lsb; // u(v)
int32_t delta_pic_order_cnt_bottom; // se(v)
int32_t delta_pic_order_cnt[2]; // se(v)
uint32_t redundant_pic_cnt; // ue(v)
uint32_t direct_spatial_mv_pred_flag; // u(1)
uint32_t num_ref_idx_active_override_flag; // u(1)
uint32_t num_ref_idx_l0_active_minus1; // ue(v)
uint32_t num_ref_idx_l1_active_minus1; // ue(v)
AvcRefPicListMod ref_pic_list;
AvcPredWeightTable pred_weight_table;
AvcDecRefPicMarking dec_ref_pic_marking;
uint32_t cabac_init_idc; // ue(v)
int32_t slice_qp_delta; // se(v)
uint32_t sp_for_switch_flag; // u(1)
int32_t slice_qs_delta; // se(v)
uint32_t disable_deblocking_filter_idc; // ue(v)
int32_t slice_alpha_c0_offset_div2; // se(v)
int32_t slice_beta_offset_div2; // se(v)
uint32_t slice_group_change_cycle; // u(v)
} AvcSliceHeader;