Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [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