Commit Graph

54 Commits

Author SHA1 Message Date
Karl Tomlinson
3adc2d90c5 b=986901 don't assume that DelayNode maxDelayTime is greater than 1 block r=padenot
Also apply DelayNode maxDelayTime before rounding to ticks.

--HG--
extra : transplant_source : %F1i%02%2A%ED%98%95%C9u%60%0B%1A%81A%C2%8E%FB%F3%FA%D5
2014-03-31 18:32:34 +13:00
Karl Tomlinson
2bb6ffd9ed b=932400 rename ProduceAudioBlock to ProcessBlock r=padenot
--HG--
rename : content/media/webaudio/DelayProcessor.cpp => content/media/webaudio/DelayBuffer.cpp
extra : rebase_source : ebdc7404c8d27e3a24098f21a7752df529bb44c9
2014-03-05 10:09:49 +13:00
Karl Tomlinson
79c3c64319 b=932400 allow DelayNodeEngine to produce output before input r=padenot
--HG--
extra : rebase_source : 73991e2d1438862e05bb5a299a6f90935c4a51b2
2014-03-05 10:06:57 +13:00
Karl Tomlinson
0935b39ced 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
0e1f8fec08 b=857610 optimize delay clamping a little, by clamping in only one place r=padenot
--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 : 48d60cb003205a550504bcd0042ef73fc8727f97
2014-03-03 12:49:46 +13:00
Karl Tomlinson
5b63b395f3 b=857610 rename DelayProcessor to DelayBuffer r=padenot
--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 : be71a5abbcf067f513fbaf2967745e80383d285f
2014-03-03 12:49:45 +13:00
Karl Tomlinson
e5e86b04cc b=923301 use MediaStreamGraph to dispatch the other PlayingRefChangeHandlers too r=trivial
--HG--
extra : transplant_source : %A6%9F%81%40%AF%EE_EU%03%BCvZ%0B%1CE%7F%8C%80F
2013-10-25 14:05:41 +13:00
Karl Tomlinson
10fe0bff6e b=923301 use MediaStreamGraph to dispatch PlayingRefChangeHandlers r=roc
This reduces the number of events dispatched to the main thread
and ensures these run in order with other pending updates.

--HG--
extra : transplant_source : %5E%235%DEz%EB%7D%C6%C7%F8%AF%A3%84%1F%F9%5B%87D%B3%13
2013-10-25 12:12:33 +13:00
Karl Tomlinson
2755fe230b b=923301 skip delay processing when nothing is buffered and input is null r=roc
--HG--
extra : transplant_source : %60%1B%88Z%BD%9AoAI%92%FA%B1%E4%A1%EFg%2A%FE%05%8F
2013-10-25 12:12:13 +13:00
Karl Tomlinson
2852848da2 b=923301 send only one release message when delay buffer is drained r=roc
--HG--
extra : transplant_source : %C7%8Ag%B2%C52X%A2%96%D1%8E%BB%15%E4%15%CC%1D%1Er%B8
2013-10-25 12:12:13 +13:00
Karl Tomlinson
1f3810b405 b=923301 remove now-unnecessary node-type templating of PlayingRefChangeHandler r=roc
--HG--
extra : transplant_source : %0A%BA%C9%1D%1AX%0Dxg9%3BL%1F%98%BE%98%87%20o%3A
2013-10-25 12:12:12 +13:00
Karl Tomlinson
2f6f210f83 b=923301 remove now-unnecessary AcceptPlayingRefRelease r=roc
--HG--
extra : transplant_source : %7B%21%18%B17%16%7B%9E%9F%B3%23%17%FD%3DZ%FC%5C%0F%D3%8C
2013-10-25 12:11:24 +13:00
Karl Tomlinson
343e110e70 b=923301 keep a tail-time reference on DelayNode until *after* the last non-silent block has been produced r=roc
This gives a downstream node a chance to take a tail-time reference when it
receives the last non-silent block from the DelayNode.

