mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-23 07:42:51 +00:00
avformat/matroskadec: Fix demuxing ProRes
The structure of a ProRes frame in mov/mp4 is that of a typical atom: First a 32 bit BE size field, then a tag detailling the content. Said size field includes the eight bytes of the atom header. This header is actually redundant, as the size of the atom is already known from the containing atom. It is therefore stripped away when muxed into Matroska and so the Matroska demuxer has to recreate upon demuxing. But it did not account for the fact that the size field includes the size of the header and this can lead to problems when a decoder uses the in-band size field. Fixes ticket #8210. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
379e5d29d5
commit
581419ea39
@ -3280,15 +3280,16 @@ static int matroska_parse_prores(MatroskaTrack *track, uint8_t *src,
|
||||
int dstlen = *size;
|
||||
|
||||
if (AV_RB32(&src[4]) != MKBETAG('i', 'c', 'p', 'f')) {
|
||||
dst = av_malloc(dstlen + 8 + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
dstlen += 8;
|
||||
|
||||
dst = av_malloc(dstlen + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!dst)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
AV_WB32(dst, dstlen);
|
||||
AV_WB32(dst + 4, MKBETAG('i', 'c', 'p', 'f'));
|
||||
memcpy(dst + 8, src, dstlen);
|
||||
memset(dst + 8 + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
dstlen += 8;
|
||||
memcpy(dst + 8, src, dstlen - 8);
|
||||
memset(dst + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
}
|
||||
|
||||
*pdst = dst;
|
||||
|
Loading…
Reference in New Issue
Block a user