diff mbox series

[FFmpeg-devel,v1] avformat/mux: Set AV_PKT_FLAG_KEY for is_intra_only packet

Message ID 20200403150559.31735-1-lance.lmwang@gmail.com
State Accepted
Headers show
Series [FFmpeg-devel,v1] avformat/mux: Set AV_PKT_FLAG_KEY for is_intra_only packet | expand

Checks

Context Check Description
andriy/ffmpeg-patchwork success Make fate finished

Commit Message

Lance Wang April 3, 2020, 3:05 p.m. UTC
From: Limin Wang <lance.lmwang@gmail.com>

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
---
 libavformat/mux.c                | 16 ++++++++
 tests/ref/fate/binsub-movtextenc |  2 +-
 tests/ref/fate/movenc            | 50 +++++++++++------------
 tests/ref/fate/sub2video         | 86 ++++++++++++++++++++--------------------
 4 files changed, 85 insertions(+), 69 deletions(-)

Comments

Michael Niedermayer April 3, 2020, 9:23 p.m. UTC | #1
On Fri, Apr 03, 2020 at 11:05:59PM +0800, lance.lmwang@gmail.com wrote:
> From: Limin Wang <lance.lmwang@gmail.com>
> 
> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> ---
>  libavformat/mux.c                | 16 ++++++++
>  tests/ref/fate/binsub-movtextenc |  2 +-
>  tests/ref/fate/movenc            | 50 +++++++++++------------
>  tests/ref/fate/sub2video         | 86 ++++++++++++++++++++--------------------
>  4 files changed, 85 insertions(+), 69 deletions(-)
> 
> diff --git a/libavformat/mux.c b/libavformat/mux.c
> index cc2d1e2..dc897c2 100644
> --- a/libavformat/mux.c
> +++ b/libavformat/mux.c
> @@ -548,6 +548,17 @@ fail:
>      return ret;
>  }
>  
> +static int is_intra_only(enum AVCodecID id)
> +{
> +    const AVCodecDescriptor *d = avcodec_descriptor_get(id);
> +    if (!d)
> +        return 0;
> +    if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
> +        !(d->props & AV_CODEC_PROP_INTRA_ONLY))
> +        return 0;
> +    return 1;
> +}

this should not be duplicated with code in utils.c


> +
>  #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
>  
>  /* Note: using sizeof(AVFrame) from outside lavu is unsafe in general, but
> @@ -664,6 +675,11 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *
>          frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * st->time_base.num);
>          break;
>      }
> +
> +    /* update flags */
> +    if (is_intra_only(st->codecpar->codec_id))
> +        pkt->flags |= AV_PKT_FLAG_KEY;
> +

it may make sense to store the AVCodecDescriptor and not search it again for
each packet. But then the "is_intra_only" itself also does not change so that
should itself be computet just once per stream

thx

[...]
Lance Wang April 4, 2020, 12:38 a.m. UTC | #2
On Fri, Apr 03, 2020 at 05:19:08PM +0200, Andreas Rheinhardt wrote:
> lance.lmwang@gmail.com:
> > From: Limin Wang <lance.lmwang@gmail.com>
> > 
> > Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> > ---
> >  libavformat/mux.c                | 16 ++++++++
> >  tests/ref/fate/binsub-movtextenc |  2 +-
> >  tests/ref/fate/movenc            | 50 +++++++++++------------
> >  tests/ref/fate/sub2video         | 86 ++++++++++++++++++++--------------------
> >  4 files changed, 85 insertions(+), 69 deletions(-)
> > 
> > diff --git a/libavformat/mux.c b/libavformat/mux.c
> > index cc2d1e2..dc897c2 100644
> > --- a/libavformat/mux.c
> > +++ b/libavformat/mux.c
> > @@ -548,6 +548,17 @@ fail:
> >      return ret;
> >  }
> >  
> > +static int is_intra_only(enum AVCodecID id)
> > +{
> > +    const AVCodecDescriptor *d = avcodec_descriptor_get(id);
> > +    if (!d)
> > +        return 0;
> > +    if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
> > +        !(d->props & AV_CODEC_PROP_INTRA_ONLY))
> > +        return 0;
> > +    return 1;
> > +}
> > +
> >  #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
> >  
> >  /* Note: using sizeof(AVFrame) from outside lavu is unsafe in general, but
> > @@ -664,6 +675,11 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *
> >          frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * st->time_base.num);
> >          break;
> >      }
> > +
> > +    /* update flags */
> > +    if (is_intra_only(st->codecpar->codec_id))
> > +        pkt->flags |= AV_PKT_FLAG_KEY;
> > +
> >      return 0;
> >  }
> >  FF_ENABLE_DEPRECATION_WARNINGS
> 
> You have added the check to code that is deprecated and slated to be
> removed. Maybe it would be better to add it to prepare_input_packet()
> instead?

OK, I'll move the check to prepare_input_packet.

> 
> > diff --git a/tests/ref/fate/binsub-movtextenc b/tests/ref/fate/binsub-movtextenc
> > index 78c05f4..a8f94b7 100644
> > --- a/tests/ref/fate/binsub-movtextenc
> > +++ b/tests/ref/fate/binsub-movtextenc
> > @@ -1 +1 @@
> > -35adf776cd73e808186ae7124445f4b8
> > +fc6d07679ac1f718aa50de687924cd97
> > diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc
> > index 637a347..fb39b98 100644
> > --- a/tests/ref/fate/movenc
> > +++ b/tests/ref/fate/movenc
> > @@ -2,17 +2,17 @@ write_data len 36, time nopts, type header atom ftyp
> >  write_data len 2389, time nopts, type header atom -
> >  write_data len 788, time 1000000, type sync atom moof
> >  write_data len 110, time nopts, type trailer atom -
> > -66cf48604f039aa9a51711786f5c8778 3323 non-empty-moov
> > +5f401347fc3c771b819e2449d69d4861 3323 non-empty-moov
> >  write_data len 36, time nopts, type header atom ftyp
> >  write_data len 2721, time nopts, type header atom -
> >  write_data len 908, time 966667, type sync atom moof
> >  write_data len 110, time nopts, type trailer atom -
> > -04b2e86f455af94f9258b8d66dbf71f5 3775 non-empty-moov-elst
> > +4267feee527adf8cd4f7b36ac0fc0872 3775 non-empty-moov-elst
> >  write_data len 36, time nopts, type header atom ftyp
> >  write_data len 2629, time nopts, type header atom -
> >  write_data len 908, time 1000000, type sync atom moof
> >  write_data len 110, time nopts, type trailer atom -
> > -e9f6fa032d6d8265d67aef5de81a48bf 3683 non-empty-moov-no-elst
> > +44077b9ad45f3e16fafe4e5ada54e9b0 3683 non-empty-moov-no-elst
> >  write_data len 24, time nopts, type header atom ftyp
> [...]
> > -1,  225640000,  225640000,  2127000,     2133, 0x670c11a5, F=0x0
> > +1,  225640000,  225640000,  2127000,     2133, 0x670c11a5
> >  0,       1139,       1139,        1,   518400, 0xbab197ea
> > -1,  227834000,  227834000,  1262000,     1264, 0xc1d9fc57, F=0x0
> > +1,  227834000,  227834000,  1262000,     1264, 0xc1d9fc57
> >  0,       1140,       1140,        1,   518400, 0xb046dd30
> >  0,       1145,       1145,        1,   518400, 0xbab197ea
> > 
> Have you checked whether all these changes are beneficial?

