summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/matroskaenc.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index d1edc6756e..796383320f 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -2456,7 +2456,6 @@ static int mkv_write_trailer(AVFormatContext *s)
{
MatroskaMuxContext *mkv = s->priv_data;
AVIOContext *pb = s->pb;
- int64_t currentpos;
int ret;
// check if we have an audio packet cached
@@ -2479,11 +2478,14 @@ static int mkv_write_trailer(AVFormatContext *s)
if ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !mkv->is_live) {
- int64_t ret64;
+ int64_t endpos, ret64;
+
+ endpos = avio_tell(pb);
if (mkv->cues.num_entries) {
AVIOContext *cues;
uint64_t size;
+ int64_t cuespos = endpos;
int length_size = 0;
ret = start_ebml_master_crc32(&cues, mkv);
@@ -2510,7 +2512,7 @@ static int mkv_write_trailer(AVFormatContext *s)
ffio_free_dyn_buf(&cues);
goto after_cues;
} else {
- currentpos = avio_tell(pb);
+ cuespos = mkv->cues_pos;
if ((ret64 = avio_seek(pb, mkv->cues_pos, SEEK_SET)) < 0) {
ffio_free_dyn_buf(&cues);
return ret64;
@@ -2526,18 +2528,16 @@ static int mkv_write_trailer(AVFormatContext *s)
}
}
}
- mkv_add_seekhead_entry(mkv, MATROSKA_ID_CUES, avio_tell(pb));
+ mkv_add_seekhead_entry(mkv, MATROSKA_ID_CUES, cuespos);
end_ebml_master_crc32(pb, &cues, mkv, MATROSKA_ID_CUES, length_size);
if (mkv->reserve_cues_space) {
if (size < mkv->reserve_cues_space)
put_ebml_void(pb, mkv->reserve_cues_space - size);
- avio_seek(pb, currentpos, SEEK_SET);
- }
+ } else
+ endpos = avio_tell(pb);
}
after_cues:
- currentpos = avio_tell(pb);
-
ret = mkv_write_seekhead(pb, mkv, 1, mkv->info_pos);
if (ret < 0)
return ret;
@@ -2583,7 +2583,7 @@ static int mkv_write_trailer(AVFormatContext *s)
end_ebml_master_crc32(pb, &mkv->tags_bc, mkv, MATROSKA_ID_TAGS, 0);
}
- avio_seek(pb, currentpos, SEEK_SET);
+ avio_seek(pb, endpos, SEEK_SET);
}
if (!mkv->is_live) {