summaryrefslogtreecommitdiffstats
path: root/contrib/ffmpeg/A11-mp4-chapter-properties.patch
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ffmpeg/A11-mp4-chapter-properties.patch')
-rw-r--r--contrib/ffmpeg/A11-mp4-chapter-properties.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A11-mp4-chapter-properties.patch b/contrib/ffmpeg/A11-mp4-chapter-properties.patch
new file mode 100644
index 000000000..9f64af2cb
--- /dev/null
+++ b/contrib/ffmpeg/A11-mp4-chapter-properties.patch
@@ -0,0 +1,47 @@
+From 9393762b54c17abd736f8d5dd96cd22c334989da Mon Sep 17 00:00:00 2001
+From: John Stebbins <[email protected]>
+Date: Fri, 10 May 2013 09:19:16 -0700
+Subject: [PATCH 9/9] movenc: Make chapter track QuickTime compatible
+
+QuickTime requires that the stsd.text box be completely filled in.
+---
+ libavformat/movenc.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/libavformat/movenc.c b/libavformat/movenc.c
+index bc77a6f..96adfd7 100644
+--- a/libavformat/movenc.c
++++ b/libavformat/movenc.c
+@@ -2982,12 +2982,17 @@ static void mov_create_chapter_track(AVFormatContext *s, int tracknum)
+ MOVTrack *track = &mov->tracks[tracknum];
+ AVPacket pkt = { .stream_index = tracknum, .flags = AV_PKT_FLAG_KEY };
+ int i, len;
++ // These properties are required to make QT recognize the chapter track
++ uint8_t chapter_properties[43] = {0, 0, 0, 0, 0, 0, 0, 1,};
+
+ track->mode = mov->mode;
+ track->tag = MKTAG('t','e','x','t');
+ track->timescale = MOV_TIMESCALE;
+ track->enc = avcodec_alloc_context3(NULL);
+ track->enc->codec_type = AVMEDIA_TYPE_SUBTITLE;
++ track->enc->extradata = av_malloc(43);
++ track->enc->extradata_size = 43;
++ memcpy(track->enc->extradata, chapter_properties, 43);
+
+ for (i = 0; i < s->nb_chapters; i++) {
+ AVChapter *c = s->chapters[i];
+@@ -3443,8 +3448,10 @@ static int mov_write_trailer(AVFormatContext *s)
+ mov_write_mfra_tag(pb, mov);
+ }
+
+- if (mov->chapter_track)
++ if (mov->chapter_track) {
++ av_free(mov->tracks[mov->chapter_track].enc->extradata);
+ av_freep(&mov->tracks[mov->chapter_track].enc);
++ }
+
+ for (i=0; i<mov->nb_streams; i++) {
+ if (mov->tracks[i].tag == MKTAG('r','t','p',' '))
+--
+1.8.1.4
+