X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fwavpack.c;h=d0242809fe02c21ed8ba078314c9ea6704d7d984;hb=6cc8cfe30c09b1776b935988fcdedf0333602f8e;hp=8306ec020f5455ae6cdaacc0b2dea04cd787076f;hpb=26148e923613e718787c6fc4bf3f64e8909f597c;p=ffmpeg diff --git a/libavcodec/wavpack.c b/libavcodec/wavpack.c index 8306ec020f5..d0242809fe0 100644 --- a/libavcodec/wavpack.c +++ b/libavcodec/wavpack.c @@ -940,13 +940,23 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no, case 3: chmask = bytestream2_get_le32(&gb); break; - case 5: + case 4: size = bytestream2_get_byte(&gb); - if (avctx->channels != size) + chan |= (bytestream2_get_byte(&gb) & 0xF) << 8; + chan += 1; + if (avctx->channels != chan) av_log(avctx, AV_LOG_WARNING, "%i channels signalled" - " instead of %i.\n", size, avctx->channels); + " instead of %i.\n", chan, avctx->channels); + chmask = bytestream2_get_le24(&gb); + break; + case 5: + size = bytestream2_get_byte(&gb); chan |= (bytestream2_get_byte(&gb) & 0xF) << 8; - chmask = bytestream2_get_le16(&gb); + chan += 1; + if (avctx->channels != chan) + av_log(avctx, AV_LOG_WARNING, "%i channels signalled" + " instead of %i.\n", chan, avctx->channels); + chmask = bytestream2_get_le32(&gb); break; default: av_log(avctx, AV_LOG_ERROR, "Invalid channel info size %d\n",