From: James Almer <jamrial@gmail.com> To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_av1: also copy the last frame header's decomposed content when parsing redundant frame headers Date: Sun, 27 Mar 2022 22:08:51 -0300 Message-ID: <20220328010851.1193-2-jamrial@gmail.com> (raw) In-Reply-To: <20220328010851.1193-1-jamrial@gmail.com> This prevents CBS from propagating zeroed AV1RawFrameHeader units in reading scenarios. Writing scenarios remain unaffected as the content of these units is not used to assemble the bitstream. Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/cbs_av1.c | 11 +++++++++++ libavcodec/cbs_av1.h | 2 ++ libavcodec/cbs_av1_syntax_template.c | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c index ecd775ea2a..6cb832210c 100644 --- a/libavcodec/cbs_av1.c +++ b/libavcodec/cbs_av1.c @@ -969,6 +969,15 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx, unit->data_ref); if (err < 0) return err; + + if (priv->frame_header) + break; + + av_buffer_unref(&priv->frame_header_ref); + priv->frame_header_ref = av_buffer_ref(unit->content_ref); + if (!priv->frame_header_ref) + return AVERROR(ENOMEM); + priv->frame_header = &obu->obu.frame_header; } break; case AV1_OBU_TILE_GROUP: @@ -1251,6 +1260,7 @@ static void cbs_av1_flush(CodedBitstreamContext *ctx) av_buffer_unref(&priv->frame_header_data_ref); priv->sequence_header = NULL; + priv->frame_header = NULL; priv->frame_header_data = NULL; memset(priv->ref, 0, sizeof(priv->ref)); @@ -1264,6 +1274,7 @@ static void cbs_av1_close(CodedBitstreamContext *ctx) CodedBitstreamAV1Context *priv = ctx->priv_data; av_buffer_unref(&priv->sequence_header_ref); + av_buffer_unref(&priv->frame_header_ref); av_buffer_unref(&priv->frame_header_data_ref); } diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index d4776b7a30..138b273470 100644 --- a/libavcodec/cbs_av1.h +++ b/libavcodec/cbs_av1.h @@ -431,6 +431,8 @@ typedef struct CodedBitstreamAV1Context { AVBufferRef *sequence_header_ref; int seen_frame_header; + AVBufferRef *frame_header_ref; + AV1RawFrameHeader *frame_header; AVBufferRef *frame_header_data_ref; uint8_t *frame_header_data; size_t frame_header_data_size; diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index bd50cfbe38..aadfa34b3c 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -1708,6 +1708,11 @@ static int FUNC(frame_header_obu)(CodedBitstreamContext *ctx, RWContext *rw, xf(b, frame_header_copy[i], val, val, val, 1, i / 8); } + +#ifdef READ + av_assert0(priv->frame_header_ref && priv->frame_header); + memcpy(current, priv->frame_header, sizeof(*current)); +#endif } } else { if (redundant) @@ -1730,6 +1735,7 @@ static int FUNC(frame_header_obu)(CodedBitstreamContext *ctx, RWContext *rw, } else { priv->seen_frame_header = 1; + priv->frame_header = NULL; av_buffer_unref(&priv->frame_header_data_ref); #ifdef READ -- 2.35.1 _______________________________________________ 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".
next prev parent reply other threads:[~2022-03-28 1:09 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-03-28 1:08 [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_av1: rename the private frame_header fields to frame_header_data James Almer 2022-03-28 1:08 ` James Almer [this message] 2022-04-30 18:50 ` [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_av1: also copy the last frame header's decomposed content when parsing redundant frame headers Mark Thompson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220328010851.1193-2-jamrial@gmail.com \ --to=jamrial@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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