summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpcodecs/ad_pcm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libmpcodecs/ad_pcm.c b/libmpcodecs/ad_pcm.c
index db2670cf1b..e9cbadcaef 100644
--- a/libmpcodecs/ad_pcm.c
+++ b/libmpcodecs/ad_pcm.c
@@ -120,7 +120,11 @@ static int control(sh_audio_t *sh,int cmd,void* arg, ...)
static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
{
unsigned len = sh_audio->channels*sh_audio->samplesize;
- len = maxlen - maxlen % len; // sample align
+ len = (minlen + len - 1) / len * len;
+ if (len > maxlen)
+ // if someone needs hundreds of channels adjust audio_out_minsize
+ // based on channels in preinit()
+ return -1;
len=demux_read_data(sh_audio->ds,buf,len);
return len;
}