mirror of
https://github.com/overte-org/overte.git
synced 2025-04-23 13:53:30 +02:00
Fix longstanding bug where resampler called with samples instead of frames, resulting in buffer overflow
This commit is contained in:
parent
cabe9eab81
commit
1572c93624
1 changed files with 5 additions and 13 deletions
|
@ -693,28 +693,20 @@ void possibleResampling(AudioSRC* resampler,
|
|||
}
|
||||
} else {
|
||||
|
||||
int numSourceFrames = numSourceSamples / sourceChannelCount;
|
||||
|
||||
if (sourceChannelCount != destinationChannelCount) {
|
||||
|
||||
int numChannelCoversionSamples = (numSourceSamples * destinationChannelCount) / sourceChannelCount;
|
||||
int16_t* channelConversionSamples = new int16_t[numChannelCoversionSamples];
|
||||
int16_t* channelConversionSamples = new int16_t[numSourceFrames * destinationChannelCount];
|
||||
|
||||
sampleChannelConversion(sourceSamples, channelConversionSamples, numSourceSamples,
|
||||
sourceChannelCount, destinationChannelCount);
|
||||
|
||||
resampler->render(channelConversionSamples, destinationSamples, numChannelCoversionSamples);
|
||||
resampler->render(channelConversionSamples, destinationSamples, numSourceFrames);
|
||||
|
||||
delete[] channelConversionSamples;
|
||||
} else {
|
||||
|
||||
unsigned int numAdjustedSourceSamples = numSourceSamples;
|
||||
unsigned int numAdjustedDestinationSamples = numDestinationSamples;
|
||||
|
||||
if (sourceChannelCount == 2 && destinationChannelCount == 2) {
|
||||
numAdjustedSourceSamples /= 2;
|
||||
numAdjustedDestinationSamples /= 2;
|
||||
}
|
||||
|
||||
resampler->render(sourceSamples, destinationSamples, numAdjustedSourceSamples);
|
||||
resampler->render(sourceSamples, destinationSamples, numSourceFrames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue