Граф коммитов

60 Коммитов

Автор SHA1 Сообщение Дата
Karl Tomlinson 008976864a bug 1217625 add a means to schedule a callback after processing on the graph thread r=padenot
--HG--
extra : rebase_source : 65cdfcc2af43ea01cb1e6f4111098ac5d9f4239f
2015-10-22 18:47:57 +13:00
Karl Tomlinson bb8a93dc33 bug 1217625 remove unused MessageQueue() and document message queue thread access r=padenot
--HG--
extra : rebase_source : f28aa4521c0d9c7b323a9f280e5c3be367594b18
2015-09-17 17:08:10 +12:00
Karl Tomlinson aecb657d3f bug 1217625 remove declarations of undefined methods r=padenot
--HG--
extra : rebase_source : 415301098f40103aaa1fb5986c12101b8e8009b7
2015-10-22 16:46:06 +13:00
Robert O'Callahan 2c08de69e9 Bug 1215699. Ensure that AudioGraphDriver uses the MediaStreamGraph's AudioChannel. r=padenot 2015-10-23 16:43:15 +13:00
Sebastian Hengst e6d06af59f Backed out 2 changesets (bug 1215699, bug 1209994) for web platform failures. r=backout
Backed out changeset a8adf1f9d366 (bug 1209994)
Backed out changeset f5ed98fdc16e (bug 1215699)
2015-10-24 15:38:03 +02:00
Robert O'Callahan c97605eefe Bug 1215699. Ensure that AudioGraphDriver uses the MediaStreamGraph's AudioChannel. r=padenot
--HG--
extra : commitid : DMIEO7qauwZ
extra : rebase_source : e34a31e0adb0a9a6b3e4ff259d8ffdafe12e3c68
2015-10-23 16:43:15 +13:00
Nathan Froyd 01583602a9 Bug 1207245 - part 6 - rename nsRefPtr<T> to RefPtr<T>; r=ehsan; a=Tomcat
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout.  The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.

CLOSED TREE makes big refactorings like this a piece of cake.

 # The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
    xargs perl -p -i -e '
 s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
 s/nsRefPtr ?</RefPtr</g;   # handle declarations and variables
'

 # Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h

 # Handle nsRefPtr.h itself, a couple places that define constructors
 # from nsRefPtr, and code generators specially.  We do this here, rather
 # than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
 # things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
     mfbt/nsRefPtr.h \
     xpcom/glue/nsCOMPtr.h \
     xpcom/base/OwningNonNull.h \
     ipc/ipdl/ipdl/lower.py \
     ipc/ipdl/ipdl/builtin.py \
     dom/bindings/Codegen.py \
     python/lldbutils/lldbutils/utils.py

 # In our indiscriminate substitution above, we renamed
 # nsRefPtrGetterAddRefs, the class behind getter_AddRefs.  Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
    xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'

if [ -d .git ]; then
    git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
    hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi

--HG--
rename : mfbt/nsRefPtr.h => mfbt/RefPtr.h
2015-10-18 01:24:48 -04:00
Robert O'Callahan de2107e951 Bug 1189506. Make PlayVideo use GraphTimeToStreamTime/StreamTimeToGraphTime and remove StreamTimeToGraphTimeWithBlocking. r=karlt
--HG--
extra : commitid : AZ6bA7qp74U
extra : rebase_source : 0e34439af77309478725ae8679cb4a8298e0b180
2015-09-08 17:18:01 +12:00
Robert O'Callahan 85592c5fc0 Bug 1189506. Use mProcessedTime/mStateComputedTime in ProduceDataForStreamsBlockByBlock. karlt
--HG--
extra : commitid : 9tpkCW2vhWj
extra : rebase_source : 17d886e7b7a51834dec6ea53e41a7f7ef08ec58b
2015-09-16 16:24:10 +12:00
Robert O'Callahan 7395a6b7fd Bug 1189506. Use mStateComputedTime in some places instead of passing aTo. r=karlt
--HG--
extra : commitid : LR21taIGcGM
extra : rebase_source : c228ba660e8ced61a17e9ec52fb47fff0d07b4c5
2015-09-08 16:58:19 +12:00
Robert O'Callahan 2ca14cc805 Bug 1189506. Use mProcessedTime in some places instead of passing aFrom. r=karlt
--HG--
extra : commitid : 332ie8PhPom
extra : rebase_source : 7ff2eaff9a3a7b12208a06e99233aea523143fb9
2015-09-16 16:23:14 +12:00
Robert O'Callahan e57b277663 Bug 1189506. Remove INCLUDE_TRAILING_BLOCKED_INTERVAL from PlayVideo. r=karlt
A video frame whose timestamp is right at mStartBlocking should just be
rendered then, not delayed until the end of blocking.

