[SCM] libav/experimental: Write one cluster and SimpleBlocks for the frames. Should now create playable mkv files for some video codecs (H.264 and VP3 checked)
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Jun 30 16:06:20 UTC 2013
The following commit has been merged in the experimental branch:
commit b1adb69c5b55180c8daeed4a91c8769129985715
Author: David Conrad <lessen42 at gmail.com>
Date: Wed Sep 5 00:22:52 2007 +0000
Write one cluster and SimpleBlocks for the frames. Should now create playable mkv files for some video codecs (H.264 and VP3 checked)
Originally committed as revision 10302 to svn://svn.ffmpeg.org/ffmpeg/trunk
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index d702e1f..91da907 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -25,6 +25,7 @@
typedef struct MatroskaMuxContext {
offset_t segment;
+ offset_t cluster;
} MatroskaMuxContext;
static void put_ebml_id(ByteIOContext *pb, unsigned int id)
@@ -215,13 +216,22 @@ static int mkv_write_header(AVFormatContext *s)
}
end_ebml_master(pb, tracks);
+ mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER);
+ put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, 0);
+
return 0;
}
static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
{
ByteIOContext *pb = &s->pb;
+
+ block = start_ebml_master(pb, MATROSKA_ID_SIMPLEBLOCK);
+ put_byte(pb, 0x80 | pkt->stream_index); // this assumes stream_index is less than 127
+ put_be16(pb, pkt->pts);
+ put_byte(pb, !!(pkt->flags & PKT_FLAG_KEY));
put_buffer(pb, pkt->data, pkt->size);
+ end_ebml_master(pb, block);
return 0;
}
@@ -229,6 +239,7 @@ static int mkv_write_trailer(AVFormatContext *s)
{
MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb;
+ end_ebml_master(pb, mkv->cluster);
end_ebml_master(pb, mkv->segment);
return 0;
}
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list