--HG--
extra : transplant_source : %B5%7C%E1%F6%00%D4W%D6%A22%0C%F2%0A%2C%60%F2%18%C6%A5%B8
2013-10-25 12:11:24 +13:00
Karl Tomlinson
2900c28a02 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
Karl Tomlinson
ba487756fb b=921675 use maximum instead of current delay for tail time because delay can increase faster than time passes r=ehsan
--HG--
extra : rebase_source : b74864829e5fa0cdfbd555d93d2c71dd656f2258
2013-10-01 09:50:03 +13:00
Paul Adenot
14628109ab Bug 881959 - Clamp the DelayNode.delayTime to 128/AudioContext.sampleRate when in a cycle. r=ehsan
--HG--
extra : rebase_source : 7cf8945371bb6ff169ad61a8ccdda0ece36b5e83
2013-09-02 15:15:24 +02:00
Paul Adenot
7c95321d67 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
6a8bde5bc5 Backed out changeset fb89f2090779 (bug 881959) 2013-09-17 17:14:55 +01:00
Ed Morley
14cbc2101a Backed out changeset 2aa38a1a2b06 (bug 881959) 2013-09-17 17:14:42 +01:00
Paul Adenot
65b02e466e Bug 881959 - Clamp the DelayNode.delayTime to 128/AudioContext.sampleRate when in a cycle. r=ehsan
--HG--
extra : rebase_source : 5282e468fbe411a455f65bc0d22b16163db4bd7a
2013-09-02 15:15:24 +02:00
Paul Adenot
f4a229fbf9 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
f678926c6d Bug 905409 - Minimize the Web Audio #includes; r=roc 2013-08-15 15:44:14 -04:00
Karl Tomlinson
e37987a35d b=815643 Refactor DelayNodeEngine delay processing into a shareable class r=ehsan
--HG--
extra : rebase_source : e25ff3e490c2cbce5ed7cdf9419ccc2850ea16e5
2013-08-09 10:07:49 +12:00
Robert O'Callahan
56ffa35ac0 Bug 890248. Avoid situations where adding a new input to an AudioNode can race with a message telling the AudioNode to release its mPlayingRef. r=ehsan
--HG--
extra : rebase_source : 913683cc16a717bf73f9976292af965aba6b7758
2013-07-05 13:49:53 +12:00
Ehsan Akhgari
a6a3a001eb Bug 890072 - Part 1: Factor out PlayingRefChanged from DelayNodeEngine; r=roc 2013-07-03 21:37:39 -04:00
Ehsan Akhgari
9810921acc Backed out 2 changesets (bug 890072) for possible leaks
Backed out changeset 5e815a5ca50d (bug 890072)
Backed out changeset 7151ab8ff70c (bug 890072)
2013-07-03 22:17:25 -04:00
Ehsan Akhgari
83be9599d6 Bug 890072 - Part 1: Factor out PlayingRefChanged from DelayNodeEngine; r=roc 2013-07-03 21:37:39 -04:00
Ehsan Akhgari
2df7ddb555 Backed out 2 changesets (bug 890072) because gcc sucks
Backed out changeset ff011e5b3655 (bug 890072)
Backed out changeset 0ed650741dc5 (bug 890072)
2013-07-03 20:36:06 -04:00
Ehsan Akhgari
45cec38f9b Bug 890072 - Part 1: Factor out PlayingRefChanged from DelayNodeEngine; r=roc 2013-07-03 20:20:06 -04:00
Masatoshi Kimura
af2068ecf9 Bug 859022 - Remove the MSVC exemption for FAIL_ON_WARNINGS in content/media. r=roc 2013-06-27 20:30:41 +09:00
Ehsan Akhgari
dc0358066e Bug 878407 - Allocate a large enough delay buffer when the delay time fraction value is less than 0.5; r=roc 2013-06-02 09:25:46 -04:00
Ehsan Akhgari
1e0789da84 Bug 878014 - Use double precision when sampling the delay AudioParam; r=roc 2013-06-01 03:02:46 -04:00
Ehsan Akhgari
d822bd3533 Bug 877523 - Correctly handle small maximum delay values for DelayNode; r=roc 2013-05-30 20:52:26 -04:00
Ehsan Akhgari
57a5f849b0 Bug 873553 - Part 7: Port DelayNode to use the stream's sampling rate; r=roc
--HG--
extra : rebase_source : db35f08edab8a54c6c60a0ead2d7afed59d2c360
2013-05-24 13:10:44 -04:00
Ehsan Akhgari
6c146d9103 Bug 873553 - Part 4: Pass the sampling rate to the engine in SetTimelineParameter; r=roc
--HG--
extra : rebase_source : aa574757e9791eafd8c6825328fc4e2f65479f34
2013-05-24 13:10:08 -04:00
Ehsan Akhgari
497b7175f9 Bug 872635 - Drop the DelayNode's self-reference right on time, to make sure that DelayNodes don't leak with OfflineAudioContexts; r=roc 2013-05-15 20:51:47 -04:00
Ehsan Akhgari
bc394ffb2a 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
b040e0542f Bug 865234 - Part 1: Add DOM bindings for the channel mixing attributes; r=roc 2013-04-27 18:44:50 -04:00
Boris Zbarsky
9c1973b5d2 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
Ehsan Akhgari
99da564fc5 Bug 864709 - Part 2: Protect accesses to AudioNodeEngine::mNode using a lock; r=padenot 2013-04-24 12:13:45 -04:00
Ehsan Akhgari
27a0b514b9 Bug 864605 - Take the input chunk's volume into account in the nodes that buffer their input; r=padenot
--HG--
extra : rebase_source : 7590e20cbb1ac347f3988aaa5dbc586012747221
2013-04-22 21:59:51 -04:00
Ehsan Akhgari
f25c4a0e7e Bug 834513 - Part 2: Add an AudioNode weak pointer to the AudioNodeEngine class; r=roc 2013-04-20 12:16:28 -04:00
Ehsan Akhgari
ff2971de14 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
7304bd7736 Bug 859602 - Remove AudioParam.minValue/maxValue; r=bzbarsky 2013-04-08 21:57:54 -04:00
Ehsan Akhgari
c7fbc3c48c Bug 853721 - Part 2: Hook up DelayNode to the media streams graph and implement delaying of incoming audio; r=roc 2013-03-25 08:34:59 -04:00
Ehsan Akhgari
f39e83f1de Bug 836076 - Part 3: Make AudioParams call back into their owning node when they're modified; r=roc
We need this in order to update the MediaStreamGraph thread when an
AudioParam changes.  This enables each AudioParam to be registered with
a callback from its owner node, so that the owner node can have custom
processing code for each AudioParam's mutation.
2013-01-28 18:59:29 -05:00
Ehsan Akhgari
748ef8700c 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
ded3e498cd Bug 836076 - Part 3: Make AudioParams call back into their owning node when they're modified; r=roc
We need this in order to update the MediaStreamGraph thread when an
AudioParam changes.  This enables each AudioParam to be registered with
a callback from its owner node, so that the owner node can have custom
processing code for each AudioParam's mutation.
2013-01-28 18:59:29 -05:00
Robert O'Callahan
fc44cd635c 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
Andrew McCreight
890cc3b945 Bug 815454 - Clean up Traverse/Unlink of web audio. r=smaug 2012-11-27 15:08:22 -08:00