Bug 1591254 set WorkletNodeEngine input and output span lengths appropriately for zero inputs and outputs r=padenot

AudioNodeTrack::ProcessInput() uses ProcessBlock() when input and output
counts are <= 1.

Differential Revision: https://phabricator.services.mozilla.com/D50552

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Karl Tomlinson 2019-10-25 12:57:46 +00:00
Родитель 84d2a46f2c
Коммит c8963484d2
1 изменённых файлов: 8 добавлений и 2 удалений

Просмотреть файл

@ -33,8 +33,10 @@ class WorkletNodeEngine final : public AudioNodeEngine {
void ProcessBlock(AudioNodeTrack* aTrack, GraphTime aFrom,
const AudioBlock& aInput, AudioBlock* aOutput,
bool* aFinished) override {
ProcessBlocksOnPorts(aTrack, MakeSpan(&aInput, 1), MakeSpan(aOutput, 1),
aFinished);
MOZ_ASSERT(InputCount() <= 1);
MOZ_ASSERT(OutputCount() <= 1);
ProcessBlocksOnPorts(aTrack, MakeSpan(&aInput, InputCount()),
MakeSpan(aOutput, OutputCount()), aFinished);
}
void ProcessBlocksOnPorts(AudioNodeTrack* aTrack,
@ -188,6 +190,7 @@ enum class ArrayElementInit { None, Zero };
static bool PrepareBufferArrays(JSContext* aCx, Span<const AudioBlock> aBlocks,
WorkletNodeEngine::Ports* aPorts,
ArrayElementInit aInit) {
MOZ_ASSERT(aBlocks.Length() == aPorts->mPorts.length());
for (size_t i = 0; i < aBlocks.Length(); ++i) {
size_t channelCount = aBlocks[i].ChannelCount();
WorkletNodeEngine::Channels& portRef = aPorts->mPorts[i];
@ -267,6 +270,9 @@ void WorkletNodeEngine::ProcessBlocksOnPorts(AudioNodeTrack* aTrack,
Span<const AudioBlock> aInput,
Span<AudioBlock> aOutput,
bool* aFinished) {
MOZ_ASSERT(aInput.Length() == InputCount());
MOZ_ASSERT(aOutput.Length() == OutputCount());
if (!mProcessor) {
ProduceSilence(aOutput);
return;