Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Michael Niedermayer <michael@niedermayer.cc>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v11 1/8] libavcodec/decode.c: intercept `AV_PKT_DATA_METADATA_UPDATE` packet extra data, attach them to the next decoded frame with the same PTS.
Date: Sat, 12 Apr 2025 03:07:27 +0200
Message-ID: <20250412010727.GI4991@pb2> (raw)
In-Reply-To: <CABWZ6OQ3bbwOXM_ontxbrosFxB3uMHo3NNjTnzVbZWBzaFcqdw@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 3318 bytes --]

On Wed, Apr 09, 2025 at 09:25:56PM -0500, Romain Beauxis wrote:
> Le mer. 9 avr. 2025 à 20:12, Michael Niedermayer
> <michael@niedermayer.cc> a écrit :
> >
> > On Fri, Apr 04, 2025 at 04:14:44PM -0500, Romain Beauxis wrote:
> > > ---
> > >  libavcodec/decode.c | 130 ++++++++++++++++++++++++++++++++++++++++++++
> > >  1 file changed, 130 insertions(+)
> > >
> > > diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> > > index fca0c7ff58..39d054bdea 100644
> > > --- a/libavcodec/decode.c
> > > +++ b/libavcodec/decode.c
> > [...]
> > > @@ -702,6 +809,8 @@ int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacke
> > >  {
> > >      AVCodecInternal *avci = avctx->internal;
> > >      DecodeContext     *dc = decode_ctx(avci);
> > > +    const uint8_t *side_metadata;
> > > +    size_t size;
> > >      int ret;
> > >
> > >      if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec))
> > > @@ -719,6 +828,14 @@ int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacke
> > >          ret = av_packet_ref(avci->buffer_pkt, avpkt);
> > >          if (ret < 0)
> > >              return ret;
> > > +
> > > +        side_metadata = av_packet_get_side_data(avpkt, AV_PKT_DATA_METADATA_UPDATE, &size);
> >
> >
> > > +        if (avpkt->pts != AV_NOPTS_VALUE && side_metadata) {
> > > +            ret = insert_pending_metadata(&dc->pending_metadata, avpkt->pts,
> > > +                                          side_metadata, size);
> > > +            if (ret < 0)
> > > +                return ret;
> >
> > Is the tree needed and a FIFO not enough ?
> 
> I believe so.
> 
> There could be scenarios where the DTS are submitted out of order and
> we'd still want the metadata to be attached to the frame it was
> intended for.
> 
> In fact, I did this change after you suggested such a scenario:
> 
> >> Can you describe a scenario that you're thinking about?
> 
> > The users feeds several packets into a multi threaded decoder
> > and then depending on the threads and luck sooner or later
> > one frame comes out.
> >
> > Passing some data in a way that disregards this, feels wrong
> > Hypothetically there also could be a 2nd AV_PKT_DATA_METADATA_UPDATE
> > going in before the frame corresponding to the first comes out
> > but i may be missing something
> 
> Source: https://ffmpeg.org/pipermail/ffmpeg-devel/2025-March/340948.html

What i was thinkig of is the user passing in multiple
AV_PKT_DATA_METADATA_UPDATE in order
internally these could decode in parallel, but what goes
back to the user is in order again. Now there is frame reordering
but i assumed that metadata updates would not be at that level.
And this would rather be concatenated streams. But i dont know ...

Also if you want to keep the tree code, then error handling may need
to be improved.
Consider that a frame with metadata goes in but decoding has an error
and this frame never comes out.

iam not sure how you want to free metadata for damaged frames that are never
output without assumtations on the ordering

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Republics decline into democracies and democracies degenerate into
despotisms. -- Aristotle

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
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".

  reply	other threads:[~2025-04-12  1:07 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-04 21:14 [FFmpeg-devel] [PATCH v11 0/8] Properly decode ogg metadata in ogg/{vorbis, flac, opus} chained bitstreams Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 1/8] libavcodec/decode.c: intercept `AV_PKT_DATA_METADATA_UPDATE` packet extra data, attach them to the next decoded frame with the same PTS Romain Beauxis
2025-04-10  1:11   ` Michael Niedermayer
2025-04-10  2:25     ` Romain Beauxis
2025-04-12  1:07       ` Michael Niedermayer [this message]
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 2/8] tests: Add stream dump test API util Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 3/8] tests: Add chained ogg/vorbis stream dump test Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 4/8] libavformat/oggdec.h, libavformat/oggparsevorbis.c: Factor out vorbis metadata update mechanism Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 5/8] libavformat/oggparseflac.c: Parse ogg/flac comments in new ogg packets, add them to ogg stream new_metadata Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 6/8] tests: Add chained ogg/flac stream dump test Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 7/8] libavformat/oggparseopus.c: Parse comments from secondary chained streams header packet Romain Beauxis
2025-04-04 21:14 ` [FFmpeg-devel] [PATCH v11 8/8] tests: Add chained ogg/opus stream dump test Romain Beauxis
2025-04-09 14:29 ` [FFmpeg-devel] [PATCH v11 0/8] Properly decode ogg metadata in ogg/{vorbis, flac, opus} chained bitstreams Romain Beauxis

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=20250412010727.GI4991@pb2 \
    --to=michael@niedermayer.cc \
    --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