MediaStreamNote: Difference between revisions

Jump to navigation Jump to search
Line 322: Line 322:
   return compressorNode.forget();
   return compressorNode.forget();
}
}
already_AddRefed<GainNode>
AudioContext::CreateGain()
{
  nsRefPtr<GainNode> gainNode = new GainNode(this);
  return gainNode.forget();
}
GainNode::GainNode(AudioContext* aContext)
  : AudioNode(aContext,
              2,
              ChannelCountMode::Max,
              ChannelInterpretation::Speakers)
  , mGain(new AudioParam(MOZ_THIS_IN_INITIALIZER_LIST(),
                        SendGainToStream, 1.0f))
{
  GainNodeEngine* engine = new GainNodeEngine(this, aContext->Destination());
  mStream = aContext->Graph()->CreateAudioNodeStream(engine, MediaStreamGraph::INTERNAL_STREAM);
  engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
}
void
GainNode::SendGainToStream(AudioNode* aNode)
{
  GainNode* This = static_cast<GainNode*>(aNode);
  // It will call to GainNodeEngine::SetTimelineParameter eventually.
  SendTimelineParameterToStream(This, GainNodeEngine::GAIN, *This->mGain);
}
void GainNodeEngine::SetTimelineParameter(uint32_t aIndex,
                                          const AudioParamTimeline& aValue,
                                          TrackRate aSampleRate) MOZ_OVERRIDE
{
  switch (aIndex) {
  case GAIN:
    MOZ_ASSERT(mSource && mDestination);
    mGain = aValue;
    WebAudioUtils::ConvertAudioParamToTicks(mGain, mSource, mDestination);
    break;
  default:
    NS_ERROR("Bad GainNodeEngine TimelineParameter");
  }
}
AudioNodeStream*
MediaStreamGraph::CreateAudioNodeStream(AudioNodeEngine* aEngine,
                                        AudioNodeStreamKind aKind,
                                        TrackRate aSampleRate)
{
  MOZ_ASSERT(NS_IsMainThread());
  if (!aSampleRate) {
    aSampleRate = aEngine->NodeMainThread()->Context()->SampleRate();
  }
  AudioNodeStream* stream = new AudioNodeStream(aEngine, aKind, aSampleRate);
  NS_ADDREF(stream);
  MediaStreamGraphImpl* graph = static_cast<MediaStreamGraphImpl*>(this);
  stream->SetGraphImpl(graph);
  if (aEngine->HasNode()) {
    stream->SetChannelMixingParametersImpl(aEngine->NodeMainThread()->ChannelCount(),
                                          aEngine->NodeMainThread()->ChannelCountModeValue(),
                                          aEngine->NodeMainThread()->ChannelInterpretationValue());
  }
  graph->AppendMessage(new CreateMessage(stream));
  return stream;
}
</source>
==AudioNode::Connect ==
<source lang="cpp">
</source>
==AudioNodeStream::ProcessInput ==
<source lang="cpp">
</source>
</source>
Confirmed users
770

edits

Navigation menu