aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2016-05-04 22:31:28 +0300
committerMartin Storsjö <martin@martin.st>2016-05-18 10:36:58 +0300
commit71852a1ba89abc8749e309d9d662c49d47e19531 (patch)
tree429c415f5ef061350e7ed05d90983fda204311af
parentdbbaad32e36b9046cd19d6e3329e2ca7ab49b401 (diff)
downloadffmpeg-71852a1ba89abc8749e309d9d662c49d47e19531.tar.gz
matroskaenc: Provide output bytestream markers
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libavformat/matroskaenc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 2260d42887..dd5552c369 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -105,6 +105,7 @@ typedef struct MatroskaMuxContext {
AVPacket cur_audio_pkt;
int have_attachments;
+ int have_video;
int reserve_cues_space;
int cluster_size_limit;
@@ -843,6 +844,7 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv,
switch (par->codec_type) {
case AVMEDIA_TYPE_VIDEO:
+ mkv->have_video = 1;
put_ebml_uint(pb, MATROSKA_ID_TRACKTYPE, MATROSKA_TRACK_TYPE_VIDEO);
if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0)
put_ebml_uint(pb, MATROSKA_ID_TRACKDEFAULTDURATION, 1E9 / av_q2d(st->avg_frame_rate));
@@ -1635,6 +1637,11 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
avio_flush(s->pb);
}
+ if (!mkv->cluster_pos)
+ avio_write_marker(s->pb,
+ av_rescale_q(pkt->dts, s->streams[pkt->stream_index]->time_base, AV_TIME_BASE_Q),
+ keyframe && (mkv->have_video ? codec_type == AVMEDIA_TYPE_VIDEO : 1) ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT);
+
// check if we have an audio packet cached
if (mkv->cur_audio_pkt.size > 0) {
ret = mkv_write_packet_internal(s, &mkv->cur_audio_pkt);