mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 04:05:49 +00:00
dd57723337
This is a mega-patch that was too hard to disentangle. Here's what it does: -- Create infrastructure around AudioNode::UpdateOutputEnded to detect when a node can no longer produce any output. When that becomes true, disconnect it from the AudioNode graph. -- Have AudioNode implement JSBindingFinalized to use as input in UpdateOutputEnded. -- Give every AudioNode a MediaStream, and give every connection a MediaInputPort. -- Actually play the audio that reaches the AudioContext's destination node. -- Force AudioContext to use the audio sample rate defined by MediaStreamGraph. -- Fix AudioBufferSourceNode's start and stop methods to possibly throw and take default 'when' parameters. -- Create an AudioNodeStream for AudioBufferSourceNode and give it a AudioBufferSourceNodeEngine that does what's needed. Set parameters for this engine in the start() and stop() methods. -- Create AudioBuffer::GetThreadSharedChannelsForRate, which is responsible for stealing the contents of any JS array buffers, and bundling them up into a thread-shared read-only buffer object which can be used as part of an AudioChunk. This method will also be responsible for resampling and caching as necessary.
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef AudioDestinationNode_h_
|
|
#define AudioDestinationNode_h_
|
|
|
|
#include "AudioNode.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class AudioContext;
|
|
|
|
/**
|
|
* Need to have an nsWrapperCache on AudioDestinationNodes since
|
|
* AudioContext.destination returns them.
|
|
*/
|
|
class AudioDestinationNode : public AudioNode,
|
|
public nsWrapperCache
|
|
{
|
|
public:
|
|
AudioDestinationNode(AudioContext* aContext, MediaStreamGraph* aGraph);
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(AudioDestinationNode,
|
|
AudioNode)
|
|
|
|
virtual JSObject* WrapObject(JSContext* aCx, JSObject* aScope,
|
|
bool* aTriedToWrap);
|
|
|
|
virtual uint32_t NumberOfOutputs() const MOZ_FINAL MOZ_OVERRIDE
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|