mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 04:43:31 +02:00
allocate 8x buffer size (for pulse audio) / more audioGain loop unrolling w/frame alignment check
This commit is contained in:
parent
04eca22a50
commit
cb4aab3902
2 changed files with 81 additions and 35 deletions
|
@ -403,6 +403,9 @@ void linearResampling(const int16_t* sourceSamples, int16_t* destinationSamples,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// $$$$$$$$$$$$$$ TEMPORARY $craighs$
|
||||||
|
float _loopbackOutputToInputRatio;
|
||||||
|
|
||||||
void Audio::start() {
|
void Audio::start() {
|
||||||
|
|
||||||
// set up the desired audio format
|
// set up the desired audio format
|
||||||
|
@ -431,7 +434,10 @@ void Audio::start() {
|
||||||
qDebug() << "Unable to set up audio output because of a problem with output format.";
|
qDebug() << "Unable to set up audio output because of a problem with output format.";
|
||||||
}
|
}
|
||||||
|
|
||||||
_inputFrameBuffer.initialize( _inputFormat.channelCount(), _audioInput->bufferSize() * 4 );
|
_loopbackOutputToInputRatio = (_outputFormat.sampleRate() / (float) _inputFormat.sampleRate())
|
||||||
|
* (_outputFormat.channelCount() / _inputFormat.channelCount());
|
||||||
|
|
||||||
|
_inputFrameBuffer.initialize( _inputFormat.channelCount(), _audioInput->bufferSize() * 8 );
|
||||||
_peq.initialize( _inputFormat.sampleRate() );
|
_peq.initialize( _inputFormat.sampleRate() );
|
||||||
_inputGain.initialize();
|
_inputGain.initialize();
|
||||||
_sourceGain.initialize();
|
_sourceGain.initialize();
|
||||||
|
@ -535,6 +541,8 @@ void Audio::handleAudioInput() {
|
||||||
float loopbackOutputToInputRatio = (_outputFormat.sampleRate() / (float) _inputFormat.sampleRate())
|
float loopbackOutputToInputRatio = (_outputFormat.sampleRate() / (float) _inputFormat.sampleRate())
|
||||||
* (_outputFormat.channelCount() / _inputFormat.channelCount());
|
* (_outputFormat.channelCount() / _inputFormat.channelCount());
|
||||||
|
|
||||||
|
assert(loopbackOutputToInputRatio == _loopbackOutputToInputRatio);
|
||||||
|
|
||||||
QByteArray loopBackByteArray(inputByteArray.size() * loopbackOutputToInputRatio, 0);
|
QByteArray loopBackByteArray(inputByteArray.size() * loopbackOutputToInputRatio, 0);
|
||||||
|
|
||||||
linearResampling((int16_t*) inputByteArray.data(), (int16_t*) loopBackByteArray.data(),
|
linearResampling((int16_t*) inputByteArray.data(), (int16_t*) loopBackByteArray.data(),
|
||||||
|
|
|
@ -55,40 +55,78 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
float32_t** samples = frameBuffer.getFrameData();
|
float32_t** samples = frameBuffer.getFrameData();
|
||||||
for (uint16_t j = 0; j < frameBuffer.getChannelCount(); ++j) {
|
|
||||||
for (uint16_t i = 0; i < frameBuffer.getFrameCount(); i += 32) {
|
bool frameAlignment16 = (frameBuffer.getFrameCount() & 0x0F) == 0;
|
||||||
samples[j][i + 0] *= _gain;
|
if (frameAlignment16) {
|
||||||
samples[j][i + 1] *= _gain;
|
|
||||||
samples[j][i + 2] *= _gain;
|
if (frameBuffer.getChannelCount() == 1) {
|
||||||
samples[j][i + 3] *= _gain;
|
|
||||||
samples[j][i + 4] *= _gain;
|
for (uint16_t i = 0; i < frameBuffer.getFrameCount(); i += 16) {
|
||||||
samples[j][i + 5] *= _gain;
|
samples[0][i + 0] *= _gain;
|
||||||
samples[j][i + 6] *= _gain;
|
samples[0][i + 1] *= _gain;
|
||||||
samples[j][i + 7] *= _gain;
|
samples[0][i + 2] *= _gain;
|
||||||
samples[j][i + 8] *= _gain;
|
samples[0][i + 3] *= _gain;
|
||||||
samples[j][i + 9] *= _gain;
|
samples[0][i + 4] *= _gain;
|
||||||
samples[j][i + 10] *= _gain;
|
samples[0][i + 5] *= _gain;
|
||||||
samples[j][i + 11] *= _gain;
|
samples[0][i + 6] *= _gain;
|
||||||
samples[j][i + 12] *= _gain;
|
samples[0][i + 7] *= _gain;
|
||||||
samples[j][i + 13] *= _gain;
|
samples[0][i + 8] *= _gain;
|
||||||
samples[j][i + 14] *= _gain;
|
samples[0][i + 9] *= _gain;
|
||||||
samples[j][i + 15] *= _gain;
|
samples[0][i + 10] *= _gain;
|
||||||
samples[j][i + 16] *= _gain;
|
samples[0][i + 11] *= _gain;
|
||||||
samples[j][i + 17] *= _gain;
|
samples[0][i + 12] *= _gain;
|
||||||
samples[j][i + 18] *= _gain;
|
samples[0][i + 13] *= _gain;
|
||||||
samples[j][i + 19] *= _gain;
|
samples[0][i + 14] *= _gain;
|
||||||
samples[j][i + 20] *= _gain;
|
samples[0][i + 15] *= _gain;
|
||||||
samples[j][i + 21] *= _gain;
|
}
|
||||||
samples[j][i + 22] *= _gain;
|
}
|
||||||
samples[j][i + 23] *= _gain;
|
else if (frameBuffer.getChannelCount() == 2) {
|
||||||
samples[j][i + 24] *= _gain;
|
|
||||||
samples[j][i + 25] *= _gain;
|
for (uint16_t i = 0; i < frameBuffer.getFrameCount(); i += 16) {
|
||||||
samples[j][i + 26] *= _gain;
|
samples[0][i + 0] *= _gain;
|
||||||
samples[j][i + 27] *= _gain;
|
samples[0][i + 1] *= _gain;
|
||||||
samples[j][i + 28] *= _gain;
|
samples[0][i + 2] *= _gain;
|
||||||
samples[j][i + 29] *= _gain;
|
samples[0][i + 3] *= _gain;
|
||||||
samples[j][i + 30] *= _gain;
|
samples[0][i + 4] *= _gain;
|
||||||
samples[j][i + 31] *= _gain;
|
samples[0][i + 5] *= _gain;
|
||||||
|
samples[0][i + 6] *= _gain;
|
||||||
|
samples[0][i + 7] *= _gain;
|
||||||
|
samples[0][i + 8] *= _gain;
|
||||||
|
samples[0][i + 9] *= _gain;
|
||||||
|
samples[0][i + 10] *= _gain;
|
||||||
|
samples[0][i + 11] *= _gain;
|
||||||
|
samples[0][i + 12] *= _gain;
|
||||||
|
samples[0][i + 13] *= _gain;
|
||||||
|
samples[0][i + 14] *= _gain;
|
||||||
|
samples[0][i + 15] *= _gain;
|
||||||
|
samples[1][i + 0] *= _gain;
|
||||||
|
samples[1][i + 1] *= _gain;
|
||||||
|
samples[1][i + 2] *= _gain;
|
||||||
|
samples[1][i + 3] *= _gain;
|
||||||
|
samples[1][i + 4] *= _gain;
|
||||||
|
samples[1][i + 5] *= _gain;
|
||||||
|
samples[1][i + 6] *= _gain;
|
||||||
|
samples[1][i + 7] *= _gain;
|
||||||
|
samples[1][i + 8] *= _gain;
|
||||||
|
samples[1][i + 9] *= _gain;
|
||||||
|
samples[1][i + 10] *= _gain;
|
||||||
|
samples[1][i + 11] *= _gain;
|
||||||
|
samples[1][i + 12] *= _gain;
|
||||||
|
samples[1][i + 13] *= _gain;
|
||||||
|
samples[1][i + 14] *= _gain;
|
||||||
|
samples[1][i + 15] *= _gain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert("unsupported channel format");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
for (uint16_t j = 0; j < frameBuffer.getChannelCount(); ++j) {
|
||||||
|
for (uint16_t i = 0; i < frameBuffer.getFrameCount(); i += 1) {
|
||||||
|
samples[j][i] *= _gain;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue