diff --git a/libavcodec/dpcm.c b/libavcodec/dpcm.c index 929458a22b..8240221076 100644 --- a/libavcodec/dpcm.c +++ b/libavcodec/dpcm.c @@ -205,9 +205,12 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, av_log(avctx, AV_LOG_ERROR, "packet is too small\n"); return AVERROR(EINVAL); } + if (out % s->channels) { + av_log(avctx, AV_LOG_WARNING, "channels have differing number of samples\n"); + } /* get output buffer */ - s->frame.nb_samples = out / s->channels; + s->frame.nb_samples = (out + s->channels - 1) / s->channels; if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret;