From patchwork Thu Jun 29 20:23:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42330 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1e:b0:12b:9ae3:586d with SMTP id c30csp2022889pzh; Thu, 29 Jun 2023 13:23:30 -0700 (PDT) X-Google-Smtp-Source: APBJJlFOZE+loI6j+QHjnXBYQCLFKXj/aZhsh/BDF4vBqoa0MjU6n0MOogDUMZTKw5A8PQ+TNYru X-Received: by 2002:a17:906:e0f:b0:969:93f2:259a with SMTP id l15-20020a1709060e0f00b0096993f2259amr299840eji.73.1688070210613; Thu, 29 Jun 2023 13:23:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688070210; cv=none; d=google.com; s=arc-20160816; b=U1HIOWeM6jKDYj68GxgDsW82KbOQQZcn5kMbysh/fOL+Ca9ScbCjyEWompeJLmMvwZ gId9hrFR37YrWDHjgA7r4zGhsT2rfN3wOwK2dr1EqaVcKjwgaqqe/QKpu9VGgwpH45zu zcS5ZQhNfVD9KdKUwz72yb2ZvINRcc+BN3JEwS7+Pre1fIMXEvI8EJGx4D2oTutixPyK sWX7OG89qbXoRg7fIqm4btYDbpr5pMABFxgh/U0YSDHk2yfaBcGmq0fIBiikzMc+Ao+s OcLv6r6KCVm7z99ZKuQWlxnRQdg4n5uv6lA583Hg8+WFEWIb+Q7r4qdX8ptxRHUWCvI2 UTpA== 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=y5GJ3RWqkz65c+ncDvCoVW1N7USzs97sOLfRfO1Y+GA=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=JMMKeS0AqZ1VY1om0hLGqf4mOQljJJQKqIDnbIrCvuQ17iaa44cj0BzT7BSoaYR7xb xbK0k8kzoSUXVmbwsG6VICHLvUk5E/X4iOGAoeW3quwP1pZ7CgAyNDnF4e4GKjhdVOF1 CUJ9iH89C3+AgpHzO9MHUKFy+mrGFujiYY+XI7NzAw0MejuCf1js80/karXjeM4sa2ys lPulKRd5UxdZ619WYAH2bckJEc4Y3R6CXQuyUn04HP+m7tiQaQR9eOuXvsfdcQdaUOyw znonFBtkEUQQJJfStzmYHuF+d3TSWj6mvE2e1IqEJbCmKO54K+mrF+/GMth0dpuqy2W0 KX9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=Q5i49Iph; 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 h22-20020a170906829600b0098298161c0dsi6780580ejx.26.2023.06.29.13.23.29; Thu, 29 Jun 2023 13:23:30 -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=20221208 header.b=Q5i49Iph; 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 AEBC168C2BC; Thu, 29 Jun 2023 23:23:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f41.google.com (mail-oa1-f41.google.com [209.85.160.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C541C68BE21 for ; Thu, 29 Jun 2023 23:23:20 +0300 (EEST) Received: by mail-oa1-f41.google.com with SMTP id 586e51a60fabf-1b059dd7c0cso974500fac.0 for ; Thu, 29 Jun 2023 13:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688070199; x=1690662199; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=+Jq0PMJ25DMTPUh6FfVlMaC6KoovJE+G5aJ5fvY2ddQ=; b=Q5i49Iph7GZxBAsdLrK422V68CgkDrhCUUJwyyQbI7Z7zQ1DZG5YIdfvp6IUW+OIjq SLZ8cji0yTuIZ5+CFSdIP2AFoE9DmTfyQZPVmkViyFKdDP4xgw21aOnqB8O5QtmFz7U2 3S2WbDheLwNpDFhCZ9kowjb9R3ksuHxCP574uJgWLjFWnnfyaJkn8y/U0Yw20YYmIATm nFkuJzZllqHohob8s3Yy8lNICGlv58lXl4s/hIgVrDiejLjxfkNmaljkl3w8//W66++R QU/ujUcWIiqSZ4WY2RDgSgbJnjhLUr42kRkkZ5LYlj2W6C/K1foLSHWGgFl6Bs7QW11G Me7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688070199; x=1690662199; 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=+Jq0PMJ25DMTPUh6FfVlMaC6KoovJE+G5aJ5fvY2ddQ=; b=NwWbtJOg9M2sAlagny6P+bRAA6zUFYloi6DMdRhZz9ulymtKWuZXweLU8XWjmXbpHu iXIEn8teUX0KPXmXBDQkfinPIea/jnC0/PppceWsC9M4UGxfc4bi8WeM3MlMbnvzlxlY TK6yl69wdr4IaKCb7a8GgIBD1EqCvEo6Q4f2o92K2BkvGdtA7MWI5/DSvkMaQYeOI+R2 9bv8DMQ1im1tDteJ6E/L3/BJwAKTXyi08lrE+QJW2fVo3wXhk8MoYex59AjW+KONFvDI azjaZ51nUiZOkFZ8C4nG39MdXHFmryGxv3pZaFTxt/hkbt6hojwt67RiXODs9jVbYGMS dB6w== X-Gm-Message-State: ABy/qLZLCssxx0LSew1i/hm/ix3cMjJsKKs+5tasOkt2rNNVlEU2YWLS t0Li2W2g2nOZq+cfzGFSCAVpvv/HhNQ= X-Received: by 2002:a05:6870:e891:b0:18e:b6d5:7451 with SMTP id q17-20020a056870e89100b0018eb6d57451mr1012010oan.13.1688070198688; Thu, 29 Jun 2023 13:23:18 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id y21-20020a4ae7d5000000b0056591172bedsm2322251oov.37.2023.06.29.13.23.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Jun 2023 13:23:18 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 29 Jun 2023 17:23:11 -0300 Message-ID: <20230629202311.4174-1-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/cbs_h2645: fix storing Picture Header references in the context 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: Cb9j2cKz5HCp Signed-off-by: James Almer --- libavcodec/cbs_h2645.c | 31 +++++++++++++++------------ libavcodec/cbs_h266.h | 7 ++---- libavcodec/cbs_h266_syntax_template.c | 7 +++--- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index cdd7901518..cf480d71f6 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -525,12 +525,6 @@ static int cbs_h2645_split_fragment(CodedBitstreamContext *ctx, if (frag->data_size == 0) return 0; - if (codec_id == AV_CODEC_ID_VVC) { - //we deactive picture header here to avoid reuse previous au's ph. - CodedBitstreamH266Context *h266 = ctx->priv_data; - h266->priv.ph = NULL; - } - if (header && frag->data[0] && codec_id == AV_CODEC_ID_H264) { // AVCC header. size_t size, start, end; @@ -793,19 +787,20 @@ cbs_h266_replace_ps(6, SPS, sps, sps_seq_parameter_set_id) cbs_h266_replace_ps(6, PPS, pps, pps_pic_parameter_set_id) static int cbs_h266_replace_ph(CodedBitstreamContext *ctx, - CodedBitstreamUnit *unit) + CodedBitstreamUnit *unit, + H266RawPH *ph) { CodedBitstreamH266Context *h266 = ctx->priv_data; int err; - h266->priv.ph = NULL; err = ff_cbs_make_unit_refcounted(ctx, unit); if (err < 0) return err; - err = av_buffer_replace(&h266->priv.ph_ref, unit->content_ref); + av_assert0(unit->content_ref); + err = av_buffer_replace(&h266->ph_ref, unit->content_ref); if (err < 0) return err; - h266->priv.ph = (H266RawPH*)h266->priv.ph_ref->data; + h266->ph = ph; return 0; } @@ -1111,7 +1106,7 @@ static int cbs_h266_read_nal_unit(CodedBitstreamContext *ctx, err = cbs_h266_read_ph(ctx, &gbc, ph); if (err < 0) return err; - err = cbs_h266_replace_ph(ctx, unit); + err = cbs_h266_replace_ph(ctx, unit, ph); if (err < 0) return err; } @@ -1139,6 +1134,10 @@ static int cbs_h266_read_nal_unit(CodedBitstreamContext *ctx, pos = get_bits_count(&gbc); len = unit->data_size; + err = cbs_h266_replace_ph(ctx, unit, &slice->header.sh_picture_header); + if (err < 0) + return err; + slice->data_size = len - pos / 8; slice->data_ref = av_buffer_ref(unit->data_ref); if (!slice->data_ref) @@ -1640,7 +1639,7 @@ static int cbs_h266_write_nal_unit(CodedBitstreamContext *ctx, if (err < 0) return err; - err = cbs_h266_replace_ph(ctx, unit); + err = cbs_h266_replace_ph(ctx, unit, ph); if (err < 0) return err; } @@ -1661,6 +1660,10 @@ static int cbs_h266_write_nal_unit(CodedBitstreamContext *ctx, if (err < 0) return err; + err = cbs_h266_replace_ph(ctx, unit, &slice->header.sh_picture_header); + if (err < 0) + return err; + if (slice->data) { err = cbs_h2645_write_slice_data(ctx, pbc, slice->data, slice->data_size, @@ -1884,8 +1887,8 @@ static void cbs_h266_flush(CodedBitstreamContext *ctx) av_buffer_unref(&h266->pps_ref[i]); h266->pps[i] = NULL; } - av_buffer_unref(&h266->priv.ph_ref); - h266->priv.ph = NULL; + av_buffer_unref(&h266->ph_ref); + h266->ph = NULL; } static void cbs_h266_close(CodedBitstreamContext *ctx) diff --git a/libavcodec/cbs_h266.h b/libavcodec/cbs_h266.h index 03dfd4a954..460db7ab62 100644 --- a/libavcodec/cbs_h266.h +++ b/libavcodec/cbs_h266.h @@ -770,14 +770,11 @@ typedef struct CodedBitstreamH266Context { AVBufferRef *vps_ref[VVC_MAX_VPS_COUNT]; AVBufferRef *sps_ref[VVC_MAX_SPS_COUNT]; AVBufferRef *pps_ref[VVC_MAX_PPS_COUNT]; + AVBufferRef *ph_ref; H266RawVPS *vps[VVC_MAX_SPS_COUNT]; H266RawSPS *sps[VVC_MAX_SPS_COUNT]; H266RawPPS *pps[VVC_MAX_PPS_COUNT]; - - struct { - AVBufferRef *ph_ref; - H266RawPH *ph; - } priv; + H266RawPH *ph; } CodedBitstreamH266Context; #endif /* AVCODEC_CBS_H266_H */ diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c index 06f9f29e08..2861e6f223 100644 --- a/libavcodec/cbs_h266_syntax_template.c +++ b/libavcodec/cbs_h266_syntax_template.c @@ -2675,12 +2675,11 @@ static int FUNC(slice_header) (CodedBitstreamContext *ctx, RWContext *rw, flag(sh_picture_header_in_slice_header_flag); if (current->sh_picture_header_in_slice_header_flag) { + //7.4.8 if sh_picture_header_in_slice_header_flag is true, we do not have a PH NAL unit CHECK(FUNC(picture_header) (ctx, rw, ¤t->sh_picture_header)); ph = ¤t->sh_picture_header; - //7.4.8 if sh_picture_header_in_slice_header_flag is true, we do not have PH NAL unit - h266->priv.ph = NULL; } else { - ph = h266->priv.ph; + ph = h266->ph; if (!ph) { av_log(ctx->log_ctx, AV_LOG_ERROR, "Picture header not available.\n"); @@ -2822,7 +2821,7 @@ static int FUNC(slice_header) (CodedBitstreamContext *ctx, RWContext *rw, (ctx, rw, sps, pps, ¤t->sh_ref_pic_lists)); ref_pic_lists = ¤t->sh_ref_pic_lists; } else { - ref_pic_lists = &h266->priv.ph->ph_ref_pic_lists; + ref_pic_lists = &ph->ph_ref_pic_lists; } if ((current->sh_slice_type != VVC_SLICE_TYPE_I && ref_pic_lists->rpl_ref_list[0].num_ref_entries > 1) ||