--HG--
extra : commitid : 4rKTsHCwdQX
extra : rebase_source : fc6340972ba9eacaf084e3dd8f6b2344642c9224
2015-09-08 16:42:42 +12:00
Robert O'Callahan 5e38d30d6f Bug 1189506. Create StreamTimeToGraphTime/GraphTimeToStreamTime that don't take account of blocking, and call them from AudioNodeStream. r=karlt
--HG--
extra : commitid : KZL20bqIcTe
extra : rebase_source : 001476a097968e6fa382949ababbf6bdd5e4f76d
2015-09-16 16:35:16 +12:00
Robert O'Callahan 13179ae295 Bug 1189506. Rename StreamTimeToGraphTime/GraphTimeToStreamTime to ...WithBlocking. r=karlt
--HG--
extra : commitid : 77I6WKoXbJA
extra : rebase_source : b289cbcb99c4bc52d70c78a6195c992bb5ba7ac1
2015-09-08 15:41:00 +12:00
Robert O'Callahan 2a625e1dff Bug 1189506. Inline StreamNotifyOutput/StreamNotifyFinished. r=karlt
--HG--
extra : commitid : 6OpIJNpUxuj
extra : rebase_source : 9932d2688fd7ee64a5b267a69a1ba53cef6102f2
2015-09-05 00:45:14 +12:00
Robert O'Callahan cb09439d97 Bug 1189506. No need to pass aNextCurrentTime to UpdateCurrentTimeForStreams. r=karlt
--HG--
extra : commitid : LUQBrLpUxAE
extra : rebase_source : f170667a03f21b1a42852890b61bd43875edc47a
2015-09-05 00:42:53 +12:00
Robert O'Callahan 4b25e25cff Bug 1189506. Factor out code from OneIteration into helper methods. r=karlt
--HG--
extra : commitid : AvOJQUkXuiW
extra : rebase_source : c147f947d4c1823a9b558728c484c6cc65821b13
2015-09-05 00:26:48 +12:00
Robert O'Callahan d19d095ee1 Bug 1189506. Remove unused mFlushSourcesNow/mFlushSourcesOnNextIteration. r=karlt
--HG--
extra : commitid : KbKHmcvNA45
extra : rebase_source : 9b26eca9627096225e3d02b52392d8228108d45b
2015-09-05 00:20:17 +12:00
Robert O'Callahan d745ffaf22 Bug 1189506. Remove unused NotifyConsumptionChanged. r=karlt
--HG--
extra : commitid : 844LybDIKss
extra : rebase_source : 6a514c1ef0926e540e4d27a1e3f9561636c38ddb
2015-09-04 21:39:35 +12:00
Robert O'Callahan 888a6d633f Bug 1189506. Inline ComputeStreamBlockTime. r=karlt
--HG--
extra : commitid : 3poi1cOxeat
extra : rebase_source : 64d21bf4c6fe87a0093dfd0cc717c0fd97a93cf8
2015-09-09 01:23:31 +12:00
Robert O'Callahan b94329c0b7 Bug 1189506. Inline RecomputeBlocking. r=karlt
--HG--
extra : commitid : ECWfU6QgUqK
extra : rebase_source : 781d67d1d53da85992152cb3ea816ffa8e66c6cf
2015-09-04 19:42:11 +12:00
Robert O'Callahan d18eba5a82 Bug 1189506. Simplify blocking calculations based on the observation that once a stream starts blocking in a given processing interval, it must stay blocked. r=karlt
--HG--
extra : commitid : 2gcihxVXqlY
extra : rebase_source : dfb0bf716b8608a47fef25838c3fccdf132e0f82
2015-09-16 16:17:30 +12:00
Robert O'Callahan 49907deeb0 Bug 1189506. Remove MediaStream::mBlockInThisPhase. r=karlt
--HG--
extra : commitid : HnnHdwAwJZ0
extra : rebase_source : 403dd9e309f56f0aa84467f0652ac5b6a98c242d
2015-09-04 16:57:32 +12:00
Robert O'Callahan 4de38847f5 Bug 1189506. Simplify blocking code now that stream blocking decision are always independent of other streams. r=karlt
--HG--
extra : commitid : 7du3gdoRlpL
extra : rebase_source : ea22fe1b46a9a27bbab3fc250f688aa9dae53250
2015-09-16 16:15:55 +12:00
Robert O'Callahan bd5afc4b2e Bug 1189506. Make suspending/resuming streams more reusable. r=padenot
--HG--
extra : commitid : 9AmFobj0UO9
extra : rebase_source : dd1ff2f6e78c4052641f00dd004f19ba3e0d32fc
2015-09-03 23:54:00 +12:00
Robert O'Callahan 65cc97b0f3 Bug 1189506. Make AudioContext responsible for tracking all nodes which need to be suspended and resumed. r=padenot
This simplifies MediaStreamGraph by removing the need for it to be aware
of which AudioContext a stream belongs to.

