summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-04-20 01:40:57 +0200
committerJames Almer <jamrial@gmail.com>2019-05-08 13:02:28 -0300
commit8b7964f8f83edeb8296086470123050b3546d213 (patch)
tree130e5296fb4dcceeb0facf752bcfd8b7fb2fca0c /libavformat
parent4ebeab15b037a21f195696cef1f7522daf42f3ee (diff)
avformat/matroskaenc: Fix BlockGroup size calculation
The earlier code included the size of the BlockGroup's length field and the EBML ID in the calculation of the size for the payload and ignored the size of the duration's length field. This meant that Blockgroups corresponding to packets with size 2^(7n) - 17 - n - i, i = 0,..., n - 1, n = 1,..., 8 (i.e. 110, 16364, 16365, 2097130..2097132, ...) were written with length fields that are unnecessarily long. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/matroskaenc.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index c006cbf35c..1849ae3333 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -2059,9 +2059,7 @@ static int mkv_blockgroup_size(int pkt_size)
int size = pkt_size + 4;
size += ebml_num_size(size);
size += 2; // EBML ID for block and block duration
- size += 8; // max size of block duration
- size += ebml_num_size(size);
- size += 1; // blockgroup EBML ID
+ size += 9; // max size of block duration incl. length field
return size;
}