Merge commit '60198742ff851f11a3757c713fc75a9c19b88566'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 22 Aug 2013 12:16:52 +0000 (14:16 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 22 Aug 2013 12:16:52 +0000 (14:16 +0200)
* commit '60198742ff851f11a3757c713fc75a9c19b88566':
  movenc: fix detection of 64bit offset requirement

Conflicts:
libavformat/movenc.c

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

@@@ -87,22 -82,10 +87,16 @@@ static int64_t update_size(AVIOContext 
      return curpos - pos;
  }
  
- static int is_co64_required(const MOVTrack *track)
 +static int supports_edts(MOVMuxContext *mov)
 +{
 +    // EDTS with fragments is tricky as we don't know the duration when its written
 +    return (mov->use_editlist<0 && !(mov->flags & FF_MOV_FLAG_FRAGMENT)) || mov->use_editlist>0;
 +}
 +
+ static int co64_required(const MOVTrack *track)
  {
-     int i;
-     for (i = 0; i < track->entry; i++) {
-         if (!track->cluster[i].chunkNum)
-             continue;
-         if (track->cluster[i].pos + track->data_offset > UINT32_MAX)
-             return 1;
-     }
+     if (track->entry > 0 && track->cluster[track->entry - 1].pos + track->data_offset > UINT32_MAX)
+         return 1;
      return 0;
  }
  
  static int mov_write_stco_tag(AVIOContext *pb, MOVTrack *track)
  {
      int i;
-     int mode64 = is_co64_required(track); // use 32 bit size variant if possible
+     int mode64 = co64_required(track); // use 32 bit size variant if possible
      int64_t pos = avio_tell(pb);
      avio_wb32(pb, 0); /* size */
 -    if (mode64) {
 +    if (mode64)
          ffio_wfourcc(pb, "co64");
 -    else
 +    else
          ffio_wfourcc(pb, "stco");
      avio_wb32(pb, 0); /* version & flags */
 -    avio_wb32(pb, track->entry); /* entry count */
 +    avio_wb32(pb, track->chunkCount); /* entry count */
      for (i = 0; i < track->entry; i++) {
 +        if (!track->cluster[i].chunkNum)
 +            continue;
          if (mode64 == 1)
              avio_wb64(pb, track->cluster[i].pos + track->data_offset);
          else