This also makes it easier to reuse stream suspending for purposes other than
AudioContext suspend/resume.

--HG--
extra : commitid : 9EmNxlrjVFO
extra : rebase_source : fee4b35d09c8f5dec76e41840d81423cde619886
2015-09-16 16:15:21 +12:00
Robert O'Callahan a4974cf43a Bug 1201393. Create an iterator for MediaStreamGraph to iterate over all its streams. r=karlt
--HG--
extra : commitid : AYDeVMfjwxF
extra : rebase_source : 299db7189438a230e3f6c9123793bd3395a8784f
2015-09-08 16:18:15 +12:00
Paul Adenot 86793c21b6 Bug 1190676 - Part 3 - Make getting a MediaStreamGraph for a channel more explicit. r=roc
Hopefully this wil also prevent getting the wrong graph.

--HG--
extra : rebase_source : 3465c29807798d237c4d289b1a88845684373de5
2015-08-25 10:17:31 +02:00
Karl Tomlinson 69540d4cad bug 1197043 rename Add/RemoveStream to Add/RemoveStreamGraphThread r=padenot
--HG--
extra : rebase_source : ea3528d528a557f152347bdd8c05c1e84a3da76e
2015-08-12 11:29:35 +12:00
Karl Tomlinson c5e3e52551 bug 962719 remove unnecessary OneIteration() parameters aFrom/aTo r=padenot
--HG--
extra : rebase_source : 7ad313275ef00a0306c8b3b4775f0088f07c9031
2015-08-04 19:42:10 +12:00
Karl Tomlinson 257b2b6cc9 bug 1194558 correct time conversion for video frame timestamps r=roc
MediaTimeToSeconds() works fine for negative intervals

--HG--
extra : rebase_source : 8698761e28a54e6bd172a032c62e03b96ac66bfa
2015-08-13 17:07:49 +12:00
Karl Tomlinson 33732bace9 bug 962719 introduce mProcessedTime r=padenot
--HG--
extra : rebase_source : 4521e5c46d99ea6e97aed4d796211ce42820299e
2015-07-31 21:28:29 +12:00
Karl Tomlinson d894983b78 bug 962719 remove unnecessary OneIteration() parameter aStateFrom r=padenot
--HG--
extra : rebase_source : 22d67be26f4cface092cf13577035473b18b2b93
2015-07-31 17:39:35 +12:00
Karl Tomlinson 78739ed9f6 bug 962719 move mStateComputedTime to MediaStreamGraphImpl r=padenot
--HG--
extra : rebase_source : 3c4727a6397cc77800aa2676b17c3d85702cd64f
2015-08-13 16:23:17 +12:00
Karl Tomlinson 452d683354 bug 1190285 remove unused graph update indices r=roc
--HG--
extra : rebase_source : 8699f779b3e2e370815d563c248ac1c2d8bcba09
2015-07-31 21:36:05 +12:00
Karl Tomlinson ab1d3a75d1 bug 1190285 remove unused MediaStreamGraphImpl::GetAudioPosition() r=roc
GetAudioPosition() has been unused since revision 6eb9af883b3b.