I think it's caused by the keyframe flags, so have no clue how to check
the beneficial for these fate testing.


> 
> - Andreas
> _______________________________________________
> 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".
Lance Wang April 4, 2020, 12:51 a.m. UTC | #3
On Fri, Apr 03, 2020 at 11:23:59PM +0200, Michael Niedermayer wrote:
> On Fri, Apr 03, 2020 at 11:05:59PM +0800, lance.lmwang@gmail.com wrote:
> > From: Limin Wang <lance.lmwang@gmail.com>
> > 
> > Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> > ---
> >  libavformat/mux.c                | 16 ++++++++
> >  tests/ref/fate/binsub-movtextenc |  2 +-
> >  tests/ref/fate/movenc            | 50 +++++++++++------------
> >  tests/ref/fate/sub2video         | 86 ++++++++++++++++++++--------------------
> >  4 files changed, 85 insertions(+), 69 deletions(-)
> > 
> > diff --git a/libavformat/mux.c b/libavformat/mux.c
> > index cc2d1e2..dc897c2 100644
> > --- a/libavformat/mux.c
> > +++ b/libavformat/mux.c
> > @@ -548,6 +548,17 @@ fail:
> >      return ret;
> >  }
> >  
> > +static int is_intra_only(enum AVCodecID id)
> > +{
> > +    const AVCodecDescriptor *d = avcodec_descriptor_get(id);
> > +    if (!d)
> > +        return 0;
> > +    if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
> > +        !(d->props & AV_CODEC_PROP_INTRA_ONLY))
> > +        return 0;
> > +    return 1;
> > +}
> 
> this should not be duplicated with code in utils.c

OK

> 
> 
> > +
> >  #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
> >  
> >  /* Note: using sizeof(AVFrame) from outside lavu is unsafe in general, but
> > @@ -664,6 +675,11 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *
> >          frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * st->time_base.num);
> >          break;
> >      }
> > +
> > +    /* update flags */
> > +    if (is_intra_only(st->codecpar->codec_id))
> > +        pkt->flags |= AV_PKT_FLAG_KEY;
> > +
> 
> it may make sense to store the AVCodecDescriptor and not search it again for
> each packet. But then the "is_intra_only" itself also does not change so that
> should itself be computet just once per stream

Do you say we should add a is_intra_only field in AVStream to compute at beginning,
however it'll change the API header. So I prefer to use is_intra_only() function first,  

> 
> thx
> 
> [...]
> -- 
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
> 
> I am the wisest man alive, for I know one thing, and that is that I know
> nothing. -- Socrates



> _______________________________________________
> 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".
Andreas Rheinhardt April 4, 2020, 9:07 a.m. UTC | #4
Limin Wang:
> On Fri, Apr 03, 2020 at 11:23:59PM +0200, Michael Niedermayer wrote:
>> On Fri, Apr 03, 2020 at 11:05:59PM +0800, lance.lmwang@gmail.com wrote:
>>> From: Limin Wang <lance.lmwang@gmail.com>
>>>
>>> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
>>> ---
>>>  libavformat/mux.c                | 16 ++++++++
>>>  tests/ref/fate/binsub-movtextenc |  2 +-
>>>  tests/ref/fate/movenc            | 50 +++++++++++------------
>>>  tests/ref/fate/sub2video         | 86 ++++++++++++++++++++--------------------
>>>  4 files changed, 85 insertions(+), 69 deletions(-)
>>>
>>> diff --git a/libavformat/mux.c b/libavformat/mux.c
>>> index cc2d1e2..dc897c2 100644
>>> --- a/libavformat/mux.c
>>> +++ b/libavformat/mux.c
>>> @@ -548,6 +548,17 @@ fail:
>>>      return ret;
>>>  }
>>>  
>>> +static int is_intra_only(enum AVCodecID id)
>>> +{
>>> +    const AVCodecDescriptor *d = avcodec_descriptor_get(id);
>>> +    if (!d)
>>> +        return 0;
>>> +    if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
>>> +        !(d->props & AV_CODEC_PROP_INTRA_ONLY))
>>> +        return 0;
>>> +    return 1;
>>> +}
>>
>> this should not be duplicated with code in utils.c
> 
> OK
> 
>>
>>
>>> +
>>>  #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
>>>  
>>>  /* Note: using sizeof(AVFrame) from outside lavu is unsafe in general, but
>>> @@ -664,6 +675,11 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *
>>>          frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * st->time_base.num);
>>>          break;
>>>      }
>>> +
>>> +    /* update flags */
>>> +    if (is_intra_only(st->codecpar->codec_id))
>>> +        pkt->flags |= AV_PKT_FLAG_KEY;
>>> +
>>
>> it may make sense to store the AVCodecDescriptor and not search it again for
>> each packet. But then the "is_intra_only" itself also does not change so that
>> should itself be computet just once per stream
> 
> Do you say we should add a is_intra_only field in AVStream to compute at beginning,
> however it'll change the API header. So I prefer to use is_intra_only() function first,  

This should be added to AVStreamInternal, not AVStream itself. And of
course this can and should also be used for demuxing.

- Andreas
Nicolas George April 4, 2020, 9:42 a.m. UTC | #5
Limin Wang (12020-04-04):
> I think it's caused by the keyframe flags, so have no clue how to check
> the beneficial for these fate testing.

Take the actual files produced by the tests, possibly changing the
output format from framecrc to an actual format, and compare carefully
the version before the patch and the version after the patch.

Tests are there for a reason. If you cannot explain exactly why a change
in a reference file is beneficial, then the patch is not acceptable.

