Hi, On Mar 27, 2011, at 3:28 PM, Vitor Sessak <[email protected]> wrote:
> On 03/27/2011 08:47 PM, Måns Rullgård wrote: >> Vitor Sessak<[email protected]> writes: >> >>> On 03/27/2011 06:02 PM, Vitor Sessak wrote: >>>> On 03/27/2011 01:50 PM, Ronald S. Bultje wrote: >>>>> Hi, >>>>> >>>>> On Sun, Mar 27, 2011 at 6:58 AM, Vitor Sessak<[email protected]> wrote: >>>>>> On 03/26/2011 08:15 PM, Ronald S. Bultje wrote: >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> $subj. This is useful since with -mt enabled, order of packets >>>>>>> changes, which makes the original fate test fail. >>>>>> >>>>>> I'm not against this patch, but how hard would it be to reorder >>>>>> packets so >>>>>> that if two packets have the same timestamp, to output the audio one >>>>>> first? >>>>> >>>>> Not very difficult, I think. But is that correct? >>>> >>>> For me it is not less correct than having no criteria at all, but better >>>> for regtesting in general. Maybe in the future other tests will fail for >>>> the same reason after non-buggy modifications. >>> >>> And as a RFC, the patch to put video frames first (Note: this changes >>> a few fate references). >>> >>> -Vitor >>> >>> From 95307de0524ff4b7abaf457f8187af78f685460a Mon Sep 17 00:00:00 2001 >>> From: Vitor Sessak<[email protected]> >>> Date: Sun, 27 Mar 2011 19:22:55 +0200 >>> Subject: [PATCH] Order packets with identical PTS by packet type (video, >>> audio, etc). This >>> allows for more reproducible results when using multi-threading. >>> >>> --- >>> libavformat/utils.c | 5 ++++- >>> 1 files changed, 4 insertions(+), 1 deletions(-) >>> >>> diff --git a/libavformat/utils.c b/libavformat/utils.c >>> index 7ece078..946e64e 100644 >>> --- a/libavformat/utils.c >>> +++ b/libavformat/utils.c >>> @@ -3050,7 +3050,10 @@ static int ff_interleave_compare_dts(AVFormatContext >>> *s, AVPacket *next, AVPacke >>> AVStream *st2= s->streams[ next->stream_index]; >>> int64_t a= st2->time_base.num * (int64_t)st ->time_base.den; >>> int64_t b= st ->time_base.num * (int64_t)st2->time_base.den; >>> - return av_rescale_rnd(pkt->dts, b, a, AV_ROUND_DOWN)< next->dts; >>> + int64_t dts1 = av_rescale_rnd(pkt->dts, b, a, AV_ROUND_DOWN); >>> + if (dts1 == next->dts) >>> + return st->codec->codec->type< st2->codec->codec->type; >>> + return dts1< next->dts; >>> } >> >> Wouldn't sorting by stream index be more robust? Suppose you have two >> audio or two video streams... > > The problem is that for some formats (like the typical game ones), the stream > index is an arbitrary choice of the demuxer. So it could break when doing a > demuxer cleanup. OTOH, something like the following might solve both problems: > > + int64_t dts1 = av_rescale_rnd(pkt->dts, b, a, AV_ROUND_DOWN); > + if (dts1 == next->dts) { > + if (st->codec->codec->type == st2->codec->codec->type) > + return pkt->stream_index < next->stream_index; > + else > + return st->codec->codec->type < st2->codec->codec->type; > + } > + return dts1 < next->dts; This looks good to me, and my patch can then (optionally) be reverted. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
