#488: Hang on some example files -------------------------------------+------------------------------------- Reporter: Alex__ | Owner: Type: defect | Status: new Priority: normal | Component: Version: unspecified | undetermined Keywords: | Resolution: Blocking: | Blocked By: Analyzed by developer: 0 | Reproduced by developer: 0 -------------------------------------+-------------------------------------
Comment (by Alex__): > Is this also reproducible without external libraries? Can you provide me some more information on what you need exactly? E.g. the following command doesn't hang: "ffmpeg -i sample.mpg -vcodec copy -acodec copy sample-out.mpg". > (And please explain how you manage to produce a version number that looks 3000 versions old.) Compiling latest trunk: {{{ $ git pull && ./configure --enable-zlib --disable-debug --enable-libfaac --enable-libx264 --enable-gpl --enable-nonfree --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --cc=clang && make -j3 && make install }}} Still having using the patch from #468: {{{ $ git diff diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 29de5b0..0a741de 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1211,7 +1211,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); @@ -1225,8 +1225,7 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVTrack *track, AVStream *st) avio_wb32(pb, 0); /* reserved */ avio_wb32(pb, 0); /* reserved */ - avio_wb16(pb, 0); /* layer */ - avio_wb16(pb, st->codec->codec_type); /* alternate group) */ + avio_wb32(pb, track->alternative_group); /* reserved (Layer & Alternate group) */ /* Volume, only for audio */ if(track->enc->codec_type == AVMEDIA_TYPE_AUDIO) avio_wb16(pb, 0x0100); @@ -1808,6 +1807,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"); @@ -1835,6 +1835,14 @@ 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) { + 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].alternative_group= 1 + (codec_type==AVMEDIA_TYPE_SUBTITLE); + mov->tracks[i].secondary= not_first[codec_type]; + not_first[codec_type]= 1; + } + } mov_write_trak_tag(pb, &(mov->tracks[i]), i < s->nb_streams ? s->streams[i] : NULL); } } diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 610683f..4676983 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -78,6 +78,8 @@ typedef struct MOVIndex { #define MOV_TRACK_STPS 0x0002 uint32_t flags; int language; + int alternative_group; + int secondary; int trackID; int tag; ///< stsd fourcc AVCodecContext *enc; }}} -- Ticket URL: <https://avcodec.org/trac/ffmpeg/ticket/488#comment:2> FFmpeg <http://ffmpeg.org> FFmpeg issue tracker _______________________________________________ FFmpeg-trac mailing list FFmpeg-trac@avcodec.org http://avcodec.org/mailman/listinfo/ffmpeg-trac