summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/matroskaenc.c15
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);