|
|
|
@ -99,6 +99,7 @@ static int get_aiff_header(AVFormatContext *s, int size, |
|
|
|
|
uint64_t val; |
|
|
|
|
int sample_rate; |
|
|
|
|
unsigned int num_frames; |
|
|
|
|
int channels; |
|
|
|
|
|
|
|
|
|
if (size == INT_MAX) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
@ -106,7 +107,8 @@ static int get_aiff_header(AVFormatContext *s, int size, |
|
|
|
|
if (size & 1) |
|
|
|
|
size++; |
|
|
|
|
par->codec_type = AVMEDIA_TYPE_AUDIO; |
|
|
|
|
par->channels = avio_rb16(pb); |
|
|
|
|
channels = avio_rb16(pb); |
|
|
|
|
par->ch_layout.nb_channels = channels; |
|
|
|
|
num_frames = avio_rb32(pb); |
|
|
|
|
par->bits_per_coded_sample = avio_rb16(pb); |
|
|
|
|
|
|
|
|
@ -154,10 +156,10 @@ static int get_aiff_header(AVFormatContext *s, int size, |
|
|
|
|
aiff->block_duration = 1; |
|
|
|
|
break; |
|
|
|
|
case AV_CODEC_ID_ADPCM_IMA_QT: |
|
|
|
|
par->block_align = 34 * par->channels; |
|
|
|
|
par->block_align = 34 * channels; |
|
|
|
|
break; |
|
|
|
|
case AV_CODEC_ID_MACE3: |
|
|
|
|
par->block_align = 2 * par->channels; |
|
|
|
|
par->block_align = 2 * channels; |
|
|
|
|
break; |
|
|
|
|
case AV_CODEC_ID_ADPCM_G726LE: |
|
|
|
|
par->bits_per_coded_sample = 5; |
|
|
|
@ -165,7 +167,7 @@ static int get_aiff_header(AVFormatContext *s, int size, |
|
|
|
|
case AV_CODEC_ID_ADPCM_G722: |
|
|
|
|
case AV_CODEC_ID_MACE6: |
|
|
|
|
case AV_CODEC_ID_SDX2_DPCM: |
|
|
|
|
par->block_align = 1 * par->channels; |
|
|
|
|
par->block_align = 1 * channels; |
|
|
|
|
break; |
|
|
|
|
case AV_CODEC_ID_GSM: |
|
|
|
|
par->block_align = 33; |
|
|
|
@ -182,7 +184,7 @@ static int get_aiff_header(AVFormatContext *s, int size, |
|
|
|
|
/* Block align needs to be computed in all cases, as the definition
|
|
|
|
|
* is specific to applications -> here we use the WAVE format definition */ |
|
|
|
|
if (!par->block_align) |
|
|
|
|
par->block_align = (av_get_bits_per_sample(par->codec_id) * par->channels) >> 3; |
|
|
|
|
par->block_align = (av_get_bits_per_sample(par->codec_id) * channels) >> 3; |
|
|
|
|
|
|
|
|
|
if (aiff->block_duration) { |
|
|
|
|
par->bit_rate = av_rescale(par->sample_rate, par->block_align * 8LL, |
|
|
|
|