summaryrefslogtreecommitdiff
path: root/libavformat/matroskaenc.c
diff options
context:
space:
mode:
authorDavid Conrad <lessen42@gmail.com>2010-03-04 08:53:08 +0000
committerDavid Conrad <lessen42@gmail.com>2010-03-04 08:53:08 +0000
commit30f06a58a0e78bcc970d694c627256cd08f64396 (patch)
tree4655b2e008cc8ef0dc517c1e0a932044340da4d2 /libavformat/matroskaenc.c
parent7a2a484081ae5a4ad8d3805e27e3ee075cf7f2b7 (diff)
Simplify starting and ending clusters
Originally committed as revision 22199 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/matroskaenc.c')
-rw-r--r--libavformat/matroskaenc.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 98d47e5bef..21bd248adf 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -725,14 +725,6 @@ static int mkv_write_header(AVFormatContext *s)
ret = mkv_write_chapters(s);
if (ret < 0) return ret;
- ret = mkv_add_seekhead_entry(mkv->cluster_seekhead, MATROSKA_ID_CLUSTER, url_ftell(pb));
- if (ret < 0) return ret;
-
- mkv->cluster_pos = url_ftell(pb);
- mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER, 0);
- put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, 0);
- mkv->cluster_pts = 0;
-
if (url_is_streamed(s->pb))
mkv_write_seekhead(pb, mkv->main_seekhead);
@@ -849,12 +841,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
int duration = pkt->duration;
int ret;
- // start a new cluster every 5 MB or 5 sec
- if (url_ftell(pb) > mkv->cluster_pos + 5*1024*1024 || pkt->pts > mkv->cluster_pts + 5000) {
- av_log(s, AV_LOG_DEBUG, "Starting new cluster at offset %" PRIu64
- " bytes, pts %" PRIu64 "\n", url_ftell(pb), pkt->pts);
- end_ebml_master(pb, mkv->cluster);
-
+ if (!mkv->cluster_pos) {
ret = mkv_add_seekhead_entry(mkv->cluster_seekhead, MATROSKA_ID_CLUSTER, url_ftell(pb));
if (ret < 0) return ret;
@@ -882,6 +869,14 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
if (ret < 0) return ret;
}
+ // start a new cluster every 5 MB or 5 sec
+ if (url_ftell(pb) > mkv->cluster_pos + 5*1024*1024 || pkt->pts > mkv->cluster_pts + 5000) {
+ av_log(s, AV_LOG_DEBUG, "Starting new cluster at offset %" PRIu64
+ " bytes, pts %" PRIu64 "\n", url_ftell(pb), pkt->pts);
+ end_ebml_master(pb, mkv->cluster);
+ mkv->cluster_pos = 0;
+ }
+
mkv->duration = FFMAX(mkv->duration, pkt->pts + duration);
return 0;
}