Closed Bug 1652884 Opened 3 months ago Closed 2 months ago

Allow front-end to mute/unmute all camera tracks

Categories

(Core :: WebRTC: Audio/Video, enhancement, P2)

All
Android
enhancement

Tracking

()

RESOLVED FIXED
81 Branch
Tracking Status
firefox81 --- fixed

People

(Reporter: jib, Assigned: jib)

References

(Blocks 2 open bugs)

Details

Attachments

(15 files, 2 obsolete files)

47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review

From bug 1564451 comment 20 (android):

  1. Temporarily mute/unmute camera's video track(s) when app goes into/out of background, for parity with Chrome for Android. Test it here.

For #1 we need to expose a platform API to mute/unmute all camera tracks, since nothing does that yet AFAIK.

This enables a use case where MediaManager disables a MediaStreamTrack's input
track, and all listeners of NotifyEnabledStateChanged on the MediaStreamTrack's
main track will get notified.

There can be 1 input track for N MediaStreamTracks, so this simplifies how many
tracks will need to be tracked by MediaManager and explicitly disabled in the
graph.

Depends on D86072.

Before this patch, re-enabling a camera track would first render an old frame
(from when it got disabled), then when the camera has started anew, render the
new frames.

With the patch, the black frame from disabling remains until the camera has
started and is sending new frames.

Depends on D86925

Attachment #9169715 - Attachment is obsolete: true
Attachment #9169716 - Attachment is obsolete: true

Previously it listened for them on main thread, as notified by the
MediaStreamTrack it was transmitting directly. With this patch it
listens for them through the TrackListener in the graph, and will
get notified when any track prior to the MediaStreamTrack's main
track in the graph changes enabled state as well.

Depends on D86926.

This allows newly created window listeners, in MediaManager instances where the
cameras have already been muted, to get the right state.

Depends on D86931

This affects HTMLMediaElement and MediaRecorder, which are the only implementors
of NotifyEnabledStateChanged.

This use case is going to become more common as users will be able to globally
mute cameras before requesting one. While muted, the camera is off and no frames
will flow. The old logic for showing disabled video tracks as black relied on a
frame appearing that could be turned black.

With this patch in this case we will create a frame if none has been seen yet,
and it will have a hardcoded size.

Depends on D87127

Blocks: 1659809

r=karlt

This follows on the same logic ForwardedInputTrack is using.

Note that this patch was reviewed out of band at
https://phabricator.services.mozilla.com/D86925#inline-497307

Depends on D86925

Blocks: 1660002
Attachment #9170846 - Attachment description: Bug 1652884 - Mute cameras while fenix is in the background. → Bug 1652884 - Be ready to mute cameras while mobile is in the background
Pushed by jbruaroey@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/763f39eb5c13
Add observer messages to mute/unmute all camera tracks. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/9010365ffa66
Test browser muting/unmuting of camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/76b4abccd61b
Test that mute/unmute track events fire from UA muting camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/32f4aae2b5fe
Test combination of disabling track & muting camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/e0b1266231bf
Rename MediaTrack::SetEnabled to SetDisabledTrackMode. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/e6ed13952b67
Produce black on UA camera mute. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/438cce7456fb
Mute new cam tracks on start when window has cameras UA muted, to avoid JS circumventing mute. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/6b37b60b6662
Propagate disabled mode to consumer tracks in the graph. r=karlt
https://hg.mozilla.org/integration/autoland/rev/eaa171643447
Maintain direct listener disabled state also when adding/removing to source tracks.
https://hg.mozilla.org/integration/autoland/rev/569ff85dfc2e
Keep a disabled video track black until new frames arrive after enabling. r=jib
https://hg.mozilla.org/integration/autoland/rev/6f5833203763
Make MediaPipelineTransmit listen for track enabled state changes from the graph. r=jib
https://hg.mozilla.org/integration/autoland/rev/8e67fe040e4a
Add state for camera muting to MediaManager. r=jib
https://hg.mozilla.org/integration/autoland/rev/658ba8f39abe
Make disabled tracks, that haven't seen a frame, black. r=jib
https://hg.mozilla.org/integration/autoland/rev/28c4e8c373f0
Be ready to mute cameras while mobile is in the background r=agi,pehrsons

