diff mbox series

[FFmpeg-devel] avcodec/h264_parser: remove key frame tagging heuristics

Message ID 20210712193259.17346-1-jamrial@gmail.com
State New
Headers show
Series [FFmpeg-devel] avcodec/h264_parser: remove key frame tagging heuristics | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate fail Make fate failed
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate warning Make fate failed

Commit Message

James Almer July 12, 2021, 7:32 p.m. UTC
None of these packets contain keyframes, and tagging them as such can result in
non spec compliant output when remuxing into containers like mp4 and Matroska,
where bogus samples would be marked as Sync Samples.

Some tests are updated to reflect this.

Suggested-by: ffmpeg@fb.com
Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/h264_parser.c           |  8 --------
 tests/fate-run.sh                  |  4 ++--
 tests/fate/ffmpeg.mak              |  2 +-
 tests/fate/lavf-container.mak      | 12 ++++++------
 tests/fate/matroska.mak            |  2 +-
 tests/ref/fate/copy-trac2211-avi   |  2 +-
 tests/ref/fate/matroska-h264-remux |  4 ++--
 tests/ref/fate/segment-mp4-to-ts   | 10 +++++-----
 tests/ref/lavf-fate/h264.mp4       |  4 ++--
 9 files changed, 20 insertions(+), 28 deletions(-)

Comments

Kieran Kunhya July 12, 2021, 11:53 p.m. UTC | #1
On Mon, 12 Jul 2021 at 20:33, James Almer <jamrial@gmail.com> wrote:

