|
|
|
@ -802,31 +802,6 @@ static int mov_read_mvhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int mov_read_smi(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
{ |
|
|
|
|
AVStream *st; |
|
|
|
|
|
|
|
|
|
if (c->fc->nb_streams < 1) |
|
|
|
|
return 0; |
|
|
|
|
st = c->fc->streams[c->fc->nb_streams-1]; |
|
|
|
|
|
|
|
|
|
if ((uint64_t)atom.size > (1<<30)) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
|
// currently SVQ3 decoder expect full STSD header - so let's fake it
|
|
|
|
|
// this should be fixed and just SMI header should be passed
|
|
|
|
|
av_free(st->codec->extradata); |
|
|
|
|
st->codec->extradata_size = 0; |
|
|
|
|
st->codec->extradata = av_mallocz(atom.size + 0x5a + FF_INPUT_BUFFER_PADDING_SIZE); |
|
|
|
|
if (!st->codec->extradata) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
st->codec->extradata_size = 0x5a + atom.size; |
|
|
|
|
memcpy(st->codec->extradata, "SVQ3", 4); // fake
|
|
|
|
|
avio_read(pb, st->codec->extradata + 0x5a, atom.size); |
|
|
|
|
av_dlog(c->fc, "Reading SMI %"PRId64" %s\n", atom.size, st->codec->extradata + 0x5a); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int mov_read_enda(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
{ |
|
|
|
|
AVStream *st; |
|
|
|
@ -944,6 +919,11 @@ static int mov_read_avid(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
return mov_read_extradata(c, pb, atom, CODEC_ID_AVUI); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int mov_read_svq3(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
{ |
|
|
|
|
return mov_read_extradata(c, pb, atom, CODEC_ID_SVQ3); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int mov_read_wave(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
{ |
|
|
|
|
AVStream *st; |
|
|
|
@ -2577,7 +2557,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { |
|
|
|
|
{ MKTAG('m','o','o','v'), mov_read_moov }, |
|
|
|
|
{ MKTAG('m','v','e','x'), mov_read_default }, |
|
|
|
|
{ MKTAG('m','v','h','d'), mov_read_mvhd }, |
|
|
|
|
{ MKTAG('S','M','I',' '), mov_read_smi }, /* Sorenson extension ??? */ |
|
|
|
|
{ MKTAG('S','M','I',' '), mov_read_svq3 }, |
|
|
|
|
{ MKTAG('a','l','a','c'), mov_read_alac }, /* alac specific atom */ |
|
|
|
|
{ MKTAG('a','v','c','C'), mov_read_glbl }, |
|
|
|
|
{ MKTAG('p','a','s','p'), mov_read_pasp }, |
|
|
|
|