* [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields
@ 2024-03-20 23:17 James Almer
2024-03-20 23:17 ` [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs James Almer
2024-03-21 17:14 ` [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields Lynne
0 siblings, 2 replies; 4+ messages in thread
From: James Almer @ 2024-03-20 23:17 UTC (permalink / raw)
To: ffmpeg-devel
These were defined in a way compatible with the Vulkan HEVC acceleration, which
expects bitmasks, yet the fields were being overwritting on each loop with the
latest read value.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/hevc_ps.c | 44 ++++++++++++++++++++++------------------
libavcodec/hevc_ps.h | 15 +++++++-------
libavcodec/vulkan_hevc.c | 16 +++++++--------
3 files changed, 40 insertions(+), 35 deletions(-)
diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
index fb997066d9..20ceb09829 100644
--- a/libavcodec/hevc_ps.c
+++ b/libavcodec/hevc_ps.c
@@ -370,7 +370,7 @@ static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb,
par->bit_rate_du_value_minus1[i] = get_ue_golomb_long(gb);
}
- par->cbr_flag = get_bits1(gb);
+ par->cbr_flag |= get_bits1(gb) << i;
}
}
@@ -378,24 +378,24 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present,
HEVCHdrParams *hdr, int max_sublayers)
{
if (common_inf_present) {
- hdr->flags.nal_hrd_parameters_present_flag = get_bits1(gb);
- hdr->flags.vcl_hrd_parameters_present_flag = get_bits1(gb);
+ hdr->nal_hrd_parameters_present_flag = get_bits1(gb);
+ hdr->vcl_hrd_parameters_present_flag = get_bits1(gb);
- if (hdr->flags.nal_hrd_parameters_present_flag ||
- hdr->flags.vcl_hrd_parameters_present_flag) {
- hdr->flags.sub_pic_hrd_params_present_flag = get_bits1(gb);
+ if (hdr->nal_hrd_parameters_present_flag ||
+ hdr->vcl_hrd_parameters_present_flag) {
+ hdr->sub_pic_hrd_params_present_flag = get_bits1(gb);
- if (hdr->flags.sub_pic_hrd_params_present_flag) {
+ if (hdr->sub_pic_hrd_params_present_flag) {
hdr->tick_divisor_minus2 = get_bits(gb, 8);
hdr->du_cpb_removal_delay_increment_length_minus1 = get_bits(gb, 5);
- hdr->flags.sub_pic_cpb_params_in_pic_timing_sei_flag = get_bits1(gb);
+ hdr->sub_pic_cpb_params_in_pic_timing_sei_flag = get_bits1(gb);
hdr->dpb_output_delay_du_length_minus1 = get_bits(gb, 5);
}
hdr->bit_rate_scale = get_bits(gb, 4);
hdr->cpb_size_scale = get_bits(gb, 4);
- if (hdr->flags.sub_pic_hrd_params_present_flag)
+ if (hdr->sub_pic_hrd_params_present_flag)
hdr->cpb_size_du_scale = get_bits(gb, 4);
hdr->initial_cpb_removal_delay_length_minus1 = get_bits(gb, 5);
@@ -405,18 +405,22 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present,
}
for (int i = 0; i < max_sublayers; i++) {
- hdr->flags.fixed_pic_rate_general_flag = get_bits1(gb);
+ unsigned fixed_pic_rate_general_flag = get_bits1(gb);
+ unsigned fixed_pic_rate_within_cvs_flag = 0;
+ unsigned low_delay_hrd_flag = 0;
+ hdr->flags.fixed_pic_rate_general_flag |= fixed_pic_rate_general_flag << i;
- if (!hdr->flags.fixed_pic_rate_general_flag)
- hdr->flags.fixed_pic_rate_within_cvs_flag = get_bits1(gb);
+ if (!fixed_pic_rate_general_flag)
+ fixed_pic_rate_within_cvs_flag = get_bits1(gb);
+ hdr->flags.fixed_pic_rate_within_cvs_flag |= fixed_pic_rate_within_cvs_flag << i;
- if (hdr->flags.fixed_pic_rate_within_cvs_flag ||
- hdr->flags.fixed_pic_rate_general_flag)
+ if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
hdr->elemental_duration_in_tc_minus1[i] = get_ue_golomb_long(gb);
else
- hdr->flags.low_delay_hrd_flag = get_bits1(gb);
+ low_delay_hrd_flag = get_bits1(gb);
+ hdr->flags.low_delay_hrd_flag |= low_delay_hrd_flag << i;
- if (!hdr->flags.low_delay_hrd_flag) {
+ if (!low_delay_hrd_flag) {
unsigned cpb_cnt_minus1 = get_ue_golomb_long(gb);
if (cpb_cnt_minus1 > 31) {
av_log(NULL, AV_LOG_ERROR, "nb_cpb %d invalid\n",
@@ -426,13 +430,13 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present,
hdr->cpb_cnt_minus1[i] = cpb_cnt_minus1;
}
- if (hdr->flags.nal_hrd_parameters_present_flag)
+ if (hdr->nal_hrd_parameters_present_flag)
decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->nal_params[i],
- hdr->flags.sub_pic_hrd_params_present_flag);
+ hdr->sub_pic_hrd_params_present_flag);
- if (hdr->flags.vcl_hrd_parameters_present_flag)
+ if (hdr->vcl_hrd_parameters_present_flag)
decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->vcl_params[i],
- hdr->flags.sub_pic_hrd_params_present_flag);
+ hdr->sub_pic_hrd_params_present_flag);
}
return 0;
diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h
index 786c896709..88d6f617b5 100644
--- a/libavcodec/hevc_ps.h
+++ b/libavcodec/hevc_ps.h
@@ -39,18 +39,19 @@ typedef struct HEVCSublayerHdrParams {
uint32_t cbr_flag;
} HEVCSublayerHdrParams;
+// flags in bitmask form
typedef struct HEVCHdrFlagParams {
- uint32_t nal_hrd_parameters_present_flag;
- uint32_t vcl_hrd_parameters_present_flag;
- uint32_t sub_pic_hrd_params_present_flag;
- uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag;
- uint32_t fixed_pic_rate_general_flag;
- uint32_t fixed_pic_rate_within_cvs_flag;
- uint32_t low_delay_hrd_flag;
+ uint8_t fixed_pic_rate_general_flag;
+ uint8_t fixed_pic_rate_within_cvs_flag;
+ uint8_t low_delay_hrd_flag;
} HEVCHdrFlagParams;
typedef struct HEVCHdrParams {
HEVCHdrFlagParams flags;
+ uint8_t nal_hrd_parameters_present_flag;
+ uint8_t vcl_hrd_parameters_present_flag;
+ uint8_t sub_pic_hrd_params_present_flag;
+ uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag;
uint8_t tick_divisor_minus2;
uint8_t du_cpb_removal_delay_increment_length_minus1;
diff --git a/libavcodec/vulkan_hevc.c b/libavcodec/vulkan_hevc.c
index e2acc35612..239bff75e5 100644
--- a/libavcodec/vulkan_hevc.c
+++ b/libavcodec/vulkan_hevc.c
@@ -250,10 +250,10 @@ static void set_sps(const HEVCSPS *sps, int sps_idx,
*vksps_vui_header = (StdVideoH265HrdParameters) {
.flags = (StdVideoH265HrdFlags) {
- .nal_hrd_parameters_present_flag = sps->hdr.flags.nal_hrd_parameters_present_flag,
- .vcl_hrd_parameters_present_flag = sps->hdr.flags.vcl_hrd_parameters_present_flag,
- .sub_pic_hrd_params_present_flag = sps->hdr.flags.sub_pic_hrd_params_present_flag,
- .sub_pic_cpb_params_in_pic_timing_sei_flag = sps->hdr.flags.sub_pic_cpb_params_in_pic_timing_sei_flag,
+ .nal_hrd_parameters_present_flag = sps->hdr.nal_hrd_parameters_present_flag,
+ .vcl_hrd_parameters_present_flag = sps->hdr.vcl_hrd_parameters_present_flag,
+ .sub_pic_hrd_params_present_flag = sps->hdr.sub_pic_hrd_params_present_flag,
+ .sub_pic_cpb_params_in_pic_timing_sei_flag = sps->hdr.sub_pic_cpb_params_in_pic_timing_sei_flag,
.fixed_pic_rate_general_flag = sps->hdr.flags.fixed_pic_rate_general_flag,
.fixed_pic_rate_within_cvs_flag = sps->hdr.flags.fixed_pic_rate_within_cvs_flag,
.low_delay_hrd_flag = sps->hdr.flags.low_delay_hrd_flag,
@@ -567,10 +567,10 @@ static void set_vps(const HEVCVPS *vps,
sls_hdr[i] = (StdVideoH265HrdParameters) {
.flags = (StdVideoH265HrdFlags) {
- .nal_hrd_parameters_present_flag = src->flags.nal_hrd_parameters_present_flag,
- .vcl_hrd_parameters_present_flag = src->flags.vcl_hrd_parameters_present_flag,
- .sub_pic_hrd_params_present_flag = src->flags.sub_pic_hrd_params_present_flag,
- .sub_pic_cpb_params_in_pic_timing_sei_flag = src->flags.sub_pic_cpb_params_in_pic_timing_sei_flag,
+ .nal_hrd_parameters_present_flag = src->nal_hrd_parameters_present_flag,
+ .vcl_hrd_parameters_present_flag = src->vcl_hrd_parameters_present_flag,
+ .sub_pic_hrd_params_present_flag = src->sub_pic_hrd_params_present_flag,
+ .sub_pic_cpb_params_in_pic_timing_sei_flag = src->sub_pic_cpb_params_in_pic_timing_sei_flag,
.fixed_pic_rate_general_flag = src->flags.fixed_pic_rate_general_flag,
.fixed_pic_rate_within_cvs_flag = src->flags.fixed_pic_rate_within_cvs_flag,
.low_delay_hrd_flag = src->flags.low_delay_hrd_flag,
--
2.44.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs
2024-03-20 23:17 [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields James Almer
@ 2024-03-20 23:17 ` James Almer
2024-03-20 23:43 ` James Almer
2024-03-21 17:14 ` [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields Lynne
1 sibling, 1 reply; 4+ messages in thread
From: James Almer @ 2024-03-20 23:17 UTC (permalink / raw)
To: ffmpeg-devel
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/hevc_ps.h | 190 +++++++++++++++++++++----------------------
1 file changed, 91 insertions(+), 99 deletions(-)
diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h
index 88d6f617b5..9cdec9b6c1 100644
--- a/libavcodec/hevc_ps.h
+++ b/libavcodec/hevc_ps.h
@@ -48,10 +48,10 @@ typedef struct HEVCHdrFlagParams {
typedef struct HEVCHdrParams {
HEVCHdrFlagParams flags;
- uint8_t nal_hrd_parameters_present_flag;
- uint8_t vcl_hrd_parameters_present_flag;
- uint8_t sub_pic_hrd_params_present_flag;
- uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag;
+ uint8_t nal_hrd_parameters_present_flag : 1;
+ uint8_t vcl_hrd_parameters_present_flag : 1;
+ uint8_t sub_pic_hrd_params_present_flag : 1;
+ uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
uint8_t tick_divisor_minus2;
uint8_t du_cpb_removal_delay_increment_length_minus1;
@@ -93,31 +93,28 @@ typedef struct HEVCWindow {
typedef struct VUI {
H2645VUI common;
-
- int neutra_chroma_indication_flag;
-
- int field_seq_flag;
- int frame_field_info_present_flag;
-
- int default_display_window_flag;
HEVCWindow def_disp_win;
- int vui_timing_info_present_flag;
uint32_t vui_num_units_in_tick;
uint32_t vui_time_scale;
- int vui_poc_proportional_to_timing_flag;
int vui_num_ticks_poc_diff_one_minus1;
- int vui_hrd_parameters_present_flag;
-
- int bitstream_restriction_flag;
- int tiles_fixed_structure_flag;
- int motion_vectors_over_pic_boundaries_flag;
- int restricted_ref_pic_lists_flag;
int min_spatial_segmentation_idc;
int max_bytes_per_pic_denom;
int max_bits_per_min_cu_denom;
int log2_max_mv_length_horizontal;
int log2_max_mv_length_vertical;
+
+ uint8_t neutra_chroma_indication_flag : 1;
+ uint8_t field_seq_flag : 1;
+ uint8_t frame_field_info_present_flag : 1;
+ uint8_t default_display_window_flag : 1;
+ uint8_t vui_timing_info_present_flag : 1;
+ uint8_t vui_poc_proportional_to_timing_flag : 1;
+ uint8_t vui_hrd_parameters_present_flag : 1;
+ uint8_t bitstream_restriction_flag : 1;
+ uint8_t tiles_fixed_structure_flag : 1;
+ uint8_t motion_vectors_over_pic_boundaries_flag : 1;
+ uint8_t restricted_ref_pic_lists_flag : 1;
} VUI;
typedef struct PTLCommon {
@@ -125,21 +122,21 @@ typedef struct PTLCommon {
uint8_t tier_flag;
uint8_t profile_idc;
uint8_t profile_compatibility_flag[32];
- uint8_t progressive_source_flag;
- uint8_t interlaced_source_flag;
- uint8_t non_packed_constraint_flag;
- uint8_t frame_only_constraint_flag;
- uint8_t max_12bit_constraint_flag;
- uint8_t max_10bit_constraint_flag;
- uint8_t max_8bit_constraint_flag;
- uint8_t max_422chroma_constraint_flag;
- uint8_t max_420chroma_constraint_flag;
- uint8_t max_monochrome_constraint_flag;
- uint8_t intra_constraint_flag;
- uint8_t one_picture_only_constraint_flag;
- uint8_t lower_bit_rate_constraint_flag;
- uint8_t max_14bit_constraint_flag;
- uint8_t inbld_flag;
+ uint8_t progressive_source_flag : 1;
+ uint8_t interlaced_source_flag : 1;
+ uint8_t non_packed_constraint_flag : 1;
+ uint8_t frame_only_constraint_flag : 1;
+ uint8_t max_12bit_constraint_flag : 1;
+ uint8_t max_10bit_constraint_flag : 1;
+ uint8_t max_8bit_constraint_flag : 1;
+ uint8_t max_422chroma_constraint_flag : 1;
+ uint8_t max_420chroma_constraint_flag : 1;
+ uint8_t max_monochrome_constraint_flag : 1;
+ uint8_t intra_constraint_flag : 1;
+ uint8_t one_picture_only_constraint_flag : 1;
+ uint8_t lower_bit_rate_constraint_flag : 1;
+ uint8_t max_14bit_constraint_flag : 1;
+ uint8_t inbld_flag : 1;
uint8_t level_idc;
} PTLCommon;
@@ -155,21 +152,22 @@ typedef struct HEVCVPS {
unsigned int vps_id;
HEVCHdrParams hdr[HEVC_MAX_LAYER_SETS];
- uint8_t vps_temporal_id_nesting_flag;
+ uint8_t vps_temporal_id_nesting_flag : 1;
+ uint8_t vps_sub_layer_ordering_info_present_flag : 1;
+ uint8_t vps_timing_info_present_flag : 1;
+ uint8_t vps_poc_proportional_to_timing_flag : 1;
int vps_max_layers;
int vps_max_sub_layers; ///< vps_max_temporal_layers_minus1 + 1
PTL ptl;
- int vps_sub_layer_ordering_info_present_flag;
- unsigned int vps_max_dec_pic_buffering[HEVC_MAX_SUB_LAYERS];
- unsigned int vps_num_reorder_pics[HEVC_MAX_SUB_LAYERS];
+
+ uint8_t vps_max_dec_pic_buffering[HEVC_MAX_SUB_LAYERS];
+ uint8_t vps_num_reorder_pics[HEVC_MAX_SUB_LAYERS];
unsigned int vps_max_latency_increase[HEVC_MAX_SUB_LAYERS];
int vps_max_layer_id;
int vps_num_layer_sets; ///< vps_num_layer_sets_minus1 + 1
- uint8_t vps_timing_info_present_flag;
uint32_t vps_num_units_in_tick;
uint32_t vps_time_scale;
- uint8_t vps_poc_proportional_to_timing_flag;
int vps_num_ticks_poc_diff_one; ///< vps_num_ticks_poc_diff_one_minus1 + 1
int vps_num_hrd_parameters;
@@ -187,11 +185,17 @@ typedef struct ScalingList {
typedef struct HEVCSPS {
unsigned vps_id;
int chroma_format_idc;
- uint8_t separate_colour_plane_flag;
+ uint8_t separate_colour_plane_flag : 1;
+ uint8_t conformance_window_flag : 1;
+ uint8_t sublayer_ordering_info_flag : 1;
+ uint8_t temporal_id_nesting_flag : 1;
+ uint8_t sps_extension_present_flag : 1;
+ uint8_t scaling_list_enable_flag : 1;
+ uint8_t sps_temporal_mvp_enabled_flag : 1;
+ uint8_t sps_strong_intra_smoothing_enable_flag : 1;
HEVCWindow output_window;
- uint8_t conformance_window_flag;
HEVCWindow pic_conf_win;
HEVCHdrParams hdr;
@@ -204,21 +208,17 @@ typedef struct HEVCSPS {
unsigned int log2_max_poc_lsb;
int pcm_enabled_flag;
- uint8_t sublayer_ordering_info_flag;
int max_sub_layers;
struct {
int max_dec_pic_buffering;
int num_reorder_pics;
int max_latency_increase;
} temporal_layer[HEVC_MAX_SUB_LAYERS];
- uint8_t temporal_id_nesting_flag;
int vui_present;
VUI vui;
PTL ptl;
- uint8_t sps_extension_present_flag;
- uint8_t scaling_list_enable_flag;
ScalingList scaling_list;
unsigned int nb_st_rps;
@@ -239,8 +239,6 @@ typedef struct HEVCSPS {
unsigned int log2_max_pcm_cb_size;
uint8_t loop_filter_disable_flag;
} pcm;
- uint8_t sps_temporal_mvp_enabled_flag;
- uint8_t sps_strong_intra_smoothing_enable_flag;
unsigned int log2_min_cb_size;
unsigned int log2_diff_max_min_coding_block_size;
@@ -253,30 +251,29 @@ typedef struct HEVCSPS {
int max_transform_hierarchy_depth_inter;
int max_transform_hierarchy_depth_intra;
- int sps_range_extension_flag;
- int transform_skip_rotation_enabled_flag;
- int transform_skip_context_enabled_flag;
- int implicit_rdpcm_enabled_flag;
- int explicit_rdpcm_enabled_flag;
- int extended_precision_processing_flag;
- int intra_smoothing_disabled_flag;
- int high_precision_offsets_enabled_flag;
- int persistent_rice_adaptation_enabled_flag;
- int cabac_bypass_alignment_enabled_flag;
-
- int sps_multilayer_extension_flag;
- int sps_3d_extension_flag;
-
- int sps_scc_extension_flag;
- int sps_curr_pic_ref_enabled_flag;
- int palette_mode_enabled_flag;
+ uint8_t sps_range_extension_flag : 1;
+ uint8_t transform_skip_rotation_enabled_flag : 1;
+ uint8_t transform_skip_context_enabled_flag : 1;
+ uint8_t implicit_rdpcm_enabled_flag : 1;
+ uint8_t explicit_rdpcm_enabled_flag : 1;
+ uint8_t extended_precision_processing_flag : 1;
+ uint8_t intra_smoothing_disabled_flag : 1;
+ uint8_t high_precision_offsets_enabled_flag : 1;
+ uint8_t persistent_rice_adaptation_enabled_flag : 1;
+ uint8_t cabac_bypass_alignment_enabled_flag : 1;
+ uint8_t sps_multilayer_extension_flag : 1;
+ uint8_t sps_3d_extension_flag : 1;
+ uint8_t sps_scc_extension_flag : 1;
+ uint8_t sps_curr_pic_ref_enabled_flag : 1;
+ uint8_t palette_mode_enabled_flag : 1;
+ uint8_t intra_boundary_filtering_disabled_flag : 1;
+
int palette_max_size;
int delta_palette_max_predictor_size;
int sps_palette_predictor_initializers_present_flag;
int sps_num_palette_predictor_initializers;
int sps_palette_predictor_initializer[3][HEVC_MAX_PALETTE_PREDICTOR_SIZE];
int motion_vector_resolution_control_idc;
- int intra_boundary_filtering_disabled_flag;
///< coded frame dimension in various units
int width;
@@ -305,60 +302,55 @@ typedef struct HEVCPPS {
unsigned int pps_id;
unsigned int sps_id; ///< seq_parameter_set_id
- uint8_t sign_data_hiding_flag;
-
- uint8_t cabac_init_present_flag;
+ uint8_t sign_data_hiding_flag : 1;
+ uint8_t cabac_init_present_flag : 1;
+ uint8_t pic_slice_level_chroma_qp_offsets_present_flag : 1;
+ uint8_t weighted_pred_flag : 1;
+ uint8_t weighted_bipred_flag : 1;
+ uint8_t output_flag_present_flag : 1;
+ uint8_t transquant_bypass_enable_flag : 1;
+ uint8_t dependent_slice_segments_enabled_flag : 1;
+ uint8_t tiles_enabled_flag : 1;
+ uint8_t entropy_coding_sync_enabled_flag : 1;
+ uint8_t constrained_intra_pred_flag : 1;
+ uint8_t transform_skip_enabled_flag : 1;
+ uint8_t cu_qp_delta_enabled_flag : 1;
+ uint8_t uniform_spacing_flag : 1;
+ uint8_t loop_filter_across_tiles_enabled_flag : 1;
+ uint8_t seq_loop_filter_across_slices_enabled_flag : 1;
+ uint8_t deblocking_filter_control_present_flag : 1;
+ uint8_t deblocking_filter_override_enabled_flag : 1;
+ uint8_t scaling_list_data_present_flag : 1;
+ uint8_t lists_modification_present_flag : 1;
+ uint8_t slice_header_extension_present_flag : 1;
+ uint8_t pps_extension_present_flag : 1;
+ uint8_t pps_range_extensions_flag : 1;
+ uint8_t pps_multilayer_extension_flag : 1;
+ uint8_t pps_3d_extension_flag : 1;
+ uint8_t pps_scc_extension_flag : 1;
+ uint8_t cross_component_prediction_enabled_flag : 1;
+ uint8_t chroma_qp_offset_list_enabled_flag : 1;
int num_ref_idx_l0_default_active; ///< num_ref_idx_l0_default_active_minus1 + 1
int num_ref_idx_l1_default_active; ///< num_ref_idx_l1_default_active_minus1 + 1
int pic_init_qp_minus26;
- uint8_t constrained_intra_pred_flag;
- uint8_t transform_skip_enabled_flag;
-
- uint8_t cu_qp_delta_enabled_flag;
int diff_cu_qp_delta_depth;
int cb_qp_offset;
int cr_qp_offset;
- uint8_t pic_slice_level_chroma_qp_offsets_present_flag;
- uint8_t weighted_pred_flag;
- uint8_t weighted_bipred_flag;
- uint8_t output_flag_present_flag;
- uint8_t transquant_bypass_enable_flag;
-
- uint8_t dependent_slice_segments_enabled_flag;
- uint8_t tiles_enabled_flag;
- uint8_t entropy_coding_sync_enabled_flag;
uint16_t num_tile_columns; ///< num_tile_columns_minus1 + 1
uint16_t num_tile_rows; ///< num_tile_rows_minus1 + 1
- uint8_t uniform_spacing_flag;
- uint8_t loop_filter_across_tiles_enabled_flag;
-
- uint8_t seq_loop_filter_across_slices_enabled_flag;
-
- uint8_t deblocking_filter_control_present_flag;
- uint8_t deblocking_filter_override_enabled_flag;
uint8_t disable_dbf;
int beta_offset; ///< beta_offset_div2 * 2
int tc_offset; ///< tc_offset_div2 * 2
- uint8_t scaling_list_data_present_flag;
ScalingList scaling_list;
- uint8_t lists_modification_present_flag;
int log2_parallel_merge_level; ///< log2_parallel_merge_level_minus2 + 2
int num_extra_slice_header_bits;
- uint8_t slice_header_extension_present_flag;
uint8_t log2_max_transform_skip_block_size;
- uint8_t pps_extension_present_flag;
- uint8_t pps_range_extensions_flag;
- uint8_t pps_multilayer_extension_flag;
- uint8_t pps_3d_extension_flag;
- uint8_t pps_scc_extension_flag;
- uint8_t cross_component_prediction_enabled_flag;
- uint8_t chroma_qp_offset_list_enabled_flag;
uint8_t diff_cu_chroma_qp_offset_depth;
uint8_t chroma_qp_offset_list_len_minus1;
int8_t cb_qp_offset_list[6];
--
2.44.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs
2024-03-20 23:17 ` [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs James Almer
@ 2024-03-20 23:43 ` James Almer
0 siblings, 0 replies; 4+ messages in thread
From: James Almer @ 2024-03-20 23:43 UTC (permalink / raw)
To: ffmpeg-devel
On 3/20/2024 8:17 PM, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> libavcodec/hevc_ps.h | 190 +++++++++++++++++++++----------------------
> 1 file changed, 91 insertions(+), 99 deletions(-)
>
> diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h
> index 88d6f617b5..9cdec9b6c1 100644
> --- a/libavcodec/hevc_ps.h
> +++ b/libavcodec/hevc_ps.h
> @@ -48,10 +48,10 @@ typedef struct HEVCHdrFlagParams {
This patch is not really worth applying after i came up with
"avcodec/hevc_ps: allocate only the required HEVCHdrParams within a
VPS", so i guess i'll withdraw it.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields
2024-03-20 23:17 [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields James Almer
2024-03-20 23:17 ` [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs James Almer
@ 2024-03-21 17:14 ` Lynne
1 sibling, 0 replies; 4+ messages in thread
From: Lynne @ 2024-03-21 17:14 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Mar 21, 2024, 00:17 by jamrial@gmail.com:
> These were defined in a way compatible with the Vulkan HEVC acceleration, which
> expects bitmasks, yet the fields were being overwritting on each loop with the
> latest read value.
>
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> libavcodec/hevc_ps.c | 44 ++++++++++++++++++++++------------------
> libavcodec/hevc_ps.h | 15 +++++++-------
> libavcodec/vulkan_hevc.c | 16 +++++++--------
> 3 files changed, 40 insertions(+), 35 deletions(-)
>
> diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
> index fb997066d9..20ceb09829 100644
> --- a/libavcodec/hevc_ps.c
> +++ b/libavcodec/hevc_ps.c
> @@ -370,7 +370,7 @@ static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb,
> par->bit_rate_du_value_minus1[i] = get_ue_golomb_long(gb);
> }
>
> - par->cbr_flag = get_bits1(gb);
> + par->cbr_flag |= get_bits1(gb) << i;
> }
> }
>
> @@ -378,24 +378,24 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present,
> HEVCHdrParams *hdr, int max_sublayers)
> {
> if (common_inf_present) {
> - hdr->flags.nal_hrd_parameters_present_flag = get_bits1(gb);
> - hdr->flags.vcl_hrd_parameters_present_flag = get_bits1(gb);
> + hdr->nal_hrd_parameters_present_flag = get_bits1(gb);
> + hdr->vcl_hrd_parameters_present_flag = get_bits1(gb);
>
> - if (hdr->flags.nal_hrd_parameters_present_flag ||
> - hdr->flags.vcl_hrd_parameters_present_flag) {
> - hdr->flags.sub_pic_hrd_params_present_flag = get_bits1(gb);
> + if (hdr->nal_hrd_parameters_present_flag ||
> + hdr->vcl_hrd_parameters_present_flag) {
> + hdr->sub_pic_hrd_params_present_flag = get_bits1(gb);
>
> - if (hdr->flags.sub_pic_hrd_params_present_flag) {
> + if (hdr->sub_pic_hrd_params_present_flag) {
> hdr->tick_divisor_minus2 = get_bits(gb, 8);
> hdr->du_cpb_removal_delay_increment_length_minus1 = get_bits(gb, 5);
> - hdr->flags.sub_pic_cpb_params_in_pic_timing_sei_flag = get_bits1(gb);
> + hdr->sub_pic_cpb_params_in_pic_timing_sei_flag = get_bits1(gb);
> hdr->dpb_output_delay_du_length_minus1 = get_bits(gb, 5);
> }
>
> hdr->bit_rate_scale = get_bits(gb, 4);
> hdr->cpb_size_scale = get_bits(gb, 4);
>
> - if (hdr->flags.sub_pic_hrd_params_present_flag)
> + if (hdr->sub_pic_hrd_params_present_flag)
> hdr->cpb_size_du_scale = get_bits(gb, 4);
>
> hdr->initial_cpb_removal_delay_length_minus1 = get_bits(gb, 5);
> @@ -405,18 +405,22 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present,
> }
>
> for (int i = 0; i < max_sublayers; i++) {
> - hdr->flags.fixed_pic_rate_general_flag = get_bits1(gb);
> + unsigned fixed_pic_rate_general_flag = get_bits1(gb);
> + unsigned fixed_pic_rate_within_cvs_flag = 0;
> + unsigned low_delay_hrd_flag = 0;
> + hdr->flags.fixed_pic_rate_general_flag |= fixed_pic_rate_general_flag << i;
>
> - if (!hdr->flags.fixed_pic_rate_general_flag)
> - hdr->flags.fixed_pic_rate_within_cvs_flag = get_bits1(gb);
> + if (!fixed_pic_rate_general_flag)
> + fixed_pic_rate_within_cvs_flag = get_bits1(gb);
> + hdr->flags.fixed_pic_rate_within_cvs_flag |= fixed_pic_rate_within_cvs_flag << i;
>
> - if (hdr->flags.fixed_pic_rate_within_cvs_flag ||
> - hdr->flags.fixed_pic_rate_general_flag)
> + if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
> hdr->elemental_duration_in_tc_minus1[i] = get_ue_golomb_long(gb);
> else
> - hdr->flags.low_delay_hrd_flag = get_bits1(gb);
> + low_delay_hrd_flag = get_bits1(gb);
> + hdr->flags.low_delay_hrd_flag |= low_delay_hrd_flag << i;
>
> - if (!hdr->flags.low_delay_hrd_flag) {
> + if (!low_delay_hrd_flag) {
> unsigned cpb_cnt_minus1 = get_ue_golomb_long(gb);
> if (cpb_cnt_minus1 > 31) {
> av_log(NULL, AV_LOG_ERROR, "nb_cpb %d invalid\n",
> @@ -426,13 +430,13 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present,
> hdr->cpb_cnt_minus1[i] = cpb_cnt_minus1;
> }
>
> - if (hdr->flags.nal_hrd_parameters_present_flag)
> + if (hdr->nal_hrd_parameters_present_flag)
> decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->nal_params[i],
> - hdr->flags.sub_pic_hrd_params_present_flag);
> + hdr->sub_pic_hrd_params_present_flag);
>
> - if (hdr->flags.vcl_hrd_parameters_present_flag)
> + if (hdr->vcl_hrd_parameters_present_flag)
> decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->vcl_params[i],
> - hdr->flags.sub_pic_hrd_params_present_flag);
> + hdr->sub_pic_hrd_params_present_flag);
> }
>
> return 0;
> diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h
> index 786c896709..88d6f617b5 100644
> --- a/libavcodec/hevc_ps.h
> +++ b/libavcodec/hevc_ps.h
> @@ -39,18 +39,19 @@ typedef struct HEVCSublayerHdrParams {
> uint32_t cbr_flag;
> } HEVCSublayerHdrParams;
>
> +// flags in bitmask form
> typedef struct HEVCHdrFlagParams {
> - uint32_t nal_hrd_parameters_present_flag;
> - uint32_t vcl_hrd_parameters_present_flag;
> - uint32_t sub_pic_hrd_params_present_flag;
> - uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag;
> - uint32_t fixed_pic_rate_general_flag;
> - uint32_t fixed_pic_rate_within_cvs_flag;
> - uint32_t low_delay_hrd_flag;
> + uint8_t fixed_pic_rate_general_flag;
> + uint8_t fixed_pic_rate_within_cvs_flag;
> + uint8_t low_delay_hrd_flag;
> } HEVCHdrFlagParams;
>
> typedef struct HEVCHdrParams {
> HEVCHdrFlagParams flags;
> + uint8_t nal_hrd_parameters_present_flag;
> + uint8_t vcl_hrd_parameters_present_flag;
> + uint8_t sub_pic_hrd_params_present_flag;
> + uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag;
>
> uint8_t tick_divisor_minus2;
> uint8_t du_cpb_removal_delay_increment_length_minus1;
> diff --git a/libavcodec/vulkan_hevc.c b/libavcodec/vulkan_hevc.c
> index e2acc35612..239bff75e5 100644
> --- a/libavcodec/vulkan_hevc.c
> +++ b/libavcodec/vulkan_hevc.c
> @@ -250,10 +250,10 @@ static void set_sps(const HEVCSPS *sps, int sps_idx,
>
> *vksps_vui_header = (StdVideoH265HrdParameters) {
> .flags = (StdVideoH265HrdFlags) {
> - .nal_hrd_parameters_present_flag = sps->hdr.flags.nal_hrd_parameters_present_flag,
> - .vcl_hrd_parameters_present_flag = sps->hdr.flags.vcl_hrd_parameters_present_flag,
> - .sub_pic_hrd_params_present_flag = sps->hdr.flags.sub_pic_hrd_params_present_flag,
> - .sub_pic_cpb_params_in_pic_timing_sei_flag = sps->hdr.flags.sub_pic_cpb_params_in_pic_timing_sei_flag,
> + .nal_hrd_parameters_present_flag = sps->hdr.nal_hrd_parameters_present_flag,
> + .vcl_hrd_parameters_present_flag = sps->hdr.vcl_hrd_parameters_present_flag,
> + .sub_pic_hrd_params_present_flag = sps->hdr.sub_pic_hrd_params_present_flag,
> + .sub_pic_cpb_params_in_pic_timing_sei_flag = sps->hdr.sub_pic_cpb_params_in_pic_timing_sei_flag,
> .fixed_pic_rate_general_flag = sps->hdr.flags.fixed_pic_rate_general_flag,
> .fixed_pic_rate_within_cvs_flag = sps->hdr.flags.fixed_pic_rate_within_cvs_flag,
> .low_delay_hrd_flag = sps->hdr.flags.low_delay_hrd_flag,
> @@ -567,10 +567,10 @@ static void set_vps(const HEVCVPS *vps,
>
> sls_hdr[i] = (StdVideoH265HrdParameters) {
> .flags = (StdVideoH265HrdFlags) {
> - .nal_hrd_parameters_present_flag = src->flags.nal_hrd_parameters_present_flag,
> - .vcl_hrd_parameters_present_flag = src->flags.vcl_hrd_parameters_present_flag,
> - .sub_pic_hrd_params_present_flag = src->flags.sub_pic_hrd_params_present_flag,
> - .sub_pic_cpb_params_in_pic_timing_sei_flag = src->flags.sub_pic_cpb_params_in_pic_timing_sei_flag,
> + .nal_hrd_parameters_present_flag = src->nal_hrd_parameters_present_flag,
> + .vcl_hrd_parameters_present_flag = src->vcl_hrd_parameters_present_flag,
> + .sub_pic_hrd_params_present_flag = src->sub_pic_hrd_params_present_flag,
> + .sub_pic_cpb_params_in_pic_timing_sei_flag = src->sub_pic_cpb_params_in_pic_timing_sei_flag,
> .fixed_pic_rate_general_flag = src->flags.fixed_pic_rate_general_flag,
> .fixed_pic_rate_within_cvs_flag = src->flags.fixed_pic_rate_within_cvs_flag,
> .low_delay_hrd_flag = src->flags.low_delay_hrd_flag,
>
LGTM
Thanks
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-03-21 17:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-20 23:17 [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields James Almer
2024-03-20 23:17 ` [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs James Almer
2024-03-20 23:43 ` James Almer
2024-03-21 17:14 ` [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields Lynne
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git