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 8460646973 for ; Thu, 29 Jun 2023 20:23:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 731C468C2B9; Thu, 29 Jun 2023 23:23:26 +0300 (EEST) 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-Google-Smtp-Source: ACHHUZ5mRDFzbfHaQwAp9t9FgXyCLoceyux1I+nMVObv1RF9Xq/sLe+4uuzlHgAvhRztEgC0iWWYRA== 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 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: 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) || -- 2.41.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".