From 981cf0c300037950be2ed20505ff8b20e7a53224 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 2 Mar 2013 15:57:48 +0100 Subject: [PATCH] movenc: Do not flag secondary audio and subtitle tracks as enabled. Fixes ticket #468 and ticket #1174. Signed-off-by: Carl Eugen Hoyos --- libavformat/movenc.c | 10 +++++++++- libavformat/movenc.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 510cef5bdb..42496b57e9 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1602,7 +1602,7 @@ 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->secondary ? 0x2 : 0xf); /* flags (first track enabled) */ if (version == 1) { avio_wb64(pb, track->time); avio_wb64(pb, track->time); @@ -2315,6 +2315,7 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov, { int i; int64_t pos = avio_tell(pb); + int not_first[AVMEDIA_TYPE_NB]={0}; avio_wb32(pb, 0); /* size placeholder*/ ffio_wfourcc(pb, "moov"); @@ -2355,6 +2356,13 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov, mov_write_iods_tag(pb, mov); for (i=0; inb_streams; i++) { if (mov->tracks[i].entry > 0 || mov->flags & FF_MOV_FLAG_FRAGMENT) { + if(i < s->nb_streams){ + int codec_type= s->streams[i]->codec->codec_type; + if(codec_type==AVMEDIA_TYPE_AUDIO || codec_type==AVMEDIA_TYPE_SUBTITLE){ + mov->tracks[i].secondary= not_first[codec_type]; + not_first[codec_type]= 1; + } + } mov_write_trak_tag(pb, mov, &(mov->tracks[i]), i < s->nb_streams ? s->streams[i] : NULL); } } diff --git a/libavformat/movenc.h b/libavformat/movenc.h index b5d066f4d9..a5db8950ab 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -94,6 +94,7 @@ typedef struct MOVIndex { #define MOV_TIMECODE_FLAG_ALLOWNEGATIVE 0x0004 uint32_t timecode_flags; int language; + int secondary; int track_id; int tag; ///< stsd fourcc AVCodecContext *enc;