Backed out changesets 3b8fdfefcf5e and ab61f99fb584 (bug 864083) for bustage on a CLOSED TREE.

This commit is contained in:
Ryan VanderMeulen 2013-04-22 08:58:32 -04:00
parent d3ac3901cd
commit c3f7907f13
16 changed files with 61 additions and 7 deletions

View File

@ -77,6 +77,11 @@ AnalyserNode::AnalyserNode(AudioContext* aContext)
AllocateBuffer(); AllocateBuffer();
} }
AnalyserNode::~AnalyserNode()
{
DestroyMediaStream();
}
JSObject* JSObject*
AnalyserNode::WrapObject(JSContext* aCx, JSObject* aScope) AnalyserNode::WrapObject(JSContext* aCx, JSObject* aScope)
{ {
@ -238,6 +243,12 @@ AnalyserNode::ApplyBlackmanWindow(float* aBuffer, uint32_t aSize)
} }
} }
void
AnalyserNode::DestroyMediaStream()
{
AudioNode::DestroyMediaStream();
}
bool bool
AnalyserNode::AllocateBuffer() AnalyserNode::AllocateBuffer()
{ {

View File

@ -18,6 +18,7 @@ class AnalyserNode : public AudioNode
{ {
public: public:
explicit AnalyserNode(AudioContext* aContext); explicit AnalyserNode(AudioContext* aContext);
virtual ~AnalyserNode();
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED
@ -28,6 +29,8 @@ public:
return true; return true;
} }
virtual void DestroyMediaStream() MOZ_OVERRIDE;
void GetFloatFrequencyData(Float32Array& aArray); void GetFloatFrequencyData(Float32Array& aArray);
void GetByteFrequencyData(Uint8Array& aArray); void GetByteFrequencyData(Uint8Array& aArray);
void GetByteTimeDomainData(Uint8Array& aArray); void GetByteTimeDomainData(Uint8Array& aArray);

View File

@ -165,7 +165,8 @@ StealJSArrayDataIntoThreadSharedFloatArrayBufferList(JSContext* aJSContext,
} }
ThreadSharedFloatArrayBufferList* ThreadSharedFloatArrayBufferList*
AudioBuffer::GetThreadSharedChannelsForRate(JSContext* aJSContext) AudioBuffer::GetThreadSharedChannelsForRate(JSContext* aJSContext, uint32_t* aRate,
uint32_t* aLength)
{ {
if (!mSharedChannels) { if (!mSharedChannels) {
// Steal JS data // Steal JS data
@ -173,6 +174,8 @@ AudioBuffer::GetThreadSharedChannelsForRate(JSContext* aJSContext)
StealJSArrayDataIntoThreadSharedFloatArrayBufferList(aJSContext, mJSChannels); StealJSArrayDataIntoThreadSharedFloatArrayBufferList(aJSContext, mJSChannels);
} }
*aLength = mLength;
*aRate = mSampleRate;
return mSharedChannels; return mSharedChannels;
} }

View File

@ -89,9 +89,12 @@ public:
} }
/** /**
* Returns a ThreadSharedFloatArrayBufferList containing the sample data. * Returns a ThreadSharedFloatArrayBufferList containing the sample data
* at aRate. Sets *aLength to the number of samples per channel.
*/ */
ThreadSharedFloatArrayBufferList* GetThreadSharedChannelsForRate(JSContext* aContext); ThreadSharedFloatArrayBufferList* GetThreadSharedChannelsForRate(JSContext* aContext,
uint32_t* aRate,
uint32_t* aLength);
// aContents should either come from JS_AllocateArrayBufferContents or // aContents should either come from JS_AllocateArrayBufferContents or
// JS_StealArrayBufferContents. // JS_StealArrayBufferContents.

View File

@ -428,9 +428,11 @@ AudioBufferSourceNode::AudioBufferSourceNode(AudioContext* aContext)
AudioBufferSourceNode::~AudioBufferSourceNode() AudioBufferSourceNode::~AudioBufferSourceNode()
{ {
//
if (Context()) { if (Context()) {
Context()->UnregisterAudioBufferSourceNode(this); Context()->UnregisterAudioBufferSourceNode(this);
} }
DestroyMediaStream();
} }
JSObject* JSObject*
@ -455,10 +457,10 @@ AudioBufferSourceNode::Start(JSContext* aCx, double aWhen, double aOffset,
return; return;
} }
float rate = mBuffer->SampleRate(); uint32_t rate;
int32_t lengthSamples = mBuffer->Length(); uint32_t lengthSamples;
nsRefPtr<ThreadSharedFloatArrayBufferList> data = nsRefPtr<ThreadSharedFloatArrayBufferList> data =
mBuffer->GetThreadSharedChannelsForRate(aCx); mBuffer->GetThreadSharedChannelsForRate(aCx, &rate, &lengthSamples);
double length = double(lengthSamples) / rate; double length = double(lengthSamples) / rate;
double offset = std::max(0.0, aOffset); double offset = std::max(0.0, aOffset);
double endOffset = aDuration.WasPassed() ? double endOffset = aDuration.WasPassed() ?

View File

@ -20,6 +20,7 @@ class AudioBufferSourceNode : public AudioNode,
{ {
public: public:
explicit AudioBufferSourceNode(AudioContext* aContext); explicit AudioBufferSourceNode(AudioContext* aContext);
virtual ~AudioBufferSourceNode();
virtual void DestroyMediaStream() MOZ_OVERRIDE virtual void DestroyMediaStream() MOZ_OVERRIDE
{ {

View File

@ -78,6 +78,8 @@ public:
virtual ~AudioNode(); virtual ~AudioNode();
// This should be idempotent (safe to call multiple times). // This should be idempotent (safe to call multiple times).
// This should be called in the destructor of every class that overrides
// this method.
virtual void DestroyMediaStream() virtual void DestroyMediaStream()
{ {
if (mStream) { if (mStream) {

View File

@ -109,6 +109,11 @@ BiquadFilterNode::BiquadFilterNode(AudioContext* aContext)
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get())); engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
} }
BiquadFilterNode::~BiquadFilterNode()
{
DestroyMediaStream();
}
JSObject* JSObject*
BiquadFilterNode::WrapObject(JSContext* aCx, JSObject* aScope) BiquadFilterNode::WrapObject(JSContext* aCx, JSObject* aScope)
{ {

View File

@ -33,6 +33,7 @@ class BiquadFilterNode : public AudioNode
{ {
public: public:
explicit BiquadFilterNode(AudioContext* aContext); explicit BiquadFilterNode(AudioContext* aContext);
~BiquadFilterNode();
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(BiquadFilterNode, AudioNode) NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(BiquadFilterNode, AudioNode)

View File

@ -127,6 +127,11 @@ DynamicsCompressorNode::DynamicsCompressorNode(AudioContext* aContext)
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get())); engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
} }
DynamicsCompressorNode::~DynamicsCompressorNode()
{
DestroyMediaStream();
}
JSObject* JSObject*
DynamicsCompressorNode::WrapObject(JSContext* aCx, JSObject* aScope) DynamicsCompressorNode::WrapObject(JSContext* aCx, JSObject* aScope)
{ {

View File

@ -19,6 +19,7 @@ class DynamicsCompressorNode : public AudioNode
{ {
public: public:
explicit DynamicsCompressorNode(AudioContext* aContext); explicit DynamicsCompressorNode(AudioContext* aContext);
~DynamicsCompressorNode();
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DynamicsCompressorNode, AudioNode) NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DynamicsCompressorNode, AudioNode)

View File

@ -103,6 +103,11 @@ GainNode::GainNode(AudioContext* aContext)
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get())); engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
} }
GainNode::~GainNode()
{
DestroyMediaStream();
}
JSObject* JSObject*
GainNode::WrapObject(JSContext* aCx, JSObject* aScope) GainNode::WrapObject(JSContext* aCx, JSObject* aScope)
{ {

View File

@ -19,6 +19,7 @@ class GainNode : public AudioNode
{ {
public: public:
explicit GainNode(AudioContext* aContext); explicit GainNode(AudioContext* aContext);
virtual ~GainNode();
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GainNode, AudioNode) NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GainNode, AudioNode)

View File

@ -184,6 +184,7 @@ PannerNode::~PannerNode()
if (Context()) { if (Context()) {
Context()->UnregisterPannerNode(this); Context()->UnregisterPannerNode(this);
} }
DestroyMediaStream();
} }
JSObject* JSObject*

View File

@ -13,6 +13,7 @@
#include "AudioProcessingEvent.h" #include "AudioProcessingEvent.h"
#include "WebAudioUtils.h" #include "WebAudioUtils.h"
#include "mozilla/Mutex.h" #include "mozilla/Mutex.h"
#include "mozilla/unused.h"
#include "mozilla/PodOperations.h" #include "mozilla/PodOperations.h"
#include <deque> #include <deque>
@ -303,7 +304,10 @@ private:
// Steal the output buffers // Steal the output buffers
nsRefPtr<ThreadSharedFloatArrayBufferList> output; nsRefPtr<ThreadSharedFloatArrayBufferList> output;
if (event->HasOutputBuffer()) { if (event->HasOutputBuffer()) {
output = event->OutputBuffer()->GetThreadSharedChannelsForRate(cx); uint32_t rate, length;
output = event->OutputBuffer()->GetThreadSharedChannelsForRate(cx, &rate, &length);
unused << rate;
unused << length;
} }
// Append it to our output buffer queue // Append it to our output buffer queue
@ -357,6 +361,11 @@ ScriptProcessorNode::ScriptProcessorNode(AudioContext* aContext,
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get())); engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
} }
ScriptProcessorNode::~ScriptProcessorNode()
{
DestroyMediaStream();
}
JSObject* JSObject*
ScriptProcessorNode::WrapObject(JSContext* aCx, JSObject* aScope) ScriptProcessorNode::WrapObject(JSContext* aCx, JSObject* aScope)
{ {

View File

@ -27,6 +27,7 @@ public:
uint32_t aBufferSize, uint32_t aBufferSize,
uint32_t aNumberOfInputChannels, uint32_t aNumberOfInputChannels,
uint32_t aNumberOfOutputChannels); uint32_t aNumberOfOutputChannels);
virtual ~ScriptProcessorNode();
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED