Commit Graph

50 Commits

Author SHA1 Message Date
Karl Tomlinson
9c5ba748c6 b=932400 change stream ordering to get feedback DelayNode output before supplying input r=roc
Previously downstream nodes from DelayNodes in cycles sometimes received stale
output from the previous MSG iteration.

Also, if two cycles share a common path, they will now *both* be treated as
cycles, either by muting or by enforcing minimum delay.  Previously, marking
one cycle first could prevent detection of other cycles in the same SCC.

--HG--
extra : rebase_source : 82892c538c5ce514165b5f975474df15b99e3d2b
2014-07-17 12:55:55 +12:00
Benoit Girard
cb397e6eb5 Bug 1037691 - Fix instances where refcounted classes expose a public destructor. r=ehsan,bent,mayhemer,jrmuizel 2014-07-15 11:37:45 -04:00
Eric Rahm
1e1f443953 Bug 967817 - Finish memory reporters for Web Audio. r=roc, njn 2014-04-13 11:08:10 -07:00
Karl Tomlinson
4b2a8a221e b=987976 rename ComputeFinalOuputChannelCount ComputedNumberOfChannels to match spec r=padenot
to remove any implication that the function might be for calculating
the number of output channels for an AudioNode.

--HG--
extra : transplant_source : %D9%12%BB%23n%92%EB%F7%1Df%11%3F%04%B4z%606%ADT%3A
2014-04-01 10:26:02 +13:00
Kyle Huey
a5ae9a4da3 Bug 967364: Pass already_AddRefed by reference instead of by value. r=bsmedberg 2014-03-15 12:00:17 -07:00
Karl Tomlinson
0c268a0156 b=932400 rename ProduceOutput to ProcessInput r=roc
--HG--
extra : transplant_source : m0%91%3D%99%EB.%20%28%BD%B4%F4%A5%3F%0C%13%22%BA%FD%06
2014-03-05 10:53:55 +13:00
Karl Tomlinson
5149f3ce4d b=857610 handle DelayNode channel count changes and separate buffer read and write r=padenot
The basic idea is to write out the signal that came in with the same number of
channels as it had when it came in.  Things get a bit more complicated when
one output block may be derived from more than one input block, each having
different numbers of channels.  When this happens, the input blocks with fewer
channels are upmixed, so as not to lose (or distort) any signal in the block
with more channels.

HRTFPanner no longer uses exponential decay (with time constant 20ms) for
delay changes, but a smoother linear transition during cross-fade time (~45ms).

--HG--
rename : content/media/webaudio/DelayProcessor.cpp => content/media/webaudio/DelayBuffer.cpp
rename : content/media/webaudio/DelayProcessor.h => content/media/webaudio/DelayBuffer.h
extra : rebase_source : 18453d631779cd7d0672b5325e110b107ab4237d
2014-03-05 10:06:57 +13:00
Karl Tomlinson
69a2052a86 b=913854 pass start time as double parameter and subsample align r=padenot
The subsample alignment of resampled buffers provides seamless playback even
when buffer durations are not an integer number of track ticks.

--HG--
extra : rebase_source : 0fcd52e8a9560de881aa73931cf22a02f984d748
2014-02-27 11:45:04 +13:00
Karl Tomlinson
f7531c3dfa b=972678 move stream time methods from WebAudioUtils to AudioNodeStream r=padenot
Trying to clear up which stream parameter is which.

--HG--
extra : transplant_source : D%94%23%60M%82%7E%D8%FF%8A%D3%C8%9F%25%D6%7E%EA%19%80%E9
2014-02-17 09:46:56 +13:00
Robert O'Callahan
5a93b0d89d Bug 952893. Part 1: Block the AudioDestinationNode when it's the only node in the AudioContext. r=padenot,karlt 2014-01-16 00:08:20 +13:00
Ryan VanderMeulen
733397089c Backed out changesets ac4e6f145b9a, 91c572ac5ee1, f501606dc1d3, and 15fc5d1cb10e (bug 952893) for test failures on a CLOSED TREE. 2014-01-29 14:34:08 -05:00
Robert O'Callahan
1ac533d470 Bug 952893. Part 1: Block the AudioDestinationNode when it's the only node in the AudioContext. r=padenot 2014-01-16 00:08:20 +13:00
Paul Adenot
76d630d993 Bug 952893 - Backout changesets 780cba0f9f59, 887fe3a09c3d and fb04a4252ea3 for bad commit message, DONTBUILD. 2014-01-29 17:36:56 +01:00
Robert O'Callahan
c16d623fd5 Bug 952389. Part 1: Block the AudioDestinationNode when it's the only node in the AudioContext. r=padenot 2014-01-16 00:08:20 +13:00
Robert O'Callahan
d235857918 Bug 943461. Part 5: Don't allow a stream to finish before it has produced output up to mStateComputedTime. r=padenot
--HG--
extra : rebase_source : 9bf003c246b63b1dd64665024533fda74a8e1fa4
2013-12-06 09:23:57 +13:00
Ehsan Akhgari
8ab03a33ee Bug 939582 - Part 1: Rework the NSPR logging in content/media to use different macro names for different logs; r=doublec 2013-11-20 22:02:42 -05:00
Ehsan Akhgari
7092b111ba Backed out 2 changesets (bug 939582) because of build bustage
Backed out changeset 2079c828645a (bug 939582)
Backed out changeset af472e590088 (bug 939582)
2013-11-20 21:41:40 -05:00
Ehsan Akhgari
258944b4d5 Bug 939582 - Part 1: Rework the NSPR logging in content/media to use different macro names for different logs; r=doublec 2013-11-20 21:11:54 -05:00
Karl Tomlinson
a529c5bdb3 b=910174 add DelayNode's tail-time reference as soon as the engine receives sound r=ehsan
This removes the dependence on AllInputsFinished() which didn't return true
for many input types.

