summaryrefslogtreecommitdiff
path: root/libswresample
diff options
context:
space:
mode:
authorAndrew Wason <rectalogic@rectalogic.com>2012-04-20 17:06:25 -0400
committerMichael Niedermayer <michaelni@gmx.at>2012-04-21 01:57:21 +0200
commite9b1d5ae5e41b854a9d8d212e9e197a193ff1fa9 (patch)
tree51edaaa778441ecfbe4880e154eb5997b4aa3e75 /libswresample
parenta812b599b504b39a8021827da89d5e23fb361cc9 (diff)
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 <michaelni@gmx.at>
Diffstat (limited to 'libswresample')
-rw-r--r--libswresample/swresample.c8
1 files 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; ch<out->ch_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; ch<out->ch_count; ch++)
+ out->ch[ch]= in->ch[0] + (ch + count*out->ch_count) * out->bps;
+ }
}
/**