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

59 Коммитов

Автор SHA1 Сообщение Дата
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 6abd4c751d Bug 1200099. Stop using a distinct mPlaybackStream to play a media stream through an HTMLMediaElement. r=jwwang
--HG--
extra : commitid : 3xsVxxZxINX
extra : rebase_source : 7c51fb071f9f303919ece13ff44d7a9a4cc438a9
2015-08-31 23:33:53 +12:00
Paul Adenot a5e8e37e15 Bug 901633 - Part 13 - Teach the resampler at the input of the MSG to dynamically change its channel count if needed. r=jesup
When the audio comes from a PeerConnection, we don't know how many channels the
audio will have, and it can change anyways.

--HG--
extra : rebase_source : b4d78217db012d2d94ede6d6724209b6046fbb29
2015-09-01 14:25:48 +02: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 330a9459ea bug 1197043 move AudioNodeStream creation to stream class r=padenot
--HG--
extra : rebase_source : 2e399f5d59b057a0cca6a423481ac86f6fa2c507
2015-08-12 11:26:24 +12:00
Karl Tomlinson 4415ffebb7 bug 1197043 introduce MediaStreamGraph::AddStream() r=padenot
--HG--
extra : rebase_source : a6a5412a33709f349ab5a4c6db0801887c9d423c
2015-08-12 11:46:56 +12:00
Karl Tomlinson cd9d54d222 bug 1197043 remove unnecessary aSampleRate parameter for AudioNodeStream creation r=padenot
--HG--
extra : rebase_source : 63ba0bf5008a9acd0a268051cbcde43ba5bfad0a
2015-08-12 11:04:13 +12:00
Karl Tomlinson 7894dd5b6a bug 1198100 remove mNotificationMainThreadRunnable r=baku
If AddMainThreadListener() were called multiple times after
mFinishedNotificationSent is set then we'd get some extra NotifyRunnables but
NotifyMainThreadListeners() clears mMainThreadListeners anyway so we still get
only one notification per listener.

mNotificationMainThreadRunnable is an unnecessary optimization, so better not
to add storage to every MediaStream.

--HG--
extra : rebase_source : 7f0441d95134f1456058f668db30fb40bd9475c1
2015-08-24 11:54:24 +12:00
Karl Tomlinson fb9954a77c bug 962719 update stream state to processed time after processing r=padenot
Notifications are now up to date with processing, and
MediaStream::GetCurrentTime() now returns "the main-thread's view of how much
data has been processed by this stream", as documented.

--HG--
extra : rebase_source : 90eb894f7b5e7cf56c3635e68716fd2514494f7e
2015-07-29 19:32:10 +12:00
Karl Tomlinson 3ff62a58db bug 962719 provide video frames to the container as soon as available r=roc
This does not affect the target time of the video frames, but may mean that more
frames are displayed.

--HG--
extra : rebase_source : f804f2f58ce5ce2668e047f83adf614d9043f3a2
2015-08-14 14:16:57 +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 9005394c64 bug 1190285 unvirtualize MediaStream::AdvanceTimeVaryingValuesToCurrentTime() r=roc
--HG--
extra : rebase_source : 6a1fad0a4db718ede4256b91689250ebbfa97cfa
2015-08-03 12:28:19 +12:00
Karl Tomlinson 4ca41a6841 bug 1190285 move GraphTime definition to avoid GraphDriver.h includes r=padenot
--HG--
extra : rebase_source : 18cc48140505eff426483c08c1dd4c9c3c0aa909
2015-07-23 11:48:47 +12:00
Karl Tomlinson fdab75f3a4 bug 1190285 remove unused HaveEnoughBuffered r=padenot
--HG--
extra : rebase_source : 87bfcfb201f57e441adaefccf379c04cad0a2736
2015-07-31 18:54:05 +12:00
Karl Tomlinson 20bf85f5cd bug 1190285 remove unused DispatchWhenNotEnoughBuffered r=padenot
--HG--
extra : rebase_source : 68f91e0b11ecd0c70d6848c7a505b0208c885d0b
2015-07-31 18:46:04 +12:00
Nicholas Nethercote 87b80f8c66 Bug 1188745 - Rename nsTArray::SizeOfExcludingThis() as ShallowSizeOfExcludingThis(). r=froydnj.
This makes it clearer that, unlike how SizeOf*() functions usually work, this
doesn't measure any children hanging off the array.

And do likewise for nsTObserverArray.

