[Ffmpeg-cvslog] CVS: ffmpeg/libavformat mov.c,1.103,1.104
Michael Niedermayer CVS
michael
Sat Feb 11 22:43:23 CET 2006
Update of /cvsroot/ffmpeg/ffmpeg/libavformat
In directory mail:/var2/tmp/cvs-serv9785
Modified Files:
mov.c
Log Message:
stsd fix by (Baptiste COUDURIER )baptiste.coudurier smartjog com)
Index: mov.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/mov.c,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -d -r1.103 -r1.104
--- mov.c 11 Feb 2006 18:27:57 -0000 1.103
+++ mov.c 11 Feb 2006 21:43:21 -0000 1.104
@@ -831,17 +831,21 @@
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 @@
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 @@
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 @@
} 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);
More information about the ffmpeg-cvslog
mailing list