> None of these packets contain keyframes, and tagging them as such can
> result in
> non spec compliant output when remuxing into containers like mp4 and
> Matroska,
> where bogus samples would be marked as Sync Samples.
>
> Some tests are updated to reflect this.
>
> Suggested-by: ffmpeg@fb.com
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/h264_parser.c           |  8 --------
>  tests/fate-run.sh                  |  4 ++--
>  tests/fate/ffmpeg.mak              |  2 +-
>  tests/fate/lavf-container.mak      | 12 ++++++------
>  tests/fate/matroska.mak            |  2 +-
>  tests/ref/fate/copy-trac2211-avi   |  2 +-
>  tests/ref/fate/matroska-h264-remux |  4 ++--
>  tests/ref/fate/segment-mp4-to-ts   | 10 +++++-----
>  tests/ref/lavf-fate/h264.mp4       |  4 ++--
>  9 files changed, 20 insertions(+), 28 deletions(-)
>
> diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
> index d3c56cc188..e78c3679fb 100644
> --- a/libavcodec/h264_parser.c
> +++ b/libavcodec/h264_parser.c
> @@ -344,10 +344,6 @@ static inline int
> parse_nal_units(AVCodecParserContext *s,
>              get_ue_golomb_long(&nal.gb);  // skip first_mb_in_slice
>              slice_type   = get_ue_golomb_31(&nal.gb);
>              s->pict_type = ff_h264_golomb_to_pict_type[slice_type % 5];
> -            if (p->sei.recovery_point.recovery_frame_cnt >= 0) {
> -                /* key frame, since recovery_frame_cnt is set */
> -                s->key_frame = 1;
> -            }
>

Why remove this, this is a reasonable check for a key frame?

Kieran
James Almer July 13, 2021, 12:22 a.m. UTC | #2
On 7/12/2021 8:53 PM, Kieran Kunhya wrote:
> On Mon, 12 Jul 2021 at 20:33, James Almer <jamrial@gmail.com> wrote:
> 
>> None of these packets contain keyframes, and tagging them as such can
>> result in
>> non spec compliant output when remuxing into containers like mp4 and
>> Matroska,
>> where bogus samples would be marked as Sync Samples.
>>
>> Some tests are updated to reflect this.
>>
>> Suggested-by: ffmpeg@fb.com
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>   libavcodec/h264_parser.c           |  8 --------
>>   tests/fate-run.sh                  |  4 ++--
>>   tests/fate/ffmpeg.mak              |  2 +-
>>   tests/fate/lavf-container.mak      | 12 ++++++------
>>   tests/fate/matroska.mak            |  2 +-
>>   tests/ref/fate/copy-trac2211-avi   |  2 +-
>>   tests/ref/fate/matroska-h264-remux |  4 ++--
>>   tests/ref/fate/segment-mp4-to-ts   | 10 +++++-----
>>   tests/ref/lavf-fate/h264.mp4       |  4 ++--
>>   9 files changed, 20 insertions(+), 28 deletions(-)
>>
>> diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
>> index d3c56cc188..e78c3679fb 100644
>> --- a/libavcodec/h264_parser.c
>> +++ b/libavcodec/h264_parser.c
>> @@ -344,10 +344,6 @@ static inline int
>> parse_nal_units(AVCodecParserContext *s,
>>               get_ue_golomb_long(&nal.gb);  // skip first_mb_in_slice
>>               slice_type   = get_ue_golomb_31(&nal.gb);
>>               s->pict_type = ff_h264_golomb_to_pict_type[slice_type % 5];
>> -            if (p->sei.recovery_point.recovery_frame_cnt >= 0) {
>> -                /* key frame, since recovery_frame_cnt is set */
>> -                s->key_frame = 1;
>> -            }
>>
> 
> Why remove this, this is a reasonable check for a key frame?

Because it isn't something that should be marked as a keyframe as coded 
bitstream in any kind of container, like it's the case of mp4 sync samples.

> 
> Kieran
> _______________________________________________
> 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".
>
Kieran Kunhya July 13, 2021, 1:01 a.m. UTC | #3
>
> Because it isn't something that should be marked as a keyframe as coded
> bitstream in any kind of container, like it's the case of mp4 sync samples.
>

MPEG-TS Random Access Indicator expects keyframes to be signalled like this.
With intra-refresh and this code removed, there will be no random access
points at all.

Kieran
James Almer July 13, 2021, 1:23 a.m. UTC | #4
On 7/12/2021 10:01 PM, Kieran Kunhya wrote:
>>
>> Because it isn't something that should be marked as a keyframe as coded
>> bitstream in any kind of container, like it's the case of mp4 sync samples.
>>
> 
> MPEG-TS Random Access Indicator expects keyframes to be signalled like this.
> With intra-refresh and this code removed, there will be no random access
> points at all.

If MPEG-TS wants to tag packets containing things other than IDR access 
units as RAPs, then it should analyze the bitstream itself in order to 
tag them itself as such in the output.
This parser as is is generating invalid output for other containers that 
are strict about key frames, and signal recovery points (like those 
indicated by the use of this SEI) by other means.

> 
> Kieran
> _______________________________________________
> 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".
>
Kieran Kunhya July 13, 2021, 2:44 a.m. UTC | #5
On Tue, 13 Jul 2021, 02:45 James Almer, <jamrial@gmail.com> wrote:

> On 7/12/2021 10:01 PM, Kieran Kunhya wrote:
> >>
> >> Because it isn't something that should be marked as a keyframe as coded
> >> bitstream in any kind of container, like it's the case of mp4 sync
> samples.
> >>
> >
> > MPEG-TS Random Access Indicator expects keyframes to be signalled like
> this.
> > With intra-refresh and this code removed, there will be no random access
> > points at all.
>
> If MPEG-TS wants to tag packets containing things other than IDR access
> units as RAPs, then it should analyze the bitstream itself in order to
> tag them itself as such in the output.
> This parser as is is generating invalid output for other containers that
> are strict about key frames, and signal recovery points (like those
> indicated by the use of this SEI) by other means.
>

Why not just detect IDR in containers that only care about that (which is a
mistake because if things like open gop)? Doing that's is relatively simple
compared to adding bitstream parsing into MPEGTS.

Kieran
Anton Khirnov July 13, 2021, 8:28 a.m. UTC | #6
Quoting Kieran Kunhya (2021-07-13 04:44:40)
> On Tue, 13 Jul 2021, 02:45 James Almer, <jamrial@gmail.com> wrote:
> 
> > On 7/12/2021 10:01 PM, Kieran Kunhya wrote:
> > >>
> > >> Because it isn't something that should be marked as a keyframe as coded
> > >> bitstream in any kind of container, like it's the case of mp4 sync
> > samples.
> > >>
> > >
> > > MPEG-TS Random Access Indicator expects keyframes to be signalled like
> > this.
> > > With intra-refresh and this code removed, there will be no random access
> > > points at all.
> >
> > If MPEG-TS wants to tag packets containing things other than IDR access
> > units as RAPs, then it should analyze the bitstream itself in order to
> > tag them itself as such in the output.
> > This parser as is is generating invalid output for other containers that
> > are strict about key frames, and signal recovery points (like those
> > indicated by the use of this SEI) by other means.
> >
> 
> Why not just detect IDR in containers that only care about that (which is a
> mistake because if things like open gop)? Doing that's is relatively simple
> compared to adding bitstream parsing into MPEGTS.

Seems we need a better definition of what "keyframe" means in our APIs.
Derek Buitenhuis July 13, 2021, 1:08 p.m. UTC | #7
On 7/13/2021 9:28 AM, Anton Khirnov wrote:
> Seems we need a better definition of what "keyframe" means in our APIs.

Not one, but many. That there is a single notion of a "keyframe" is wrong
in itself.

- Derek
Derek Buitenhuis July 13, 2021, 2:17 p.m. UTC | #8
On 7/13/2021 1:22 AM, James Almer wrote:
> Because it isn't something that should be marked as a keyframe as coded 
> bitstream in any kind of container, like it's the case of mp4 sync samples.

It *is* something that should be specifically marked in MP4, though, which
does vhae proper facilities for this stuff. The problem is our API has no concept
of RAPs other than "is an IDR".

Proper way to write e.g. intra-refresh streams is:
 * Write the 'sdtp' box.
 * Write the 'sgpd' and 'sbgp' boxes with a 'roll' sample grouping type and roll_distance properly set. 

Annex I of the MP4 spec is quite clear how all types of recover and sync points should be written.

- Derek
James Almer July 13, 2021, 8 p.m. UTC | #9
On 7/12/2021 11:44 PM, Kieran Kunhya wrote:
> On Tue, 13 Jul 2021, 02:45 James Almer, <jamrial@gmail.com> wrote:
> 
>> On 7/12/2021 10:01 PM, Kieran Kunhya wrote:
>>>>
>>>> Because it isn't something that should be marked as a keyframe as coded
>>>> bitstream in any kind of container, like it's the case of mp4 sync
>> samples.
>>>>
>>>
>>> MPEG-TS Random Access Indicator expects keyframes to be signalled like
>> this.
>>> With intra-refresh and this code removed, there will be no random access
>>> points at all.
>>
>> If MPEG-TS wants to tag packets containing things other than IDR access
>> units as RAPs, then it should analyze the bitstream itself in order to
>> tag them itself as such in the output.
>> This parser as is is generating invalid output for other containers that
>> are strict about key frames, and signal recovery points (like those
>> indicated by the use of this SEI) by other means.
>>
> 
> Why not just detect IDR in containers that only care about that (which is a
> mistake because if things like open gop)? Doing that's is relatively simple
> compared to adding bitstream parsing into MPEGTS.

Both would require bitstream parsing in a muxer to look at what pictures 
are present within the AU in the packet, so I'm inclined to do it for 
the muxer that wants to tag more things than normal as keyframes instead 
of in every other muxer.

I will keep tagging these packets as keyframes in the parser but behind 
a new flag that's disabled by default, then insert an internal instance 
of the parser to mpegtsenc with said flag enabled, and use that to mark 
mpegts RAPs.
This has the added benefit of marking these packets as RAPs in mpegts on 
codec copy scenarios when the source is an mp4 or mkv and the generic 
code never uses an AVParser.

> 
> Kieran
> _______________________________________________
> 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".
>
diff mbox series

Patch

diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index d3c56cc188..e78c3679fb 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -344,10 +344,6 @@  static inline int parse_nal_units(AVCodecParserContext *s,
             get_ue_golomb_long(&nal.gb);  // skip first_mb_in_slice
             slice_type   = get_ue_golomb_31(&nal.gb);
             s->pict_type = ff_h264_golomb_to_pict_type[slice_type % 5];
-            if (p->sei.recovery_point.recovery_frame_cnt >= 0) {
-                /* key frame, since recovery_frame_cnt is set */
-                s->key_frame = 1;
-            }
             pps_id = get_ue_golomb(&nal.gb);
             if (pps_id >= MAX_PPS_COUNT) {
                 av_log(avctx, AV_LOG_ERROR,
@@ -370,10 +366,6 @@  static inline int parse_nal_units(AVCodecParserContext *s,
             p->ps.sps = p->ps.pps->sps;
             sps       = p->ps.sps;
 
-            // heuristic to detect non marked keyframes
-            if (p->ps.sps->ref_frame_count <= 1 && p->ps.pps->ref_count[0] <= 1 && s->pict_type == AV_PICTURE_TYPE_I)
-                s->key_frame = 1;
-
             p->poc.frame_num = get_bits(&nal.gb, sps->log2_max_frame_num);
 
             s->coded_width  = 16 * sps->mb_width;
diff --git a/tests/fate-run.sh b/tests/fate-run.sh
index ba437dfbb8..2117ca387e 100755
--- a/tests/fate-run.sh
+++ b/tests/fate-run.sh
@@ -339,8 +339,8 @@  lavf_container_fate()
     outdir="tests/data/lavf-fate"
     file=${outdir}/lavf.$t
     input="${target_samples}/$1"
-    do_avconv $file -auto_conversion_filters $DEC_OPTS $2 -i "$input" "$ENC_OPTS -metadata title=lavftest" -vcodec copy -acodec copy
-    do_avconv_crc $file -auto_conversion_filters $DEC_OPTS -i $target_path/$file $3
+    do_avconv $file -auto_conversion_filters $DEC_OPTS $2 -i "$input" "$ENC_OPTS -metadata title=lavftest" -vcodec copy -acodec copy %3
+    do_avconv_crc $file -auto_conversion_filters $DEC_OPTS -i $target_path/$file $4
 }
 
 lavf_image(){
diff --git a/tests/fate/ffmpeg.mak b/tests/fate/ffmpeg.mak
index 4dfb77d250..57d16fba6f 100644
--- a/tests/fate/ffmpeg.mak
+++ b/tests/fate/ffmpeg.mak
@@ -110,7 +110,7 @@  fate-copy-trac4914-avi: CMD = transcode mpegts $(TARGET_SAMPLES)/mpeg2/xdcam8mp2
 FATE_STREAMCOPY-$(call ALLYES, H264_DEMUXER AVI_MUXER) += fate-copy-trac2211-avi
 fate-copy-trac2211-avi: $(SAMPLES)/h264/bbc2.sample.h264
 fate-copy-trac2211-avi: CMD = transcode "h264 -r 14" $(TARGET_SAMPLES)/h264/bbc2.sample.h264\
-                          avi "-c:a copy -c:v copy"
+                          avi "-c:a copy -c:v copy -copyinkf"
 
 FATE_STREAMCOPY-$(call ENCDEC, APNG, APNG) += fate-copy-apng
 fate-copy-apng: fate-lavf-apng
diff --git a/tests/fate/lavf-container.mak b/tests/fate/lavf-container.mak
index 9e0eed4851..40250badc1 100644
--- a/tests/fate/lavf-container.mak
+++ b/tests/fate/lavf-container.mak
@@ -71,13 +71,13 @@  FATE_LAVF_CONTAINER_FATE = $(FATE_LAVF_CONTAINER_FATE-yes:%=fate-lavf-fate-%)
 $(FATE_LAVF_CONTAINER_FATE): REF = $(SRC_PATH)/tests/ref/lavf-fate/$(@:fate-lavf-fate-%=%)
 $(FATE_LAVF_CONTAINER_FATE): $(AREF) $(VREF)
 
-fate-lavf-fate-av1.mp4: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "-c:v copy"
-fate-lavf-fate-av1.mkv: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "-c:v copy"
-fate-lavf-fate-h264.mp4: CMD = lavf_container_fate "h264/intra_refresh.h264" "" "-c:v copy"
+fate-lavf-fate-av1.mp4: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "" "-c:v copy"
+fate-lavf-fate-av1.mkv: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "" "-c:v copy"
+fate-lavf-fate-h264.mp4: CMD = lavf_container_fate "h264/intra_refresh.h264" "" "-copyinkf" "-c:v copy -copyinkf"
 fate-lavf-fate-vp3.ogg: CMD = lavf_container_fate "vp3/coeff_level64.mkv" "-idct auto"
-fate-lavf-fate-vp8.ogg: CMD = lavf_container_fate "vp8/RRSF49-short.webm" "" "-acodec copy"
-fate-lavf-fate-latm: CMD = lavf_container_fate "aac/al04_44.mp4" "" "-acodec copy"
-fate-lavf-fate-mp3: CMD = lavf_container_fate "mp3-conformance/he_32khz.bit" "" "-acodec copy"
+fate-lavf-fate-vp8.ogg: CMD = lavf_container_fate "vp8/RRSF49-short.webm" "" "" "-acodec copy"
+fate-lavf-fate-latm: CMD = lavf_container_fate "aac/al04_44.mp4" "" "" "-acodec copy"
+fate-lavf-fate-mp3: CMD = lavf_container_fate "mp3-conformance/he_32khz.bit" "" "" "-acodec copy"
 fate-lavf-fate-qtrle_mace6.mov: CMD = lavf_container_fate "qtrle/Animation-16Greys.mov" "-idct auto"
 fate-lavf-fate-cram.avi: CMD = lavf_container_fate "cram/toon.avi" "-idct auto"
 
diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak
index ca7193a055..545a0d1d50 100644
--- a/tests/fate/matroska.mak
+++ b/tests/fate/matroska.mak
@@ -105,7 +105,7 @@  FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL MPEGTS_DEMUXER       \
                                             MATROSKA_DEMUXER H264_DECODER      \
                                             FRAMECRC_MUXER PIPE_PROTOCOL)      \
                                += fate-matroska-h264-remux
-fate-matroska-h264-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/h264/h264_intra_first-small.ts matroska "-map 0:0 -map 0 -c:v copy -sar:0 3:4 -bsf:v:1 h264_metadata=aud=remove:delete_filler=1 -disposition:v +hearing_impaired -af aresample -c:a:0 pcm_s32le -c:a:1 pcm_s32be -disposition:a:0 original -metadata:s:a:0 title=swedish_silence -metadata:s:a:1 title=norwegian_silence -disposition:a:1 dub" "-map 0:v" "" "-show_entries stream=index,codec_name:stream_tags=title,language"
+fate-matroska-h264-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/h264/h264_intra_first-small.ts matroska "-map 0:0 -map 0 -c:v copy -copyinkf -sar:0 3:4 -bsf:v:1 h264_metadata=aud=remove:delete_filler=1 -disposition:v +hearing_impaired -af aresample -c:a:0 pcm_s32le -c:a:1 pcm_s32be -disposition:a:0 original -metadata:s:a:0 title=swedish_silence -metadata:s:a:1 title=norwegian_silence -disposition:a:1 dub" "-map 0:v" "" "-show_entries stream=index,codec_name:stream_tags=title,language"
 
 # Tests writing BlockAdditional and BlockGroups with ReferenceBlock elements;
 # it also tests setting a track as suitable for hearing impaired.
diff --git a/tests/ref/fate/copy-trac2211-avi b/tests/ref/fate/copy-trac2211-avi
index 06d81e537d..1f71ae65f2 100644
--- a/tests/ref/fate/copy-trac2211-avi
+++ b/tests/ref/fate/copy-trac2211-avi
@@ -1,4 +1,4 @@ 
-0920978f3f8196413c43f0033b55a5b6 *tests/data/fate/copy-trac2211-avi.avi
+ee1e66eac40569ae3cf9552286900900 *tests/data/fate/copy-trac2211-avi.avi
 1777956 tests/data/fate/copy-trac2211-avi.avi
 #tb 0: 1/14
 #media_type 0: video
diff --git a/tests/ref/fate/matroska-h264-remux b/tests/ref/fate/matroska-h264-remux
index 14e6758fa0..7b852f8266 100644
--- a/tests/ref/fate/matroska-h264-remux
+++ b/tests/ref/fate/matroska-h264-remux
@@ -1,5 +1,5 @@ 
-ded6da7e46ce7df1232b116afb0b2f0a *tests/data/fate/matroska-h264-remux.matroska
-2036083 tests/data/fate/matroska-h264-remux.matroska
+d5fc08094380fc8aba485c09b596ceee *tests/data/fate/matroska-h264-remux.matroska
+2371935 tests/data/fate/matroska-h264-remux.matroska
 #tb 0: 1/25
 #media_type 0: video
 #codec_id 0: rawvideo
diff --git a/tests/ref/fate/segment-mp4-to-ts b/tests/ref/fate/segment-mp4-to-ts
index 8b0746fa92..5c456cd0bc 100644
--- a/tests/ref/fate/segment-mp4-to-ts
+++ b/tests/ref/fate/segment-mp4-to-ts
@@ -25,7 +25,7 @@ 
 0,      57600,      64800,     3600,     1182, 0xbe1a4847, F=0x0, S=1,        1
 0,      61200,      61200,     3600,      809, 0x8d948a4e, F=0x0, S=1,        1
 0,      64800,      68400,     3600,      656, 0x4fa03c2b, F=0x0, S=1,        1
-0,      68400,      86400,     3600,    26555, 0x5629b584, S=1,        1
+0,      68400,      86400,     3600,    26555, 0x5629b584, F=0x0, S=1,        1
 0,      72000,      79200,     3600,     1141, 0x761b31e8, F=0x0, S=1,        1
 0,      75600,      75600,     3600,      717, 0x57746351, F=0x0, S=1,        1
 0,      79200,      82800,     3600,      693, 0x78b24263, F=0x0, S=1,        1
@@ -49,7 +49,7 @@ 
 0,     144000,     151200,     3600,     1271, 0x46006870, F=0x0, S=1,        1
 0,     147600,     147600,     3600,      849, 0x94dc99c7, F=0x0, S=1,        1
 0,     151200,     154800,     3600,      753, 0xf4236cab, F=0x0, S=1,        1
-0,     154800,     172800,     3600,    25825, 0xd5464dee, S=1,        1
+0,     154800,     172800,     3600,    25825, 0xd5464dee, F=0x0, S=1,        1
 0,     158400,     165600,     3600,     1206, 0x8ce84344, F=0x0, S=1,        1
 0,     162000,     162000,     3600,      867, 0x312fa07d, F=0x0, S=1,        1
 0,     165600,     169200,     3600,      719, 0x810666d1, F=0x0, S=1,        1
@@ -73,7 +73,7 @@ 
 0,     230400,     237600,     3600,     1545, 0x0099fc98, F=0x0, S=1,        1
 0,     234000,     234000,     3600,      929, 0xfd72d049, F=0x0, S=1,        1
 0,     237600,     241200,     3600,      829, 0xcfda9e96, F=0x0, S=1,        1
-0,     241200,     259200,     3600,    24220, 0x5ca21d71, S=1,        1
+0,     241200,     259200,     3600,    24220, 0x5ca21d71, F=0x0, S=1,        1
 0,     244800,     252000,     3600,     1422, 0xcde6cc34, F=0x0, S=1,        1
 0,     248400,     248400,     3600,      883, 0xedacbe25, F=0x0, S=1,        1
 0,     252000,     255600,     3600,      768, 0x89d774bc, F=0x0, S=1,        1
@@ -97,7 +97,7 @@ 
 0,     316800,     324000,     3600,     1501, 0xb3b8f001, F=0x0, S=1,        1
 0,     320400,     320400,     3600,      941, 0x92b0cb18, F=0x0, S=1,        1
 0,     324000,     327600,     3600,      823, 0x3d548355, F=0x0, S=1,        1
-0,     327600,     345600,     3600,    24042, 0x441e94fb, S=1,        1
+0,     327600,     345600,     3600,    24042, 0x441e94fb, F=0x0, S=1,        1
 0,     331200,     338400,     3600,     1582, 0x4f5d1049, F=0x0, S=1,        1
 0,     334800,     334800,     3600,      945, 0x4f3cc9e8, F=0x0, S=1,        1
 0,     338400,     342000,     3600,      815, 0x0ca790a4, F=0x0, S=1,        1
@@ -121,7 +121,7 @@ 
 0,     403200,     410400,     3600,      359, 0x11bdae52, F=0x0, S=1,        1
 0,     406800,     406800,     3600,      235, 0xbec26964, F=0x0, S=1,        1
 0,     410400,     414000,     3600,      221, 0x8380682c, F=0x0, S=1,        1
-0,     414000,     432000,     3600,    22588, 0xf0ecf072, S=1,        1
+0,     414000,     432000,     3600,    22588, 0xf0ecf072, F=0x0, S=1,        1
 0,     417600,     424800,     3600,      383, 0x4f3bb571, F=0x0, S=1,        1
 0,     421200,     421200,     3600,      257, 0x22e87802, F=0x0, S=1,        1
 0,     424800,     428400,     3600,      261, 0xdb988134, F=0x0, S=1,        1
diff --git a/tests/ref/lavf-fate/h264.mp4 b/tests/ref/lavf-fate/h264.mp4
index a9c3823c2c..54d8c407d2 100644
--- a/tests/ref/lavf-fate/h264.mp4
+++ b/tests/ref/lavf-fate/h264.mp4
@@ -1,3 +1,3 @@ 
-fe299ea5205b71a48281f917b1256a5d *tests/data/lavf-fate/lavf.h264.mp4
-547928 tests/data/lavf-fate/lavf.h264.mp4
+badb54efedaf0c7f725158b85339a8f4 *tests/data/lavf-fate/lavf.h264.mp4
+548177 tests/data/lavf-fate/lavf.h264.mp4
 tests/data/lavf-fate/lavf.h264.mp4 CRC=0x9da2c999