--HG--
extra : rebase_source : 870f135c10d26efe6560ba3cf8acb145d4466d7b
2015-07-29 19:29:20 +12:00
Paul Adenot d95134e72e Bug 1156472 - Part 4 - Add a new MediaStreamGraph API to connect a MediaStream to a capture stream. r=jesup,roc 2015-07-24 14:28:16 +02:00
Wes Kocher 83b4188234 Backed out 14 changesets (bug 1156472) for test_getUserMedia_audioCapture.html failures on b2g emulator
Backed out changeset deec8eb18346 (bug 1156472)
Backed out changeset 0f5bec4c05ba (bug 1156472)
Backed out changeset 2dd83ac00bf9 (bug 1156472)
Backed out changeset abd4e47887f7 (bug 1156472)
Backed out changeset 4824d9874663 (bug 1156472)
Backed out changeset 12805598e6fa (bug 1156472)
Backed out changeset e2f0062a1f67 (bug 1156472)
Backed out changeset 99ef8e436a7f (bug 1156472)
Backed out changeset 65bbfc1546af (bug 1156472)
Backed out changeset 2ab4f16eaf0a (bug 1156472)
Backed out changeset 7f565685e20a (bug 1156472)
Backed out changeset 28c03c98cb2b (bug 1156472)
Backed out changeset d477cfba6e1d (bug 1156472)
Backed out changeset 9819fa56caa1 (bug 1156472)
2015-07-24 13:15:57 -07:00
Paul Adenot 6722383386 Bug 1156472 - Part 4 - Add a new MediaStreamGraph API to connect a MediaStream to a capture stream. r=jesup,roc 2015-07-24 14:28:16 +02:00
Carsten "Tomcat" Book 2b73aa4f63 Backed out 14 changesets (bug 1156472) for bustage on a CLOSED TREE
Backed out changeset 2ddbf85a42c0 (bug 1156472)
Backed out changeset 306d02e17081 (bug 1156472)
Backed out changeset 03598139f39a (bug 1156472)
Backed out changeset 4b1e6069b598 (bug 1156472)
Backed out changeset 6c588a5eaaec (bug 1156472)
Backed out changeset 8c98d7beaea7 (bug 1156472)
Backed out changeset fbf59fbb5875 (bug 1156472)
Backed out changeset 66479dd9eed9 (bug 1156472)
Backed out changeset c8502deeed33 (bug 1156472)
Backed out changeset 1a60ff1149a1 (bug 1156472)
Backed out changeset af1638279785 (bug 1156472)
Backed out changeset 8210276a98ca (bug 1156472)
Backed out changeset 13730e7c5997 (bug 1156472)
Backed out changeset 05acb71cf981 (bug 1156472)
2015-07-24 17:08:37 +02:00
Paul Adenot 4bc48d0134 Bug 1156472 - Part 4 - Add a new MediaStreamGraph API to connect a MediaStream to a capture stream. r=jesup,roc 2015-07-24 14:28:16 +02:00
Birunthan Mohanathas a8939590de Bug 1182996 - Fix and add missing namespace comments. rs=ehsan
The bulk of this commit was generated by running:

  run-clang-tidy.py \
    -checks='-*,llvm-namespace-comment' \
    -header-filter=^/.../mozilla-central/.* \
    -fix
2015-07-13 08:25:42 -07:00
Andrea Marchesini 66abb6c612 Bug 1163958 - Reduce the allocation in MediaStreamGraph - patch 1, r=padenot 2015-05-13 14:34:56 +01:00
Paul Adenot e32b404e54 Bug 1094764 - Implement AudioContext.suspend and friends. r=roc,ehsan
- Relevant spec text:
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-suspend-Promise
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-resume-Promise
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-close-Promise
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-state
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-onstatechange

