mirror of https://git.ffmpeg.org/ffmpeg.git
append extradata atoms when parsing, fix OLOCOONS_O3.mov
Originally committed as revision 10688 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
6cb1d36169
commit
68bc33fa9f
|
@ -470,16 +470,19 @@ static int mov_read_enda(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
||||||
static int mov_read_extradata(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
static int mov_read_extradata(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
||||||
{
|
{
|
||||||
AVStream *st = c->fc->streams[c->fc->nb_streams-1];
|
AVStream *st = c->fc->streams[c->fc->nb_streams-1];
|
||||||
if((uint64_t)atom.size > (1<<30))
|
uint64_t size= (uint64_t)st->codec->extradata_size + atom.size + 8 + FF_INPUT_BUFFER_PADDING_SIZE;
|
||||||
|
uint8_t *buf;
|
||||||
|
if(size > INT_MAX || (uint64_t)atom.size > INT_MAX)
|
||||||
return -1;
|
return -1;
|
||||||
av_free(st->codec->extradata);
|
buf= av_realloc(st->codec->extradata, size);
|
||||||
st->codec->extradata_size = atom.size + 8;
|
if(!buf)
|
||||||
st->codec->extradata = av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
|
return -1;
|
||||||
if (st->codec->extradata) {
|
st->codec->extradata= buf;
|
||||||
AV_WL32(st->codec->extradata + 4, atom.type);
|
buf+= st->codec->extradata_size;
|
||||||
get_buffer(pb, st->codec->extradata + 8, atom.size);
|
st->codec->extradata_size= size - FF_INPUT_BUFFER_PADDING_SIZE;
|
||||||
} else
|
AV_WB32( buf , atom.size + 8);
|
||||||
url_fskip(pb, atom.size);
|
AV_WL32( buf + 4, atom.type);
|
||||||
|
get_buffer(pb, buf + 8, atom.size);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue