Commit Graph

40 Commits

Author SHA1 Message Date
Ehsan Akhgari
e5e74aa411 Bug 836599 - Part 12: Fix the lifetime management of the Web Audio graph in presence of OfflineAudioContexts; r=roc
Here we make the non-realtime graphs to go to sleep until they're shut down
from the main thread.  This allows us to use the common forced shutdown code
path in MediaStreamGraphImpl::RunThread.  We also need to delete the graph
object when the last message is dispatched to it.

In addition, we need to make sure that the AudioNodes also get released when
they're no longer needed.  To do this, we need for force the SelfReference of
AudioBufferSourceNodes to be released when the context is shut down, and also
trigger the destruction of the graph there.
2013-05-16 19:31:08 -04:00
Paul Adenot
e1cda4145a Bug 867104 - r=ehsan 2013-05-14 14:14:42 +02:00
Ehsan Akhgari
1ad083a454 Bug 871201 - Part 2: Implement AudioBufferSourceNode.gain; r=roc
X-Git-Commit-ID: db8923b372db098aa7a5dc1cbf42674310b61aef
X-Mailer: git-send-email

--HG--
rename : content/media/webaudio/test/test_audioBufferSourceNode.html => content/media/webaudio/test/test_audioBufferSourceNodeGain.html
rename : content/media/webaudio/test/test_audioBufferSourceNode.html => content/media/webaudio/test/test_delayNodeWithGainAlternate.html
extra : rebase_source : 2cc9259229209fa926970e78ddfc2ef5765f4ad5
2013-05-13 00:17:55 -04:00
Ehsan Akhgari
566ab60c82 Bug 865233 - Implement the ended event for AudioBufferSourceNode; r=roc 2013-05-06 14:22:01 -04:00
Ehsan Akhgari
cea007a9a4 Bug 865247 - Part 3: Add a ProduceAudioBlock overload to handle simultaneous processing of multiple input and output ports; r=roc
The ObtainInputBlock API is also changed to create an input block for one input
block at a time.  An array of these input blocks is then sent to
ProduceAudioBlock for processing, which generates an array of AudioChunks as
output.

Backwards compatibilty with existing engines is achieved by keeping the
existing ProduceAudioBlock API for use with engines with only a maximum of one
input and output port.
2013-05-05 11:48:45 -04:00
Paul Adenot
6e76c43d3d Bug 867203 - Part 2: Remove useless mPannerNode member in AudioBufferSourceNode. r=ehsan
--HG--
extra : rebase_source : dc94f66dbb4291226ab3f2c6c1ad8dc7aa4081e7
2013-05-02 17:04:49 +02:00
Ed Morley
bbd462e94e Backed out changeset 2938c2e1f7e7 (bug 867203) since part 1 had to be backed out for conflicts 2013-05-03 10:10:18 +01:00
Paul Adenot
5bc11a52c7 Bug 867203 - Part 2: Remove useless mPannerNode member in AudioBufferSourceNode. r=ehsan
--HG--
extra : rebase_source : 1b4bb979fd34dabc470ed8e59a40deaff0fa61a5
2013-05-02 17:04:49 +02:00
Ehsan Akhgari
df419ab210 Bug 867588 - Remove support for implementing Web Audio nodes which are not connected to the MediaStreams backend; r=roc 2013-05-01 11:09:07 -04:00
Boris Zbarsky
f75142b01d Bug 864727 part 5. Make all the WrapObject methods take a handle for the scope object. r=ms2ger 2013-04-25 12:29:54 -04:00
Paul Adenot
bd71531a02 Bug 864164 followup - Also send the params to the stream when setting the buffer. r=ehsan 2013-04-23 17:42:40 +02:00
Ehsan Akhgari
f3f4b81e3c Bug 864164 - Part 2: Send the AudioBufferSourceNode buffer parameter changes to the stream; r=padenot 2013-04-22 17:01:22 -04:00
Ehsan Akhgari
ba2650c05f Bug 864164 - Part 1: Send the AudioBufferSourceNode loop parameter changes to the stream; r=padenot 2013-04-22 00:22:33 -04:00
Ryan VanderMeulen
95d5080f59 Backed out changesets 3b8fdfefcf5e and ab61f99fb584 (bug 864083) for bustage on a CLOSED TREE. 2013-04-22 08:58:32 -04:00
Ehsan Akhgari
762d5ad5f6 Bug 864086 - Simplify AudioNode::DestroyMediaStream callers; r=padenot 2013-04-22 08:14:10 -04:00
Ehsan Akhgari
2d790c190b Bug 853298 - Part 1: Switch the ownership model of audio nodes to be based the cycle collector with wrapper caches; r=roc
Here is what this patch does:
 * Got rid of the JSBindingFinalized stuff
 * Made all nodes wrappercached
 * Started to hold a self reference while the AudioBufferSourceNode is playing back
 * Converted the input references to weak references
 * Got rid of all of the SetProduceOwnOutput and UpdateOutputEnded logic

