forked from FFmpeg/FFmpeg
fix sample size for uncompressed sound
Originally committed as revision 5165 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
fc8c49926c
commit
f4c7b001ab
1 changed files with 27 additions and 8 deletions
|
@ -1196,8 +1196,33 @@ static int mov_read_stsz(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
|||
#ifdef DEBUG
|
||||
av_log(NULL, AV_LOG_DEBUG, "sample_size = %ld sample_count = %ld\n", sc->sample_size, sc->sample_count);
|
||||
#endif
|
||||
if(sc->sample_size)
|
||||
if(sc->sample_size) {
|
||||
/* override sample size for uncompressed sound */
|
||||
switch (st->codec->codec_id) {
|
||||
case CODEC_ID_PCM_S32BE:
|
||||
case CODEC_ID_PCM_S32LE:
|
||||
sc->sample_size = 4 * st->codec->channels;
|
||||
break;
|
||||
case CODEC_ID_PCM_S24BE:
|
||||
case CODEC_ID_PCM_S24LE:
|
||||
sc->sample_size = 3 * st->codec->channels;
|
||||
break;
|
||||
case CODEC_ID_PCM_S16BE:
|
||||
case CODEC_ID_PCM_S16LE:
|
||||
sc->sample_size = 2 * st->codec->channels;
|
||||
break;
|
||||
case CODEC_ID_PCM_MULAW:
|
||||
case CODEC_ID_PCM_ALAW:
|
||||
case CODEC_ID_PCM_S8:
|
||||
case CODEC_ID_PCM_U8:
|
||||
sc->sample_size = 1 * st->codec->channels;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
assert(sc->sample_size);
|
||||
return 0; /* there isn't any table following */
|
||||
}
|
||||
sc->sample_sizes = (long*) av_malloc(entries * sizeof(long));
|
||||
if (!sc->sample_sizes)
|
||||
return -1;
|
||||
|
@ -1768,13 +1793,7 @@ again:
|
|||
for(i=0; i<(sc->sample_to_chunk_sz); i++) {
|
||||
if( (sc->sample_to_chunk[i].first)<=(sc->next_chunk) )
|
||||
{
|
||||
// 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;
|
||||
foundsize=sc->sample_to_chunk[i].count*sc->sample_size;
|
||||
}
|
||||
dprintf("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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue