s302m: fix arithmetic exception
If nb_samples is zero, the bit_rate calculation results in a division by zero. Since ff_get_buffer fails if frame->nb_samples is zero, this can be fixed by moving the bit_rate calculation after that function call. That also makes it possible to reuse the already calculated frame->nb_samples value. Reviewed-by: Michael Niedermayer <michaelni@gmx.at> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
This commit is contained in:
parent
22291c372f
commit
04dfbc9441
@ -85,10 +85,6 @@ static int s302m_parse_frame_header(AVCodecContext *avctx, const uint8_t *buf,
|
||||
case 8:
|
||||
avctx->channel_layout = AV_CH_LAYOUT_5POINT1_BACK | AV_CH_LAYOUT_STEREO_DOWNMIX;
|
||||
}
|
||||
avctx->bit_rate = 48000 * avctx->channels * (avctx->bits_per_raw_sample + 4) +
|
||||
32 * (48000 / (buf_size * 8 /
|
||||
(avctx->channels *
|
||||
(avctx->bits_per_raw_sample + 4))));
|
||||
|
||||
return frame_size;
|
||||
}
|
||||
@ -117,6 +113,8 @@ static int s302m_decode_frame(AVCodecContext *avctx, void *data,
|
||||
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
avctx->bit_rate = 48000 * avctx->channels * (avctx->bits_per_raw_sample + 4) +
|
||||
32 * 48000 / frame->nb_samples;
|
||||
buf_size = (frame->nb_samples * avctx->channels / 2) * block_size;
|
||||
|
||||
if (avctx->bits_per_raw_sample == 24) {
|
||||
|
Loading…
Reference in New Issue
Block a user