Regards,
Lance Wang April 4, 2020, 11:23 a.m. UTC | #6
On Sat, Apr 04, 2020 at 11:42:06AM +0200, Nicolas George wrote:
> Limin Wang (12020-04-04):
> > I think it's caused by the keyframe flags, so have no clue how to check
> > the beneficial for these fate testing.
> 
> Take the actual files produced by the tests, possibly changing the
> output format from framecrc to an actual format, and compare carefully
> the version before the patch and the version after the patch.

the md5 framecrc is generated by libavformat/tests/movenc.c, I have no
clue how the movenc testing work and how to get the real input to check why
the frame isn't bitexact as I haven't see any subtitle track. 

> 
> Tests are there for a reason. If you cannot explain exactly why a change
> in a reference file is beneficial, then the patch is not acceptable.

> 
> Regards,
> 
> -- 
>   Nicolas George



> _______________________________________________
> 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".
Nicolas George April 16, 2020, 3:16 p.m. UTC | #7
Sorry, forgot to reply to that.

Limin Wang (12020-04-04):
> the md5 framecrc is generated by libavformat/tests/movenc.c, I have no
> clue how the movenc testing work and how to get the real input to check why
> the frame isn't bitexact as I haven't see any subtitle track. 

Well, check: re-run the test manually, change it to have an actual
output, examine the file. The possibilities are many.

But tests are there for a reason. If a patch changes the output of
tests, then we cannot accept it unless somebody did examine the changes
very carefully and confirmed they are for the best. Ideally, an
explanation of the changes goes in the commit message.

Regards,
Lance Wang April 17, 2020, 1:23 a.m. UTC | #8
On Thu, Apr 16, 2020 at 05:16:35PM +0200, Nicolas George wrote:
> Sorry, forgot to reply to that.
> 
> Limin Wang (12020-04-04):
> > the md5 framecrc is generated by libavformat/tests/movenc.c, I have no
> > clue how the movenc testing work and how to get the real input to check why
> > the frame isn't bitexact as I haven't see any subtitle track. 
> 
> Well, check: re-run the test manually, change it to have an actual
> output, examine the file. The possibilities are many.
> 
> But tests are there for a reason. If a patch changes the output of
> tests, then we cannot accept it unless somebody did examine the changes
> very carefully and confirmed they are for the best. Ideally, an
> explanation of the changes goes in the commit message.

Thanks, it's difficult to examine how it works for the tests/movenc.c without any
documenets. As I can't give good explanation for the md5 changed so I had to stop
to update the patch. 

> 
> Regards,
> 
> -- 
>   Nicolas George



> _______________________________________________
> 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".
James Almer April 17, 2020, 1:24 p.m. UTC | #9
On 4/16/2020 10:23 PM, Limin Wang wrote:
> On Thu, Apr 16, 2020 at 05:16:35PM +0200, Nicolas George wrote:
>> Sorry, forgot to reply to that.
>>
>> Limin Wang (12020-04-04):
>>> the md5 framecrc is generated by libavformat/tests/movenc.c, I have no
>>> clue how the movenc testing work and how to get the real input to check why
>>> the frame isn't bitexact as I haven't see any subtitle track. 
>>
>> Well, check: re-run the test manually, change it to have an actual
>> output, examine the file. The possibilities are many.
>>
>> But tests are there for a reason. If a patch changes the output of
>> tests, then we cannot accept it unless somebody did examine the changes
>> very carefully and confirmed they are for the best. Ideally, an
>> explanation of the changes goes in the commit message.
> 
> Thanks, it's difficult to examine how it works for the tests/movenc.c without any
> documenets. As I can't give good explanation for the md5 changed so I had to stop
> to update the patch. 

The change is effectively just the keyframe flag being added to audio
packets in all of the movenc tests.

To verify, simply apply

diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c
index 1d15d97ad9..0ff87da7d6 100644
--- a/libavformat/tests/movenc.c
+++ b/libavformat/tests/movenc.c
@@ -256,6 +256,7 @@ static void mux_frames(int n, int c)
             pkt.dts = pkt.pts = audio_dts;
             pkt.stream_index = 1;
             pkt.duration = audio_duration;
+            pkt.flags |= AV_PKT_FLAG_KEY;
             audio_dts += audio_duration;
         } else {
             if (frames == end_frames)

without your patch, and you'll get the same changes in the test.

Feel free to update your patch with what Andreas suggested.
Nicolas George April 17, 2020, 1:27 p.m. UTC | #10
James Almer (12020-04-17):
> The change is effectively just the keyframe flag being added to audio
> packets in all of the movenc tests.
> 
> To verify, simply apply
<snip>
> without your patch, and you'll get the same changes in the test.

I would be more comfortable with the information that it was checked
externally. For example by checking the output of ffprobe on the
produced files before and after the patch. Seems like an obvious step.

Regards,
James Almer April 17, 2020, 1:37 p.m. UTC | #11
On 4/17/2020 10:27 AM, Nicolas George wrote:
> James Almer (12020-04-17):
>> The change is effectively just the keyframe flag being added to audio
>> packets in all of the movenc tests.
>>
>> To verify, simply apply
> <snip>
>> without your patch, and you'll get the same changes in the test.
> 
> I would be more comfortable with the information that it was checked
> externally. For example by checking the output of ffprobe on the
> produced files before and after the patch. Seems like an obvious step.
> 
> Regards,

The movenc test does not produce any files. It creates bogus packets
that are dumped into the AVOutputFormat output using a custom
AVIOContext on each stream that just calculates an md5 hash of the data.

I think the one line change i posted is enough to reproduce the changes,
and we don't need the patch author to essentially rewrite the movenc
test just to dump everything into a file we can pass to ffprobe that may
or may not be parseable to begin with.
Nicolas George April 17, 2020, 1:38 p.m. UTC | #12
James Almer (12020-04-17):
> The movenc test does not produce any files. It creates bogus packets
> that are dumped into the AVOutputFormat output using a custom
> AVIOContext on each stream that just calculates an md5 hash of the data.
> 
> I think the one line change i posted is enough to reproduce the changes,
> and we don't need the patch author to essentially rewrite the movenc
> test just to dump everything into a file we can pass to ffprobe that may
> or may not be parseable to begin with.

Yes, for that I agree.

But urgh, is there a very good reason for the movenc test to be that
kind of abomination?

Regards,
Jan Ekström April 17, 2020, 1:46 p.m. UTC | #13
On Fri, Apr 17, 2020 at 4:37 PM James Almer <jamrial@gmail.com> wrote:
>
> The movenc test does not produce any files. It creates bogus packets
> that are dumped into the AVOutputFormat output using a custom
> AVIOContext on each stream that just calculates an md5 hash of the data.
>
> I think the one line change i posted is enough to reproduce the changes,
> and we don't need the patch author to essentially rewrite the movenc
> test just to dump everything into a file we can pass to ffprobe that may
> or may not be parseable to begin with.

You can give the test the parameter 'w' for writing files or 'h' for
help (it's calling getopt so I think this is `-w` and `-h`).

I think the test itself by default just doing memory I/O and
calculating the md5 is not a bad idea. Just means you have to re-run
it manually to get actual output files. Also it is one of the few
API-based tests that we have around.

For output files, you can check the diff with something like L-SMASH's
boxdumper with the `--box` parameter, which dumps the box structure of
the file. Then you can diff those two outputs from before/after.

Best regards,
Jan
Derek Buitenhuis April 17, 2020, 1:54 p.m. UTC | #14
On 17/04/2020 14:38, Nicolas George wrote:
> James Almer (12020-04-17):
>> The movenc test does not produce any files. It creates bogus packets
>> that are dumped into the AVOutputFormat output using a custom
>> AVIOContext on each stream that just calculates an md5 hash of the data.

It has an option for this. You could make it default.

>> I think the one line change i posted is enough to reproduce the changes,
>> and we don't need the patch author to essentially rewrite the movenc
>> test just to dump everything into a file we can pass to ffprobe that may
>> or may not be parseable to begin with.
See above. There is no need to rewrite.

> 
> Yes, for that I agree.
> 
> But urgh, is there a very good reason for the movenc test to be that
> kind of abomination?

Can you elaborate on why it's an abomination? It's so far been the only thing
that has kept people from breaking movenc API use several times, specifically
in relation to how it behaves for outputting fragments - and ffmpeg.c does not
necessarily exercise these paths. API unit tests are good thing in my books,
as an API-only user who has seen unintentional API breaks because ffmpeg.c
doesn't use something specifically.

- Derek
Lance Wang April 17, 2020, 2:01 p.m. UTC | #15
On Fri, Apr 17, 2020 at 10:24:53AM -0300, James Almer wrote:
> On 4/16/2020 10:23 PM, Limin Wang wrote:
> > On Thu, Apr 16, 2020 at 05:16:35PM +0200, Nicolas George wrote:
> >> Sorry, forgot to reply to that.
> >>
> >> Limin Wang (12020-04-04):
> >>> the md5 framecrc is generated by libavformat/tests/movenc.c, I have no
> >>> clue how the movenc testing work and how to get the real input to check why
> >>> the frame isn't bitexact as I haven't see any subtitle track. 
> >>
> >> Well, check: re-run the test manually, change it to have an actual
> >> output, examine the file. The possibilities are many.
> >>
> >> But tests are there for a reason. If a patch changes the output of
> >> tests, then we cannot accept it unless somebody did examine the changes
> >> very carefully and confirmed they are for the best. Ideally, an
> >> explanation of the changes goes in the commit message.
> > 
> > Thanks, it's difficult to examine how it works for the tests/movenc.c without any
> > documenets. As I can't give good explanation for the md5 changed so I had to stop
> > to update the patch. 
> 
> The change is effectively just the keyframe flag being added to audio
> packets in all of the movenc tests.
> 
> To verify, simply apply
> 
> diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c
> index 1d15d97ad9..0ff87da7d6 100644
> --- a/libavformat/tests/movenc.c
> +++ b/libavformat/tests/movenc.c
> @@ -256,6 +256,7 @@ static void mux_frames(int n, int c)
>              pkt.dts = pkt.pts = audio_dts;
>              pkt.stream_index = 1;
>              pkt.duration = audio_duration;
> +            pkt.flags |= AV_PKT_FLAG_KEY;
>              audio_dts += audio_duration;
>          } else {
>              if (frames == end_frames)
> 
> without your patch, and you'll get the same changes in the test.
> 
> Feel free to update your patch with what Andreas suggested.

James, thanks for the hint, I'll continue to update the patch with Andreas suggested.

> _______________________________________________
> 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".
James Almer April 17, 2020, 2:03 p.m. UTC | #16
On 4/17/2020 10:54 AM, Derek Buitenhuis wrote:
> On 17/04/2020 14:38, Nicolas George wrote:
>> James Almer (12020-04-17):
>>> The movenc test does not produce any files. It creates bogus packets
>>> that are dumped into the AVOutputFormat output using a custom
>>> AVIOContext on each stream that just calculates an md5 hash of the data.
> 
> It has an option for this. You could make it default.

Yes, my bad. I didn't look deep enough.

> 
>>> I think the one line change i posted is enough to reproduce the changes,
>>> and we don't need the patch author to essentially rewrite the movenc
>>> test just to dump everything into a file we can pass to ffprobe that may
>>> or may not be parseable to begin with.
> See above. There is no need to rewrite.
> 
>>
>> Yes, for that I agree.
>>
>> But urgh, is there a very good reason for the movenc test to be that
>> kind of abomination?
> 
> Can you elaborate on why it's an abomination? It's so far been the only thing
> that has kept people from breaking movenc API use several times, specifically
> in relation to how it behaves for outputting fragments - and ffmpeg.c does not
> necessarily exercise these paths. API unit tests are good thing in my books,
> as an API-only user who has seen unintentional API breaks because ffmpeg.c
> doesn't use something specifically.
> 
> - Derek
> _______________________________________________
> 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".
>
Nicolas George April 21, 2020, 6:05 p.m. UTC | #17
Derek Buitenhuis (12020-04-17):
> Can you elaborate on why it's an abomination? It's so far been the only thing
> that has kept people from breaking movenc API use several times, specifically
> in relation to how it behaves for outputting fragments - and ffmpeg.c does not
> necessarily exercise these paths. API unit tests are good thing in my books,
> as an API-only user who has seen unintentional API breaks because ffmpeg.c
> doesn't use something specifically.

I had not understood that it was an API test. Actually, I am rather
surprised that we have a "movenc API", I thought our muxers where mostly
interchangeable.

Regards,
Jan Ekström April 21, 2020, 6:22 p.m. UTC | #18
On Tue, Apr 21, 2020 at 9:05 PM Nicolas George <george@nsup.org> wrote:
>
> Derek Buitenhuis (12020-04-17):
> > Can you elaborate on why it's an abomination? It's so far been the only thing
> > that has kept people from breaking movenc API use several times, specifically
> > in relation to how it behaves for outputting fragments - and ffmpeg.c does not
> > necessarily exercise these paths. API unit tests are good thing in my books,
> > as an API-only user who has seen unintentional API breaks because ffmpeg.c
> > doesn't use something specifically.
>
> I had not understood that it was an API test. Actually, I am rather
> surprised that we have a "movenc API", I thought our muxers where mostly
> interchangeable.
>
> Regards,
>

I think he means a minimal application doing various things that test
the muxer within the libavformat API, as opposed to utilizing a
full-blown ffmpeg.c command line with an actual (or runtime generated)
input, actual encoders etc. It tests movenc's logic according to
various use cases that were implemented into the muxer.

Jan
diff mbox series

Patch

diff --git a/libavformat/mux.c b/libavformat/mux.c
index cc2d1e2..dc897c2 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -548,6 +548,17 @@  fail:
     return ret;
 }
 
+static int is_intra_only(enum AVCodecID id)
+{
+    const AVCodecDescriptor *d = avcodec_descriptor_get(id);
+    if (!d)
+        return 0;
+    if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
+        !(d->props & AV_CODEC_PROP_INTRA_ONLY))
+        return 0;
+    return 1;
+}
+
 #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
 
 /* Note: using sizeof(AVFrame) from outside lavu is unsafe in general, but
@@ -664,6 +675,11 @@  static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *
         frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * st->time_base.num);
         break;
     }
+
+    /* update flags */
+    if (is_intra_only(st->codecpar->codec_id))
+        pkt->flags |= AV_PKT_FLAG_KEY;
+
     return 0;
 }
 FF_ENABLE_DEPRECATION_WARNINGS
