1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/media/webaudio/MediaStreamAudioSourceNode.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,86 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim:set ts=2 sw=2 sts=2 et cindent: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#include "MediaStreamAudioSourceNode.h" 1.11 +#include "mozilla/dom/MediaStreamAudioSourceNodeBinding.h" 1.12 +#include "AudioNodeEngine.h" 1.13 +#include "AudioNodeExternalInputStream.h" 1.14 +#include "DOMMediaStream.h" 1.15 + 1.16 +namespace mozilla { 1.17 +namespace dom { 1.18 + 1.19 +NS_IMPL_CYCLE_COLLECTION_CLASS(MediaStreamAudioSourceNode) 1.20 + 1.21 +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MediaStreamAudioSourceNode) 1.22 + NS_IMPL_CYCLE_COLLECTION_UNLINK(mInputStream) 1.23 +NS_IMPL_CYCLE_COLLECTION_UNLINK_END_INHERITED(AudioNode) 1.24 + 1.25 +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(MediaStreamAudioSourceNode, AudioNode) 1.26 + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mInputStream) 1.27 +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END 1.28 + 1.29 +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaStreamAudioSourceNode) 1.30 +NS_INTERFACE_MAP_END_INHERITING(AudioNode) 1.31 + 1.32 +NS_IMPL_ADDREF_INHERITED(MediaStreamAudioSourceNode, AudioNode) 1.33 +NS_IMPL_RELEASE_INHERITED(MediaStreamAudioSourceNode, AudioNode) 1.34 + 1.35 +MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext* aContext, 1.36 + DOMMediaStream* aMediaStream) 1.37 + : AudioNode(aContext, 1.38 + 2, 1.39 + ChannelCountMode::Max, 1.40 + ChannelInterpretation::Speakers), 1.41 + mInputStream(aMediaStream) 1.42 +{ 1.43 + AudioNodeEngine* engine = new AudioNodeEngine(this); 1.44 + mStream = aContext->Graph()->CreateAudioNodeExternalInputStream(engine); 1.45 + ProcessedMediaStream* outputStream = static_cast<ProcessedMediaStream*>(mStream.get()); 1.46 + mInputPort = outputStream->AllocateInputPort(aMediaStream->GetStream(), 1.47 + MediaInputPort::FLAG_BLOCK_INPUT); 1.48 + mInputStream->AddConsumerToKeepAlive(this); 1.49 +} 1.50 + 1.51 +MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode() 1.52 +{ 1.53 +} 1.54 + 1.55 +size_t 1.56 +MediaStreamAudioSourceNode::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const 1.57 +{ 1.58 + // Future: 1.59 + // - mInputStream 1.60 + size_t amount = AudioNode::SizeOfExcludingThis(aMallocSizeOf); 1.61 + amount += mInputPort->SizeOfIncludingThis(aMallocSizeOf); 1.62 + return amount; 1.63 +} 1.64 + 1.65 +size_t 1.66 +MediaStreamAudioSourceNode::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const 1.67 +{ 1.68 + return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); 1.69 +} 1.70 + 1.71 +void 1.72 +MediaStreamAudioSourceNode::DestroyMediaStream() 1.73 +{ 1.74 + if (mInputPort) { 1.75 + mInputPort->Destroy(); 1.76 + mInputPort = nullptr; 1.77 + } 1.78 + AudioNode::DestroyMediaStream(); 1.79 +} 1.80 + 1.81 +JSObject* 1.82 +MediaStreamAudioSourceNode::WrapObject(JSContext* aCx) 1.83 +{ 1.84 + return MediaStreamAudioSourceNodeBinding::Wrap(aCx, this); 1.85 +} 1.86 + 1.87 +} 1.88 +} 1.89 +