Commit b1adb69c authored by David Conrad's avatar David Conrad

Write one cluster and SimpleBlocks for the frames. Should now create playable...

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
parent f622c4f4
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
typedef struct MatroskaMuxContext { typedef struct MatroskaMuxContext {
offset_t segment; offset_t segment;
offset_t cluster;
} MatroskaMuxContext; } MatroskaMuxContext;
static void put_ebml_id(ByteIOContext *pb, unsigned int id) static void put_ebml_id(ByteIOContext *pb, unsigned int id)
...@@ -215,13 +216,22 @@ static int mkv_write_header(AVFormatContext *s) ...@@ -215,13 +216,22 @@ static int mkv_write_header(AVFormatContext *s)
} }
end_ebml_master(pb, tracks); end_ebml_master(pb, tracks);
mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER);
put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, 0);
return 0; return 0;
} }
static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt) static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; 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); put_buffer(pb, pkt->data, pkt->size);
end_ebml_master(pb, block);
return 0; return 0;
} }
...@@ -229,6 +239,7 @@ static int mkv_write_trailer(AVFormatContext *s) ...@@ -229,6 +239,7 @@ static int mkv_write_trailer(AVFormatContext *s)
{ {
MatroskaMuxContext *mkv = s->priv_data; MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = &s->pb;
end_ebml_master(pb, mkv->cluster);
end_ebml_master(pb, mkv->segment); end_ebml_master(pb, mkv->segment);
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment