From 0e09f6d690b748f61d652ad58ed96c2d48670110 Mon Sep 17 00:00:00 2001 From: Peter Ross Date: Wed, 24 Jul 2024 16:44:57 +1000 Subject: [PATCH] avcodec/adpcm: only process right samples when decoding stereo Fixes Coverity issue #1610760. --- libavcodec/adpcm.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 0a9780317c..8d358bc414 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -1680,22 +1680,24 @@ static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame, for (int count2 = 0; count2 < (channels == 2 ? 28 : 14); count2++) { byte = bytestream2_get_byteu(&gb); next_left_sample = sign_extend(byte >> 4, 4) * (1 << shift_left); - next_right_sample = sign_extend(byte, 4) * (1 << shift_right); next_left_sample = (next_left_sample + (current_left_sample * coeff1l) + (previous_left_sample * coeff2l) + 0x80) >> 8; - next_right_sample = (next_right_sample + - (current_right_sample * coeff1r) + - (previous_right_sample * coeff2r) + 0x80) >> 8; previous_left_sample = current_left_sample; current_left_sample = av_clip_int16(next_left_sample); - previous_right_sample = current_right_sample; - current_right_sample = av_clip_int16(next_right_sample); *samples++ = current_left_sample; if (channels == 2){ + next_right_sample = sign_extend(byte, 4) * (1 << shift_right); + + next_right_sample = (next_right_sample + + (current_right_sample * coeff1r) + + (previous_right_sample * coeff2r) + 0x80) >> 8; + + previous_right_sample = current_right_sample; + current_right_sample = av_clip_int16(next_right_sample); *samples++ = current_right_sample; } else { next_left_sample = sign_extend(byte, 4) * (1 << shift_left);