From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id E30434986D for ; Thu, 21 Mar 2024 17:14:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CF47D68D567; Thu, 21 Mar 2024 19:14:24 +0200 (EET) Received: from w4.tutanota.de (w4.tutanota.de [81.3.6.165]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 82BD368D470 for ; Thu, 21 Mar 2024 19:14:18 +0200 (EET) Received: from tutadb.w10.tutanota.de (unknown [192.168.1.10]) by w4.tutanota.de (Postfix) with ESMTP id C4140106031E for ; Thu, 21 Mar 2024 17:14:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1711041257; s=s1; d=lynne.ee; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:References:Sender; bh=/W5tgRsXxk7s6Y0KSnbFGI0jYYvZHuNLqJPMg3EfSzM=; b=Cl7XNxSmTr4fqPgv2/F+rgHDRcL2mQh257qzpDvmKZN1D9Ft2QnKMU2GJcaSbS6h Aw0ijjAD1WHtjprR1egL6Lsi4ShJ9DWxT98RJKVugfVdgDZxi6JqwJ1EU4Y6l+zbPir 9ycZ1pkP4wvQjm1gnmbjM2HG4mUl47nxHoI1KdCHUJbtUQxxfGS6rnLHSLJv1uQKqJ7 2EM4ZV/FuViI9cHnJ2ltScZvxxURFoR6NRrZ0FOFyOUjF7Gxiw8rSD2YIN+tBS4n/x0 cnL0dJXGXiXRI3s5V0LhXJn93hp0YMvn2KB8JUM2FTqF69YA36XQCG0Rhh+f03ABzCR ZwkLNU/0/w== Date: Thu, 21 Mar 2024 18:14:17 +0100 (CET) From: Lynne To: FFmpeg development discussions and patches Message-ID: In-Reply-To: <20240320231730.27666-1-jamrial@gmail.com> References: <20240320231730.27666-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 1/2] avcodec/hevc_ps: fix setting HEVCHdrParams fields X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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 > --- > 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".