diff --git a/libavformat/movenc-test.c b/libavformat/movenc-test.c index d9c7a1a005..a274a5ec4c 100644 --- a/libavformat/movenc-test.c +++ b/libavformat/movenc-test.c @@ -280,6 +280,23 @@ static void skip_gops(int n) skip_write = 0; } +static void signal_init_ts(void) +{ + AVPacket pkt; + av_init_packet(&pkt); + pkt.size = 0; + pkt.data = NULL; + + pkt.stream_index = 0; + pkt.dts = video_dts; + pkt.pts = 0; + av_write_frame(ctx, &pkt); + + pkt.stream_index = 1; + pkt.dts = pkt.pts = audio_dts; + av_write_frame(ctx, &pkt); +} + static void finish(void) { av_write_trailer(ctx); @@ -576,6 +593,40 @@ int main(int argc, char **argv) finish(); + // Test discontinously written fragments with b-frames and audio preroll, + // properly signaled. + av_dict_set(&opts, "movflags", "frag_custom+delay_moov+dash", 0); + init(1, 1); + mux_gops(1); + init_out("delay-moov-elst-signal-init"); + av_write_frame(ctx, NULL); // Output the moov + close_out(); + memcpy(header, hash, HASH_SIZE); + av_write_frame(ctx, NULL); // Output the first fragment + init_out("delay-moov-elst-signal-second-frag"); + mux_gops(1); + av_write_frame(ctx, NULL); // Output the second fragment + close_out(); + memcpy(content, hash, HASH_SIZE); + finish(); + + av_dict_set(&opts, "movflags", "frag_custom+delay_moov+dash+frag_discont", 0); + av_dict_set(&opts, "fragment_index", "2", 0); + init(1, 1); + signal_init_ts(); + skip_gops(1); + mux_gops(1); // Write the second fragment + init_out("delay-moov-elst-signal-init-discont"); + av_write_frame(ctx, NULL); // Output the moov + close_out(); + check(!memcmp(hash, header, HASH_SIZE), "discontinuously written header differs"); + init_out("delay-moov-elst-signal-second-frag-discont"); + av_write_frame(ctx, NULL); // Output the second fragment + close_out(); + check(!memcmp(hash, content, HASH_SIZE), "discontinuously written fragment differs"); + finish(); + + // Test VFR content, with sidx atoms (which declare the pts duration // of a fragment, forcing overriding the start pts of the next one). // Here, the fragment duration in pts is significantly different from diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc index 3e7fe34984..abb728f5f4 100644 --- a/tests/ref/fate/movenc +++ b/tests/ref/fate/movenc @@ -20,5 +20,9 @@ a0165f4a26a409212b0946e981bdefb9 1584 delay-moov-content fcae8f40e015b59aabc8d4a99a759ca1 996 delay-moov-elst-second-frag 6256445b9595de78be493e0faf2bc5d7 1219 delay-moov-elst-init-discont fcae8f40e015b59aabc8d4a99a759ca1 996 delay-moov-elst-second-frag-discont +29f875e401df0fc3026995d12872ef21 1219 delay-moov-elst-signal-init +aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag +29f875e401df0fc3026995d12872ef21 1219 delay-moov-elst-signal-init-discont +aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag-discont 6cd6085f4f0ff536acfcb77cb658eb47 4935 vfr 6cd6085f4f0ff536acfcb77cb658eb47 4935 vfr-noduration