Merge commit '148fbdd1c2a2a88a78ba9fd152c81c840bdb205a'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 20 Aug 2013 09:05:02 +0000 (11:05 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 20 Aug 2013 09:05:02 +0000 (11:05 +0200)
* commit '148fbdd1c2a2a88a78ba9fd152c81c840bdb205a':
  mkv: Refactor mkv_write_packet

Conflicts:
libavformat/matroskaenc.c

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

@@@ -1491,14 -1280,28 +1499,28 @@@ static int mkv_write_packet(AVFormatCon
  
      // start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or
      // after 4k and on a keyframe
 -    if (mkv->cluster_pos &&
+     if (s->pb->seekable) {
+         pb = s->pb;
+         cluster_size = avio_tell(pb) - mkv->cluster_pos;
+         cluster_time_limit = 5000;
+         cluster_size_limit = 5 * 1024 * 1024;
+     } else {
+         pb = mkv->dyn_bc;
+         cluster_size = avio_tell(pb);
+         cluster_time_limit = 1000;
+         cluster_size_limit = 32 * 1024;
+     }
-         ((!s->pb->seekable && (cluster_size > 32*1024 || ts > mkv->cluster_pts + 1000))
-          ||                      cluster_size > 5*1024*1024 || ts > mkv->cluster_pts + 5000
-          || (codec->codec_type == AVMEDIA_TYPE_VIDEO && keyframe && cluster_size > 4*1024))) {
 +    if (mkv->cluster_pos != -1 &&
+         (cluster_size > cluster_size_limit ||
+          cluster_time > 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
-                " bytes, pts %" PRIu64 "\n", avio_tell(pb), ts);
+                " bytes, pts %" PRIu64 "dts %" PRIu64 "\n",
+                avio_tell(pb), pkt->pts, pkt->dts);
          end_ebml_master(pb, mkv->cluster);
 -        mkv->cluster_pos = 0;
 +        mkv->cluster_pos = -1;
          if (mkv->dyn_bc)
              mkv_flush_dynbuf(s);
      }