diff options
Diffstat (limited to 'contrib/ffmpeg/A10-mp4-track-enable.patch')
-rw-r--r-- | contrib/ffmpeg/A10-mp4-track-enable.patch | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/contrib/ffmpeg/A10-mp4-track-enable.patch b/contrib/ffmpeg/A10-mp4-track-enable.patch index 282326157..e69de29bb 100644 --- a/contrib/ffmpeg/A10-mp4-track-enable.patch +++ b/contrib/ffmpeg/A10-mp4-track-enable.patch @@ -1,142 +0,0 @@ -From 25a0ee27bb5d2bb46781ea4a2a3c88581ad75fde Mon Sep 17 00:00:00 2001 -From: John Stebbins <[email protected]> -Date: Fri, 10 May 2013 09:16:08 -0700 -Subject: [PATCH 8/9] movenc: Make tkhd "enabled" flag QuickTime compatible - -QuickTime will play multiple audio tracks concurrently if this flag is -set for multiple audio tracks. And if no subtitle track has this flag -set QuickTime will show no subtitles in the subtitle menu. ---- - libavformat/mov.c | 4 +++- - libavformat/movenc.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++- - libavformat/movenc.h | 1 + - 3 files changed, 63 insertions(+), 2 deletions(-) - -diff --git a/libavformat/mov.c b/libavformat/mov.c -index 7fe0548..cb0e395 100644 ---- a/libavformat/mov.c -+++ b/libavformat/mov.c -@@ -2129,6 +2129,7 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) - AVStream *st; - MOVStreamContext *sc; - int version; -+ int flags; - - if (c->fc->nb_streams < 1) - return 0; -@@ -2136,13 +2137,14 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) - sc = st->priv_data; - - version = avio_r8(pb); -- avio_rb24(pb); /* flags */ -+ flags = avio_rb24(pb); /* flags */ - /* - MOV_TRACK_ENABLED 0x0001 - MOV_TRACK_IN_MOVIE 0x0002 - MOV_TRACK_IN_PREVIEW 0x0004 - MOV_TRACK_IN_POSTER 0x0008 - */ -+ st->disposition |= (flags & 0x1) ? AV_DISPOSITION_DEFAULT : 0; - - if (version == 1) { - avio_rb64(pb); -diff --git a/libavformat/movenc.c b/libavformat/movenc.c -index 2f6c003..bc77a6f 100644 ---- a/libavformat/movenc.c -+++ b/libavformat/movenc.c -@@ -1387,7 +1387,13 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVTrack *track, AVStream *st) - (version == 1) ? avio_wb32(pb, 104) : avio_wb32(pb, 92); /* size */ - ffio_wfourcc(pb, "tkhd"); - avio_w8(pb, version); -- avio_wb24(pb, 0xf); /* flags (track enabled) */ -+ avio_wb24(pb, (track->flags & MOV_TRACK_ENABLED) ? 0x3 : 0x2); /* flags */ -+ /* -+ MOV_TRACK_ENABLED 0x0001 -+ MOV_TRACK_IN_MOVIE 0x0002 -+ MOV_TRACK_IN_PREVIEW 0x0004 -+ MOV_TRACK_IN_POSTER 0x0008 -+ */ - if (version == 1) { - avio_wb64(pb, track->time); - avio_wb64(pb, track->time); -@@ -3003,6 +3009,56 @@ static void mov_create_chapter_track(AVFormatContext *s, int tracknum) - } - } - -+// st->disposition controls the "enabled" flag in the tkhd tag. -+// QuickTime will not play a track if it is not enabled. So make sure -+// that one track of each type (audio, video, subtitle) is enabled. -+// -+// Subtitles are special. For audio and video, setting "enabled" also -+// makes the track "default" (i.e. it is rendered when played). For -+// subtitles, an "enabled" subtitle is not rendered by default, but -+// if no subtitle is enabled, the subtitle menu in QuickTime will be -+// empty! -+static void enable_tracks(AVFormatContext *s) -+{ -+ MOVMuxContext *mov = s->priv_data; -+ int i; -+ uint8_t enabled[AVMEDIA_TYPE_NB]; -+ int first[AVMEDIA_TYPE_NB]; -+ -+ for (i = 0; i < AVMEDIA_TYPE_NB; i++) { -+ enabled[i] = 0; -+ first[i] = -1; -+ } -+ -+ for (i = 0; i < s->nb_streams; i++) { -+ AVStream *st = s->streams[i]; -+ -+ if (st->codec->codec_type <= AVMEDIA_TYPE_UNKNOWN || -+ st->codec->codec_type >= AVMEDIA_TYPE_NB) -+ continue; -+ -+ if (first[st->codec->codec_type] < 0) -+ first[st->codec->codec_type] = i; -+ if (st->disposition & AV_DISPOSITION_DEFAULT) { -+ mov->tracks[i].flags |= MOV_TRACK_ENABLED; -+ enabled[st->codec->codec_type] = 1; -+ } -+ } -+ -+ for (i = 0; i < AVMEDIA_TYPE_NB; i++) { -+ switch (i) { -+ case AVMEDIA_TYPE_VIDEO: -+ case AVMEDIA_TYPE_AUDIO: -+ case AVMEDIA_TYPE_SUBTITLE: -+ if (!enabled[i] && first[i] >= 0) -+ mov->tracks[first[i]].flags |= MOV_TRACK_ENABLED; -+ break; -+ default: -+ break; -+ } -+ } -+} -+ - static int mov_write_header(AVFormatContext *s) - { - AVIOContext *pb = s->pb; -@@ -3156,6 +3212,8 @@ static int mov_write_header(AVFormatContext *s) - } - } - -+ enable_tracks(s); -+ - if (mov->mode == MODE_ISM) { - /* If no fragmentation options have been set, set a default. */ - if (!(mov->flags & (FF_MOV_FLAG_FRAG_KEYFRAME | -diff --git a/libavformat/movenc.h b/libavformat/movenc.h -index 3ea0dd5..9bb8a78 100644 ---- a/libavformat/movenc.h -+++ b/libavformat/movenc.h -@@ -84,6 +84,7 @@ typedef struct MOVIndex { - int has_keyframes; - #define MOV_TRACK_CTTS 0x0001 - #define MOV_TRACK_STPS 0x0002 -+#define MOV_TRACK_ENABLED 0x0004 - uint32_t flags; - int language; - int track_id; --- -1.8.1.4 - |