diff options
Diffstat (limited to 'libavformat/matroskaenc.c')
-rw-r--r-- | libavformat/matroskaenc.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 825e92c82d..5edaa36c66 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -103,6 +103,7 @@ typedef struct MatroskaMuxContext { int cluster_size_limit; int64_t cues_pos; int64_t cluster_time_limit; + int wrote_chapters; } MatroskaMuxContext; @@ -710,7 +711,7 @@ static int mkv_write_chapters(AVFormatContext *s) AVRational scale = {1, 1E9}; int i, ret; - if (!s->nb_chapters) + if (!s->nb_chapters || mkv->wrote_chapters) return 0; ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_CHAPTERS, avio_tell(pb)); @@ -743,6 +744,8 @@ static int mkv_write_chapters(AVFormatContext *s) } end_ebml_master(pb, editionentry); end_ebml_master(pb, chapters); + + mkv->wrote_chapters = 1; return 0; } @@ -1391,6 +1394,11 @@ static int mkv_write_trailer(AVFormatContext *s) end_ebml_master(pb, mkv->cluster); } + if (mkv->mode != MODE_WEBM) { + ret = mkv_write_chapters(s); + if (ret < 0) return ret; + } + if (pb->seekable) { if (mkv->cues->num_entries) { if (mkv->reserve_cues_space) { |