diff options
Diffstat (limited to 'libavformat/matroskaenc.c')
-rw-r--r-- | libavformat/matroskaenc.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 484b5d6191..593ddd1843 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2264,17 +2264,19 @@ static int mkv_write_trailer(AVFormatContext *s) end_ebml_master_crc32(pb, &mkv->info_bc, mkv, mkv->info); // update stream durations - if (mkv->stream_durations) { + if (!mkv->is_live && mkv->stream_durations) { int i; + int64_t curr = avio_tell(mkv->tags_bc); for (i = 0; i < s->nb_streams; ++i) { AVStream *st = s->streams[i]; - double duration_sec = mkv->stream_durations[i] * av_q2d(st->time_base); - char duration_string[20] = ""; - av_log(s, AV_LOG_DEBUG, "stream %d end duration = %" PRIu64 "\n", i, - mkv->stream_durations[i]); + if (mkv->stream_duration_offsets[i] > 0) { + double duration_sec = mkv->stream_durations[i] * av_q2d(st->time_base); + char duration_string[20] = ""; + + av_log(s, AV_LOG_DEBUG, "stream %d end duration = %" PRIu64 "\n", i, + mkv->stream_durations[i]); - if (!mkv->is_live && mkv->stream_duration_offsets[i] > 0) { avio_seek(mkv->tags_bc, mkv->stream_duration_offsets[i], SEEK_SET); snprintf(duration_string, 20, "%02d:%02d:%012.9f", @@ -2284,6 +2286,7 @@ static int mkv_write_trailer(AVFormatContext *s) put_ebml_binary(mkv->tags_bc, MATROSKA_ID_TAGSTRING, duration_string, 20); } } + avio_seek(mkv->tags_bc, curr, SEEK_SET); } if (mkv->tags.pos && !mkv->is_live) { avio_seek(pb, mkv->tags.pos, SEEK_SET); |