The nodes are now collected by the cycle collector which calls into
DisconnectFromGraph which drops the references to other nodes and destroys the
media stream.  Note that most of the cycles that are now inherent in the
ownership model are between nodes and their AudioParams (that is, the cycles
not created by content.)
2013-04-14 21:52:55 -04:00
Paul Adenot
4acb2a4b45 Bug 853551 - Implement the doppler part of AudioPannerNode. r=ehsan 2013-04-11 14:47:57 +02:00
Ehsan Akhgari
9ce6df6da6 Bug 859595 - Implement the alternate names for AudioBufferSourceNode, AudioContext and AudioParam; r=bzbarsky
Let this be mentioned in our code base history that I wrote this patch
with tears in my eyes.  This is the saddest thing I've ever had to do to
Gecko. :(

--HG--
extra : rebase_source : 798e5b1dc8af51a399189dd05bc59ac077670820
2013-04-11 22:08:05 -04:00
Paul Adenot
d174da3ba1 Bug 854336 - Implement the playbackRate property of AudioBufferSourceNode. r=ehsan 2013-04-09 14:47:42 +02:00
Ehsan Akhgari
340cb86e25 Backed out changeset 92c2f24cb6ff (bug 854336) because of mochitest-1 crashes 2013-04-09 11:28:42 -04:00
Ehsan Akhgari
61bad51d84 Backed out changeset 9c080ffa640f (bug 853551) because of mochitest-1 crashes 2013-04-09 11:28:38 -04:00
Paul Adenot
e62b3f4e3d Bug 853551 - Implement the doppler part of AudioPannerNode. r=ehsan 2013-04-09 14:47:42 +02:00
Paul Adenot
e76e15c30c Bug 854336 - Implement the playbackRate property of AudioBufferSourceNode. r=ehsan 2013-04-09 14:47:42 +02:00
Ehsan Akhgari
6f3b411b8e Bug 859594 - Remove AudioSourceNode; r=bzbarsky 2013-04-08 22:45:02 -04:00
Ehsan Akhgari
d11f87563d Bug 856771 - Protect the source buffer nodes from leaking when their binding goes away without being played back; r=roc
This is the real part of the patch which was dropped from the previous commit.
2013-04-01 16:06:55 -04:00
Ehsan Akhgari
b01654e838 Bug 849713 - Part 1: Add DOM bindings for AudioBufferSourceNode loop attributes; r=roc 2013-03-10 12:56:14 -04:00
Ehsan Akhgari
bbfd0958e3 Backed out 4 changesets (bug 849713) since builds fail because of warnings as errors
Backed out changeset e811d4258d45 (bug 849713)
Backed out changeset 26aa58e87d5d (bug 849713)
Backed out changeset 9a6552161eff (bug 849713)
Backed out changeset 3551877d9b92 (bug 849713)

Landing on a CLOSED TREE
2013-03-11 16:14:42 -04:00
Ehsan Akhgari
5e3e5535d4 Bug 849713 - Part 1: Add DOM bindings for AudioBufferSourceNode loop attributes; r=roc 2013-03-10 12:56:14 -04:00
Ehsan Akhgari
438db37746 Bug 804387. Part 10: Add a mechanism for ensuring that we don't attempt to allocate an input port if the input node is not hooked up to MSG yet. r=roc
--HG--
extra : rebase_source : dc3a202cbb94c266f6df4b0c1b5247522fc76658
2013-01-25 16:39:51 -05:00
Robert O'Callahan
6d8b72a707 Bug 804387. Part 9: Update WebAudio implementation to integrate with AudioNodeStream. r=ehsan
This is a mega-patch that was too hard to disentangle. Here's what it does:
-- Create infrastructure around AudioNode::UpdateOutputEnded to detect
when a node can no longer produce any output. When that becomes true,
disconnect it from the AudioNode graph.
-- Have AudioNode implement JSBindingFinalized to use as input in
UpdateOutputEnded.
-- Give every AudioNode a MediaStream, and give every connection
a MediaInputPort.
-- Actually play the audio that reaches the AudioContext's destination node.
-- Force AudioContext to use the audio sample rate defined by MediaStreamGraph.
-- Fix AudioBufferSourceNode's start and stop methods to possibly throw and
take default 'when' parameters.
-- Create an AudioNodeStream for AudioBufferSourceNode and give it a
AudioBufferSourceNodeEngine that does what's needed. Set parameters for
this engine in the start() and stop() methods.
-- Create AudioBuffer::GetThreadSharedChannelsForRate, which is responsible
for stealing the contents of any JS array buffers, and bundling them up
into a thread-shared read-only buffer object which can be used as
part of an AudioChunk. This method will also be responsible for
resampling and caching as necessary.

--HG--
rename : content/media/MediaStreamGraph.cpp => content/media/MediaStreamGraphImpl.h
extra : rebase_source : 9fa0ec0efa304acd6513e427103d6339c78efa53
2013-02-05 12:07:25 +13:00
Ehsan Akhgari
598f705578 Backed out 14 changesets (bug 804387) because of Android M2 crashes
Backed out changeset 80e8530f06ea (bug 804387)
Backed out changeset 3de2271ad47f (bug 804387)
Backed out changeset 00f86870931c (bug 804837)
Backed out changeset 0e3f20927c50 (bug 804387)
Backed out changeset e6ef90038007 (bug 804387)
Backed out changeset 0ad6f67a95f9 (bug 804387)
Backed out changeset d0772aba503c (bug 804387)
Backed out changeset 5477b87ff03e (bug 804387)
Backed out changeset 1d7ec5adc49f (bug 804387)
Backed out changeset 11f4d740cd6c (bug 804387)
Backed out changeset e6254d8997ab (bug 804387)
Backed out changeset 372322f3264d (bug 804387)
Backed out changeset 53d5ed687612 (bug 804387)
Backed out changeset 000b88ac40a7 (bug 804387)
2013-02-05 01:29:28 -05:00
Ehsan Akhgari
147214ed9d Bug 804387. Part 10: Add a mechanism for ensuring that we don't attempt to allocate an input port if the input node is not hooked up to MSG yet. r=roc 2013-01-25 16:39:51 -05:00
Robert O'Callahan
41a1e70799 Bug 804837. Part 9: Update WebAudio implementation to integrate with AudioNodeStream. r=ehsan
This is a mega-patch that was too hard to disentangle. Here's what it does:
-- Create infrastructure around AudioNode::UpdateOutputEnded to detect
when a node can no longer produce any output. When that becomes true,
disconnect it from the AudioNode graph.
-- Have AudioNode implement JSBindingFinalized to use as input in
UpdateOutputEnded.
-- Give every AudioNode a MediaStream, and give every connection
a MediaInputPort.
-- Actually play the audio that reaches the AudioContext's destination node.
-- Force AudioContext to use the audio sample rate defined by MediaStreamGraph.
-- Fix AudioBufferSourceNode's start and stop methods to possibly throw and
take default 'when' parameters.
-- Create an AudioNodeStream for AudioBufferSourceNode and give it a
AudioBufferSourceNodeEngine that does what's needed. Set parameters for
this engine in the start() and stop() methods.
-- Create AudioBuffer::GetThreadSharedChannelsForRate, which is responsible
for stealing the contents of any JS array buffers, and bundling them up
into a thread-shared read-only buffer object which can be used as
part of an AudioChunk. This method will also be responsible for
resampling and caching as necessary.
2013-02-05 12:07:25 +13:00
Robert O'Callahan
52fa9f133a Bug 804837. Part 0: Rework the connection and input/output port logic for Web Audio nodes; r=ehsan
Here's what this patch does:
-- Makes AudioNodes mostly not use nsWrapperCache. AudioDestinationNode
still does.
-- Rename MaxNumberOfInputs/Outputs to NumberOfInputs/Outputs, and have them
default to 1 in AudioNode.
-- Allow any number of nodes to be connected to any given input/output port.
2013-01-23 19:50:18 -05:00
Ehsan Akhgari
a329381db8 Use #include guards in the web audio code, no bug 2012-10-30 17:39:38 -04:00
Ehsan Akhgari
7e2287d842 Bug 797150 - Rename AudioBufferSourceNode's noteOn and noteOff to start/stop; r=bzbarsky 2012-10-02 18:15:33 -04:00
Ehsan Akhgari
d7adf52afa Bug 792649 - Make the simplest of Web Audio tests work without audio playback for now; r=bzbarsky 2012-09-24 23:31:58 -04:00
Ehsan Akhgari
9d98e76815 Bug 792646 - Implement the skeleton of Web Audio source and destination nodes; r=bzbarsky
This is the bare minimum that one needs in order to get those interfaces
implemented.  The work to make the simplest of Web Audio test cases
actually pass will be done in bug 792649.
2012-09-21 11:33:03 -04:00
Ehsan Akhgari
b6f864617f Backout changeset 7d0776416955 (bug 792646) because of leaks 2012-09-20 19:47:07 -04:00
Ehsan Akhgari
bbd265ce79 Bug 792646 - Implement the skeleton of Web Audio source and destination nodes; r=bzbarsky
This is the bare minimum that one needs in order to get those interfaces
implemented.  The work to make the simplest of Web Audio test cases
actually pass will be done in bug 792649.
2012-09-20 18:05:38 -04:00