Commit e9b1d5ae authored by Andrew Wason's avatar Andrew Wason Committed by Michael Niedermayer

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/2431768Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent a812b599
...@@ -360,12 +360,14 @@ static void fill_audiodata(AudioData *out, uint8_t *in_arg [SWR_CH_MAX]){ ...@@ -360,12 +360,14 @@ static void fill_audiodata(AudioData *out, uint8_t *in_arg [SWR_CH_MAX]){
* out may be equal in. * out may be equal in.
*/ */
static void buf_set(AudioData *out, AudioData *in, int count){ static void buf_set(AudioData *out, AudioData *in, int count){
int ch;
if(in->planar){ if(in->planar){
int ch;
for(ch=0; ch<out->ch_count; ch++) for(ch=0; ch<out->ch_count; ch++)
out->ch[ch]= in->ch[ch] + count*out->bps; out->ch[ch]= in->ch[ch] + count*out->bps;
}else }else{
out->ch[0]= in->ch[0] + count*out->ch_count*out->bps; for(ch=0; ch<out->ch_count; ch++)
out->ch[ch]= in->ch[0] + (ch + count*out->ch_count) * out->bps;
}
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment