Browse Source

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  matroskaenc: Allow chapters to be written in trailer

Conflicts:
	libavformat/matroskaenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.1
Michael Niedermayer 12 years ago
parent
commit
2230d85ceb
2 changed files with 20 additions and 1 deletions
  1. +11
    -0
      libavformat/avformat.h
  2. +9
    -1
      libavformat/matroskaenc.c

+ 11
- 0
libavformat/avformat.h View File

@@ -1101,6 +1101,17 @@ typedef struct AVFormatContext {
*/
unsigned int max_picture_buffer;

/**
* Number of chapters in AVChapter array.
* When muxing, chapters are normally written in the file header,
* so nb_chapters should normally be initialized before write_header
* is called. Some muxers (e.g. mov and mkv) can also write chapters
* in the trailer. To write chapters in the trailer, nb_chapters
* must be zero when write_header is called and non-zero when
* write_trailer is called.
* muxing : set by user
* demuxing: set by libavformat
*/
unsigned int nb_chapters;
AVChapter **chapters;



+ 9
- 1
libavformat/matroskaenc.c View File

@@ -109,6 +109,7 @@ typedef struct MatroskaMuxContext {
int64_t cluster_time_limit;

uint32_t chapter_id_offset;
int wrote_chapters;
} MatroskaMuxContext;


@@ -790,7 +791,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));
@@ -823,6 +824,8 @@ static int mkv_write_chapters(AVFormatContext *s)
}
end_ebml_master(pb, editionentry);
end_ebml_master(pb, chapters);

mkv->wrote_chapters = 1;
return 0;
}

@@ -1610,6 +1613,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) {


Loading…
Cancel
Save