On 03/11/15 20:03, John Stebbins wrote:
> 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.
> ---
> libavformat/movenc.c | 22 ++++++++++++++++++----
> 1 file changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 572e781..19e6c1d 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -2285,10 +2285,24 @@ 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)
> + {
> + AVDictionaryEntry *fallback;
> + fallback = av_dict_get(track->st->metadata, "fallback", NULL, 0);
> + if (fallback != NULL)
> + {
> + int index = strtol(fallback->value, NULL, 0);
> + if (index >= 0 && index < mov->nb_streams)
> + {
> + track->tref_tag = MKTAG('f','a','l','l');
> + track->tref_id = mov->tracks[index].track_id;
> + }
> + }
> }
> }
>
>
Sounds good, uncrustify will take care of it though.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel