mirror of https://git.ffmpeg.org/ffmpeg.git
Read block_align from extradata when decoding qclp in aiff.
Fixes ticket #1287.
This commit is contained in:
parent
8f04220df8
commit
9526c9ccc3
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue