diff options
author | David Conrad <lessen42@gmail.com> | 2007-09-05 00:23:09 +0000 |
---|---|---|
committer | David Conrad <lessen42@gmail.com> | 2007-09-05 00:23:09 +0000 |
commit | f57b85a5699dca9ccebe851c60141bb3d9dda200 (patch) | |
tree | 7942ad9680905c66b6c41f8f0ce4a53344c2d0b4 /libavformat/matroskaenc.c | |
parent | ab4160275584d8c978df65861004b92ca84ce92e (diff) | |
download | ffmpeg-f57b85a5699dca9ccebe851c60141bb3d9dda200.tar.gz |
put_ebml_void()
Originally committed as revision 10311 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/matroskaenc.c')
-rw-r--r-- | libavformat/matroskaenc.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 7fd0fb9cfd..a3be93511a 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -90,6 +90,24 @@ static void put_ebml_string(ByteIOContext *pb, unsigned int elementid, const cha put_ebml_binary(pb, elementid, str, strlen(str)); } +// this reserves exactly the amount of space specified by size, which must be at least 2 +static void put_ebml_void(ByteIOContext *pb, uint64_t size) +{ + offset_t currentpos = url_ftell(pb); + + if (size < 2) + return; + + put_ebml_id(pb, EBML_ID_VOID); + // we need to subtract the length needed to store the size from the size we need to reserve + // so 2 cases, we use 8 bytes to store the size if possible, 1 byte otherwise + if (size < 10) + put_ebml_size(pb, size-1, 0); + else + put_ebml_size(pb, size-9, 7); + url_fseek(pb, currentpos + size, SEEK_SET); +} + static offset_t start_ebml_master(ByteIOContext *pb, unsigned int elementid) { put_ebml_id(pb, elementid); |