diff --git a/tests/ref/fate/binsub-movtextenc b/tests/ref/fate/binsub-movtextenc
index 78c05f4..a8f94b7 100644
--- a/tests/ref/fate/binsub-movtextenc
+++ b/tests/ref/fate/binsub-movtextenc
@@ -1 +1 @@ 
-35adf776cd73e808186ae7124445f4b8
+fc6d07679ac1f718aa50de687924cd97
diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc
index 637a347..fb39b98 100644
--- a/tests/ref/fate/movenc
+++ b/tests/ref/fate/movenc
@@ -2,17 +2,17 @@  write_data len 36, time nopts, type header atom ftyp
 write_data len 2389, time nopts, type header atom -
 write_data len 788, time 1000000, type sync atom moof
 write_data len 110, time nopts, type trailer atom -
-66cf48604f039aa9a51711786f5c8778 3323 non-empty-moov
+5f401347fc3c771b819e2449d69d4861 3323 non-empty-moov
 write_data len 36, time nopts, type header atom ftyp
 write_data len 2721, time nopts, type header atom -
 write_data len 908, time 966667, type sync atom moof
 write_data len 110, time nopts, type trailer atom -
-04b2e86f455af94f9258b8d66dbf71f5 3775 non-empty-moov-elst
+4267feee527adf8cd4f7b36ac0fc0872 3775 non-empty-moov-elst
 write_data len 36, time nopts, type header atom ftyp
 write_data len 2629, time nopts, type header atom -
 write_data len 908, time 1000000, type sync atom moof
 write_data len 110, time nopts, type trailer atom -
-e9f6fa032d6d8265d67aef5de81a48bf 3683 non-empty-moov-no-elst
+44077b9ad45f3e16fafe4e5ada54e9b0 3683 non-empty-moov-no-elst
 write_data len 24, time nopts, type header atom ftyp
 write_data len 1171, time nopts, type header atom -
 write_data len 728, time 0, type sync atom moof
@@ -20,35 +20,35 @@  write_data len 828, time nopts, type unknown atom -
 write_data len 728, time 999999, type sync atom moof
 write_data len 812, time nopts, type unknown atom -
 write_data len 148, time nopts, type trailer atom -
-da105e0b2c19079519c6eed7d5a1151c 4439 ismv
+92ce825ff40505ec8676191705adb7e7 4439 ismv
 write_data len 36, time nopts, type header atom ftyp
 write_data len 1123, time nopts, type header atom -
 write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-e6a4b15443d006efd727a80f6624b7db 2891 empty-moov
+08f4b3ad3a3ea224b2ee731476b9056b 2891 empty-moov
 write_data len 36, time nopts, type header atom ftyp
 write_data len 1123, time nopts, type header atom -
 write_data len 1068, time 0, type sync atom moof
 write_data len 908, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-800f854aff2ac76dfaddebd0562c75b9 3283 empty-moov-no-elst
+d7a2dcb43eb0f95f92669f55fc7adeba 3283 empty-moov-no-elst
 write_data len 36, time nopts, type header atom ftyp
 write_data len 1123, time nopts, type header atom -
 write_data len 900, time -33333, type sync atom moof
 write_data len 908, time 966667, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-eca1a945c9063dab0858af6b85925533 3115 empty-moov-no-elst-no-adjust
+ea70ca697306976879be408431c27aee 3115 empty-moov-no-elst-no-adjust
 write_data len 1159, time nopts, type header atom ftyp
 write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-e6a4b15443d006efd727a80f6624b7db 2891 delay-moov
+08f4b3ad3a3ea224b2ee731476b9056b 2891 delay-moov
 write_data len 1231, time nopts, type header atom ftyp
 write_data len 916, time -33333, type sync atom moof
 write_data len 908, time 966667, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-c2ecdbc80668fcee73f5a039e2dba579 3203 delay-moov-elst
+314cc3b6296f4ee583b328a34be50b2f 3203 delay-moov-elst
 write_data len 1195, time nopts, type header atom ftyp
 write_data len 836, time 0, type sync atom moof
 write_data len 67, time nopts, type trailer atom -
@@ -63,66 +63,66 @@  write_data len 1123, time nopts, type header atom -
 351ae2c8b6d35d98b4848c309cce6704 1159 empty-moov-header
 write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
-a0165f4a26a409212b0946e981bdefb9 1584 empty-moov-content
+289ee982188d66988a374a462b0b5376 1584 empty-moov-content
 write_data len 148, time nopts, type trailer atom -
 write_data len 1159, time nopts, type header atom ftyp
 351ae2c8b6d35d98b4848c309cce6704 1159 delay-moov-header
 write_data len 796, time 0, type sync atom moof
 write_data len 788, time 1000000, type sync atom moof
-a0165f4a26a409212b0946e981bdefb9 1584 delay-moov-content
+289ee982188d66988a374a462b0b5376 1584 delay-moov-content
 write_data len 148, time nopts, type trailer atom -
 write_data len 28, time nopts, type header atom -
 write_data len 1123, time nopts, type header atom -
 write_data len 884, time 0, type sync atom sidx
 write_data len 876, time 1000000, type sync atom sidx
-272a474cfd2a68cc5f05b426b14a2b7d 876 empty-moov-second-frag
+c0307f99a2a362205b7e3d65b1066f86 876 empty-moov-second-frag
 write_data len 148, time nopts, type trailer atom -
 write_data len 28, time nopts, type header atom -
 write_data len 1123, time nopts, type header atom -
 write_data len 876, time 1000000, type sync atom sidx
-272a474cfd2a68cc5f05b426b14a2b7d 876 empty-moov-second-frag-discont
+c0307f99a2a362205b7e3d65b1066f86 876 empty-moov-second-frag-discont
 write_data len 110, time nopts, type trailer atom -
 write_data len 1223, time nopts, type header atom -
 write_data len 876, time 1000000, type sync atom sidx
-272a474cfd2a68cc5f05b426b14a2b7d 876 delay-moov-second-frag-discont
+c0307f99a2a362205b7e3d65b1066f86 876 delay-moov-second-frag-discont
 write_data len 110, time nopts, type trailer atom -
 write_data len 1223, time nopts, type header atom ftyp
 b3811928793ed0749927eb2f7958421c 1223 delay-moov-elst-init
 write_data len 988, time -33333, type sync atom sidx
 write_data len 996, time 966667, type sync atom sidx
-fcae8f40e015b59aabc8d4a99a759ca1 996 delay-moov-elst-second-frag
+0df125407c7e81978ce722e0ae4f6f84 996 delay-moov-elst-second-frag
 write_data len 148, time nopts, type trailer atom -
 write_data len 1223, time nopts, type header atom ftyp
 b3811928793ed0749927eb2f7958421c 1223 delay-moov-elst-init-discont
 write_data len 996, time 966667, type sync atom sidx
-fcae8f40e015b59aabc8d4a99a759ca1 996 delay-moov-elst-second-frag-discont
+0df125407c7e81978ce722e0ae4f6f84 996 delay-moov-elst-second-frag-discont
 write_data len 110, time nopts, type trailer atom -
 write_data len 1223, time nopts, type header atom ftyp
 041ac8efc35a0d023c26d05eedb20403 1223 delay-moov-elst-signal-init
 write_data len 1004, time -33333, type sync atom sidx
 write_data len 996, time 966667, type sync atom sidx
-aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag
+5a583d89318827d2569eecbeaa18c238 996 delay-moov-elst-signal-second-frag
 write_data len 148, time nopts, type trailer atom -
 write_data len 1223, time nopts, type header atom ftyp
 041ac8efc35a0d023c26d05eedb20403 1223 delay-moov-elst-signal-init-discont
 write_data len 996, time 966667, type sync atom sidx
-aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag-discont
+5a583d89318827d2569eecbeaa18c238 996 delay-moov-elst-signal-second-frag-discont
 write_data len 110, time nopts, type trailer atom -
 write_data len 1247, time nopts, type header atom ftyp
 80511a51d1ac9cde62337eed7176ae03 1247 delay-moov-elst-signal-init-discont-largets
 write_data len 996, time 279621233333, type sync atom sidx
-41cac4c3df656a87bb38363fdcd745e6 996 delay-moov-elst-signal-second-frag-discont-largets
+dc695d65e8a0cdafee28acd8a5ccf81a 996 delay-moov-elst-signal-second-frag-discont-largets
 write_data len 110, time nopts, type trailer atom -
 write_data len 1223, time nopts, type header atom ftyp
 write_data len 2572, time -333333, type sync atom sidx
 write_data len 996, time 5166667, type sync atom sidx
 write_data len 148, time nopts, type trailer atom -
-c3eb39921c90724784d1ab84fac58b34 4939 vfr
+d37a7eda807912b9ed05ccfe003a9e4f 4939 vfr
 write_data len 1223, time nopts, type header atom ftyp
 write_data len 2572, time -333333, type sync atom sidx
 write_data len 996, time 5166667, type sync atom sidx
 write_data len 148, time nopts, type trailer atom -
-c3eb39921c90724784d1ab84fac58b34 4939 vfr-noduration
+d37a7eda807912b9ed05ccfe003a9e4f 4939 vfr-noduration
 write_data len 1231, time nopts, type header atom ftyp
 write_data len 1500, time -333333, type sync atom moof
 write_data len 1500, time nopts, type unknown atom -
@@ -131,7 +131,7 @@  write_data len 1500, time 9666667, type sync atom moof
 write_data len 1500, time nopts, type unknown atom -
 write_data len 1004, time nopts, type unknown atom -
 write_data len 148, time nopts, type trailer atom -
-5bde1358e246e715b2096daa321c9f1b 9299 large_frag
+08b6401dc81912e5264245b7233c4ab3 9299 large_frag
 write_data len 1231, time nopts, type header atom ftyp
 write_data len 684, time -33333, type sync atom moof
 write_data len 504, time 800000, type boundary atom moof
@@ -139,15 +139,15 @@  write_data len 420, time 1266667, type boundary atom moof
 write_data len 668, time 1566667, type sync atom moof
 write_data len 440, time 2233333, type boundary atom moof
 write_data len 262, time nopts, type trailer atom -
-47cc2460c4b18390c67991cf3251409b 4209 vfr-noduration-interleave
+a5d087611a9229ba91eb0964cf2f17d9 4209 vfr-noduration-interleave
 write_data len 1231, time nopts, type header atom ftyp
 write_data len 916, time 0, type sync atom moof
 write_data len 908, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-c200a345c365dd35a31e7e62a9ae6c10 3203 delay-moov-elst-neg-cts
+d81c3a0ce5940a2db74c99ad435e0560 3203 delay-moov-elst-neg-cts
 write_data len 36, time nopts, type header atom ftyp
 write_data len 1123, time nopts, type header atom -
 write_data len 900, time 0, type sync atom moof
 write_data len 908, time 1000000, type sync atom moof
 write_data len 148, time nopts, type trailer atom -
-868bb53d861d81b1c15ef4d59afc83b5 3115 empty-moov-neg-cts
+3be575022e446855bca1e45b7942cc0c 3115 empty-moov-neg-cts
diff --git a/tests/ref/fate/sub2video b/tests/ref/fate/sub2video
index 4e034a5..80abe9c 100644
--- a/tests/ref/fate/sub2video
+++ b/tests/ref/fate/sub2video
@@ -10,7 +10,7 @@ 
 0,          0,          0,        1,   518400, 0x83c27b82
 0,          1,          1,        1,   518400, 0x4051c7f9
 0,          2,          2,        1,   518400, 0xfb00e17e
