diff options
author | John Stebbins <stebbins@jetheaddev.com> | 2015-11-05 09:49:04 -0800 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2015-11-18 11:38:03 +0100 |
commit | ca489564ae150bc41764f175b88151d883e69ae0 (patch) | |
tree | a654a3fae6ba0a862b682b39dabe582989c51949 | |
parent | 79ae1e630b476889c251fc905687a3831b43ab5e (diff) | |
download | ffmpeg-ca489564ae150bc41764f175b88151d883e69ae0.tar.gz |
movenc: add fallback audio track tref support
This feature allows making associations between audio tracks
that apple players recognize. E.g. when an ac3 track has a
tref that points to an aac track, devices that don't support
ac3 will automatically fall back to the aac track.
Apple used to *guess* these associations, but new products
(AppleTV 4) no longer guess and this association can only
be made explicitly now using the "fall" tref.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r-- | libavformat/movenc.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 9f7cca9570..a940b455ad 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -2285,10 +2285,21 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov, mov->tracks[i].tref_id = mov->tracks[mov->chapter_track].track_id; } for (i = 0; i < mov->nb_streams; i++) { - if (mov->tracks[i].tag == MKTAG('r','t','p',' ')) { - mov->tracks[i].tref_tag = MKTAG('h','i','n','t'); - mov->tracks[i].tref_id = - mov->tracks[mov->tracks[i].src_track].track_id; + MOVTrack *track = &mov->tracks[i]; + if (track->tag == MKTAG('r','t','p',' ')) { + track->tref_tag = MKTAG('h','i','n','t'); + track->tref_id = mov->tracks[track->src_track].track_id; + } else if (track->enc->codec_type == AVMEDIA_TYPE_AUDIO) { + int * fallback, size; + fallback = (int*)av_stream_get_side_data(track->st, + AV_PKT_DATA_FALLBACK_TRACK, + &size); + if (fallback != NULL && size == sizeof(int)) { + if (*fallback >= 0 && *fallback < mov->nb_streams) { + track->tref_tag = MKTAG('f','a','l','l'); + track->tref_id = mov->tracks[*fallback].track_id; + } + } } } |