diff options
author | Roman Shaposhnik <roman@shaposhnik.org> | 2004-03-31 04:51:14 +0000 |
---|---|---|
committer | Roman Shaposhnik <roman@shaposhnik.org> | 2004-03-31 04:51:14 +0000 |
commit | cac0a56c555d1234dc1db33c3d4735d22ca8f7b8 (patch) | |
tree | bc76f89e96a2467e8585d949dd229075cf5a1bb2 /libavformat | |
parent | 58c2182d728507bd69496b172dced477fee9c4ca (diff) | |
download | ffmpeg-cac0a56c555d1234dc1db33c3d4735d22ca8f7b8.tar.gz |
* .mov files with uncompressed audio can't be correctly processed
because of the sample_size == 1 and MINOLTA hack relying on
the information. So in a way, it's a hack of a hack.
btw, if somebody knows why in the world even Apple's software
thinks that for PCM 16bit sample_size == 1 please let me know.
It clearly isn't documented that way.
Originally committed as revision 2941 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mov.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index e1629be8ed..30378f22f4 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1676,7 +1676,13 @@ again: for(i=0; i<(sc->sample_to_chunk_sz); i++) { if( (sc->sample_to_chunk[i].first)<=(sc->next_chunk) && (sc->sample_size>0) ) { - foundsize=sc->sample_to_chunk[i].count*sc->sample_size; + // I can't figure out why for PCM audio sample_size is always 1 + // (it should actually be channels*bits_per_second/8) but it is. + AVCodecContext* cod = &s->streams[sc->ffindex]->codec; + if (sc->sample_size == 1 && (cod->codec_id == CODEC_ID_PCM_S16BE || cod->codec_id == CODEC_ID_PCM_S16LE)) + foundsize=(sc->sample_to_chunk[i].count*cod->channels*cod->bits_per_sample)/8; + else + foundsize=sc->sample_to_chunk[i].count*sc->sample_size; } #ifdef DEBUG /*printf("sample_to_chunk first=%ld count=%ld, id=%ld\n", sc->sample_to_chunk[i].first, sc->sample_to_chunk[i].count, sc->sample_to_chunk[i].id);*/ |