-1,     499000,     499000,  4960000,     1015, 0x19e092d2, F=0x0
+1,     499000,     499000,  4960000,     1015, 0x19e092d2
 0,          3,          3,        1,   518400, 0x192abb74
 0,          4,          4,        1,   518400, 0x4669a88b
 0,          5,          5,        1,   518400, 0xaababe00
@@ -58,129 +58,129 @@ 
 0,         47,         47,        1,   518400, 0xde69683f
 0,         48,         48,        1,   518400, 0x7df08fba
 0,         49,         49,        1,   518400, 0xbab197ea
-1,   15355000,   15355000,  4733000,     2094, 0x3c171425, F=0x0
+1,   15355000,   15355000,  4733000,     2094, 0x3c171425
 0,         77,         77,        1,   518400, 0x902285d9
 0,        100,        100,        1,   518400, 0xbab197ea
-1,   48797000,   48797000,  2560000,     2480, 0x7c0edf21, F=0x0
+1,   48797000,   48797000,  2560000,     2480, 0x7c0edf21
 0,        244,        244,        1,   518400, 0x7a11c812
 0,        257,        257,        1,   518400, 0xbab197ea
-1,   51433000,   51433000,  2366000,     3059, 0xc95b8a05, F=0x0
+1,   51433000,   51433000,  2366000,     3059, 0xc95b8a05
 0,        258,        258,        1,   518400, 0x34cdddee
 0,        269,        269,        1,   518400, 0xbab197ea
-1,   53910000,   53910000,  2696000,     2095, 0x61bb15ed, F=0x0
+1,   53910000,   53910000,  2696000,     2095, 0x61bb15ed
 0,        270,        270,        1,   518400, 0x4db4ce51
 0,        283,        283,        1,   518400, 0xbab197ea
-1,   56663000,   56663000,  1262000,     1013, 0xc9ae89b7, F=0x0
+1,   56663000,   56663000,  1262000,     1013, 0xc9ae89b7
 0,        284,        284,        1,   518400, 0xe6bc0ea9
 0,        290,        290,        1,   518400, 0xbab197ea
-1,   58014000,   58014000,  1661000,      969, 0xe01878f0, F=0x0
+1,   58014000,   58014000,  1661000,      969, 0xe01878f0
 0,        291,        291,        1,   518400, 0xa8643af7
 0,        298,        298,        1,   518400, 0xbab197ea
-1,   67724000,   67724000,  1365000,      844, 0xe7db4fc1, F=0x0
+1,   67724000,   67724000,  1365000,      844, 0xe7db4fc1
 0,        339,        339,        1,   518400, 0xb1885c67
 0,        345,        345,        1,   518400, 0xbab197ea
-1,   69175000,   69175000,  1558000,      802, 0xf48531ba, F=0x0
+1,   69175000,   69175000,  1558000,      802, 0xf48531ba
 0,        346,        346,        1,   518400, 0x378e3fd0
 0,        354,        354,        1,   518400, 0xbab197ea
-1,   70819000,   70819000,  1865000,     1709, 0xb4d5a1bd, F=0x0
+1,   70819000,   70819000,  1865000,     1709, 0xb4d5a1bd
 0,        355,        355,        1,   518400, 0xa3782469
 0,        363,        363,        1,   518400, 0xbab197ea
-1,   72762000,   72762000,  1968000,     2438, 0x99d7bc82, F=0x0
+1,   72762000,   72762000,  1968000,     2438, 0x99d7bc82
 0,        364,        364,        1,   518400, 0xba23a0d5
 0,        374,        374,        1,   518400, 0xbab197ea
-1,   74806000,   74806000,  1831000,     2116, 0x96514097, F=0x0
+1,   74806000,   74806000,  1831000,     2116, 0x96514097
 0,        375,        375,        1,   518400, 0x129de2f8
 0,        383,        383,        1,   518400, 0xbab197ea
-1,   76716000,   76716000,  1262000,     1822, 0xefccc72e, F=0x0
+1,   76716000,   76716000,  1262000,     1822, 0xefccc72e
 0,        384,        384,        1,   518400, 0x19772f0f
 0,        390,        390,        1,   518400, 0xbab197ea
-1,   78051000,   78051000,  1524000,      987, 0x7b927a27, F=0x0
+1,   78051000,   78051000,  1524000,      987, 0x7b927a27
 0,        391,        391,        1,   518400, 0x56f54e73
 0,        398,        398,        1,   518400, 0xbab197ea
-1,   79644000,   79644000,  2662000,     2956, 0x190778f7, F=0x0
+1,   79644000,   79644000,  2662000,     2956, 0x190778f7
 0,        399,        399,        1,   518400, 0x300b5247
-1,   82380000,   82380000,  2764000,     3094, 0xc021b7d3, F=0x0
+1,   82380000,   82380000,  2764000,     3094, 0xc021b7d3
 0,        412,        412,        1,   518400, 0xbab197ea
 0,        413,        413,        1,   518400, 0x6fd028fa
 0,        426,        426,        1,   518400, 0xbab197ea
-1,   85225000,   85225000,  2366000,     2585, 0x74d0048f, F=0x0
+1,   85225000,   85225000,  2366000,     2585, 0x74d0048f
 0,        427,        427,        1,   518400, 0x01f80e9d
 0,        438,        438,        1,   518400, 0xbab197ea
-1,   87652000,   87652000,  1831000,      634, 0x8832fda1, F=0x0
+1,   87652000,   87652000,  1831000,      634, 0x8832fda1
 0,        439,        439,        1,   518400, 0xb48d90c0
 0,        447,        447,        1,   518400, 0xbab197ea
-1,   91531000,   91531000,  2332000,     2080, 0x97a1146f, F=0x0
+1,   91531000,   91531000,  2332000,     2080, 0x97a1146f
 0,        458,        458,        1,   518400, 0xcb5a0173
 0,        469,        469,        1,   518400, 0xbab197ea
-1,   95510000,   95510000,  3299000,     2964, 0x8b8f6684, F=0x0
+1,   95510000,   95510000,  3299000,     2964, 0x8b8f6684
 0,        478,        478,        1,   518400, 0xb8a323e4
 0,        494,        494,        1,   518400, 0xbab197ea
-1,   98872000,   98872000,  2161000,     1875, 0x9002ef71, F=0x0
+1,   98872000,   98872000,  2161000,     1875, 0x9002ef71
 0,        495,        495,        1,   518400, 0xc43518ba
 0,        505,        505,        1,   518400, 0xbab197ea
-1,  101124000,  101124000,  4096000,     3872, 0x20c6ed9c, F=0x0
+1,  101124000,  101124000,  4096000,     3872, 0x20c6ed9c
 0,        506,        506,        1,   518400, 0x04e38692
 0,        526,        526,        1,   518400, 0xbab197ea
-1,  105303000,  105303000,  2730000,     3094, 0xf203a663, F=0x0
+1,  105303000,  105303000,  2730000,     3094, 0xf203a663
 0,        527,        527,        1,   518400, 0x856b0ee5
 0,        540,        540,        1,   518400, 0xbab197ea
-1,  108106000,  108106000,  2059000,     2404, 0x41a7b429, F=0x0
+1,  108106000,  108106000,  2059000,     2404, 0x41a7b429
 0,        541,        541,        1,   518400, 0x3e5beee2
 0,        551,        551,        1,   518400, 0xbab197ea
-1,  141556000,  141556000,  1661000,     1088, 0xde20aa20, F=0x0
+1,  141556000,  141556000,  1661000,     1088, 0xde20aa20
 0,        708,        708,        1,   518400, 0xb8bc1365
 0,        716,        716,        1,   518400, 0xbab197ea
 0,        817,        817,        1,   518400, 0x83efa32d
-1,  163445000,  163445000,  1331000,      339, 0x8bd186ef, F=0x0
+1,  163445000,  163445000,  1331000,      339, 0x8bd186ef
 0,        824,        824,        1,   518400, 0xbab197ea
 0,        840,        840,        1,   518400, 0x03ea0e90
-1,  168049000,  168049000,  1900000,     1312, 0x0bf20e8d, F=0x0
+1,  168049000,  168049000,  1900000,     1312, 0x0bf20e8d
 0,        850,        850,        1,   518400, 0xbab197ea
-1,  170035000,  170035000,  1524000,     1279, 0xb6c2dafe, F=0x0
+1,  170035000,  170035000,  1524000,     1279, 0xb6c2dafe
 0,        851,        851,        1,   518400, 0x8780239e
 0,        858,        858,        1,   518400, 0xbab197ea
 0,        861,        861,        1,   518400, 0x6eb72347
-1,  172203000,  172203000,  1695000,     1826, 0x9a1ac769, F=0x0
+1,  172203000,  172203000,  1695000,     1826, 0x9a1ac769
 0,        869,        869,        1,   518400, 0xbab197ea
-1,  173947000,  173947000,  1934000,     1474, 0xa9b03cdc, F=0x0
+1,  173947000,  173947000,  1934000,     1474, 0xa9b03cdc
 0,        870,        870,        1,   518400, 0x9c4a3a3d
 0,        879,        879,        1,   518400, 0xbab197ea
-1,  175957000,  175957000,  1763000,     1019, 0x20409355, F=0x0
+1,  175957000,  175957000,  1763000,     1019, 0x20409355
 0,        880,        880,        1,   518400, 0xc9ebfa89
 0,        889,        889,        1,   518400, 0xbab197ea
 0,        946,        946,        1,   518400, 0xbaf801ef
-1,  189295000,  189295000,  1968000,     1596, 0x408c726e, F=0x0
+1,  189295000,  189295000,  1968000,     1596, 0x408c726e
 0,        956,        956,        1,   518400, 0xbab197ea
-1,  191356000,  191356000,  1228000,     1517, 0xae8c5c2b, F=0x0
+1,  191356000,  191356000,  1228000,     1517, 0xae8c5c2b
 0,        957,        957,        1,   518400, 0x59f4e72f
 0,        963,        963,        1,   518400, 0xbab197ea
-1,  192640000,  192640000,  1763000,     2506, 0xa458d6d4, F=0x0
+1,  192640000,  192640000,  1763000,     2506, 0xa458d6d4
 0,        964,        964,        1,   518400, 0x9d5b9d69
 0,        972,        972,        1,   518400, 0xbab197ea
-1,  195193000,  195193000,  1092000,     1074, 0x397ba9a8, F=0x0
+1,  195193000,  195193000,  1092000,     1074, 0x397ba9a8
 0,        976,        976,        1,   518400, 0x923d1ce7
 0,        981,        981,        1,   518400, 0xbab197ea
-1,  196361000,  196361000,  1524000,     1715, 0x695ca41e, F=0x0
+1,  196361000,  196361000,  1524000,     1715, 0x695ca41e
 0,        982,        982,        1,   518400, 0x6e652cd2
 0,        989,        989,        1,   518400, 0xbab197ea
-1,  197946000,  197946000,  1160000,      789, 0xc63a189e, F=0x0
+1,  197946000,  197946000,  1160000,      789, 0xc63a189e
 0,        990,        990,        1,   518400, 0x25113966
 0,        996,        996,        1,   518400, 0xbab197ea
-1,  199230000,  199230000,  1627000,     1846, 0xeea8c599, F=0x0
+1,  199230000,  199230000,  1627000,     1846, 0xeea8c599
 0,        997,        997,        1,   518400, 0x2dc83609
 0,       1004,       1004,        1,   518400, 0xbab197ea
-1,  200924000,  200924000,  1763000,      922, 0xd4a87222, F=0x0
+1,  200924000,  200924000,  1763000,      922, 0xd4a87222
 0,       1005,       1005,        1,   518400, 0x90483bc6
 0,       1013,       1013,        1,   518400, 0xbab197ea
 0,       1053,       1053,        1,   518400, 0x3de86ab7
-1,  210600000,  210600000,  1831000,      665, 0x55580135, F=0x0
+1,  210600000,  210600000,  1831000,      665, 0x55580135
 0,       1062,       1062,        1,   518400, 0xbab197ea
-1,  214771000,  214771000,  1558000,     1216, 0x50d1f6c5, F=0x0
+1,  214771000,  214771000,  1558000,     1216, 0x50d1f6c5
 0,       1074,       1074,        1,   518400, 0x8c320e68
 0,       1082,       1082,        1,   518400, 0xbab197ea
 0,       1128,       1128,        1,   518400, 0x81e977b2
-1,  225640000,  225640000,  2127000,     2133, 0x670c11a5, F=0x0
+1,  225640000,  225640000,  2127000,     2133, 0x670c11a5
 0,       1139,       1139,        1,   518400, 0xbab197ea
-1,  227834000,  227834000,  1262000,     1264, 0xc1d9fc57, F=0x0
+1,  227834000,  227834000,  1262000,     1264, 0xc1d9fc57
 0,       1140,       1140,        1,   518400, 0xb046dd30
 0,       1145,       1145,        1,   518400, 0xbab197ea