From patchwork Wed Mar 20 23:17:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 47271 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a4a:b0:1a3:31a3:7958 with SMTP id zu10csp219676pzb; Wed, 20 Mar 2024 16:17:39 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXSmyv7t4OQhfp4yOLCGlyrSv07gOg4NSJ5d4L16V9PVCml4qMXAjpdtt2ll2U/ZOEWwmknaGK+Bbga99Y8OgAgOnj7+ZmAcPFMQQ== X-Google-Smtp-Source: AGHT+IH+/AHihYqqPQeQ09SzC95fEnRdfqddrLV2TyQT6lZzDfU3inCKc9AmNfA36WGOXftKOnhU X-Received: by 2002:a19:8c47:0:b0:513:cb8a:59a7 with SMTP id i7-20020a198c47000000b00513cb8a59a7mr5322443lfj.2.1710976659281; Wed, 20 Mar 2024 16:17:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710976659; cv=none; d=google.com; s=arc-20160816; b=hk22+tyKmlr7J7pqoKU47JfTRKC6rDMnFLIYrVeq6AOU7S4dmzASAmivpb5+tnVpb/ 27jL6ewRXVWC3tDmXp9Ceo97f2Ql6ssjJW5b0nOS6lLNEK0c/X9iGGTBNQD6L4GZ2AoX dR4PCSj0oTQFuuOd10Rz/1q3pbklYwQ3fKFnVy/kShSgTqSGwKvw75SltFjygWVIMLeS Cc+4o+nZ/IMRGKe/fM3fY1EMjmoZuxdC9qNleMUVOBXET4t0L7PDcmApitGFlz87Y2/X UxU4dWdP7hGk1qiA2dElnNu4gXMDk8V4LNwfcIkkVEIb1EV7QETT33l0uJak8/ZLz/vk qmgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=3dZ0rUpTalcpG+27MHzyvWXZXJqvFLl8PnTcrD9i+cQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ongyx0jLdgfc8xTLpEmK4+fmJejFgmJqetXQZmjwsHmVMnzBAGvFK7ju96oiPV5Ft+ oBsmAkW0zxvhDHTz6s4TA394oCQqPJRsFdot8VIKWEz7Muj56B8xxJ0QsK14ekKvwCVa nzWRTtC84Uw2uZ+3oSd4FN552kuA0gvAn5koVSNCkLWLUR5v5pYLjZmpjzAX/wvbQV6X 81uRe/ILIhW0xJ0qIkN+45zDMPyrT8lwEG5KoJoIR1ud6uvFH8NZqoC/7uHjAlu9ovBO 7rQQNGsLcRRlHLJDiYPGpzb+7touLp7HReY6VZuv+9IYpwhGoBCfy9lHE/7UJnlYAiKU P2qw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=UX5cersf; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id bh5-20020a170906a0c500b00a465b43dd6dsi6622622ejb.827.2024.03.20.16.17.38; Wed, 20 Mar 2024 16:17:39 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=UX5cersf; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E932768D514; Thu, 21 Mar 2024 01:17:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 89C4D68D410 for ; Thu, 21 Mar 2024 01:17:28 +0200 (EET) Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1e036b76725so2945025ad.1 for ; Wed, 20 Mar 2024 16:17:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710976646; x=1711581446; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=FJNKljglfbONKDBbyXiRX5SrzcDClLJ5oGOG1AifniI=; b=UX5cersfZi0z1I3mPCwVYD0JEJYg3TJkF3f0hw3VX7Zh7FGbixNOFh7Z/LDWb5Smau 41DwTyOD7fHYvH1VBHem76ecl3lyZELTY+0175132vhUnCjn41phdTBtsZ+y10EIZ10l BD8a5j8OU2FIdz4aV9AFtmP/EawmyuJ/c4733Y4H59KhX8KR0Le4VIwm3vSjX2yB6U0z 2XLSNGF0zEj1bOpvo3CTpUollVE2eQ/bpG9AzxR1IOk1y78adBnTY81aAgGKeMcjnst/ TDi7IZt8lY6+dgiJwKRxComSkxKih7L72lrcTCkyIyGTXXCJW/ZwYlb7W25yFnr0NTsB DIog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710976646; x=1711581446; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FJNKljglfbONKDBbyXiRX5SrzcDClLJ5oGOG1AifniI=; b=DihN2DlQTX7qYJJtm3imDu/zRnX57OEeOl2B8O1N+9ICzBwqf819DHGxaaiquFwO5s re8GyEGqQAvDRPXpVFobi7L1d3V+bqaB/oGbYt0rF4gPNG1vO98gShcb8EnkADpp2pKV T3zp0ckG4K+o88x8Vqa33ynCKUiKSEBxtnbKBHIA1TVuKMUP5liVhZF9cLQdWRy5thjZ 644v9TJ1JFRpz5psjz+72CTQkf3VaqmQD851yEKWQhWkjfxKQIsI5i1Am7sKpo1S/Q5B Dktu72A7n/KrWMq2H+oajoCPa316bLbvO8VUV2mY0BeHdhTMHswOgBDnPv39mMbWfoqE NW9w== X-Gm-Message-State: AOJu0YxgPhWRRbvN1gvTM3XkqZeP+JiSOxLb5YEhAHvnDC+CmQCccesw WbyLtzz7ly7NNq5oPuBWD/bmV3aHAYWIlS0THU4Z5aZnVI1eYbSm4vNLkx15 X-Received: by 2002:a17:902:ea0b:b0:1dd:a314:7349 with SMTP id s11-20020a170902ea0b00b001dda3147349mr4202685plg.7.1710976646100; Wed, 20 Mar 2024 16:17:26 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id a11-20020a170902eccb00b001def1ad9314sm11820518plh.245.2024.03.20.16.17.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Mar 2024 16:17:25 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 20 Mar 2024 20:17:29 -0300 Message-ID: <20240320231730.27666-1-jamrial@gmail.com> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 Subject: [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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /nd8q4+1bEkS 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,