--HG--
extra : rebase_source : 6a8c8d8ffb53ad51b5773afea77126cdd767f149
2015-07-28 23:24:24 -07: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
Bobby Holley 04eaf4c167 Bug 1184634 - Move various includes into the mozilla namespace. r=gerald
I did my a quick best-effort pass to fix up the most egregious ordering
problems. I left some big pre-existing messes alone.
2015-07-16 22:23:18 -07:00
Bobby Holley 997543e6ba Bug 1184634 - Rename MediaTaskQueue to TaskQueue. r=gerald 2015-07-16 22:23:06 -07: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
Daosheng Mu 18ad922f74 Bug 987498 - Part 4 -Implement SetImageSize on DOMHwMediaStream. r=roc 2015-06-15 03:11:00 +02:00
Eric Rahm 34f99e4b4c Bug 1163201 - Part 1: Remove instances of #ifdef PR_LOGGING in dom/. r=froydnj
PR_LOGGING is now always defined, we can remove #ifdefs checking for it.
2015-05-14 10:13:23 -07:00
Andrea Marchesini f556d65776 Bug 1163958 - Reduce the allocation in MediaStreamGraph - patch 2, r=padenot 2015-05-13 14:35:10 +01:00
Andrea Marchesini 66abb6c612 Bug 1163958 - Reduce the allocation in MediaStreamGraph - patch 1, r=padenot 2015-05-13 14:34:56 +01:00
Andrea Marchesini f92e639185 Bug 1161946 - MainThreadMediaStreamListener should be notified just when the stream is finished - patch 2, r=padenot 2015-05-11 15:07:38 +01:00
Andrea Marchesini aed237ffe3 Bug 1161946 - MainThreadMediaStreamListener should be notified just when the stream is finished - patch 1, r=padenot 2015-05-11 15:07:24 +01:00
Andrea Marchesini e666f02521 Bug 1156632 - Remove unused forward class declarations - patch 2 - dom/media, dom/indexedDB, dom/svg, r=ehsan 2015-04-22 08:29:17 +02: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
Bobby Holley 72ad334118 Bug 1151656 - Use TailDispatch for the MDSM's task queue. r=mattwoodrow 2015-04-08 21:33:21 -07:00
Ehsan Akhgari 883849ee32 Bug 1145631 - Part 1: Replace MOZ_OVERRIDE and MOZ_FINAL with override and final in the tree; r=froydnj
This patch was automatically generated using the following script:

function convert() {
echo "Converting $1 to $2..."
find . \
       ! -wholename "*/.git*" \
       ! -wholename "obj-ff-dbg*" \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert MOZ_OVERRIDE override
convert MOZ_FINAL final
2015-03-21 12:28:04 -04:00
Daniel Holbert c4a0036a5d Bug 1143823 part 1: Make MediaStream::RunAfterPendingUpdates() take already_AddRefed instead of a nsRefPtr. r=karlt 2015-03-17 09:29:17 -07:00
Bobby Holley 53ad5b2a9c Bug 1135424 - Switch the MDSM to a task queue. r=mattwoodrow 2015-03-16 14:38:44 -07:00
Phil Ringnalda 345a4eca93 Back out 3 changesets (bug 1135424) on suspicion of causing frequent hangs in test_playback.html on mochitest-e10s
CLOSED TREE

Backed out changeset 584d91ffdf88 (bug 1135424)
Backed out changeset d86806ea63f4 (bug 1135424)
Backed out changeset e52401d30a67 (bug 1135424)
2015-03-12 23:05:11 -07:00
Bobby Holley 0563f41ef7 Bug 1135424 - Switch the MDSM to a task queue. r=mattwoodrow 2015-03-12 17:54:35 -07:00
Andreas Pehrson 9b19093204 Bug 1129263 - Part 6. Remove DOMMediaStream::TrackTypeHints. r=roc,jesup 2015-02-09 15:23:34 +08:00
Andreas Pehrson f400cd176d Bug 1129263 - Part 1. Add an event to MediaStreamListener for handling atomically added tracks. r=roc,jesup 2015-02-06 17:38:11 +08:00
Randell Jesup b155c873e1 Bug 1116925: queue track adds for getUserMedia and cleanup r=roc 2015-02-19 12:04:26 -05:00
Andreas Pehrson e5681a1719 Bug 1124139 - Don't use mPlaybackStream for CameraPreview. r=jesup
From db346795ad1a0ae33e7496df893288eb1fbf7699 Mon Sep 17 00:00:00 2001
---
 dom/camera/CameraPreviewMediaStream.h |  1 +
 dom/html/HTMLMediaElement.cpp         | 29 +++++++++++++++++------------
 dom/html/HTMLMediaElement.h           |  6 +++++-
 dom/media/MediaStreamGraph.h          |  2 ++
 4 files changed, 25 insertions(+), 13 deletions(-)
2015-01-22 09:27:24 +01:00
Ehsan Akhgari 31a966ecd6 Bug 1117261 - Mark virtual overridden functions as MOZ_OVERRIDE in DOM media code; r=rillian 2015-01-08 23:11:30 -05:00
Robert O'Callahan 85cb99cc25 Bug 1109644. Part 1: Create SourceMediaStream::GetEndOfAppendedData to reliably track how much data has been appended to a SourceMediaStream's track. r=jesup
--HG--
extra : rebase_source : 385ad9b704d35df7b70a75afe807e363e0929476
2014-12-30 14:54:01 +13:00
Paul Adenot 1497d8eae0 Bug 1108455 - r=jesup 2014-12-09 11:37:01 +01:00
Ehsan Akhgari 550e972d13 Bug 1109694 - Fix more bad implicit constructors in DOM; r=baku 2014-12-10 17:49:09 -05:00
Robert O'Callahan fc7ad562ff Bug 1061046. Part 21: Remove rate parameter from StartNonRealtimeProcessing. r=karlt 2014-11-19 23:21:38 +13:00
Robert O'Callahan 407c1d5331 Bug 1061046. Part 19: Eliminate TrackTicks in favour of StreamTime. r=karlt 2014-09-18 17:20:43 +12:00