Merge commit 'f90729699db9ede2bef2b28000f1795dab1b8996'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 11 Jul 2014 10:41:57 +0000 (12:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 11 Jul 2014 10:41:57 +0000 (12:41 +0200)
* commit 'f90729699db9ede2bef2b28000f1795dab1b8996':
  mov: Do not group tracks if more than one is enabled per type

Conflicts:
libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/movenc.c
libavformat/movenc.h

@@@ -1753,30 -1459,20 +1753,39 @@@ static int mov_write_mdia_tag(AVIOConte
      return update_size(pb, pos);
  }
  
- static int mov_write_tkhd_tag(AVIOContext *pb, MOVTrack *track, AVStream *st)
 +/* transformation matrix
 +     |a  b  u|
 +     |c  d  v|
 +     |tx ty w| */
 +static void write_matrix(AVIOContext *pb, int16_t a, int16_t b, int16_t c,
 +                         int16_t d, int16_t tx, int16_t ty)
 +{
 +    avio_wb32(pb, a << 16);  /* 16.16 format */
 +    avio_wb32(pb, b << 16);  /* 16.16 format */
 +    avio_wb32(pb, 0);        /* u in 2.30 format */
 +    avio_wb32(pb, c << 16);  /* 16.16 format */
 +    avio_wb32(pb, d << 16);  /* 16.16 format */
 +    avio_wb32(pb, 0);        /* v in 2.30 format */
 +    avio_wb32(pb, tx << 16); /* 16.16 format */
 +    avio_wb32(pb, ty << 16); /* 16.16 format */
 +    avio_wb32(pb, 1 << 30);  /* w in 2.30 format */
 +}
 +
+ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
+                               MOVTrack *track, AVStream *st)
  {
      int64_t duration = av_rescale_rnd(track->track_duration, MOV_TIMESCALE,
                                        track->timescale, AV_ROUND_UP);
      int version = duration < INT32_MAX ? 0 : 1;
 +    int rotation = 0;
+     int group   = 0;
+     if (st) {
+         if (mov->per_stream_grouping)
+             group = st->index;
+         else
+             group = st->codec->codec_type;
+     }
  
      if (track->mode == MODE_ISM)
          version = 1;
@@@ -1985,9 -1674,13 +1994,9 @@@ static int mov_write_trak_tag(AVIOConte
      int64_t pos = avio_tell(pb);
      avio_wb32(pb, 0); /* size */
      ffio_wfourcc(pb, "trak");
-     mov_write_tkhd_tag(pb, track, st);
+     mov_write_tkhd_tag(pb, mov, track, st);
 -    if (track->mode == MODE_PSP || track->flags & MOV_TRACK_CTTS ||
 -        (track->entry && track->cluster[0].dts) ||
 -        is_clcp_track(track)) {
 -        if (!(mov->flags & FF_MOV_FLAG_FRAGMENT))
 -            mov_write_edts_tag(pb, track);  // PSP Movies require edts box
 -    }
 +    if (supports_edts(mov))
 +        mov_write_edts_tag(pb, track);  // PSP Movies and several other cases require edts box
      if (track->tref_tag)
          mov_write_tref_tag(pb, track);
      mov_write_mdia_tag(pb, track);
Simple merge