- In a couple words, the behavior we want:
    - Closed context cannot have new nodes created, but can do decodeAudioData,
    and create buffers, and such.
    - OfflineAudioContexts don't support those methods, transitions happen at
    startRendering and at the end of processing. onstatechange is used to make
    this observable.
    - (regular) AudioContexts support those methods. The promises and
    onstatechange should be resolved/called when the operation has actually
    completed on the rendering thread.  Once a context has been closed, it
    cannot transition back to "running". An AudioContext switches to "running"
    when the audio callback start running, this allow authors to know how long
    the audio stack takes to start running.
    - MediaStreams that feed in/go out of a suspended graph should respectively
    not buffer at the graph input, and output silence
    - suspended context should not be doing much on the CPU, and we should try
    to pause audio streams if we can (this behaviour is the main reason we need
    this in the first place, for saving battery on mobile, and CPU on all
    platforms)

- Now, the implementation:
    - AudioNodeStreams are now tagged with a context id, to be able to operate
    on all the streams of a given AudioContext on the Graph thread without
    having to go and lock everytime to touch the AudioContext. This happens in
    the AudioNodeStream ctor. IDs are of course constant for the lifetime of the
    node.
    - When an AudioContext goes into suspended mode, streams for this
    AudioContext are moved out of the mStreams array to a second array,
    mSuspendedStreams. Streams in mSuspendedStream are not ordered, and are not
    processed.
    - The MSG will automatically switch to a SystemClockDriver when it finds
    that there are no more AudioNodeStream/Stream with an audio track. This is
    how pausing the audio subsystem and saving battery works. Subsequently, when
    the MSG finds that there are only streams in mSuspendedStreams, it will go
    to sleep (block on a monitor), so we save CPU, but it does not shut itself
    down. This is mostly not a new behaviour (this is what the MSG does since
    the refactoring), but is important to note.
    - Promises are gripped (addref-ed) on the main thread, and then shepherd
    down other threads and to the GraphDriver, if needed (sometimes we can
    resolve them right away). They move between threads as void* to prevent
    calling methods on them, as they are not thread safe. Then, the driver
    executes the operation, and when it's done (initializing and closing audio
    streams can take some time), we send the promise back to the main thread,
    and resolve it, casting back to Promise* after asserting we're back on the
    main thread. This way, we can send them back on the main thread once an
    operation has complete (suspending an audio stream, starting it again on
    resume(), etc.), without having to do bookkeeping between suspend calls and
    their result. Promises are not thread safe, so we can't move them around
    AddRef-ed.
    - The stream destruction logic now takes into account that a stream can be
    destroyed while not being in mStreams.
    - A graph can now switch GraphDriver twice or more per iteration, for
    example if an author goes suspend()/resume()/suspend() in the same script.
    - Some operation have to be done on suspended stream, so we now use double
    for-loop around mSuspendedStreams and mStreams in some places in
    MediaStreamGraph.cpp.
    - A tricky part was making sure everything worked at AudioContext
    boundaries.  TrackUnionStream that have one of their input stream suspended
    append null ticks instead.
    - The graph ordering algorithm had to be altered to not include suspended
    streams.
    - There are some edge cases (adding a stream on a suspended graph, calling
    suspend/resume when a graph has just been close()d).
2015-02-27 18:22:05 +01:00
Carsten "Tomcat" Book 31c4421faf Backed out changeset 7fc52c48e6e3 (bug 1094764) for mulet m-3 perma failure in /test_dataChannel_basicAudioVideo.html 2015-04-09 13:44:27 +02:00
Paul Adenot 70b6a9e143 Bug 1094764 - Implement AudioContext.suspend and friends. r=roc,ehsan
- Relevant spec text:
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-suspend-Promise
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-resume-Promise
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-close-Promise
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-state
    - http://webaudio.github.io/web-audio-api/#widl-AudioContext-onstatechange