The DelayProcessor is no longer continuously reset (bug 921457) and the
reference is now correctly added again when all inputs are finished and then
new inputs are connected.

--HG--
extra : rebase_source : b85c62305a6fcfce57bd40a11edaeaaf2a63c188
2013-10-01 09:50:04 +13:00
Paul Adenot
a1241e028e Bug 881959 - Mute WebAudio nodes that are part of a cycle that contains no DelayNode, and make cycles work. r=ehsan
--HG--
extra : rebase_source : d4bc378128cf15f8d8395b45b4443ca6b06c5bd2
2013-08-26 19:19:36 +02:00
Ed Morley
e41d9b2e38 Backed out changeset fb89f2090779 (bug 881959) 2013-09-17 17:14:55 +01:00
Paul Adenot
e1cb07fb80 Bug 881959 - Mute WebAudio nodes that are part of a cycle that contains no DelayNode, and make cycles work. r=ehsan
--HG--
extra : rebase_source : a92e90a2fb08f784d3a1b7d0701a5dd20595c4ef
2013-08-26 19:19:36 +02:00
Ehsan Akhgari
3b48889d78 Bug 912702 - Minimize the #includes in content/media; r=roc 2013-09-05 16:25:17 -04:00
Ehsan Akhgari
22fac42fb0 Backed out changeset 2f15518f566e (bug 912702) because of B2G JB Emulator build bustage
--HG--
extra : rebase_source : 6c01ad3bc2f91b0e7e3edab84aedbfe064310a8b
2013-09-05 13:29:38 -04:00
Ehsan Akhgari
2ce2ec0cdb Bug 912702 - Minimize the #includes in content/media; r=roc 2013-09-04 17:58:14 -04:00
Robert O'Callahan
b6ff20d959 Bug 856361. Part 3: Refactor AudioNodeStream to create ComputeFinalOuputChannelCount, AccumulateInputChunk and AdvanceOutputSegment, and make AudioNodeStreams be treated as always consumed by the MediaStreamGraph. r=ehsan
--HG--
extra : rebase_source : ef176c629f16a00042d2a281bfffbe75c31d6002
2013-07-24 22:11:35 +12:00
Ehsan Akhgari
0e800932a4 Bug 884632 - Optimize MediaStreamGraphImpl::PrepareUpdatesToMainThreadState in order to only include AudioNodeStreams that the main thread is interested in; r=roc 2013-06-18 23:09:44 -04:00
Josh Matthews
e9baa064b2 Bug 865257 - Implement MediaStreamAudioDestinationNode. r=ehsan,roc 2013-05-21 15:17:47 -04:00
Ehsan Akhgari
d0bcd953b7 Bug 873553 - Part 2: Teach each AudioNodeStream about its sampling rate, and store the value inside AudioContext; r=roc
--HG--
extra : rebase_source : beed6a6f965acdff307b7d4861d5f336c224d498
2013-05-24 13:09:29 -04:00
Ehsan Akhgari
a0b78d269a Bug 865251 - Implement WaveShaperNode; r=roc 2013-05-14 00:12:30 -04:00
Nathan Froyd
9fd3f3a56a Bug 869073 - make WebIDL enums enum classes instead of plain enums; r=bz 2013-05-06 15:28:13 -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
Ehsan Akhgari
e0262ff6ca Bug 866434 - Part 3: Mix in the value generated by AudioNode inputs to AudioParams when getting their values during audio processing; r=roc 2013-05-01 23:12:59 -04:00
Ehsan Akhgari
670b091738 Bug 866434 - Part 2: Give each AudioParam that is connected to an AudioNode an AudioNodeStream; r=roc
These MediaStreams are used as a way to down-mix the input AudioChunks, and
also as a way to get proper stream processing ordering.  The MediaStream for
the source AudioNode is an input to these streams, and these streams in turn
are inputs to the MediaStream that the AudioNode that owns the AudioParam owns.
This way, the Media Streams Graph processing code will order the streams so
that by the time that the MediaStream for a given node is processed, all of the
MediaStreams belonging to the AudioNode(s) feeding into the AudioParam have
been processed.

