diff options
author | Andrew Wason <rectalogic@rectalogic.com> | 2012-04-20 17:06:25 -0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-04-21 01:57:21 +0200 |
commit | e9b1d5ae5e41b854a9d8d212e9e197a193ff1fa9 (patch) | |
tree | 51edaaa778441ecfbe4880e154eb5997b4aa3e75 /libswresample/swresample.c | |
parent | a812b599b504b39a8021827da89d5e23fb361cc9 (diff) | |
download | ffmpeg-e9b1d5ae5e41b854a9d8d212e9e197a193ff1fa9.tar.gz |
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/swresample.c')
-rw-r--r-- | libswresample/swresample.c | 8 |
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; + } } /** |