- In a couple words, the behavior we want:
    - Closed context cannot have new nodes created, but can do decodeAudioData,
    and create buffers, and such.
    - OfflineAudioContexts don't support those methods, transitions happen at
    startRendering and at the end of processing. onstatechange is used to make
    this observable.
    - (regular) AudioContexts support those methods. The promises and
    onstatechange should be resolved/called when the operation has actually
    completed on the rendering thread.  Once a context has been closed, it
    cannot transition back to "running". An AudioContext switches to "running"
    when the audio callback start running, this allow authors to know how long
    the audio stack takes to start running.
    - MediaStreams that feed in/go out of a suspended graph should respectively
    not buffer at the graph input, and output silence
    - suspended context should not be doing much on the CPU, and we should try
    to pause audio streams if we can (this behaviour is the main reason we need
    this in the first place, for saving battery on mobile, and CPU on all
    platforms)

- Now, the implementation:
    - AudioNodeStreams are now tagged with a context id, to be able to operate
    on all the streams of a given AudioContext on the Graph thread without
    having to go and lock everytime to touch the AudioContext. This happens in
    the AudioNodeStream ctor. IDs are of course constant for the lifetime of the
    node.
    - When an AudioContext goes into suspended mode, streams for this
    AudioContext are moved out of the mStreams array to a second array,
    mSuspendedStreams. Streams in mSuspendedStream are not ordered, and are not
    processed.
    - The MSG will automatically switch to a SystemClockDriver when it finds
    that there are no more AudioNodeStream/Stream with an audio track. This is
    how pausing the audio subsystem and saving battery works. Subsequently, when
    the MSG finds that there are only streams in mSuspendedStreams, it will go
    to sleep (block on a monitor), so we save CPU, but it does not shut itself
    down. This is mostly not a new behaviour (this is what the MSG does since
    the refactoring), but is important to note.
    - Promises are gripped (addref-ed) on the main thread, and then shepherd
    down other threads and to the GraphDriver, if needed (sometimes we can
    resolve them right away). They move between threads as void* to prevent
    calling methods on them, as they are not thread safe. Then, the driver
    executes the operation, and when it's done (initializing and closing audio
    streams can take some time), we send the promise back to the main thread,
    and resolve it, casting back to Promise* after asserting we're back on the
    main thread. This way, we can send them back on the main thread once an
    operation has complete (suspending an audio stream, starting it again on
    resume(), etc.), without having to do bookkeeping between suspend calls and
    their result. Promises are not thread safe, so we can't move them around
    AddRef-ed.
    - The stream destruction logic now takes into account that a stream can be
    destroyed while not being in mStreams.
    - A graph can now switch GraphDriver twice or more per iteration, for
    example if an author goes suspend()/resume()/suspend() in the same script.
    - Some operation have to be done on suspended stream, so we now use double
    for-loop around mSuspendedStreams and mStreams in some places in
    MediaStreamGraph.cpp.
    - A tricky part was making sure everything worked at AudioContext
    boundaries.  TrackUnionStream that have one of their input stream suspended
    append null ticks instead.
    - The graph ordering algorithm had to be altered to not include suspended
    streams.
    - There are some edge cases (adding a stream on a suspended graph, calling
    suspend/resume when a graph has just been close()d).
2015-02-27 18:22:05 +01:00
Andreas Pehrson 9b19093204 Bug 1129263 - Part 6. Remove DOMMediaStream::TrackTypeHints. r=roc,jesup 2015-02-09 15:23:34 +08:00
Paul Adenot 90647a2ea3 Bug 1125804 - Remove the mixer callback when failing to open an audio stream when switching to an audio driver. r=jesup 2015-02-09 14:43:55 +01:00
Carsten "Tomcat" Book 6e54f0c718 Backed out changeset 0813db72fe3e (bug 1125804) for bustage on a CLOSED TREE 2015-02-09 16:26:28 +01:00
Paul Adenot 0427dd9fa1 Bug 1125804 - Remove the mixer callback when failing to open an audio stream when switching to an audio driver. r=jesup 2015-02-09 14:43:55 +01:00