diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2006-11-03 15:02:51 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2006-11-03 15:02:51 +0000 |
commit | 152e9a43f2435e6f2cdaf50ad0605e951c774386 (patch) | |
tree | bb29562340bd2d6580d8759f50c72ee2535f49a7 /libavformat/mov.c | |
parent | 38cfdc83f014323e5b37c72b0d2c1793d32c6d82 (diff) | |
download | ffmpeg-152e9a43f2435e6f2cdaf50ad0605e951c774386.tar.gz |
reintroduce isom field and read version 1 audio stsd only if file is not isom, fix testclip_wrong_version_1_audio_stsd.mp4
Originally committed as revision 6885 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r-- | libavformat/mov.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index d7ce690478..a0fef18614 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -285,6 +285,7 @@ typedef struct MOVContext { int mdat_count; DVDemuxContext *dv_demux; AVFormatContext *dv_fctx; + int isom; /* 1 if file is ISO Media (mp4/3gp) */ } MOVContext; @@ -405,6 +406,8 @@ static int mov_read_hdlr(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) dprintf("ctype= %c%c%c%c (0x%08lx)\n", *((char *)&ctype), ((char *)&ctype)[1], ((char *)&ctype)[2], ((char *)&ctype)[3], (long) ctype); dprintf("stype= %c%c%c%c\n", *((char *)&type), ((char *)&type)[1], ((char *)&type)[2], ((char *)&type)[3]); + if(!ctype) + c->isom = 1; if(type == MKTAG('v', 'i', 'd', 'e')) st->codec->codec_type = CODEC_TYPE_VIDEO; else if(type == MKTAG('s', 'o', 'u', 'n')) @@ -506,6 +509,8 @@ static int mov_read_ftyp(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { uint32_t type = get_le32(pb); + if (type != MKTAG('q','t',' ',' ')) + c->isom = 1; av_log(c->fc, AV_LOG_DEBUG, "ISO: File Type Major Brand: %.4s\n",(char *)&type); get_be32(pb); /* minor version */ url_fskip(pb, atom.size - 8); @@ -946,7 +951,8 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) } //Read QT version 1 fields. In version 0 theese dont exist - dprintf("version =%d\n",version); + dprintf("version =%d, isom =%d\n",version,c->isom); + if(!c->isom) { if(version==1) { sc->sample_size_v1.den = get_be32(pb); /* samples per packet */ get_be32(pb); /* bytes per packet */ @@ -962,6 +968,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) get_be32(pb); /* bytes per audio packet if constant */ get_be32(pb); /* lpcm frames per audio packet if constant */ } + } bits_per_sample = av_get_bits_per_sample(st->codec->codec_id); if (bits_per_sample) { |