mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 07:45:30 +00:00
bug 1197028 use AudioChunk::ChannelCount() r=padenot
--HG-- extra : rebase_source : 033220c221f33fb4230f1384427d24e9b0b01213
This commit is contained in:
parent
0219374858
commit
e32bdd4030
@ -329,7 +329,7 @@ AnalyserNode::GetTimeDomainData(float* aData, size_t aLength)
|
|||||||
|
|
||||||
for (size_t writeIndex = 0; writeIndex < aLength; ) {
|
for (size_t writeIndex = 0; writeIndex < aLength; ) {
|
||||||
const AudioChunk& chunk = mChunks[readChunk & (CHUNK_COUNT - 1)];
|
const AudioChunk& chunk = mChunks[readChunk & (CHUNK_COUNT - 1)];
|
||||||
const size_t channelCount = chunk.mChannelData.Length();
|
const size_t channelCount = chunk.ChannelCount();
|
||||||
size_t copyLength =
|
size_t copyLength =
|
||||||
std::min<size_t>(aLength - writeIndex, WEBAUDIO_BLOCK_SIZE);
|
std::min<size_t>(aLength - writeIndex, WEBAUDIO_BLOCK_SIZE);
|
||||||
float* dataOut = &aData[writeIndex];
|
float* dataOut = &aData[writeIndex];
|
||||||
|
@ -79,7 +79,7 @@ public:
|
|||||||
// Record our input buffer
|
// Record our input buffer
|
||||||
MOZ_ASSERT(mWriteIndex < mLength, "How did this happen?");
|
MOZ_ASSERT(mWriteIndex < mLength, "How did this happen?");
|
||||||
const uint32_t duration = std::min(WEBAUDIO_BLOCK_SIZE, mLength - mWriteIndex);
|
const uint32_t duration = std::min(WEBAUDIO_BLOCK_SIZE, mLength - mWriteIndex);
|
||||||
const uint32_t inputChannelCount = aInput.mChannelData.Length();
|
const uint32_t inputChannelCount = aInput.ChannelCount();
|
||||||
for (uint32_t i = 0; i < outputChannelCount; ++i) {
|
for (uint32_t i = 0; i < outputChannelCount; ++i) {
|
||||||
float* outputData = mBuffer->GetDataForWrite(i) + mWriteIndex;
|
float* outputData = mBuffer->GetDataForWrite(i) + mWriteIndex;
|
||||||
if (aInput.IsNull() || i >= inputChannelCount) {
|
if (aInput.IsNull() || i >= inputChannelCount) {
|
||||||
|
@ -40,7 +40,7 @@ WriteZeroesToAudioBlock(AudioChunk* aChunk, uint32_t aStart, uint32_t aLength)
|
|||||||
if (aLength == 0)
|
if (aLength == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < aChunk->mChannelData.Length(); ++i) {
|
for (uint32_t i = 0; i < aChunk->ChannelCount(); ++i) {
|
||||||
PodZero(aChunk->ChannelFloatsForWrite(i) + aStart, aLength);
|
PodZero(aChunk->ChannelFloatsForWrite(i) + aStart, aLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -393,20 +393,20 @@ AudioNodeStream::ObtainInputBlock(AudioChunk& aTmpChunk, uint32_t aPortIndex)
|
|||||||
|
|
||||||
inputChunks.AppendElement(chunk);
|
inputChunks.AppendElement(chunk);
|
||||||
outputChannelCount =
|
outputChannelCount =
|
||||||
GetAudioChannelsSuperset(outputChannelCount, chunk->mChannelData.Length());
|
GetAudioChannelsSuperset(outputChannelCount, chunk->ChannelCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
outputChannelCount = ComputedNumberOfChannels(outputChannelCount);
|
outputChannelCount = ComputedNumberOfChannels(outputChannelCount);
|
||||||
|
|
||||||
uint32_t inputChunkCount = inputChunks.Length();
|
uint32_t inputChunkCount = inputChunks.Length();
|
||||||
if (inputChunkCount == 0 ||
|
if (inputChunkCount == 0 ||
|
||||||
(inputChunkCount == 1 && inputChunks[0]->mChannelData.Length() == 0)) {
|
(inputChunkCount == 1 && inputChunks[0]->ChannelCount() == 0)) {
|
||||||
aTmpChunk.SetNull(WEBAUDIO_BLOCK_SIZE);
|
aTmpChunk.SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inputChunkCount == 1 &&
|
if (inputChunkCount == 1 &&
|
||||||
inputChunks[0]->mChannelData.Length() == outputChannelCount) {
|
inputChunks[0]->ChannelCount() == outputChannelCount) {
|
||||||
aTmpChunk = *inputChunks[0];
|
aTmpChunk = *inputChunks[0];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -431,7 +431,7 @@ AudioNodeStream::AccumulateInputChunk(uint32_t aInputIndex, const AudioChunk& aC
|
|||||||
nsTArray<float>* aDownmixBuffer)
|
nsTArray<float>* aDownmixBuffer)
|
||||||
{
|
{
|
||||||
nsAutoTArray<const float*,GUESS_AUDIO_CHANNELS> channels;
|
nsAutoTArray<const float*,GUESS_AUDIO_CHANNELS> channels;
|
||||||
UpMixDownMixChunk(&aChunk, aBlock->mChannelData.Length(), channels, *aDownmixBuffer);
|
UpMixDownMixChunk(&aChunk, aBlock->ChannelCount(), channels, *aDownmixBuffer);
|
||||||
|
|
||||||
for (uint32_t c = 0; c < channels.Length(); ++c) {
|
for (uint32_t c = 0; c < channels.Length(); ++c) {
|
||||||
const float* inputData = static_cast<const float*>(channels[c]);
|
const float* inputData = static_cast<const float*>(channels[c]);
|
||||||
@ -458,7 +458,7 @@ AudioNodeStream::UpMixDownMixChunk(const AudioChunk* aChunk,
|
|||||||
{
|
{
|
||||||
static const float silenceChannel[WEBAUDIO_BLOCK_SIZE] = {0.f};
|
static const float silenceChannel[WEBAUDIO_BLOCK_SIZE] = {0.f};
|
||||||
|
|
||||||
for (uint32_t i = 0; i < aChunk->mChannelData.Length(); i++) {
|
for (uint32_t i = 0; i < aChunk->ChannelCount(); i++) {
|
||||||
aOutputChannels.AppendElement(static_cast<const float*>(aChunk->mChannelData[i]));
|
aOutputChannels.AppendElement(static_cast<const float*>(aChunk->mChannelData[i]));
|
||||||
}
|
}
|
||||||
if (aOutputChannels.Length() < aOutputChannelCount) {
|
if (aOutputChannels.Length() < aOutputChannelCount) {
|
||||||
|
@ -168,7 +168,7 @@ public:
|
|||||||
|
|
||||||
PodArrayZero(inputBuffer);
|
PodArrayZero(inputBuffer);
|
||||||
|
|
||||||
} else if(mBiquads.Length() != aInput.mChannelData.Length()){
|
} else if(mBiquads.Length() != aInput.ChannelCount()){
|
||||||
if (mBiquads.IsEmpty()) {
|
if (mBiquads.IsEmpty()) {
|
||||||
nsRefPtr<PlayingRefChangeHandler> refchanged =
|
nsRefPtr<PlayingRefChangeHandler> refchanged =
|
||||||
new PlayingRefChangeHandler(aStream, PlayingRefChangeHandler::ADDREF);
|
new PlayingRefChangeHandler(aStream, PlayingRefChangeHandler::ADDREF);
|
||||||
@ -179,7 +179,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adjust the number of biquads based on the number of channels
|
// Adjust the number of biquads based on the number of channels
|
||||||
mBiquads.SetLength(aInput.mChannelData.Length());
|
mBiquads.SetLength(aInput.ChannelCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t numberOfChannels = mBiquads.Length();
|
uint32_t numberOfChannels = mBiquads.Length();
|
||||||
|
@ -33,7 +33,7 @@ public:
|
|||||||
// Get the number of output channels, and allocate it
|
// Get the number of output channels, and allocate it
|
||||||
size_t channelCount = 0;
|
size_t channelCount = 0;
|
||||||
for (uint16_t i = 0; i < InputCount(); ++i) {
|
for (uint16_t i = 0; i < InputCount(); ++i) {
|
||||||
channelCount += aInput[i].mChannelData.Length();
|
channelCount += aInput[i].ChannelCount();
|
||||||
}
|
}
|
||||||
if (channelCount == 0) {
|
if (channelCount == 0) {
|
||||||
aOutput[0].SetNull(WEBAUDIO_BLOCK_SIZE);
|
aOutput[0].SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||||
@ -46,7 +46,7 @@ public:
|
|||||||
size_t channelIndex = 0;
|
size_t channelIndex = 0;
|
||||||
for (uint16_t i = 0; true; ++i) {
|
for (uint16_t i = 0; true; ++i) {
|
||||||
MOZ_ASSERT(i < InputCount());
|
MOZ_ASSERT(i < InputCount());
|
||||||
for (size_t j = 0; j < aInput[i].mChannelData.Length(); ++j) {
|
for (size_t j = 0; j < aInput[i].ChannelCount(); ++j) {
|
||||||
AudioBlockCopyChannelWithScale(
|
AudioBlockCopyChannelWithScale(
|
||||||
static_cast<const float*>(aInput[i].mChannelData[j]),
|
static_cast<const float*>(aInput[i].mChannelData[j]),
|
||||||
aInput[i].mVolume,
|
aInput[i].mVolume,
|
||||||
|
@ -32,7 +32,7 @@ public:
|
|||||||
|
|
||||||
aOutput.SetLength(OutputCount());
|
aOutput.SetLength(OutputCount());
|
||||||
for (uint16_t i = 0; i < OutputCount(); ++i) {
|
for (uint16_t i = 0; i < OutputCount(); ++i) {
|
||||||
if (i < aInput[0].mChannelData.Length()) {
|
if (i < aInput[0].ChannelCount()) {
|
||||||
// Split out existing channels
|
// Split out existing channels
|
||||||
AllocateAudioBlock(1, &aOutput[i]);
|
AllocateAudioBlock(1, &aOutput[i]);
|
||||||
AudioBlockCopyChannelWithScale(
|
AudioBlockCopyChannelWithScale(
|
||||||
|
@ -131,7 +131,7 @@ public:
|
|||||||
} else {
|
} else {
|
||||||
if (aInput.mVolume != 1.0f) {
|
if (aInput.mVolume != 1.0f) {
|
||||||
// Pre-multiply the input's volume
|
// Pre-multiply the input's volume
|
||||||
uint32_t numChannels = aInput.mChannelData.Length();
|
uint32_t numChannels = aInput.ChannelCount();
|
||||||
AllocateAudioBlock(numChannels, &input);
|
AllocateAudioBlock(numChannels, &input);
|
||||||
for (uint32_t i = 0; i < numChannels; ++i) {
|
for (uint32_t i = 0; i < numChannels; ++i) {
|
||||||
const float* src = static_cast<const float*>(aInput.mChannelData[i]);
|
const float* src = static_cast<const float*>(aInput.mChannelData[i]);
|
||||||
|
@ -29,7 +29,7 @@ void
|
|||||||
DelayBuffer::Write(const AudioChunk& aInputChunk)
|
DelayBuffer::Write(const AudioChunk& aInputChunk)
|
||||||
{
|
{
|
||||||
// We must have a reference to the buffer if there are channels
|
// We must have a reference to the buffer if there are channels
|
||||||
MOZ_ASSERT(aInputChunk.IsNull() == !aInputChunk.mChannelData.Length());
|
MOZ_ASSERT(aInputChunk.IsNull() == !aInputChunk.ChannelCount());
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
MOZ_ASSERT(!mHaveWrittenBlock);
|
MOZ_ASSERT(!mHaveWrittenBlock);
|
||||||
mHaveWrittenBlock = true;
|
mHaveWrittenBlock = true;
|
||||||
@ -116,7 +116,7 @@ DelayBuffer::ReadChannels(const double aPerFrameDelays[WEBAUDIO_BLOCK_SIZE],
|
|||||||
uint32_t aFirstChannel, uint32_t aNumChannelsToRead,
|
uint32_t aFirstChannel, uint32_t aNumChannelsToRead,
|
||||||
ChannelInterpretation aChannelInterpretation)
|
ChannelInterpretation aChannelInterpretation)
|
||||||
{
|
{
|
||||||
uint32_t totalChannelCount = aOutputChunk->mChannelData.Length();
|
uint32_t totalChannelCount = aOutputChunk->ChannelCount();
|
||||||
uint32_t readChannelsEnd = aFirstChannel + aNumChannelsToRead;
|
uint32_t readChannelsEnd = aFirstChannel + aNumChannelsToRead;
|
||||||
MOZ_ASSERT(readChannelsEnd <= totalChannelCount);
|
MOZ_ASSERT(readChannelsEnd <= totalChannelCount);
|
||||||
|
|
||||||
|
@ -103,11 +103,11 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t channelCount = aInput.mChannelData.Length();
|
const uint32_t channelCount = aInput.ChannelCount();
|
||||||
if (mCompressor->numberOfChannels() != channelCount) {
|
if (mCompressor->numberOfChannels() != channelCount) {
|
||||||
// Create a new compressor object with a new channel count
|
// Create a new compressor object with a new channel count
|
||||||
mCompressor = new WebCore::DynamicsCompressor(aStream->SampleRate(),
|
mCompressor = new WebCore::DynamicsCompressor(aStream->SampleRate(),
|
||||||
aInput.mChannelData.Length());
|
aInput.ChannelCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamTime pos = aStream->GetCurrentPosition();
|
StreamTime pos = aStream->GetCurrentPosition();
|
||||||
|
@ -81,7 +81,7 @@ public:
|
|||||||
// First, compute a vector of gains for each track tick based on the
|
// First, compute a vector of gains for each track tick based on the
|
||||||
// timeline at hand, and then for each channel, multiply the values
|
// timeline at hand, and then for each channel, multiply the values
|
||||||
// in the buffer with the gain vector.
|
// in the buffer with the gain vector.
|
||||||
AllocateAudioBlock(aInput.mChannelData.Length(), aOutput);
|
AllocateAudioBlock(aInput.ChannelCount(), aOutput);
|
||||||
|
|
||||||
// Compute the gain values for the duration of the input AudioChunk
|
// Compute the gain values for the duration of the input AudioChunk
|
||||||
StreamTime tick = aStream->GetCurrentPosition();
|
StreamTime tick = aStream->GetCurrentPosition();
|
||||||
@ -93,7 +93,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Apply the gain to the output buffer
|
// Apply the gain to the output buffer
|
||||||
for (size_t channel = 0; channel < aOutput->mChannelData.Length(); ++channel) {
|
for (size_t channel = 0; channel < aOutput->ChannelCount(); ++channel) {
|
||||||
const float* inputBuffer = static_cast<const float*> (aInput.mChannelData[channel]);
|
const float* inputBuffer = static_cast<const float*> (aInput.mChannelData[channel]);
|
||||||
float* buffer = aOutput->ChannelFloatsForWrite(channel);
|
float* buffer = aOutput->ChannelFloatsForWrite(channel);
|
||||||
AudioBlockCopyChannelWithScale(inputBuffer, computedGain, buffer);
|
AudioBlockCopyChannelWithScale(inputBuffer, computedGain, buffer);
|
||||||
|
@ -323,7 +323,7 @@ PannerNodeEngine::EqualPowerPanningFunction(const AudioChunk& aInput,
|
|||||||
AudioChunk* aOutput)
|
AudioChunk* aOutput)
|
||||||
{
|
{
|
||||||
float azimuth, elevation, gainL, gainR, normalizedAzimuth, distanceGain, coneGain;
|
float azimuth, elevation, gainL, gainR, normalizedAzimuth, distanceGain, coneGain;
|
||||||
int inputChannels = aInput.mChannelData.Length();
|
int inputChannels = aInput.ChannelCount();
|
||||||
|
|
||||||
// If both the listener are in the same spot, and no cone gain is specified,
|
// If both the listener are in the same spot, and no cone gain is specified,
|
||||||
// this node is noop.
|
// this node is noop.
|
||||||
|
@ -52,7 +52,7 @@ template<typename T, typename U>
|
|||||||
void ApplyStereoPanning(const AudioChunk& aInput, AudioChunk* aOutput,
|
void ApplyStereoPanning(const AudioChunk& aInput, AudioChunk* aOutput,
|
||||||
T aGainL, T aGainR, U aOnLeft)
|
T aGainL, T aGainR, U aOnLeft)
|
||||||
{
|
{
|
||||||
if (aInput.mChannelData.Length() == 1) {
|
if (aInput.ChannelCount() == 1) {
|
||||||
GainMonoToStereo(aInput, aOutput, aGainL, aGainR);
|
GainMonoToStereo(aInput, aOutput, aGainL, aGainR);
|
||||||
} else {
|
} else {
|
||||||
GainStereoToStereo(aInput, aOutput, aGainL, aGainR, aOnLeft);
|
GainStereoToStereo(aInput, aOutput, aGainL, aGainR, aOnLeft);
|
||||||
|
@ -315,7 +315,7 @@ public:
|
|||||||
PodZero(writeData, aInput.GetDuration());
|
PodZero(writeData, aInput.GetDuration());
|
||||||
} else {
|
} else {
|
||||||
MOZ_ASSERT(aInput.GetDuration() == WEBAUDIO_BLOCK_SIZE, "sanity check");
|
MOZ_ASSERT(aInput.GetDuration() == WEBAUDIO_BLOCK_SIZE, "sanity check");
|
||||||
MOZ_ASSERT(aInput.mChannelData.Length() == inputChannelCount);
|
MOZ_ASSERT(aInput.ChannelCount() == inputChannelCount);
|
||||||
AudioBlockCopyChannelWithScale(static_cast<const float*>(aInput.mChannelData[i]),
|
AudioBlockCopyChannelWithScale(static_cast<const float*>(aInput.mChannelData[i]),
|
||||||
aInput.mVolume, writeData);
|
aInput.mVolume, writeData);
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,7 @@ public:
|
|||||||
AudioChunk* aOutput,
|
AudioChunk* aOutput,
|
||||||
bool* aFinished) override
|
bool* aFinished) override
|
||||||
{
|
{
|
||||||
uint32_t channelCount = aInput.mChannelData.Length();
|
uint32_t channelCount = aInput.ChannelCount();
|
||||||
if (!mCurve.Length() || !channelCount) {
|
if (!mCurve.Length() || !channelCount) {
|
||||||
// Optimize the case where we don't have a curve buffer,
|
// Optimize the case where we don't have a curve buffer,
|
||||||
// or the input is null.
|
// or the input is null.
|
||||||
|
@ -154,8 +154,8 @@ void DynamicsCompressor::process(const AudioChunk* sourceChunk, AudioChunk* dest
|
|||||||
// It's because we internally match sourceChannels's size to destinationBus by channel up/down mix. Thus we need numberOfChannels
|
// It's because we internally match sourceChannels's size to destinationBus by channel up/down mix. Thus we need numberOfChannels
|
||||||
// to do the loop work for both m_sourceChannels and m_destinationChannels.
|
// to do the loop work for both m_sourceChannels and m_destinationChannels.
|
||||||
|
|
||||||
unsigned numberOfChannels = destinationChunk->mChannelData.Length();
|
unsigned numberOfChannels = destinationChunk->ChannelCount();
|
||||||
unsigned numberOfSourceChannels = sourceChunk->mChannelData.Length();
|
unsigned numberOfSourceChannels = sourceChunk->ChannelCount();
|
||||||
|
|
||||||
MOZ_ASSERT(numberOfChannels == m_numberOfChannels && numberOfSourceChannels);
|
MOZ_ASSERT(numberOfChannels == m_numberOfChannels && numberOfSourceChannels);
|
||||||
|
|
||||||
|
@ -132,13 +132,13 @@ void HRTFPanner::pan(double desiredAzimuth, double elevation, const AudioChunk*
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
unsigned numInputChannels =
|
unsigned numInputChannels =
|
||||||
inputBus->IsNull() ? 0 : inputBus->mChannelData.Length();
|
inputBus->IsNull() ? 0 : inputBus->ChannelCount();
|
||||||
|
|
||||||
MOZ_ASSERT(numInputChannels <= 2);
|
MOZ_ASSERT(numInputChannels <= 2);
|
||||||
MOZ_ASSERT(inputBus->mDuration == WEBAUDIO_BLOCK_SIZE);
|
MOZ_ASSERT(inputBus->mDuration == WEBAUDIO_BLOCK_SIZE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool isOutputGood = outputBus && outputBus->mChannelData.Length() == 2 && outputBus->mDuration == WEBAUDIO_BLOCK_SIZE;
|
bool isOutputGood = outputBus && outputBus->ChannelCount() == 2 && outputBus->mDuration == WEBAUDIO_BLOCK_SIZE;
|
||||||
MOZ_ASSERT(isOutputGood);
|
MOZ_ASSERT(isOutputGood);
|
||||||
|
|
||||||
if (!isOutputGood) {
|
if (!isOutputGood) {
|
||||||
|
@ -154,7 +154,7 @@ void Reverb::process(const AudioChunk* sourceBus, AudioChunk* destinationBus, si
|
|||||||
{
|
{
|
||||||
// Do a fairly comprehensive sanity check.
|
// Do a fairly comprehensive sanity check.
|
||||||
// If these conditions are satisfied, all of the source and destination pointers will be valid for the various matrixing cases.
|
// If these conditions are satisfied, all of the source and destination pointers will be valid for the various matrixing cases.
|
||||||
bool isSafeToProcess = sourceBus && destinationBus && sourceBus->mChannelData.Length() > 0 && destinationBus->mChannelData.Length() > 0
|
bool isSafeToProcess = sourceBus && destinationBus && sourceBus->ChannelCount() > 0 && destinationBus->mChannelData.Length() > 0
|
||||||
&& framesToProcess <= MaxFrameSize && framesToProcess <= size_t(sourceBus->mDuration) && framesToProcess <= size_t(destinationBus->mDuration);
|
&& framesToProcess <= MaxFrameSize && framesToProcess <= size_t(sourceBus->mDuration) && framesToProcess <= size_t(destinationBus->mDuration);
|
||||||
|
|
||||||
MOZ_ASSERT(isSafeToProcess);
|
MOZ_ASSERT(isSafeToProcess);
|
||||||
@ -162,14 +162,14 @@ void Reverb::process(const AudioChunk* sourceBus, AudioChunk* destinationBus, si
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// For now only handle mono or stereo output
|
// For now only handle mono or stereo output
|
||||||
MOZ_ASSERT(destinationBus->mChannelData.Length() <= 2);
|
MOZ_ASSERT(destinationBus->ChannelCount() <= 2);
|
||||||
|
|
||||||
float* destinationChannelL = static_cast<float*>(const_cast<void*>(destinationBus->mChannelData[0]));
|
float* destinationChannelL = static_cast<float*>(const_cast<void*>(destinationBus->mChannelData[0]));
|
||||||
const float* sourceBusL = static_cast<const float*>(sourceBus->mChannelData[0]);
|
const float* sourceBusL = static_cast<const float*>(sourceBus->mChannelData[0]);
|
||||||
|
|
||||||
// Handle input -> output matrixing...
|
// Handle input -> output matrixing...
|
||||||
size_t numInputChannels = sourceBus->mChannelData.Length();
|
size_t numInputChannels = sourceBus->ChannelCount();
|
||||||
size_t numOutputChannels = destinationBus->mChannelData.Length();
|
size_t numOutputChannels = destinationBus->ChannelCount();
|
||||||
size_t numReverbChannels = m_convolvers.Length();
|
size_t numReverbChannels = m_convolvers.Length();
|
||||||
|
|
||||||
if (numInputChannels == 2 && numReverbChannels == 2 && numOutputChannels == 2) {
|
if (numInputChannels == 2 && numReverbChannels == 2 && numOutputChannels == 2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user