1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Merge commit 'a79aafd0b4d37eda6f15dc68e6509d4e815290c9'

* commit 'a79aafd0b4d37eda6f15dc68e6509d4e815290c9':
  movenc: Add a test for VFR with b-frames, with a duration change at a fragment end

Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
This commit is contained in:
Matthieu Bouron 2016-06-23 22:20:10 +02:00
commit c60d328e67
2 changed files with 42 additions and 1 deletions

View File

@ -70,6 +70,8 @@ int skip_write;
int skip_write_audio;
int clear_duration;
int force_iobuf_size;
int do_interleave;
int fake_pkt_duration;
int num_warnings;
@ -283,6 +285,8 @@ static void mux_frames(int n)
}
if (!bframes)
pkt.pts = pkt.dts;
if (fake_pkt_duration)
pkt.duration = fake_pkt_duration;
frames++;
}
@ -295,7 +299,10 @@ static void mux_frames(int n)
continue;
if (skip_write_audio && pkt.stream_index == 1)
continue;
av_write_frame(ctx, &pkt);
if (do_interleave)
av_interleaved_write_frame(ctx, &pkt);
else
av_write_frame(ctx, &pkt);
}
}
@ -713,6 +720,32 @@ int main(int argc, char **argv)
close_out();
force_iobuf_size = 0;
// Test VFR content with bframes with interleaving.
// Here, using av_interleaved_write_frame allows the muxer to get the
// fragment end durations right. We always set the packet duration to
// the expected, but we simulate dropped frames at one point.
do_interleave = 1;
init_out("vfr-noduration-interleave");
av_dict_set(&opts, "movflags", "frag_keyframe+delay_moov", 0);
av_dict_set(&opts, "frag_duration", "650000", 0);
init_fps(1, 1, 30);
mux_frames(gop_size/2);
// Pretend that the packet duration is the normal, even if
// we actually skip a bunch of frames. (I.e., simulate that
// we don't know of the framedrop in advance.)
fake_pkt_duration = duration;
duration *= 10;
mux_frames(1);
fake_pkt_duration = 0;
duration /= 10;
mux_frames(gop_size/2 - 1);
mux_gops(1);
finish();
close_out();
clear_duration = 0;
do_interleave = 0;
av_free(md5);
return check_faults > 0 ? 1 : 0;

View File

@ -127,3 +127,11 @@ 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 -
3c2c3f98c8a047f0ecefff07570fd457 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
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 -
edd19deae2b70afcf2cd744b89b7013d 4209 vfr-noduration-interleave