On Wed, 2015-11-04 at 20:12 +0200, Martin Storsjö wrote:
> On Wed, 4 Nov 2015, Luca Barbato wrote:
> 
> > On 04/11/15 00:29, 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 | 18 ++++++++++++++----
> > >  1 file changed, 14 insertions(+), 4 deletions(-)
> > > 
> > > Uncrustify
> > > 
> > > diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> > > index 572e781..a6a9d09 100644
> > > --- a/libavformat/movenc.c
> > > +++ b/libavformat/movenc.c
> > > @@ -2285,10 +2285,20 @@ 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;
> > > +                }
> > > +            }
> > >          }
> > >      }
> > > 
> > > 
> > 
> > Martin, if it is ok for you I'd get this in tonight.
> 
> Hmm, well, metadata is a bit uncomfortable for this, but I don't have
> a 
> better suggestion either. Anton?

The other option I considered was AVStream side_data.  It's a bit more
work to do it that way, but if you would like that better *shrug*.

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to