Backed out 14 changesets (bug 1652884) for VideoFrameConverter related failures.

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&group_state=expanded&searchStr=gtest&fromchange=476067c405f470fa624b89c1015ff84dd55104d3&tochange=e8054b77177ab72fe86d6f2038f1c23cc44af0b8&selectedTaskRun=UAZLLMv4ThmnSNXru1xX2w.0

Backout link: https://hg.mozilla.org/integration/autoland/rev/e8054b77177ab72fe86d6f2038f1c23cc44af0b8

Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=313475583&repo=autoland&lineNumber=29421

[task 2020-08-19T19:23:32.727Z] 19:23:32     INFO -  TEST-START | VideoFrameConverterTest.BlackOnDisable
[task 2020-08-19T19:23:32.944Z] 19:23:32  WARNING -  TEST-UNEXPECTED-FAIL | VideoFrameConverterTest.BlackOnDisable | Expected: (TimeStamp::Now() - now) > (TimeDuration::FromMilliseconds(1100)), actual: 218.005 ms vs 1100 ms @ /builds/worker/checkouts/gecko/dom/media/gtest/TestVideoFrameConverter.cpp:178
[task 2020-08-19T19:23:32.944Z] 19:23:32  WARNING -  TEST-UNEXPECTED-FAIL | VideoFrameConverterTest.BlackOnDisable | Expected: (frames[0].second - now) > (future1 - now), actual: 0.088467 ms vs 100 ms @ /builds/worker/checkouts/gecko/dom/media/gtest/TestVideoFrameConverter.cpp:182
[task 2020-08-19T19:23:32.944Z] 19:23:32  WARNING -  TEST-UNEXPECTED-FAIL | VideoFrameConverterTest.BlackOnDisable | Expected: (frames[1].second - now) > (future1 - now + TimeDuration::FromSeconds(1)), actual: 217.99 ms vs 1100 ms @ /builds/worker/checkouts/gecko/dom/media/gtest/TestVideoFrameConverter.cpp:186
[task 2020-08-19T19:23:32.944Z] 19:23:32  WARNING -  TEST-UNEXPECTED-FAIL | VideoFrameConverterTest.BlackOnDisable | The difference between frames[1].first.timestamp_us() and frames[0].first.timestamp_us() + ((1000000L * 3) / 2) is 1282000, which exceeds 1000000L / 2, where
[task 2020-08-19T19:23:32.945Z] 19:23:32     INFO -  frames[1].first.timestamp_us() evaluates to 663720000,
[task 2020-08-19T19:23:32.945Z] 19:23:32     INFO -  frames[0].first.timestamp_us() + ((1000000L * 3) / 2) evaluates to 665002000, and
[task 2020-08-19T19:23:32.945Z] 19:23:32     INFO -  1000000L / 2 evaluates to 500000. @ /builds/worker/checkouts/gecko/dom/media/gtest/TestVideoFrameConverter.cpp:190
[task 2020-08-19T19:23:32.945Z] 19:23:32  WARNING -  TEST-UNEXPECTED-FAIL | VideoFrameConverterTest.BlackOnDisable | test completed (time: 218ms)
Flags: needinfo?(jib)
Pushed by jbruaroey@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/de7537bda499
Add observer messages to mute/unmute all camera tracks. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/8f60e3af2a19
Test browser muting/unmuting of camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/876dbad27af5
Test that mute/unmute track events fire from UA muting camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/84e82e25929f
Test combination of disabling track & muting camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/b9f419aed12d
Rename MediaTrack::SetEnabled to SetDisabledTrackMode. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/74a2f5a9eea2
Produce black on UA camera mute. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/dd6edf636659
Mute new cam tracks on start when window has cameras UA muted, to avoid JS circumventing mute. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/605c1ac3081a
Propagate disabled mode to consumer tracks in the graph. r=karlt
https://hg.mozilla.org/integration/autoland/rev/9e9511e32cdd
Maintain direct listener disabled state also when adding/removing to source tracks.
https://hg.mozilla.org/integration/autoland/rev/991e8975f03d
Keep a disabled video track black until new frames arrive after enabling. r=jib
https://hg.mozilla.org/integration/autoland/rev/c99c32323c76
Make MediaPipelineTransmit listen for track enabled state changes from the graph. r=jib
https://hg.mozilla.org/integration/autoland/rev/20a10128b5e1
Add state for camera muting to MediaManager. r=jib
https://hg.mozilla.org/integration/autoland/rev/fc697986d538
Make disabled tracks, that haven't seen a frame, black. r=jib
https://hg.mozilla.org/integration/autoland/rev/f83951453e94
Be ready to mute cameras while mobile is in the background r=agi,pehrsons

Backed out 14 changesets (bug 1652884) for test_peerConnection_trackDisabling.html failures.

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&group_state=expanded&selectedTaskRun=XnrsYIetSgeUDhJpFpuW8Q.0&fromchange=a1d9f08caae73299fd017c2c341cf7cf146a28e4&searchStr=mda&tochange=0ba7afbc4eee63f52955c97412dac0b1a7191248

Backout link: https://hg.mozilla.org/integration/autoland/rev/0ba7afbc4eee63f52955c97412dac0b1a7191248

Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=313483606&repo=autoland&lineNumber=53892

...
[task 2020-08-19T21:54:05.674Z] 21:54:05     INFO - Run step 49: CHECK_ASSUMPTIONS
[task 2020-08-19T21:54:05.674Z] 21:54:05     INFO - TEST-PASS | dom/media/tests/mochitest/test_peerConnection_trackDisabling.html | pcLocal should have one media element 
[task 2020-08-19T21:54:05.674Z] 21:54:05     INFO - TEST-PASS | dom/media/tests/mochitest/test_peerConnection_trackDisabling.html | pcRemote should have one media element 
[task 2020-08-19T21:54:05.675Z] 21:54:05     INFO - TEST-PASS | dom/media/tests/mochitest/test_peerConnection_trackDisabling.html | pcLocal should have one stream 
[task 2020-08-19T21:54:05.675Z] 21:54:05     INFO - TEST-PASS | dom/media/tests/mochitest/test_peerConnection_trackDisabling.html | pcRemote should have one stream 
[task 2020-08-19T21:54:05.675Z] 21:54:05     INFO - Run step 50: CHECK_VIDEO
[task 2020-08-19T21:54:05.675Z] 21:54:05     INFO - Checking local video enabled
[task 2020-08-19T21:54:05.676Z] 21:54:05     INFO - Checking remote video enabled
[task 2020-08-19T21:54:05.676Z] 21:54:05     INFO - Disabling original
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - Checking local video disabled
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - Checking remote video disabled
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - Buffered messages finished
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - TEST-UNEXPECTED-FAIL | dom/media/tests/mochitest/test_peerConnection_trackDisabling.html | Test timed out. 
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - SimpleTest.ok@https://example.com/tests/SimpleTest/SimpleTest.js:417:16
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - reportError@https://example.com/tests/SimpleTest/TestRunner.js:143:22
[task 2020-08-19T21:54:05.677Z] 21:54:05     INFO - TestRunner._checkForHangs@https://example.com/tests/SimpleTest/TestRunner.js:165:18
[task 2020-08-19T21:54:05.678Z] 21:54:05     INFO - GECKO(2005) | [Child 2062: Main Thread]: E/signaling [main|PeerConnectionImpl] PeerConnectionImpl.cpp:2754: GetStats: Found no pipelines matching selector.
[task 2020-08-19T21:54:06.547Z] 21:54:06     INFO - {"EMEInfo":{"keySystem":"","sessionsInfo":""},"compositorDroppedFrames":0,"decoder":{"PlayState":"","channels":0,"containerType":"","hasAudio":false,"hasVideo":false,"instance":"","rate":0,"reader":{"audioChannels":0,"audioDecoderName":"","audioFramesDecoded":0,"audioRate":0,"audioState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"audioType":"","frameStats":{"droppedCompositorFrames":0,"droppedDecodedFrames":0,"droppedSinkFrames":0},"videoDecoderName":"","videoHardwareAccelerated":false,"videoHeight":0,"videoNumSamplesOutputTotal":0,"videoNumSamplesSkippedTotal":0,"videoRate":0,"videoState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"videoType":"","videoWidth":0},"resource":{"cacheStream":{"cacheSuspended":false,"channelEnded":false,"channelOffset":0,"loadID":0,"streamLength":0}},"stateMachine":{"audioCompleted":false,"audioRequestStatus":"","clock":0,"decodedAudioEndTime":0,"decodedVideoEndTime":0,"duration":0,"isPlaying":false,"mediaSink":{"audioSinkWrapper":{"audioEnded":false,"audioSink":{"audioEnded":false,"hasErrored":false,"isPlaying":false,"isStarted":false,"lastGoodPosition":0,"outputRate":0,"playbackComplete":false,"startTime":0,"written":0},"isPlaying":false,"isStarted":false},"decodedStream":{"audioQueueFinished":false,"audioQueueSize":0,"data":{"audioFramesWritten":0,"haveSentFinishAudio":false,"haveSentFinishVideo":false,"instance":"","lastVideoEndTime":0,"lastVideoStartTime":0,"nextAudioTime":0,"streamAudioWritten":0,"streamVideoWritten":0},"instance":"","lastAudio":0,"lastOutputTime":0,"playing":0,"startTime":0},"videoSink":{"endPromiseHolderIsEmpty":false,"finished":false,"hasVideo":false,"isPlaying":false,"isStarted":false,"size":0,"videoFrameEndTime":0,"videoSinkEndRequestExists":false}},"mediaTime":0,"playState":0,"sentFirstFrameLoadedEvent":false,"state":"","stateObj":{"isPrerolling":false},"videoCompleted":false,"videoRequestStatus":""}}}
[task 2020-08-19T21:54:06.668Z] 21:54:06     INFO - {"EMEInfo":{"keySystem":"","sessionsInfo":""},"compositorDroppedFrames":0,"decoder":{"PlayState":"","channels":0,"containerType":"","hasAudio":false,"hasVideo":false,"instance":"","rate":0,"reader":{"audioChannels":0,"audioDecoderName":"","audioFramesDecoded":0,"audioRate":0,"audioState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"audioType":"","frameStats":{"droppedCompositorFrames":0,"droppedDecodedFrames":0,"droppedSinkFrames":0},"videoDecoderName":"","videoHardwareAccelerated":false,"videoHeight":0,"videoNumSamplesOutputTotal":0,"videoNumSamplesSkippedTotal":0,"videoRate":0,"videoState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"videoType":"","videoWidth":0},"resource":{"cacheStream":{"cacheSuspended":false,"channelEnded":false,"channelOffset":0,"loadID":0,"streamLength":0}},"stateMachine":{"audioCompleted":false,"audioRequestStatus":"","clock":0,"decodedAudioEndTime":0,"decodedVideoEndTime":0,"duration":0,"isPlaying":false,"mediaSink":{"audioSinkWrapper":{"audioEnded":false,"audioSink":{"audioEnded":false,"hasErrored":false,"isPlaying":false,"isStarted":false,"lastGoodPosition":0,"outputRate":0,"playbackComplete":false,"startTime":0,"written":0},"isPlaying":false,"isStarted":false},"decodedStream":{"audioQueueFinished":false,"audioQueueSize":0,"data":{"audioFramesWritten":0,"haveSentFinishAudio":false,"haveSentFinishVideo":false,"instance":"","lastVideoEndTime":0,"lastVideoStartTime":0,"nextAudioTime":0,"streamAudioWritten":0,"streamVideoWritten":0},"instance":"","lastAudio":0,"lastOutputTime":0,"playing":0,"startTime":0},"videoSink":{"endPromiseHolderIsEmpty":false,"finished":false,"hasVideo":false,"isPlaying":false,"isStarted":false,"size":0,"videoFrameEndTime":0,"videoSinkEndRequestExists":false}},"mediaTime":0,"playState":0,"sentFirstFrameLoadedEvent":false,"state":"","stateObj":{"isPrerolling":false},"videoCompleted":false,"videoRequestStatus":""}}}
[task 2020-08-19T21:54:06.786Z] 21:54:06     INFO - {"EMEInfo":{"keySystem":"","sessionsInfo":""},"compositorDroppedFrames":0,"decoder":{"PlayState":"","channels":0,"containerType":"","hasAudio":false,"hasVideo":false,"instance":"","rate":0,"reader":{"audioChannels":0,"audioDecoderName":"","audioFramesDecoded":0,"audioRate":0,"audioState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"audioType":"","frameStats":{"droppedCompositorFrames":0,"droppedDecodedFrames":0,"droppedSinkFrames":0},"videoDecoderName":"","videoHardwareAccelerated":false,"videoHeight":0,"videoNumSamplesOutputTotal":0,"videoNumSamplesSkippedTotal":0,"videoRate":0,"videoState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"videoType":"","videoWidth":0},"resource":{"cacheStream":{"cacheSuspended":false,"channelEnded":false,"channelOffset":0,"loadID":0,"streamLength":0}},"stateMachine":{"audioCompleted":false,"audioRequestStatus":"","clock":0,"decodedAudioEndTime":0,"decodedVideoEndTime":0,"duration":0,"isPlaying":false,"mediaSink":{"audioSinkWrapper":{"audioEnded":false,"audioSink":{"audioEnded":false,"hasErrored":false,"isPlaying":false,"isStarted":false,"lastGoodPosition":0,"outputRate":0,"playbackComplete":false,"startTime":0,"written":0},"isPlaying":false,"isStarted":false},"decodedStream":{"audioQueueFinished":false,"audioQueueSize":0,"data":{"audioFramesWritten":0,"haveSentFinishAudio":false,"haveSentFinishVideo":false,"instance":"","lastVideoEndTime":0,"lastVideoStartTime":0,"nextAudioTime":0,"streamAudioWritten":0,"streamVideoWritten":0},"instance":"","lastAudio":0,"lastOutputTime":0,"playing":0,"startTime":0},"videoSink":{"endPromiseHolderIsEmpty":false,"finished":false,"hasVideo":false,"isPlaying":false,"isStarted":false,"size":0,"videoFrameEndTime":0,"videoSinkEndRequestExists":false}},"mediaTime":0,"playState":0,"sentFirstFrameLoadedEvent":false,"state":"","stateObj":{"isPrerolling":false},"videoCompleted":false,"videoRequestStatus":""}}}
[task 2020-08-19T21:54:06.895Z] 21:54:06     INFO - {"EMEInfo":{"keySystem":"","sessionsInfo":""},"compositorDroppedFrames":0,"decoder":{"PlayState":"","channels":0,"containerType":"","hasAudio":false,"hasVideo":false,"instance":"","rate":0,"reader":{"audioChannels":0,"audioDecoderName":"","audioFramesDecoded":0,"audioRate":0,"audioState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"audioType":"","frameStats":{"droppedCompositorFrames":0,"droppedDecodedFrames":0,"droppedSinkFrames":0},"videoDecoderName":"","videoHardwareAccelerated":false,"videoHeight":0,"videoNumSamplesOutputTotal":0,"videoNumSamplesSkippedTotal":0,"videoRate":0,"videoState":{"demuxEOS":0,"demuxQueueSize":0,"drainState":0,"hasDecoder":false,"hasDemuxRequest":false,"hasPromise":false,"lastStreamSourceID":0,"needInput":false,"numSamplesInput":0,"numSamplesOutput":0,"pending":0,"queueSize":0,"timeTreshold":0,"timeTresholdHasSeeked":false,"waitingForData":false,"waitingForKey":false,"waitingPromise":false},"videoType":"","videoWidth":0},"resource":{"cacheStream":{"cacheSuspended":false,"channelEnded":false,"channelOffset":0,"loadID":0,"streamLength":0}},"stateMachine":{"audioCompleted":false,"audioRequestStatus":"","clock":0,"decodedAudioEndTime":0,"decodedVideoEndTime":0,"duration":0,"isPlaying":false,"mediaSink":{"audioSinkWrapper":{"audioEnded":false,"audioSink":{"audioEnded":false,"hasErrored":false,"isPlaying":false,"isStarted":false,"lastGoodPosition":0,"outputRate":0,"playbackComplete":false,"startTime":0,"written":0},"isPlaying":false,"isStarted":false},"decodedStream":{"audioQueueFinished":false,"audioQueueSize":0,"data":{"audioFramesWritten":0,"haveSentFinishAudio":false,"haveSentFinishVideo":false,"instance":"","lastVideoEndTime":0,"lastVideoStartTime":0,"nextAudioTime":0,"streamAudioWritten":0,"streamVideoWritten":0},"instance":"","lastAudio":0,"lastOutputTime":0,"playing":0,"startTime":0},"videoSink":{"endPromiseHolderIsEmpty":false,"finished":false,"hasVideo":false,"isPlaying":false,"isStarted":false,"size":0,"videoFrameEndTime":0,"videoSinkEndRequestExists":false}},"mediaTime":0,"playState":0,"sentFirstFrameLoadedEvent":false,"state":"","stateObj":{"isPrerolling":false},"videoCompleted":false,"videoRequestStatus":""}}}
[task 2020-08-19T21:54:06.912Z] 21:54:06     INFO - GECKO(2005) | MEMORY STAT | vsize 2937MB | residentFast 279MB | heapAllocated 55MB
[task 2020-08-19T21:54:06.914Z] 21:54:06     INFO - GECKO(2005) | [Child 2062: Main Thread]: E/signaling [main|PeerConnectionImpl] PeerConnectionImpl.cpp:2754: GetStats: Found no pipelines matching selector.
[task 2020-08-19T21:54:06.936Z] 21:54:06     INFO - TEST-OK | dom/media/tests/mochitest/test_peerConnection_trackDisabling.html | took 305609ms
Blocks: 1660144
Pushed by jbruaroey@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/3479d6d4720e
Add observer messages to mute/unmute all camera tracks. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/149ca1a09c5a
Test browser muting/unmuting of camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/714a543f5a2b
Test that mute/unmute track events fire from UA muting camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/a7bce4685014
Test combination of disabling track & muting camera. r=padenot
https://hg.mozilla.org/integration/autoland/rev/1c059a524a70
Rename MediaTrack::SetEnabled to SetDisabledTrackMode. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/048e722589de
Produce black on UA camera mute. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/b16a8e267157
Mute new cam tracks on start when window has cameras UA muted, to avoid JS circumventing mute. r=pehrsons
https://hg.mozilla.org/integration/autoland/rev/cca31f035f18
Propagate disabled mode to consumer tracks in the graph. r=karlt
https://hg.mozilla.org/integration/autoland/rev/46132c70fae0
Maintain direct listener disabled state also when adding/removing to source tracks. r=karlt
https://hg.mozilla.org/integration/autoland/rev/bebda52cc325
Keep a disabled video track black until new frames arrive after enabling. r=jib
https://hg.mozilla.org/integration/autoland/rev/2a0f6a9af680
Make MediaPipelineTransmit listen for track enabled state changes from the graph. r=jib
https://hg.mozilla.org/integration/autoland/rev/eab2a5693e01
Add state for camera muting to MediaManager. r=jib
https://hg.mozilla.org/integration/autoland/rev/76ec485606bd
Make disabled tracks, that haven't seen a frame, black. r=jib
https://hg.mozilla.org/integration/autoland/rev/36c881e4d0a7
Be ready to mute cameras while mobile is in the background r=agi,pehrsons
https://hg.mozilla.org/integration/autoland/rev/17e11043a3c8
Temporarily disable test_peerConnection_trackDisabling.html over bug 1660144 r=karlt
Flags: needinfo?(jib)
Regressions: 1547030
You need to log in before you can comment on or make changes to this bug.