Merge commit 'dbbaad32e36b9046cd19d6e3329e2ca7ab49b401'
authorMatthieu Bouron <matthieu.bouron@stupeflix.com>
Thu, 23 Jun 2016 15:52:14 +0000 (17:52 +0200)
committerMatthieu Bouron <matthieu.bouron@stupeflix.com>
Thu, 23 Jun 2016 15:52:14 +0000 (17:52 +0200)
* commit 'dbbaad32e36b9046cd19d6e3329e2ca7ab49b401':
  movenc: Provide output bytestream markers for fragmented content

Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
1  2 
libavformat/movenc.c

@@@ -4235,7 -3183,7 +4235,8 @@@ static int mov_flush_fragment(AVFormatC
      MOVMuxContext *mov = s->priv_data;
      int i, first_track = -1;
      int64_t mdat_size = 0;
 +    int ret;
+     int has_video = 0, starts_with_key = 0, first_video_track = 1;
  
      if (!(mov->flags & FF_MOV_FLAG_FRAGMENT))
          return 0;
          if (i < mov->nb_streams && !force)
              return 0;
  
 -        if ((ret = ffio_open_null_buf(&moov_buf)) < 0)
 -            return ret;
 -        mov_write_moov_tag(moov_buf, mov, s);
 -        buf_size = ffio_close_null_buf(moov_buf);
 +        moov_size = get_moov_size(s);
          for (i = 0; i < mov->nb_streams; i++)
 -            mov->tracks[i].data_offset = pos + buf_size + 8;
 +            mov->tracks[i].data_offset = pos + moov_size + 8;
  
+         avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_HEADER);
          if (mov->flags & FF_MOV_FLAG_DELAY_MOOV)
              mov_write_identification(s->pb, s);
 -        mov_write_moov_tag(s->pb, mov, s);
 +        if ((ret = mov_write_moov_tag(s->pb, mov, s)) < 0)
 +            return ret;
  
          if (mov->flags & FF_MOV_FLAG_DELAY_MOOV) {
              if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX)
@@@ -5798,17 -4291,18 +5812,19 @@@ static int mov_write_trailer(AVFormatCo
          for (i = 0; i < mov->nb_streams; i++)
             mov->tracks[i].data_offset = 0;
          if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX) {
 +            int64_t end;
              av_log(s, AV_LOG_INFO, "Starting second pass: inserting sidx atoms\n");
              res = shift_data(s);
 -            if (res == 0) {
 -                int64_t end = avio_tell(pb);
 -                avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
 -                mov_write_sidx_tags(pb, mov, -1, 0);
 -                avio_seek(pb, end, SEEK_SET);
 -                avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
 -                mov_write_mfra_tag(pb, mov);
 -            }
 +            if (res < 0)
 +                goto error;
 +            end = avio_tell(pb);
 +            avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
 +            mov_write_sidx_tags(pb, mov, -1, 0);
 +            avio_seek(pb, end, SEEK_SET);
++            avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
 +            mov_write_mfra_tag(pb, mov);
          } else {
+             avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
              mov_write_mfra_tag(pb, mov);
          }
      }