This has a tricky side-effect that those streams also being considered when
determining the input block for the AudioNodeStream belonging to the
AudioParam's owner AudioNode.  In order to fix that, we simply special case
those streams and make AudioNodeStream::ObtainInputBlock ignore them.
2013-05-01 21:02:31 -04:00
Ehsan Akhgari
1d867d0441 Bug 865234 - Part 5: Don't mark a stream as finished when there are streams following it; r=roc
Without this patch, if we have an AudioBufferSourceNode which is finished, the
nodes following it will not see its mLastChunk.  This breaks the Web Audio
block processing logic since we rely on the assumption that the buffer for the
last output of AudioBufferSourceNode is correctly passed to the following
engines.
2013-04-29 16:58:19 -04:00
Ehsan Akhgari
9c26dbc68f Bug 865234 - Part 2: Send the channel mixing information to the AudioNodeStream; r=roc 2013-04-27 19:25:23 -04:00
Ehsan Akhgari
51c4aebe76 Bug 834513 - Part 3: Implement ScriptProcessorNode; r=roc 2013-04-13 21:37:04 -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
Ehsan Akhgari
9c134ee172 Bug 856771 - Protect the source buffer nodes from leaking when their binding goes away without being played back; r=roc 2013-04-01 16:06:55 -04:00
Robert O'Callahan
3490a03af3 Bug 850587. Part 2: Make NotifyHasCurrentData fire when a stream would be able to produce data if it was not blocked. r=jesup
Also removes NotifyHasCurrentData's boolean parameter; we just fire this
once and treat a stream that has once had current data as always
having current data (since we block a stream that would advance
beyond its available data).
2013-03-21 00:19:39 +13:00
Ehsan Akhgari
60ab45fb40 Bug 851966 - Only store the produced AudioChunks for AudioNodeStreams that will result in playback; r=roc 2013-03-17 20:37:47 -04:00
Ehsan Akhgari
023850e72d Bug 849916 - Part 1: Make it possible to send ThreeDPoint objects as commands to the MSG thread; r=padenot 2013-03-12 11:16:42 -04:00
Ryan VanderMeulen
f6ea8893e6 Backed out changesets 4ee69256f8f2, 2becc603eeb8, and afad1c17015e (bug 849916) for bustage on a CLOSED TREE. 2013-03-12 16:16:30 -04:00
Ehsan Akhgari
d7560401d9 Bug 849916 - Part 1: Make it possible to send ThreeDPoint objects as commands to the MSG thread; r=padenot 2013-03-12 11:16:42 -04:00
Ehsan Akhgari
0dd0c24483 Bug 836076 - Part 2: Make it possible to send AudioEventTimeline objects as commands to the MSG thread; r=roc 2013-01-28 17:42:27 -05:00
Robert O'Callahan
5d60f92b6f Bug 804387. Part 8: Create AudioNodeEngine and AudioNodeStream. r=jesup
Modifies MediaStreamGraph to always advance its time by a multiple of
WEBAUDIO_BLOCK_SIZE.

--HG--
extra : rebase_source : 99524b09edd4ac0e1bc6607f2ba14925bc2f11c2
2013-01-14 11:46:57 +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
b2bde00794 Backed out 3 changesets (bug 836076) becasue bug 804387 is getting backed out
Backed out changeset d567b1bb34ad (bug 836076)
Backed out changeset 51f7c9e31f9a (bug 836076)
Backed out changeset 901c735274bc (bug 836076)

--HG--
rename : content/media/AudioEventTimeline.h => content/media/webaudio/AudioEventTimeline.h
2013-02-05 01:28:38 -05:00
Ehsan Akhgari
d65f82d1a1 Bug 836076 - Part 2: Make it possible to send AudioEventTimeline objects as commands to the MSG thread; r=roc 2013-01-28 17:42:27 -05:00
Robert O'Callahan
85199704c0 Bug 804387. Part 8: Create AudioNodeEngine and AudioNodeStream. r=jesup
Modifies MediaStreamGraph to always advance its time by a multiple of
WEBAUDIO_BLOCK_SIZE.
2013-01-14 11:46:57 +13:00