forked from FFmpeg/FFmpeg
stsd fix by (Baptiste COUDURIER )baptiste.coudurier smartjog com)
Originally committed as revision 4994 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
1a9150b194
commit
3840147e12
1 changed files with 19 additions and 12 deletions
|
@ -831,17 +831,21 @@ static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
|||
if((uint64_t)atom.size > (1<<30))
|
||||
return -1;
|
||||
|
||||
// pass all frma atom to codec, needed at least for QDM2
|
||||
av_free(st->codec->extradata);
|
||||
st->codec->extradata_size = atom.size;
|
||||
st->codec->extradata = (uint8_t*) av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (st->codec->codec_id == CODEC_ID_QDM2) {
|
||||
// pass all frma atom to codec, needed at least for QDM2
|
||||
av_free(st->codec->extradata);
|
||||
st->codec->extradata_size = atom.size;
|
||||
st->codec->extradata = (uint8_t*) av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
|
||||
if (st->codec->extradata) {
|
||||
get_buffer(pb, st->codec->extradata, atom.size);
|
||||
//av_log(NULL, AV_LOG_DEBUG, "Reading frma %Ld %s\n", atom.size, (char*)st->codec->extradata);
|
||||
} else
|
||||
if (st->codec->extradata) {
|
||||
get_buffer(pb, st->codec->extradata, atom.size);
|
||||
//av_log(NULL, AV_LOG_DEBUG, "Reading frma %Ld %s\n", atom.size, (char*)st->codec->extradata);
|
||||
} else
|
||||
url_fskip(pb, atom.size);
|
||||
} else if (atom.size > 8) { /* to read frma, esds atoms */
|
||||
mov_read_default(c, pb, atom);
|
||||
} else if (atom.size > 0)
|
||||
url_fskip(pb, atom.size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -944,6 +948,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
|||
|
||||
while(entries--) { //Parsing Sample description table
|
||||
enum CodecID id;
|
||||
offset_t start_pos = url_ftell(pb);
|
||||
int size = get_be32(pb); /* size */
|
||||
format = get_le32(pb); /* data format */
|
||||
|
||||
|
@ -1006,7 +1011,6 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
|||
st->codec->time_base.den = 25;
|
||||
st->codec->time_base.num = 1;
|
||||
*/
|
||||
size -= (16+8*4+2+32+2*2);
|
||||
#if 0
|
||||
while (size >= 8) {
|
||||
MOV_atom_t a;
|
||||
|
@ -1147,8 +1151,11 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
|||
} else
|
||||
st->codec->palctrl = NULL;
|
||||
|
||||
a.size = size;
|
||||
mov_read_default(c, pb, a);
|
||||
a.size = size - (url_ftell(pb) - start_pos);
|
||||
if (a.size > 8)
|
||||
mov_read_default(c, pb, a);
|
||||
else if (a.size > 0)
|
||||
url_fskip(pb, a.size);
|
||||
#endif
|
||||
} else {
|
||||
st->codec->codec_id = codec_get_id(mov_audio_tags, format);
|
||||
|
|
Loading…
Add table
Reference in a new issue