Skip to content

Commit

Permalink
avcodec/wmadec: handle run_level_decode error
Browse files Browse the repository at this point in the history
Consider data as invalid if ff_wma_run_level_decode
gets out with an error.

It avoids an unpleasant sound distorsion.

See http://trac.ffmpeg.org/ticket/9358

(cherry picked from commit f9fbe2f)
  • Loading branch information
Stéphane Cerveau authored and jamrial committed Sep 22, 2021
1 parent 6f24f50 commit 79c114e
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions libavcodec/wmadec.c
Expand Up @@ -590,15 +590,18 @@ static int wma_decode_block(WMACodecContext *s)
if (s->channel_coded[ch]) {
int tindex;
WMACoef *ptr = &s->coefs1[ch][0];
int ret;

/* special VLC tables are used for ms stereo because
* there is potentially less energy there */
tindex = (ch == 1 && s->ms_stereo);
memset(ptr, 0, s->block_len * sizeof(WMACoef));
ff_wma_run_level_decode(s->avctx, &s->gb, &s->coef_vlc[tindex],
s->level_table[tindex], s->run_table[tindex],
0, ptr, 0, nb_coefs[ch],
s->block_len, s->frame_len_bits, coef_nb_bits);
ret = ff_wma_run_level_decode(s->avctx, &s->gb, &s->coef_vlc[tindex],
s->level_table[tindex], s->run_table[tindex],
0, ptr, 0, nb_coefs[ch],
s->block_len, s->frame_len_bits, coef_nb_bits);
if (ret < 0)
return ret;
}
if (s->version == 1 && s->avctx->channels >= 2)
align_get_bits(&s->gb);
Expand Down

0 comments on commit 79c114e

Please sign in to comment.