Exemplo n.º 1
0
void
AudioNodeStream::CheckForInactive()
{
  if (((mActiveInputCount > 0 || mEngine->IsActive()) &&
       !mMarkAsFinishedAfterThisBlock) ||
      !mIsActive) {
    return;
  }

  mIsActive = false;
  mInputChunks.Clear(); // not required for foreseeable future
  for (auto& chunk : mLastChunks) {
    chunk.SetNull(WEBAUDIO_BLOCK_SIZE);
  }
  if (!(mFlags & EXTERNAL_OUTPUT)) {
    GraphImpl()->IncrementSuspendCount(this);
  }
  if (IsAudioParamStream()) {
    return;
  }

  for (const auto& consumer : mConsumers) {
    AudioNodeStream* ns = consumer->GetDestination()->AsAudioNodeStream();
    if (ns) {
      ns->DecrementActiveInputCount();
    }
  }
}
Exemplo n.º 2
0
void
AudioNodeStream::SetActive()
{
    if (mIsActive || mMarkAsFinishedAfterThisBlock) {
        return;
    }

    mIsActive = true;
    if (IsAudioParamStream()) {
        // Consumers merely influence stream order.
        // They do not read from the stream.
        return;
    }

    for (const auto& consumer : mConsumers) {
        AudioNodeStream* ns = consumer->GetDestination()->AsAudioNodeStream();
        if (ns) {
            ns->IncrementActiveInputCount();
        }
    }
}