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();
}
AnalyserNode::~AnalyserNode()
{
DestroyMediaStream();
}
JSObject*
AnalyserNode::WrapObject(JSContext* aCx, JSObject* aScope)
{
@ -238,6 +243,12 @@ AnalyserNode::ApplyBlackmanWindow(float* aBuffer, uint32_t aSize)
}
}
void
AnalyserNode::DestroyMediaStream()
{
AudioNode::DestroyMediaStream();
}
bool
AnalyserNode::AllocateBuffer()
{

View File

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

View File

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

View File

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

View File

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

View File

@ -78,6 +78,8 @@ public:
virtual ~AudioNode();
// 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()
{
if (mStream) {

View File

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

View File

@ -33,6 +33,7 @@ class BiquadFilterNode : public AudioNode
{
public:
explicit BiquadFilterNode(AudioContext* aContext);
~BiquadFilterNode();
NS_DECL_ISUPPORTS_INHERITED
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()));
}
DynamicsCompressorNode::~DynamicsCompressorNode()
{
DestroyMediaStream();
}
JSObject*
DynamicsCompressorNode::WrapObject(JSContext* aCx, JSObject* aScope)
{

View File

@ -19,6 +19,7 @@ class DynamicsCompressorNode : public AudioNode
{
public:
explicit DynamicsCompressorNode(AudioContext* aContext);
~DynamicsCompressorNode();
NS_DECL_ISUPPORTS_INHERITED
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()));
}
GainNode::~GainNode()
{
DestroyMediaStream();
}
JSObject*
GainNode::WrapObject(JSContext* aCx, JSObject* aScope)
{

View File

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

View File

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

View File

@ -13,6 +13,7 @@
#include "AudioProcessingEvent.h"
#include "WebAudioUtils.h"
#include "mozilla/Mutex.h"
#include "mozilla/unused.h"
#include "mozilla/PodOperations.h"
#include <deque>
@ -303,7 +304,10 @@ private:
// Steal the output buffers
nsRefPtr<ThreadSharedFloatArrayBufferList> output;
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
@ -357,6 +361,11 @@ ScriptProcessorNode::ScriptProcessorNode(AudioContext* aContext,
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
}
ScriptProcessorNode::~ScriptProcessorNode()
{
DestroyMediaStream();
}
JSObject*
ScriptProcessorNode::WrapObject(JSContext* aCx, JSObject* aScope)
{

View File

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