You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
Parse strf mov atoms
This fixes roundup issue 1270. Originally committed as revision 22894 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -811,6 +811,34 @@ static int mov_read_glbl(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An strf atom is a BITMAPINFOHEADER struct. This struct is 40 bytes itself,
|
||||||
|
* but can have extradata appended at the end after the 40 bytes belonging
|
||||||
|
* to the struct.
|
||||||
|
*/
|
||||||
|
static int mov_read_strf(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
|
||||||
|
{
|
||||||
|
AVStream *st;
|
||||||
|
|
||||||
|
if (c->fc->nb_streams < 1)
|
||||||
|
return 0;
|
||||||
|
if (atom.size <= 40)
|
||||||
|
return 0;
|
||||||
|
st = c->fc->streams[c->fc->nb_streams-1];
|
||||||
|
|
||||||
|
if((uint64_t)atom.size > (1<<30))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
av_free(st->codec->extradata);
|
||||||
|
st->codec->extradata = av_mallocz(atom.size - 40 + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
if (!st->codec->extradata)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
st->codec->extradata_size = atom.size - 40;
|
||||||
|
url_fskip(pb, 40);
|
||||||
|
get_buffer(pb, st->codec->extradata, atom.size - 40);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int mov_read_stco(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
|
static int mov_read_stco(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
@@ -2161,6 +2189,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
|
|||||||
{ MKTAG('s','t','b','l'), mov_read_default },
|
{ MKTAG('s','t','b','l'), mov_read_default },
|
||||||
{ MKTAG('s','t','c','o'), mov_read_stco },
|
{ MKTAG('s','t','c','o'), mov_read_stco },
|
||||||
{ MKTAG('s','t','p','s'), mov_read_stps },
|
{ MKTAG('s','t','p','s'), mov_read_stps },
|
||||||
|
{ MKTAG('s','t','r','f'), mov_read_strf },
|
||||||
{ MKTAG('s','t','s','c'), mov_read_stsc },
|
{ MKTAG('s','t','s','c'), mov_read_stsc },
|
||||||
{ MKTAG('s','t','s','d'), mov_read_stsd }, /* sample description */
|
{ MKTAG('s','t','s','d'), mov_read_stsd }, /* sample description */
|
||||||
{ MKTAG('s','t','s','s'), mov_read_stss }, /* sync sample */
|
{ MKTAG('s','t','s','s'), mov_read_stss }, /* sync sample */
|
||||||
|
Reference in New Issue
Block a user