[FFmpeg-devel] [PATCH]Do not flag secondary audio tracks as enabled in mov

Carl Eugen Hoyos cehoyos at ag.or.at
Sat Mar 2 16:10:04 CET 2013


Hi!

Attached patch by Michael fixes ticket #468 (and probably bug 44), I will push 
if nobody objects.

Carl Eugen
-------------- next part --------------
From 8b1cb711e5b1bf136eb971d3bf5773fd6cbd82a4 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni at gmx.at>
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 <cehoyos at ag.or.at>
---
 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 510cef5..42496b5 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; i<mov->nb_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 b5d066f..a5db895 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;
-- 
1.7.10.4



More information about the ffmpeg-devel mailing list