# HG changeset patch # User conrad # Date 1188951789 0 # Node ID 806e9837fea4dab2bc3e8404f32da709a2a60038 # Parent c3ae0caeb9bfa7d56c5a75ca1ee6864d91b29919 put_ebml_void() diff -r c3ae0caeb9bf -r 806e9837fea4 matroskaenc.c --- a/matroskaenc.c Wed Sep 05 00:23:07 2007 +0000 +++ b/matroskaenc.c Wed Sep 05 00:23:09 2007 +0000 @@ -90,6 +90,24 @@ 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);