/* -*- 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 AudioNode_h_ #define AudioNode_h_ #include "nsCycleCollectionParticipant.h" #include "mozilla/Attributes.h" #include "EnableWebAudioCheck.h" #include "nsAutoPtr.h" #include "nsTArray.h" #include "AudioContext.h" struct JSContext; namespace mozilla { class ErrorResult; namespace dom { class AudioNode : public nsISupports, public EnableWebAudioCheck { public: explicit AudioNode(AudioContext* aContext); virtual ~AudioNode(); NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_CLASS(AudioNode) AudioContext* GetParentObject() const { return mContext; } AudioContext* Context() const { return mContext; } void Connect(AudioNode& aDestination, uint32_t aOutput, uint32_t aInput, ErrorResult& aRv); void Disconnect(uint32_t aOutput, ErrorResult& aRv); // The following two virtual methods must be implemented by each node type // to provide their number of input and output ports. These numbers are // constant for the lifetime of the node. Both default to 1. virtual uint32_t NumberOfInputs() const { return 1; } virtual uint32_t NumberOfOutputs() const { return 1; } struct InputNode { // Strong reference. // May be null if the source node has gone away. nsRefPtr mInputNode; // The index of the input port this node feeds into. uint32_t mInputPort; // The index of the output port this node comes out of. uint32_t mOutputPort; }; private: nsRefPtr mContext; // For every InputNode, there is a corresponding entry in mOutputNodes of the // InputNode's mInputNode. nsTArray mInputNodes; // For every mOutputNode entry, there is a corresponding entry in mInputNodes // of the mOutputNode entry. We won't necessarily be able to identify the // exact matching entry, since mOutputNodes doesn't include the port // identifiers and the same node could be connected on multiple ports. nsTArray > mOutputNodes; }; } } #endif