From e9b1d5ae5e41b854a9d8d212e9e197a193ff1fa9 Mon Sep 17 00:00:00 2001 From: Andrew Wason Date: Fri, 20 Apr 2012 17:06:25 -0400 Subject: [PATCH] fix swr_convert buffering of packed audio swr_convert is not properly buffering packed input audio when the output is not large enough, and when resampling is not actually needed (same samplerate and no SWR_FLAG_RESAMPLE). buf_set() is only handling the first channel and leaving the others as-is. Sample program to reproduce the problem is here https://gist.github.com/2431768 Signed-off-by: Michael Niedermayer --- libswresample/swresample.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libswresample/swresample.c b/libswresample/swresample.c index 823dbda884..ad2c107d22 100644 --- a/libswresample/swresample.c +++ b/libswresample/swresample.c @@ -360,12 +360,14 @@ static void fill_audiodata(AudioData *out, uint8_t *in_arg [SWR_CH_MAX]){ * out may be equal in. */ static void buf_set(AudioData *out, AudioData *in, int count){ + int ch; if(in->planar){ - int ch; for(ch=0; chch_count; ch++) out->ch[ch]= in->ch[ch] + count*out->bps; - }else - out->ch[0]= in->ch[0] + count*out->ch_count*out->bps; + }else{ + for(ch=0; chch_count; ch++) + out->ch[ch]= in->ch[0] + (ch + count*out->ch_count) * out->bps; + } } /**