[FFmpeg-devel] [PATCH] format/imfdec: improve error handling when selecting tracks for playback

Michael Niedermayer michael at niedermayer.cc
Mon Sep 19 17:42:40 EEST 2022


On Sat, Sep 17, 2022 at 08:57:37AM -0700, Pierre-Anthony Lemieux wrote:
> On Sat, Sep 17, 2022 at 7:43 AM Michael Niedermayer
> <michael at niedermayer.cc> wrote:
> >
> > On Fri, Sep 16, 2022 at 01:19:09PM -0700, Pierre-Anthony Lemieux wrote:
> > > On Fri, Sep 16, 2022 at 1:15 PM Michael Niedermayer
> > > <michael at niedermayer.cc> wrote:
> > > >
> > > > On Fri, Sep 16, 2022 at 10:39:22AM -0700, Pierre-Anthony Lemieux wrote:
> > > > > On Fri, Sep 16, 2022 at 10:27 AM Michael Niedermayer
> > > > > <michael at niedermayer.cc> wrote:
> > > > > >
> > > > > > On Wed, Sep 07, 2022 at 01:02:33PM -0700, pal at sandflow.com wrote:
> > > > > > > From: Pierre-Anthony Lemieux <pal at palemieux.com>
> > > > > > >
> > > > > > > Addresses coverity 1512414
> > > > > > >
> > > > > > > ---
> > > > > > >  libavformat/imfdec.c | 15 ++++++++++++---
> > > > > > >  1 file changed, 12 insertions(+), 3 deletions(-)
> > > > > > >
> > > > > > > diff --git a/libavformat/imfdec.c b/libavformat/imfdec.c
> > > > > > > index 5bbe7a53f8..58b1455c9f 100644
> > > > > > > --- a/libavformat/imfdec.c
> > > > > > > +++ b/libavformat/imfdec.c
> > > > > > > @@ -681,8 +681,11 @@ static IMFVirtualTrackPlaybackCtx *get_next_track_with_minimum_timestamp(AVForma
> > > > > > >  {
> > > > > > >      IMFContext *c = s->priv_data;
> > > > > > >      IMFVirtualTrackPlaybackCtx *track;
> > > > > >
> > > > > > > +    AVRational minimum_timestamp = av_make_q(INT_MAX, 1);
> > > > > > > -    AVRational minimum_timestamp = av_make_q(INT32_MAX, 1);
> > > > > >
> > > > > > iam not sure thats a good idea, it would change behavior on different platforms
> > > > >
> > > > > I was following the earlier observations that "The initialization of
> > > > > minimum_timestamp presumes that int are 32bit which need not be true":
> > > > >
> > > > > http://ffmpeg.org/pipermail/ffmpeg-devel/2022-August/300587.html
> > > > >
> > > > > If I am not mistaken, the numerator and denominator of AVRational are
> > > > > defined as `int`:
> > > > >
> > > > > https://www.ffmpeg.org/doxygen/trunk/structAVRational.html
> > > > >
> > > > > What would be the alternative?
> > > >
> > > > I dont understand why this code uses AVRational for timestamps
> > > > normally timestamps are int64_t with a AVRational timebase and would use
> > > > av_compare_ts() for comparing
> > >
> > > Temporal offsets on IMF tracks are typically expressed as rationals,
> > > and each track can have its own timebase.
> >
> > av_compare_ts() can compare 2 timestamps in 2 different timebases
> >
> > the problem with using AVRational for timestamps in 1sec units is
> > that alot of 64bit * 32/32bit timestamps cannot be represented exactly
> 
> Ok. It might be possible to refactor the imfdec timing model in terms
> of (int) time offset + timebase instead of (rational) time offset, or
> at least detect when the current scheme fails. This will require
> careful study.
> 

> Any objections to tackling this refactoring as a separate patchset,
> since this patchet is intended to address the coverity issue?

you can do it in whichever way works best for you.
Iam just saying that AVRational with more than 32/32bit is problematic

consider av_add_q() it expects the product of various fields to fit
int64_t

if int is 64bit AND AVRational uses teh extra range the implementation 
needs a 128bit type or some other modification

thx

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

Into a blind darkness they enter who follow after the Ignorance,
they as if into a greater darkness enter who devote themselves
to the Knowledge alone. -- Isha Upanishad
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20220919/63b0925c/attachment.sig>


More information about the ffmpeg-devel mailing list