[FFmpeg-devel,02/15] avformat/matroskaenc: Fix BlockGroup size calculation

Submitted by Oliver Collyer via ffmpeg-devel on April 2, 2019, 1:32 p.m.

Details

Message ID 20190402133305.3328-3-andreas.rheinhardt@googlemail.com
State Accepted
Commit 8b7964f8f83edeb8296086470123050b3546d213
Headers show

Commit Message

Oliver Collyer via ffmpeg-devel April 2, 2019, 1:32 p.m.
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@googlemail.com>
---
 libavformat/matroskaenc.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

Patch hide | download patch | download mbox

diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 394109ffe3..90f9d0a35e 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -2057,9 +2057,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;
 }