diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c index 9b32e7e463..9b54abf465 100644 --- a/libavcodec/wmalosslessdec.c +++ b/libavcodec/wmalosslessdec.c @@ -715,9 +715,14 @@ static int decode_channel_residues(WmallDecodeCtx *s, int ch, int tile_size) quo += get_bits_long(&s->gb, get_bits(&s->gb, 5) + 1); ave_mean = (s->ave_sum[ch] + (1 << s->movave_scaling)) >> (s->movave_scaling + 1); - rem_bits = av_ceil_log2(ave_mean); - rem = rem_bits ? get_bits(&s->gb, rem_bits) : 0; - residue = (quo << rem_bits) + rem; + if (ave_mean <= 1) + residue = quo; + else + { + rem_bits = av_ceil_log2(ave_mean); + rem = rem_bits ? get_bits(&s->gb, rem_bits) : 0; + residue = (quo << rem_bits) + rem; + } s->ave_sum[ch] = residue + s->ave_sum[ch] - (s->ave_sum[ch] >> s->movave_scaling);