[FFmpeg-devel] [PATCH 2/2] avcodec/wma: handle run_level_decode error
Olivier Crête
olivier.crete at collabora.com
Thu Aug 26 17:11:40 EEST 2021
On Thu, 2021-08-26 at 12:33 +0200, Michael Niedermayer wrote:
> On Tue, Aug 24, 2021 at 09:43:43AM -0400, Olivier Crête wrote:
> > From: Stéphane Cerveau <scerveau at collabora.com>
> >
> > 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
> > ---
> > libavcodec/wmadec.c | 11 +++++++----
> > 1 file changed, 7 insertions(+), 4 deletions(-)
> >
> > diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c
> > index d627bbe50e..d43fe239ce 100644
> > --- a/libavcodec/wmadec.c
> > +++ b/libavcodec/wmadec.c
> > @@ -601,15 +601,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);
>
> Does this just discard the packet or replace by silence ?
> if it discards it, it can cause problems with av-sync
It just discards it, but it seems that the Microsoft implementation has
the same behaviour, so I think it's better to be bug compatible with
them.
--
Olivier Crête
olivier.crete at collabora.com
More information about the ffmpeg-devel
mailing list