} while (!last && count < s->samples);
wv_reset_saved_context(s);
- if ((s->avctx->err_recognition & AV_EF_CRCCHECK) &&
- wv_check_crc(s, crc, crc_extra_bits))
- return AVERROR_INVALIDDATA;
+ if (s->avctx->err_recognition & AV_EF_CRCCHECK) {
+ int ret = wv_check_crc(s, crc, crc_extra_bits);
+ if (ret < 0 && s->avctx->err_recognition & AV_EF_EXPLODE)
+ return ret;
+ }
return 0;
}
buf_size -= frame_size;
}
+ if (s->ch_offset != avctx->channels) {
+ av_log(avctx, AV_LOG_ERROR, "Not enough channels coded in a packet.\n");
+ return AVERROR_INVALIDDATA;
+ }
+
*got_frame_ptr = 1;
return avpkt->size;
AVCodec ff_wavpack_decoder = {
.name = "wavpack",
+ .long_name = NULL_IF_CONFIG_SMALL("WavPack"),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_WAVPACK,
.priv_data_size = sizeof(WavpackContext),
.decode = wavpack_decode_frame,
.flush = wavpack_decode_flush,
.capabilities = CODEC_CAP_DR1,
- .long_name = NULL_IF_CONFIG_SMALL("WavPack"),
};