Merge commit '83f254e65f938657a4dbec711e4c94252a72daf9'
authorHendrik Leppkes <h.leppkes@gmail.com>
Mon, 10 Aug 2015 09:23:21 +0000 (11:23 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Mon, 10 Aug 2015 09:23:21 +0000 (11:23 +0200)
* commit '83f254e65f938657a4dbec711e4c94252a72daf9':
  movenc: Rename reserved_moov_pos to reserved_header_pos

Conflicts:
libavformat/movenc.c
libavformat/movenc.h

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavformat/movenc.c
libavformat/movenc.h

index d04ac6b4b42c23dd14cff013aabf1b843bf703df,feb6a8480b2bf2b22906a7f22ed19cb88c722ffe..25d4c5fbce345f68c667ab13937c7f849e3b1697
@@@ -5200,40 -4001,8 +5200,40 @@@ static int mov_write_header(AVFormatCon
          }
      }
  
 +    for (i = 0; i < s->nb_streams; i++) {
 +        int j;
 +        AVStream *st= s->streams[i];
 +        MOVTrack *track= &mov->tracks[i];
 +
 +        if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO ||
 +            track->enc->channel_layout != AV_CH_LAYOUT_MONO)
 +            continue;
 +
 +        for (j = 0; j < s->nb_streams; j++) {
 +            AVStream *stj= s->streams[j];
 +            MOVTrack *trackj= &mov->tracks[j];
 +            if (j == i)
 +                continue;
 +
 +            if (stj->codec->codec_type != AVMEDIA_TYPE_AUDIO ||
 +                trackj->enc->channel_layout != AV_CH_LAYOUT_MONO ||
 +                trackj->language != track->language ||
 +                trackj->tag != track->tag
 +            )
 +                continue;
 +            track->multichannel_as_mono++;
 +        }
 +    }
 +
      enable_tracks(s);
  
-         mov->reserved_moov_pos= avio_tell(pb);
 +
 +    if (mov->reserved_moov_size){
++        mov->reserved_header_pos = avio_tell(pb);
 +        if (mov->reserved_moov_size > 0)
 +            avio_skip(pb, mov->reserved_moov_size);
 +    }
 +
      if (mov->flags & FF_MOV_FLAG_FRAGMENT) {
          /* If no fragmentation options have been set, set a default. */
          if (!(mov->flags & (FF_MOV_FLAG_FRAG_KEYFRAME |
  
      if (mov->flags & FF_MOV_FLAG_EMPTY_MOOV &&
          !(mov->flags & FF_MOV_FLAG_DELAY_MOOV)) {
 -        mov_write_moov_tag(pb, mov, s);
 +        if ((ret = mov_write_moov_tag(pb, mov, s)) < 0)
 +            return ret;
          mov->moov_written = 1;
          if (mov->flags & FF_MOV_FLAG_FASTSTART)
-             mov->reserved_moov_pos = avio_tell(pb);
+             mov->reserved_header_pos = avio_tell(pb);
      }
  
      return 0;
@@@ -5496,35 -4226,18 +5496,35 @@@ static int mov_write_trailer(AVFormatCo
              ffio_wfourcc(pb, "mdat");
              avio_wb64(pb, mov->mdat_size + 16);
          }
-         avio_seek(pb, mov->reserved_moov_size > 0 ? mov->reserved_moov_pos : moov_pos, SEEK_SET);
 -        avio_seek(pb, moov_pos, SEEK_SET);
++        avio_seek(pb, mov->reserved_moov_size > 0 ? mov->reserved_header_pos : moov_pos, SEEK_SET);
  
          if (mov->flags & FF_MOV_FLAG_FASTSTART) {
              av_log(s, AV_LOG_INFO, "Starting second pass: moving the moov atom to the beginning of the file\n");
              res = shift_data(s);
              if (res == 0) {
-                 avio_seek(pb, mov->reserved_moov_pos, SEEK_SET);
+                 avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
 -                mov_write_moov_tag(pb, mov, s);
 +                if ((res = mov_write_moov_tag(pb, mov, s)) < 0)
 +                    goto error;
 +            }
 +        } else if (mov->reserved_moov_size > 0) {
 +            int64_t size;
 +            if ((res = mov_write_moov_tag(pb, mov, s)) < 0)
 +                goto error;
-             size = mov->reserved_moov_size - (avio_tell(pb) - mov->reserved_moov_pos);
++            size = mov->reserved_moov_size - (avio_tell(pb) - mov->reserved_header_pos);
 +            if (size < 8){
 +                av_log(s, AV_LOG_ERROR, "reserved_moov_size is too small, needed %"PRId64" additional\n", 8-size);
 +                res = AVERROR(EINVAL);
 +                goto error;
              }
 +            avio_wb32(pb, size);
 +            ffio_wfourcc(pb, "free");
 +            ffio_fill(pb, 0, size - 8);
 +            avio_seek(pb, moov_pos, SEEK_SET);
          } else {
 -            mov_write_moov_tag(pb, mov, s);
 +            if ((res = mov_write_moov_tag(pb, mov, s)) < 0)
 +                goto error;
          }
 +        res = 0;
      } else {
          mov_auto_flush_fragment(s);
          for (i = 0; i < mov->nb_streams; i++)
index 75d7782a6db49cb24f8a86ff344b93563959ea22,6392d078a076b3f5fa33e9e863c4fc8461634a25..72862f1b10f7aebb40a1322675fd0e4dc6cc71c9
@@@ -178,10 -166,7 +178,10 @@@ typedef struct MOVMuxContext 
      AVIOContext *mdat_buf;
      int first_trun;
  
-     int64_t reserved_moov_pos;
 +    int video_track_timescale;
 +
 +    int reserved_moov_size; ///< 0 for disabled, -1 for automatic, size otherwise
+     int64_t reserved_header_pos;
  
      char *major_brand;