Merge commit '98308bd44face14ea3142b501d16226eec23b75a'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 20 Aug 2013 09:15:11 +0000 (11:15 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 20 Aug 2013 09:15:11 +0000 (11:15 +0200)
* commit '98308bd44face14ea3142b501d16226eec23b75a':
  mkv: Add options for specifying cluster limits

Conflicts:
libavformat/matroskaenc.c

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

@@@ -104,9 -100,9 +104,11 @@@ typedef struct MatroskaMuxContext 
      int have_attachments;
  
      int reserve_cues_space;
+     int cluster_size_limit;
      int64_t cues_pos;
+     int64_t cluster_time_limit;
 +
 +    uint32_t chapter_id_offset;
  } MatroskaMuxContext;
  
  
@@@ -1128,9 -994,23 +1130,24 @@@ static int mkv_write_header(AVFormatCon
  
      av_init_packet(&mkv->cur_audio_pkt);
      mkv->cur_audio_pkt.size = 0;
 +    mkv->cluster_pos = -1;
  
      avio_flush(pb);
+     // start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or
+     // after 4k and on a keyframe
+     if (pb->seekable) {
+         if (mkv->cluster_time_limit < 0)
+             mkv->cluster_time_limit = 5000;
+         if (mkv->cluster_size_limit < 0)
+             mkv->cluster_size_limit = 5 * 1024 * 1024;
+     } else {
+         if (mkv->cluster_time_limit < 0)
+             mkv->cluster_time_limit = 1000;
+         if (mkv->cluster_size_limit < 0)
+             mkv->cluster_size_limit = 32 * 1024;
+     }
      return 0;
  }
  
@@@ -1505,15 -1301,11 +1520,11 @@@ static int mkv_write_packet(AVFormatCon
      } else {
          pb = mkv->dyn_bc;
          cluster_size = avio_tell(pb);
-         cluster_time_limit = 1000;
-         cluster_size_limit = 32 * 1024;
      }
  
 -    if (mkv->cluster_pos &&
 +    if (mkv->cluster_pos != -1 &&
-         (cluster_size > cluster_size_limit ||
-          cluster_time > cluster_time_limit ||
+         (cluster_size > mkv->cluster_size_limit ||
+          cluster_time > mkv->cluster_time_limit ||
           (codec_type == AVMEDIA_TYPE_VIDEO && keyframe &&
            cluster_size > 4 * 1024))) {
          av_log(s, AV_LOG_DEBUG, "Starting new cluster at offset %" PRIu64