mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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>
This commit is contained in:
parent
a812b599b5
commit
e9b1d5ae5e
@ -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){
|
||||||
if(in->planar){
|
|
||||||
int ch;
|
int ch;
|
||||||
|
if(in->planar){
|
||||||
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user