Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Pavel Koshevoy <pkoshevoy-at-gmail.com@ffmpeg.org>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH] avformat/demux: Fix segfault due to avcodec_open2 failure (v2)
Date: Tue, 10 Jun 2025 08:42:08 -0600
Message-ID: <CAJgjuowkWh+YzJWN-e+_NSd87V5MK7G8L27RfxMpxytgpyJnUg@mail.gmail.com> (raw)
In-Reply-To: <20250610133859.GU29660@pb2>

On Tue, Jun 10, 2025, 07:39 Michael Niedermayer <michael@niedermayer.cc>
wrote:

> On Mon, Jun 09, 2025 at 09:45:28PM -0600, Pavel Koshevoy wrote:
> > Fixes 'ffprobe 1_poc.mp4' segfault introduced with
> > commit 0021484d05f9b0f032fa319399de6e24eea0c04f
> >
> > codec_close should not assume that the codec_id did not change.
> > ---
> >  libavformat/demux.c | 8 +++++++-
> >  1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/libavformat/demux.c b/libavformat/demux.c
> > index ecd4f40da9..3749ab67a3 100644
> > --- a/libavformat/demux.c
> > +++ b/libavformat/demux.c
> > @@ -1292,9 +1292,15 @@ static int codec_close(FFStream *sti)
> >  {
> >      AVCodecContext *avctx_new = NULL;
> >      AVCodecParameters *par_tmp = NULL;
> > +    const AVCodec *new_codec = NULL;
> >      int ret;
> >
> > -    avctx_new = avcodec_alloc_context3(sti->avctx->codec);
> > +    new_codec =
> > +      (sti->avctx->codec_id != sti->pub.codecpar->codec_id) ?
> > +      avcodec_find_decoder(sti->pub.codecpar->codec_id) :
> > +      sti->avctx->codec;
> > +
> > +    avctx_new = avcodec_alloc_context3(new_codec);
> >      if (!avctx_new) {
> >          ret = AVERROR(ENOMEM);
> >          goto fail;
>
> This is not about request_probe
> but about the mpegts demuxer randomly changeing codec id midstream
>


I have several real (not crafted like 1_poc.mp4 is) .ts files where codec
changes from mpeg2video to hevc, from mpeg2audio to eac3 -- while remaining
on the same PIDs.  I also have .ts files where codec switches between
mpeg2video and h264.  VLC was able to play such files, but my ffmpeg based
player (apprenticevideo) could not even see that the codecs changed prior
to 0021484d05f9b0f032fa319399de6e24eea0c04f.  Reverting isn't really an
option for me, not unless there is a better solution presented.

As I am primarily a public ffmpeg API user -- I am well out of my depth
when it comes to making non-trivial changes to ffmpegs internals.





> I belive the patch should be reverted that causes this. I dont think
> applications expect such mid stream changes either
>

I have 2 applications that expect such behavior.


> I hope andreas can take a look and correct me if iam missing something
> but it looks a bit sketchy to me
>
> If a codec changes mid stream i belive a new AVStream
> should be created. It could be a audio stream switches to video
> or data or subtitle.
>

In my player I support video/audio track selection.  MPEG-TS tracks are
associated with a PID.  If the PID did not change but the codec changed --
it's still the same track, and I axpect my player to play it out -- I don't
expect the user to go search for some new track because the codec changed.


> If any stream as detected initially can become any other type later
> this complicates user applications and filter graphs
>

I think this is mostly a issue with the crafted 1_poc.mp4 file.


Also the management of AVPackets is probably rather non trivial
> if the stream_index is not enough to identify which decoder it belongs to
>

In my player I monitor AVCodecParameters for changes, and I attach a
shared_ptr to AVCodecParameters to each packet, so when time comes to
decode a packet I can check if its codecpar matches the current decoder,
and open a new decoder if the codec has changed.  It's not trivial, but not
complicated either.


> thx
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Old school: Use the lowest level language in which you can solve the
> problem
>             conveniently.
> New school: Use the highest level language in which the latest
> supercomputer
>             can solve the problem without the user falling asleep waiting.
> _______________________________________________
> 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".
>
_______________________________________________
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-06-10 14:42 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-10  3:45 Pavel Koshevoy
2025-06-10 13:38 ` Michael Niedermayer
2025-06-10 14:42   ` Pavel Koshevoy [this message]
2025-06-10 15:29     ` Michael Niedermayer
2025-06-10 15:39       ` Pavel Koshevoy
2025-06-10 17:27       ` Pavel Koshevoy
2025-06-10 17:30         ` Nicolas George
2025-06-10 17:54           ` Pavel Koshevoy
2025-06-10 22:10         ` Michael Niedermayer
2025-06-10 23:36           ` Pavel Koshevoy
2025-06-11 10:14             ` Michael Niedermayer
2025-06-11 15:51             ` Michael Niedermayer

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=CAJgjuowkWh+YzJWN-e+_NSd87V5MK7G8L27RfxMpxytgpyJnUg@mail.gmail.com \
    --to=pkoshevoy-at-gmail.com@ffmpeg.org \
    --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