Commit fe6c4f0c authored by Sasi Inguva's avatar Sasi Inguva Committed by Michael Niedermayer

lavf/mov.c: Set st->start_time for video streams explicitly.

If start_time is not set, ffmpeg takes the duration from the global
movie instead of the per stream duration.
Signed-off-by: 's avatarSasi Inguva <isasi@google.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 318d0fcb
......@@ -3673,12 +3673,16 @@ static void mov_fix_index(MOVContext *mov, AVStream *st)
// If the minimum pts turns out to be greater than zero after fixing the index, then we subtract the
// dts by that amount to make the first pts zero.
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && msc->min_corrected_pts > 0) {
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (msc->min_corrected_pts > 0) {
av_log(mov->fc, AV_LOG_DEBUG, "Offset DTS by %"PRId64" to make first pts zero.\n", msc->min_corrected_pts);
for (i = 0; i < st->nb_index_entries; ++i) {
st->index_entries[i].timestamp -= msc->min_corrected_pts;
}
}
// Start time should be equal to zero or the duration of any empty edits.
st->start_time = empty_edits_sum_duration;
}
// Update av stream length, if it ends up shorter than the track's media duration
st->duration = FFMIN(st->duration, edit_list_dts_entry_end - start_dts);
......@@ -4013,6 +4017,14 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
mov_fix_index(mov, st);
}
// Update start time of the stream.
if (st->start_time == AV_NOPTS_VALUE && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st->nb_index_entries > 0) {
st->start_time = st->index_entries[0].timestamp + sc->dts_shift;
if (sc->ctts_data) {
st->start_time += sc->ctts_data[0].duration;
}
}
mov_estimate_video_delay(mov, st);
}
......
......@@ -16,6 +16,7 @@ FATE_MOV = fate-mov-3elist \
fate-mov-frag-overlap \
fate-mov-bbi-elst-starts-b \
fate-mov-neg-firstpts-discard-frames \
fate-mov-stream-shorter-than-movie \
FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \
fate-mov-aac-2048-priming \
......@@ -88,6 +89,9 @@ fate-mov-neg-firstpts-discard: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entri
# Makes sure that expected frames are generated for mov_neg_first_pts_discard.mov with -vsync 1
fate-mov-neg-firstpts-discard-frames: CMD = framemd5 -flags +bitexact -i $(TARGET_SAMPLES)/mov/mov_neg_first_pts_discard.mov -vsync 1
# Makes sure that no frame is dropped/duplicated with fps filter due to start_time / duration miscalculations.
fate-mov-stream-shorter-than-movie: CMD = framemd5 -flags +bitexact -i $(TARGET_SAMPLES)/mov/mov_stream_shorter_than_movie.mov -vf fps=fps=24 -an
fate-mov-aac-2048-priming: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_packets -print_format compact $(TARGET_SAMPLES)/mov/aac-2048-priming.mov
fate-mov-zombie: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_streams -show_packets -show_frames -bitexact -print_format compact $(TARGET_SAMPLES)/mov/white_zombie_scrunch-part.mov
......
[STREAM]
start_time=N/A
start_time=0.000000
[/STREAM]
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, 3a26ddfa53f09d535c701138027e49dc
0, 1, 1, 1, 460800, f09fe0d079ee81eb7db617b48ab5eecf
0, 2, 2, 1, 460800, 40a165b074c7f4d34a41f320400737fc
0, 3, 3, 1, 460800, 8ba73359c89ebc51e29847ef0e27f7c3
0, 4, 4, 1, 460800, 0d783fcf3d37b99e7b41c0450e28f905
0, 5, 5, 1, 460800, 7251de6f3e2ebccc2183aa7090dd59fb
0, 6, 6, 1, 460800, 5d2ab26df00d2ef9adf763480f9c0493
0, 7, 7, 1, 460800, b545f2623d4f4b3bc5ba28ca842cb00e
0, 8, 8, 1, 460800, b3132e721028d0ccd0a734ef44fec5ff
0, 9, 9, 1, 460800, 354af9e99c0d5b9cb910b468e8afc89e
0, 10, 10, 1, 460800, 55452405c3cf6c44365d2dbe6cf37be3
0, 11, 11, 1, 460800, 8ad58d19a00acc37536054706e235868
0, 12, 12, 1, 460800, 833295be0a52fc2cf8dc7ae0375fd4f1
0, 13, 13, 1, 460800, 3a943976671337231b962c659bb70f5c
0, 14, 14, 1, 460800, 1dddc5aae4adb42b582565bc19f3f464
0, 15, 15, 1, 460800, 0562a855137f84269cbfaa94e7d0f623
0, 16, 16, 1, 460800, e4a89894c47c7142fbc0b9122a7c0561
0, 17, 17, 1, 460800, 31f4354cc10c6a9d3fc35c0123710528
0, 18, 18, 1, 460800, c4cfbb24b55d09be1a9b6f1f3fe3ae33
0, 19, 19, 1, 460800, 0643e1e9cf7e3a4494ad4b425e7dcce7
0, 20, 20, 1, 460800, 1caf065c1fcb1541e5625d9d5e9d0944
0, 21, 21, 1, 460800, f519db6dcb739a494e4b57bff2c3b021
0, 22, 22, 1, 460800, 5bcd1c762ff8edf2b9a4e489be97f18d
0, 23, 23, 1, 460800, a818d6d3a94270294d6cf9432b19daa5
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment