[FFmpeg-devel] [PATCH] avformat/mux: Check pkt->stream_index before using it

Anton Khirnov anton at khirnov.net
Mon May 11 17:56:15 EEST 2020


Quoting Andreas Rheinhardt (2020-05-10 21:35:54)
> Anton Khirnov:
> > Quoting Marton Balint (2020-05-10 19:45:04)
> >>
> >>
> >> On Sun, 10 May 2020, Anton Khirnov wrote:
> >>
> >>> Quoting Andreas Rheinhardt (2020-05-08 00:55:00)
> >>>> This commit fixes two recent regressions both of which are about using
> >>>> pkt->stream_index as index in an AVFormatContext's streams array before
> >>>> actually comparing the value with the count of streams in said array.
> >>>> 96e5e6abb9851d7a26ba21703955d5826ac857c0 did this in
> >>>> prepare_input_packet() and 64063512227c4c87a7d16a1076481dc6baf19841 did
> >>>> likewise in write_packets_common().
> >>>>
> >>>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> >>>> ---
> >>>> The same error in the same file applied on the same day by two different
> >>>> people. How unlikely.
> >>>
> >>> How is it a regression? Isn't it rather invalid API use?
> >>
> >> Fun fact: 7b03b65bf0d02519c86750d2da33f413e11cf0c6
> >>
> >> Yes, it is kind of invalid API use, but since the check is already there, 
> >> we should make it actually worthwile.
> > 
> > lol
> > 
> > I agree that checking for it is a good idea, obviously, but I wouldn't
> > call it a regression.
> > 
> How about rephrasing the first sentence to: "This commit stops using
> pkt->stream_index as index in an AVFormatContext's streams array before
> actually comparing the value with the count of streams in said array."

Sure, sounds good.

> >>
> >>>
> >>> Not that I object to having a check. But then why is check_packet()
> >>> called so deep and not immediately on entry to the muxer?
> >>
> >> I guess it is not that deep, but recent factorization efforts hidden it a 
> >> bit.
> > 
> > You can see in my original commit it is the very first thing done after
> > entering the muxer. Right now it's several function calls deep.
> > 
> I could make it the very first thing called in write_packets_common().

Why not move the check_packet() call out of prepare_packet() into
av_[interleaved_]write_frame() instead?

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list