Read block_align from extradata when decoding qclp in aiff.

Fixes ticket #1287.
This commit is contained in:
Carl Eugen Hoyos 2013-04-23 15:16:50 +02:00
parent 8f04220df8
commit 9526c9ccc3
1 changed files with 16 additions and 4 deletions

View File

@ -147,9 +147,6 @@ static unsigned int get_aiff_header(AVFormatContext *s, int size,
case AV_CODEC_ID_GSM:
codec->block_align = 33;
break;
case AV_CODEC_ID_QCELP:
codec->block_align = 35;
break;
default:
aiff->block_duration = 1;
break;
@ -286,6 +283,21 @@ static int aiff_read_header(AVFormatContext *s)
if (st->codec->codec_id == AV_CODEC_ID_QDM2 && size>=12*4 && !st->codec->block_align) {
st->codec->block_align = AV_RB32(st->codec->extradata+11*4);
aiff->block_duration = AV_RB32(st->codec->extradata+9*4);
} else if (st->codec->codec_id == AV_CODEC_ID_QCELP) {
char rate = 0;
if (size >= 25)
rate = st->codec->extradata[24];
switch (rate) {
case 'H': // RATE_HALF
st->codec->block_align = 17;
break;
case 'F': // RATE_FULL
default:
st->codec->block_align = 35;
}
aiff->block_duration = 160;
st->codec->bit_rate = st->codec->sample_rate * (st->codec->block_align << 3) /
aiff->block_duration;
}
break;
case MKTAG('C','H','A','N'):
@ -332,7 +344,7 @@ static int aiff_read_packet(AVFormatContext *s,
return AVERROR_EOF;
/* Now for that packet */
if (st->codec->block_align >= 33) // GSM, QCLP, IMA4
if (st->codec->block_align >= 17) // GSM, QCLP, IMA4
size = st->codec->block_align;
else
size = (MAX_SIZE / st->codec->block_align) * st->codec->block_align;