Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit 462cd28

Browse files
committed
Backed out changesets 3b8fdfefcf5e and ab61f99fb584 (bug 864083) for bustage on a CLOSED TREE.
1 parent 9a5abf4 commit 462cd28

16 files changed

Lines changed: 61 additions & 7 deletions

content/media/webaudio/AnalyserNode.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ AnalyserNode::AnalyserNode(AudioContext* aContext)
7777
AllocateBuffer();
7878
}
7979

80+
AnalyserNode::~AnalyserNode()
81+
{
82+
DestroyMediaStream();
83+
}
84+
8085
JSObject*
8186
AnalyserNode::WrapObject(JSContext* aCx, JSObject* aScope)
8287
{
@@ -238,6 +243,12 @@ AnalyserNode::ApplyBlackmanWindow(float* aBuffer, uint32_t aSize)
238243
}
239244
}
240245

246+
void
247+
AnalyserNode::DestroyMediaStream()
248+
{
249+
AudioNode::DestroyMediaStream();
250+
}
251+
241252
bool
242253
AnalyserNode::AllocateBuffer()
243254
{

content/media/webaudio/AnalyserNode.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class AnalyserNode : public AudioNode
1818
{
1919
public:
2020
explicit AnalyserNode(AudioContext* aContext);
21+
virtual ~AnalyserNode();
2122

2223
NS_DECL_ISUPPORTS_INHERITED
2324

@@ -28,6 +29,8 @@ class AnalyserNode : public AudioNode
2829
return true;
2930
}
3031

32+
virtual void DestroyMediaStream() MOZ_OVERRIDE;
33+
3134
void GetFloatFrequencyData(Float32Array& aArray);
3235
void GetByteFrequencyData(Uint8Array& aArray);
3336
void GetByteTimeDomainData(Uint8Array& aArray);

content/media/webaudio/AudioBuffer.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,17 @@ StealJSArrayDataIntoThreadSharedFloatArrayBufferList(JSContext* aJSContext,
165165
}
166166

167167
ThreadSharedFloatArrayBufferList*
168-
AudioBuffer::GetThreadSharedChannelsForRate(JSContext* aJSContext)
168+
AudioBuffer::GetThreadSharedChannelsForRate(JSContext* aJSContext, uint32_t* aRate,
169+
uint32_t* aLength)
169170
{
170171
if (!mSharedChannels) {
171172
// Steal JS data
172173
mSharedChannels =
173174
StealJSArrayDataIntoThreadSharedFloatArrayBufferList(aJSContext, mJSChannels);
174175
}
175176

177+
*aLength = mLength;
178+
*aRate = mSampleRate;
176179
return mSharedChannels;
177180
}
178181

content/media/webaudio/AudioBuffer.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,12 @@ class AudioBuffer MOZ_FINAL : public nsISupports,
8989
}
9090

9191
/**
92-
* Returns a ThreadSharedFloatArrayBufferList containing the sample data.
92+
* Returns a ThreadSharedFloatArrayBufferList containing the sample data
93+
* at aRate. Sets *aLength to the number of samples per channel.
9394
*/
94-
ThreadSharedFloatArrayBufferList* GetThreadSharedChannelsForRate(JSContext* aContext);
95+
ThreadSharedFloatArrayBufferList* GetThreadSharedChannelsForRate(JSContext* aContext,
96+
uint32_t* aRate,
97+
uint32_t* aLength);
9598

9699
// aContents should either come from JS_AllocateArrayBufferContents or
97100
// JS_StealArrayBufferContents.

content/media/webaudio/AudioBufferSourceNode.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -428,9 +428,11 @@ AudioBufferSourceNode::AudioBufferSourceNode(AudioContext* aContext)
428428

429429
AudioBufferSourceNode::~AudioBufferSourceNode()
430430
{
431+
//
431432
if (Context()) {
432433
Context()->UnregisterAudioBufferSourceNode(this);
433434
}
435+
DestroyMediaStream();
434436
}
435437

436438
JSObject*
@@ -455,10 +457,10 @@ AudioBufferSourceNode::Start(JSContext* aCx, double aWhen, double aOffset,
455457
return;
456458
}
457459

458-
float rate = mBuffer->SampleRate();
459-
int32_t lengthSamples = mBuffer->Length();
460+
uint32_t rate;
461+
uint32_t lengthSamples;
460462
nsRefPtr<ThreadSharedFloatArrayBufferList> data =
461-
mBuffer->GetThreadSharedChannelsForRate(aCx);
463+
mBuffer->GetThreadSharedChannelsForRate(aCx, &rate, &lengthSamples);
462464
double length = double(lengthSamples) / rate;
463465
double offset = std::max(0.0, aOffset);
464466
double endOffset = aDuration.WasPassed() ?

content/media/webaudio/AudioBufferSourceNode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class AudioBufferSourceNode : public AudioNode,
2020
{
2121
public:
2222
explicit AudioBufferSourceNode(AudioContext* aContext);
23+
virtual ~AudioBufferSourceNode();
2324

2425
virtual void DestroyMediaStream() MOZ_OVERRIDE
2526
{

content/media/webaudio/AudioNode.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ class AudioNode : public nsDOMEventTargetHelper,
7878
virtual ~AudioNode();
7979

8080
// This should be idempotent (safe to call multiple times).
81+
// This should be called in the destructor of every class that overrides
82+
// this method.
8183
virtual void DestroyMediaStream()
8284
{
8385
if (mStream) {

content/media/webaudio/BiquadFilterNode.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ BiquadFilterNode::BiquadFilterNode(AudioContext* aContext)
109109
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
110110
}
111111

112+
BiquadFilterNode::~BiquadFilterNode()
113+
{
114+
DestroyMediaStream();
115+
}
116+
112117
JSObject*
113118
BiquadFilterNode::WrapObject(JSContext* aCx, JSObject* aScope)
114119
{

content/media/webaudio/BiquadFilterNode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class BiquadFilterNode : public AudioNode
3333
{
3434
public:
3535
explicit BiquadFilterNode(AudioContext* aContext);
36+
~BiquadFilterNode();
3637

3738
NS_DECL_ISUPPORTS_INHERITED
3839
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(BiquadFilterNode, AudioNode)

content/media/webaudio/DynamicsCompressorNode.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ DynamicsCompressorNode::DynamicsCompressorNode(AudioContext* aContext)
127127
engine->SetSourceStream(static_cast<AudioNodeStream*> (mStream.get()));
128128
}
129129

130+
DynamicsCompressorNode::~DynamicsCompressorNode()
131+
{
132+
DestroyMediaStream();
133+
}
134+
130135
JSObject*
131136
DynamicsCompressorNode::WrapObject(JSContext* aCx, JSObject* aScope)
132137
{

0 commit comments

Comments
 (0)