зеркало из https://github.com/mozilla/gecko-dev.git
bug 1474222 uninline ConvolverNodeEngine::ProcessBlock() r=padenot
MozReview-Commit-ID: tbuG2AQJoC --HG-- extra : rebase_source : fd6aeca490b3a9ed1fb116abd25e8d0199802cca
This commit is contained in:
Родитель
398c9582ea
Коммит
e0496cfa3b
|
@ -88,56 +88,7 @@ public:
|
|||
GraphTime aFrom,
|
||||
const AudioBlock& aInput,
|
||||
AudioBlock* aOutput,
|
||||
bool* aFinished) override
|
||||
{
|
||||
if (!mReverb) {
|
||||
aOutput->SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
AudioBlock input = aInput;
|
||||
if (aInput.IsNull()) {
|
||||
if (mLeftOverData > 0) {
|
||||
mLeftOverData -= WEBAUDIO_BLOCK_SIZE;
|
||||
input.AllocateChannels(1);
|
||||
WriteZeroesToAudioBlock(&input, 0, WEBAUDIO_BLOCK_SIZE);
|
||||
} else {
|
||||
if (mLeftOverData != INT32_MIN) {
|
||||
mLeftOverData = INT32_MIN;
|
||||
aStream->ScheduleCheckForInactive();
|
||||
RefPtr<PlayingRefChanged> refchanged =
|
||||
new PlayingRefChanged(aStream, PlayingRefChanged::RELEASE);
|
||||
aStream->Graph()->DispatchToMainThreadAfterStreamStateUpdate(
|
||||
refchanged.forget());
|
||||
}
|
||||
aOutput->SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (aInput.mVolume != 1.0f) {
|
||||
// Pre-multiply the input's volume
|
||||
uint32_t numChannels = aInput.ChannelCount();
|
||||
input.AllocateChannels(numChannels);
|
||||
for (uint32_t i = 0; i < numChannels; ++i) {
|
||||
const float* src = static_cast<const float*>(aInput.mChannelData[i]);
|
||||
float* dest = input.ChannelFloatsForWrite(i);
|
||||
AudioBlockCopyChannelWithScale(src, aInput.mVolume, dest);
|
||||
}
|
||||
}
|
||||
|
||||
if (mLeftOverData <= 0) {
|
||||
RefPtr<PlayingRefChanged> refchanged =
|
||||
new PlayingRefChanged(aStream, PlayingRefChanged::ADDREF);
|
||||
aStream->Graph()->DispatchToMainThreadAfterStreamStateUpdate(
|
||||
refchanged.forget());
|
||||
}
|
||||
mLeftOverData = mReverb->impulseResponseLength();
|
||||
MOZ_ASSERT(mLeftOverData > 0);
|
||||
}
|
||||
aOutput->AllocateChannels(2);
|
||||
|
||||
mReverb->process(&input, aOutput);
|
||||
}
|
||||
bool* aFinished) override;
|
||||
|
||||
bool IsActive() const override
|
||||
{
|
||||
|
@ -168,6 +119,62 @@ private:
|
|||
bool mNormalize;
|
||||
};
|
||||
|
||||
void
|
||||
ConvolverNodeEngine::ProcessBlock(AudioNodeStream* aStream,
|
||||
GraphTime aFrom,
|
||||
const AudioBlock& aInput,
|
||||
AudioBlock* aOutput,
|
||||
bool* aFinished)
|
||||
{
|
||||
if (!mReverb) {
|
||||
aOutput->SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
AudioBlock input = aInput;
|
||||
if (aInput.IsNull()) {
|
||||
if (mLeftOverData > 0) {
|
||||
mLeftOverData -= WEBAUDIO_BLOCK_SIZE;
|
||||
input.AllocateChannels(1);
|
||||
WriteZeroesToAudioBlock(&input, 0, WEBAUDIO_BLOCK_SIZE);
|
||||
} else {
|
||||
if (mLeftOverData != INT32_MIN) {
|
||||
mLeftOverData = INT32_MIN;
|
||||
aStream->ScheduleCheckForInactive();
|
||||
RefPtr<PlayingRefChanged> refchanged =
|
||||
new PlayingRefChanged(aStream, PlayingRefChanged::RELEASE);
|
||||
aStream->Graph()->
|
||||
DispatchToMainThreadAfterStreamStateUpdate(refchanged.forget());
|
||||
}
|
||||
aOutput->SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (aInput.mVolume != 1.0f) {
|
||||
// Pre-multiply the input's volume
|
||||
uint32_t numChannels = aInput.ChannelCount();
|
||||
input.AllocateChannels(numChannels);
|
||||
for (uint32_t i = 0; i < numChannels; ++i) {
|
||||
const float* src = static_cast<const float*>(aInput.mChannelData[i]);
|
||||
float* dest = input.ChannelFloatsForWrite(i);
|
||||
AudioBlockCopyChannelWithScale(src, aInput.mVolume, dest);
|
||||
}
|
||||
}
|
||||
|
||||
if (mLeftOverData <= 0) {
|
||||
RefPtr<PlayingRefChanged> refchanged =
|
||||
new PlayingRefChanged(aStream, PlayingRefChanged::ADDREF);
|
||||
aStream->Graph()->
|
||||
DispatchToMainThreadAfterStreamStateUpdate(refchanged.forget());
|
||||
}
|
||||
mLeftOverData = mReverb->impulseResponseLength();
|
||||
MOZ_ASSERT(mLeftOverData > 0);
|
||||
}
|
||||
aOutput->AllocateChannels(2);
|
||||
|
||||
mReverb->process(&input, aOutput);
|
||||
}
|
||||
|
||||
ConvolverNode::ConvolverNode(AudioContext* aContext)
|
||||
: AudioNode(aContext,
|
||||
2,
|
||||
|
|
Загрузка…
Ссылка в новой задаче