Closed Bug 1771789 Opened 4 years ago Closed 10 months ago

applying width/height/framerate constraints to getUserMedia/getDisplayMedia track clone affects original track

Categories

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

Desktop
All
defect

Tracking

()

RESOLVED FIXED
147 Branch
Tracking Status
firefox147 --- fixed

People

(Reporter: avade, Assigned: pehrsons)

References

Details

(Keywords: dev-doc-needed)

Attachments

(23 files, 1 obsolete file)

1.38 KB, text/html
Details
1.25 KB, text/html
Details
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
48 bytes, text/x-phabricator-request
Details | Review
Attached file displaymedia.html —

User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36

Steps to reproduce:

  • Open the attached html file in Firefox
  • Click the button to trigger getDisplayMedia API
  • Notice that getSettings() info on the original track and cloned track is both incorrect (height and width is 0)
  • The original track now has lower framerate of 2, instead of original framerate of 24

Actual results:

  • The original track has lower framerate of 2, instead of original framerate of 24
  • The height and width has incorrect values

Expected results:

  • Applying constraints on cloned track should not affect the original track
  • The height and width should have correct values
Component: Untriaged → WebRTC: Audio/Video
OS: Unspecified → macOS
Product: Firefox → Core
Hardware: Unspecified → x86_64
Version: unspecified → Trunk
Summary: getDisplayMedia track clone and applying framerate constraints is buggy → getUserMedia and getDisplayMedia track clone and applying height/width/framerate constraints affects original track

We just discovered this happens with getUserMedia too. Attaching another html file for the getUserMedia issue with same steps to reproduce the issue.

Attached file getusermedia.html —

Thanks for filing and diagnosing this bug! I have a couple of questions that would help us triage this issue. Arjun, do you believe that this bug is limited to macOS? Is this something that worked in previous versions?

Flags: needinfo?(avade)
  • Seems to be macOS only issue. This seems to be working in windows.
  • I'm not really sure if this is a regression. It may be one though.
Flags: needinfo?(avade)

I've confirmed this is still an issue for both gUM and gDM (and not just for max constraints despite what what comment 5 says).

I think we need to up-prioritize this as it's likely to become more problematic with these upcoming features:

  • bug 1286945 resizeMode (currently in Nightly as media.navigator.video.resize_mode.enabled = true in about:config)
  • bug 1749543 where it stands to create an unfortunate side-channel between tracks on main thread and clones in a worker

STR:

  1. Open https://jan-ivar.github.io/dummy/gum_head2head.html
  2. Click the Camera A button and allow camera
  3. In the selector to the right of the Camera B button, select "clone of Camera A"
  4. Adjust the size of A to 640x480

Expected result (matching Chrome and Safari):

  • Video A is 640x480 and video B is 1280x720 (assuming your camera has this mode)

Actual result (Firefox bug and nonstandard behavior):

  • Both Video A and B are 640x480

Workaround

  • In step 3, instead of "clone of Camera A", pick the SAME camera by name.

The workaround shows we already have a code path (calling gUM twice) that produces the desired behavior. The task here would be to reuse that path somehow for the clone() method.

Priority: P3 → P2
Summary: getUserMedia and getDisplayMedia track clone and applying height/width/framerate constraints affects original track → applying width/height/framerate constraints to getUserMedia/getDisplayMedia track clone affects original track
Assignee: nobody → jib
Status: UNCONFIRMED → NEW
Ever confirmed: true
Assignee: jib → apehrson
No longer blocks: webrtc-triage
Status: NEW → ASSIGNED
Depends on: 1988463

Note, no sources implement it yet.

This is needed because MediaEngineSource::Stop/Deallocate are not idempotent,
and cloning allocates async after creating DeviceState, unlike getUserMedia.

Only if the same window is already capturing the same device, like in cloning
cases.

This patch also renames some VideoEngine members to make their purpose clearer.

Native cloning, which behaves like an independent gUM request, ends up using a
shared camera backend instance that is already live and does not need
reconfiguration.

The v4l2loopback device we set up on linux only issues a single frame during a
session. And since with deep cloning the session is reused, the new clone never
sees a frame, causing test_gUM_mediaStreamTrackClone.html, and intermittently
test_gUM_mediaElementCapture_tracks.html, to time out.

The "real fake" camera behaves like a normal camera in that it issues new frames
as requested, while still using the native capture stack.

This allows more flexibility with methods explicitly taking an arbitrary item, e.g.:

struct State {
  int mId;
  bool mSuccess;
};
nsTArray<State> states;
int id{};
(...)
size_t idx = states.IndexOf(
    /*aItem=*/id, /*aStart=*/0,
    [](const State& aState, const int& aItem) { return aState.mId - aItem; });

Prior to this commit, a site that made two gUM requests for the same device,
would receive two DeliverFrame IPC calls with distinct shmems containing
identical images. This is unnecessary, and a larger problem when tracks are
deep-cloned, i.e. where cloning a track has the same effect as a separate
request for the same device.

With this commit, only a single shmem is sent for each device on a single
PCameras channel.

This mitigates the risk of exhausting the ShmemPool when many distinct sources
are live.

This is safe as the image buffer backing webrtc::VideoFrame is refcounted.

Attachment #9516500 - Attachment is obsolete: true
Attachment #9516498 - Attachment description: Bug 1771789 - Allow allocating video device without active camera permission. r?jib → Bug 1771789 - Allow re-allocating video device without active camera permission. r?jib
Pushed by pehrsons@gmail.com: https://github.com/mozilla-firefox/firefox/commit/64051cd4c3da https://hg.mozilla.org/integration/autoland/rev/0b4d97d35056 Implement MediaStreamTrack::CloneInternal in a single place with templates. r=jib https://github.com/mozilla-firefox/firefox/commit/f1eba40e5d7b https://hg.mozilla.org/integration/autoland/rev/a9ee9b8ef6de Add and use an API for MediaStreamTrackSource cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/55ca6273e386 https://hg.mozilla.org/integration/autoland/rev/5a0ff45982d6 Break out a sync Initialize from InitializeAsync. r=jib https://github.com/mozilla-firefox/firefox/commit/760ee59dea28 https://hg.mozilla.org/integration/autoland/rev/8e5f5198fc84 Add DeviceState::mAllocated to avoid Stop and Deallocate of non-allocated sources. r=jib https://github.com/mozilla-firefox/firefox/commit/82b3c45eb63c https://hg.mozilla.org/integration/autoland/rev/e82b77614c5b Implement cloning for LocalTrackSource. r=jib https://github.com/mozilla-firefox/firefox/commit/eb61b57b45dd https://hg.mozilla.org/integration/autoland/rev/b2059e39182d Allow re-allocating video device without active camera permission. r=jib https://github.com/mozilla-firefox/firefox/commit/9a636bdf6176 https://hg.mozilla.org/integration/autoland/rev/ac151d1af98c Deep-clone track sources for correct settings synchronously. r=jib https://github.com/mozilla-firefox/firefox/commit/e8577e2415aa https://hg.mozilla.org/integration/autoland/rev/f6fa55c51a51 Make AudioInputProcessing::NumberOfChannels always valid. r=padenot,webrtc-reviewers,mjf https://github.com/mozilla-firefox/firefox/commit/a34936b64c02 https://hg.mozilla.org/integration/autoland/rev/b855e8cda462 Use "real fake" camera in some mochitests as loopback device does not work with native cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/5a1bdf75f789 https://hg.mozilla.org/integration/autoland/rev/65378eb73d28 Break out some helpers from MST-resizeMode.https.html. r=jib https://github.com/mozilla-firefox/firefox/commit/1eae11dc2e9d https://hg.mozilla.org/integration/autoland/rev/5f2ccc311901 Test video capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/7b5b612e0ffe https://hg.mozilla.org/integration/autoland/rev/bf1475f16931 Test audio capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/7d2f37838ed2 https://hg.mozilla.org/integration/autoland/rev/2985bbafc456 Pass CubebInputStream the same CubebHandle used to enumerate its device id. r=padenot https://github.com/mozilla-firefox/firefox/commit/7ab8aaeb3e46 https://hg.mozilla.org/integration/autoland/rev/7f8ff0dd4d7a Clean up type mismatches and unused things in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/e1924d3ed2fa https://hg.mozilla.org/integration/autoland/rev/072c2a4af2bb In PCameras rename captureId with streamId for consistency. r=jib https://github.com/mozilla-firefox/firefox/commit/0ef502b946e2 https://hg.mozilla.org/integration/autoland/rev/2996f494b4c2 In nsTArray, allow Comparators to compare elements to a type defined by the caller. r=xpcom-reviewers,nika https://github.com/mozilla-firefox/firefox/commit/e6ac33e70d49 https://hg.mozilla.org/integration/autoland/rev/399db585c0f2 Refactor video capture source sharing in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/82e8303b6670 https://hg.mozilla.org/integration/autoland/rev/eabf87647ccc In CamerasParent use one ShmemPool per source. r=jib https://github.com/mozilla-firefox/firefox/commit/238c28a46904 https://hg.mozilla.org/integration/autoland/rev/e1e688dc3a0a Extend webrtc::VideoFrame lifetime a bit to avoid an extra allocation and copy in some cases. r=jib
Pushed by chorotan@mozilla.com: https://github.com/mozilla-firefox/firefox/commit/48829083dd73 https://hg.mozilla.org/integration/autoland/rev/1d2e202c8c53 Revert "Bug 1771789 - Extend webrtc::VideoFrame lifetime a bit to avoid an extra allocation and copy in some cases. r=jib" for causing multiple failures

Failure to send stop does not mean the capturer is still running. Treat it as
stopped.

Pernosco helped with fixing three issues that the browser-chrome media tests hit and the regular ones didn't. But I see a TSAN-specific test timeout at 100% error rate that I'm still debugging.

Flags: needinfo?(apehrson)

dev-doc-needed to add a release note for developers. Proposed text:

The clone() method on MediaStreamTrack, when used on tracks from getUserMedia or getDisplayMedia, will now create a track that has an independent set of constraints and settings from the original track. This allows a track clone to capture a different resolution and/or framerate than that of the track it was cloned from.

Keywords: dev-doc-needed
Depends on: 1995517
Depends on: CVE-2025-13020
Pushed by pehrsons@gmail.com: https://github.com/mozilla-firefox/firefox/commit/a091522bd315 https://hg.mozilla.org/integration/autoland/rev/cdfacb75e979 Implement MediaStreamTrack::CloneInternal in a single place with templates. r=jib https://github.com/mozilla-firefox/firefox/commit/92724719a681 https://hg.mozilla.org/integration/autoland/rev/f410ef08bc18 Add and use an API for MediaStreamTrackSource cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/69a9ae6a6e40 https://hg.mozilla.org/integration/autoland/rev/40d71e54a157 Break out a sync Initialize from InitializeAsync. r=jib https://github.com/mozilla-firefox/firefox/commit/e9c93d737635 https://hg.mozilla.org/integration/autoland/rev/9c6c99a66a44 Add DeviceState::mAllocated to avoid Stop and Deallocate of non-allocated sources. r=jib https://github.com/mozilla-firefox/firefox/commit/f4fce79c3265 https://hg.mozilla.org/integration/autoland/rev/3449e3cfb712 Implement cloning for LocalTrackSource. r=jib https://github.com/mozilla-firefox/firefox/commit/acc5989a8cd4 https://hg.mozilla.org/integration/autoland/rev/348fd6311416 Allow re-allocating video device without active camera permission. r=jib https://github.com/mozilla-firefox/firefox/commit/3f5d16c26e27 https://hg.mozilla.org/integration/autoland/rev/9358703c4b2c Deep-clone track sources for correct settings synchronously. r=jib https://github.com/mozilla-firefox/firefox/commit/e3e650f6512b https://hg.mozilla.org/integration/autoland/rev/0d330832ff4b Make AudioInputProcessing::NumberOfChannels always valid. r=padenot,webrtc-reviewers,mjf https://github.com/mozilla-firefox/firefox/commit/dc0a5c3422c9 https://hg.mozilla.org/integration/autoland/rev/785d05645de7 Use "real fake" camera in some mochitests as loopback device does not work with native cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/4e1d102fe9f1 https://hg.mozilla.org/integration/autoland/rev/19aa51d07c56 Break out some helpers from MST-resizeMode.https.html. r=jib https://github.com/mozilla-firefox/firefox/commit/27a4ecbdec5b https://hg.mozilla.org/integration/autoland/rev/54937a2ffdf5 Test video capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/37b3757d9903 https://hg.mozilla.org/integration/autoland/rev/0628e9cab1a1 Test audio capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/1ff4dbddd174 https://hg.mozilla.org/integration/autoland/rev/ba61472661c4 Pass CubebInputStream the same CubebHandle used to enumerate its device id. r=padenot https://github.com/mozilla-firefox/firefox/commit/a0c7fc31b859 https://hg.mozilla.org/integration/autoland/rev/5d3242dd808f Clean up type mismatches and unused things in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/fb53dd7a34e2 https://hg.mozilla.org/integration/autoland/rev/2c1ee54fc52c In PCameras rename captureId with streamId for consistency. r=jib https://github.com/mozilla-firefox/firefox/commit/f96f199161e5 https://hg.mozilla.org/integration/autoland/rev/85243f01b728 In nsTArray, allow Comparators to compare elements to a type defined by the caller. r=xpcom-reviewers,nika https://github.com/mozilla-firefox/firefox/commit/525b01d0fa32 https://hg.mozilla.org/integration/autoland/rev/d2b39187ea02 Refactor video capture source sharing in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/cd82f02f8b37 https://hg.mozilla.org/integration/autoland/rev/269b2066a1c9 In CamerasParent use one ShmemPool per source. r=jib https://github.com/mozilla-firefox/firefox/commit/e9708652971e https://hg.mozilla.org/integration/autoland/rev/6034d6c68b01 Extend webrtc::VideoFrame lifetime a bit to avoid an extra allocation and copy in some cases. r=jib https://github.com/mozilla-firefox/firefox/commit/90468a05fabf https://hg.mozilla.org/integration/autoland/rev/b83fdf7e4a8a Disregard failure to send Stop in MERVS state machine. r=jib
Pushed by nbeleuzu@mozilla.com: https://github.com/mozilla-firefox/firefox/commit/f4bf2392ed0b https://hg.mozilla.org/integration/autoland/rev/dc0cb67dadd1 Revert "Bug 1771789 - Disregard failure to send Stop in MERVS state machine. r=jib" for causing bc failure on browser_devices_get_user_media_paused.js

With deep cloning, instead of a single device listener for all tracks
originating from the same source, there is one per track. A device listener
isn't aware of other device listeners when notifying chrome, which means the
number of recording-device-events messages has changed.

Note that setting a track's enabled attribute triggers the chrome notification
in an async task. Stopping a track on the other hand triggers the chrome
notification synchronously. Multiple notifications in a single task are
coalesced into a single chrome event (from stable state).

This is ready again, but I'll hold until the merge.

Flags: needinfo?(apehrson)
Pushed by pehrsons@gmail.com: https://github.com/mozilla-firefox/firefox/commit/bfd77462f060 https://hg.mozilla.org/integration/autoland/rev/06764ffdd391 Implement MediaStreamTrack::CloneInternal in a single place with templates. r=jib https://github.com/mozilla-firefox/firefox/commit/b87eb945be9c https://hg.mozilla.org/integration/autoland/rev/80c2100f2c1c Add and use an API for MediaStreamTrackSource cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/fff559871fcf https://hg.mozilla.org/integration/autoland/rev/ffbc0fdae4bb Break out a sync Initialize from InitializeAsync. r=jib https://github.com/mozilla-firefox/firefox/commit/7e600ba76500 https://hg.mozilla.org/integration/autoland/rev/8dbda1488cfb Add DeviceState::mAllocated to avoid Stop and Deallocate of non-allocated sources. r=jib https://github.com/mozilla-firefox/firefox/commit/687fbcd6eea5 https://hg.mozilla.org/integration/autoland/rev/5ab89bf2d2ad Implement cloning for LocalTrackSource. r=jib https://github.com/mozilla-firefox/firefox/commit/5ac1390cbb14 https://hg.mozilla.org/integration/autoland/rev/2f9ce82dc126 Allow re-allocating video device without active camera permission. r=jib https://github.com/mozilla-firefox/firefox/commit/75a8cabbf095 https://hg.mozilla.org/integration/autoland/rev/2d91152ef032 Deep-clone track sources for correct settings synchronously. r=jib https://github.com/mozilla-firefox/firefox/commit/929f87f3a8cb https://hg.mozilla.org/integration/autoland/rev/d7d2acb93e26 Make AudioInputProcessing::NumberOfChannels always valid. r=padenot,webrtc-reviewers,mjf https://github.com/mozilla-firefox/firefox/commit/999c920688e7 https://hg.mozilla.org/integration/autoland/rev/63306413a489 Use "real fake" camera in some mochitests as loopback device does not work with native cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/9de4d7979790 https://hg.mozilla.org/integration/autoland/rev/1c6dabc4b130 Break out some helpers from MST-resizeMode.https.html. r=jib https://github.com/mozilla-firefox/firefox/commit/90f8b4828640 https://hg.mozilla.org/integration/autoland/rev/e418cbdfb1d7 Test video capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/d6f91bc97406 https://hg.mozilla.org/integration/autoland/rev/0067817ee3f7 Test audio capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/20d9073033f4 https://hg.mozilla.org/integration/autoland/rev/a007a8a37635 Pass CubebInputStream the same CubebHandle used to enumerate its device id. r=padenot https://github.com/mozilla-firefox/firefox/commit/ecc6872b3b10 https://hg.mozilla.org/integration/autoland/rev/d40d20195aa5 Clean up type mismatches and unused things in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/bfa23496bda5 https://hg.mozilla.org/integration/autoland/rev/d506f631bd2a In PCameras rename captureId with streamId for consistency. r=jib https://github.com/mozilla-firefox/firefox/commit/79c61174cb90 https://hg.mozilla.org/integration/autoland/rev/12cd3fc71c1d In nsTArray, allow Comparators to compare elements to a type defined by the caller. r=xpcom-reviewers,nika https://github.com/mozilla-firefox/firefox/commit/a5368601371a https://hg.mozilla.org/integration/autoland/rev/3f145a6de52d Refactor video capture source sharing in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/5f499e32ad89 https://hg.mozilla.org/integration/autoland/rev/8de64b254b78 In CamerasParent use one ShmemPool per source. r=jib https://github.com/mozilla-firefox/firefox/commit/4a7f84c7fec8 https://hg.mozilla.org/integration/autoland/rev/384fd1bd965b Extend webrtc::VideoFrame lifetime a bit to avoid an extra allocation and copy in some cases. r=jib https://github.com/mozilla-firefox/firefox/commit/b2791ba9793f https://hg.mozilla.org/integration/autoland/rev/0d7174770027 Disregard failure to send Stop in MERVS state machine. r=jib https://github.com/mozilla-firefox/firefox/commit/8aa578e2ffdc https://hg.mozilla.org/integration/autoland/rev/3332b9ff2c08 Update browser-chrome recording-device-events expectations. r=jib
Pushed by archaeopteryx@coole-files.de: https://github.com/mozilla-firefox/firefox/commit/25444573d2df https://hg.mozilla.org/mozilla-central/rev/1bd8b95b92d5 Implement MediaStreamTrack::CloneInternal in a single place with templates. r=jib https://github.com/mozilla-firefox/firefox/commit/f15a6f8e7d44 https://hg.mozilla.org/mozilla-central/rev/8dcb159656ce Add and use an API for MediaStreamTrackSource cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/fbb2acf9acb1 https://hg.mozilla.org/mozilla-central/rev/468853f413f1 Break out a sync Initialize from InitializeAsync. r=jib https://github.com/mozilla-firefox/firefox/commit/2de57563a102 https://hg.mozilla.org/mozilla-central/rev/7c5372a83b4f Add DeviceState::mAllocated to avoid Stop and Deallocate of non-allocated sources. r=jib https://github.com/mozilla-firefox/firefox/commit/e8a836995bcb https://hg.mozilla.org/mozilla-central/rev/3cf0a1340ec4 Implement cloning for LocalTrackSource. r=jib https://github.com/mozilla-firefox/firefox/commit/90c8d1ab17d4 https://hg.mozilla.org/mozilla-central/rev/803f1292d1d3 Allow re-allocating video device without active camera permission. r=jib https://github.com/mozilla-firefox/firefox/commit/815093e75697 https://hg.mozilla.org/mozilla-central/rev/8583133a99ed Deep-clone track sources for correct settings synchronously. r=jib https://github.com/mozilla-firefox/firefox/commit/783d400b492a https://hg.mozilla.org/mozilla-central/rev/d17ac92e4bb1 Make AudioInputProcessing::NumberOfChannels always valid. r=padenot,webrtc-reviewers,mjf https://github.com/mozilla-firefox/firefox/commit/ef2ef262e4cc https://hg.mozilla.org/mozilla-central/rev/dbf6b2cbb4ab Use "real fake" camera in some mochitests as loopback device does not work with native cloning. r=jib https://github.com/mozilla-firefox/firefox/commit/b5d1a06a6d14 https://hg.mozilla.org/mozilla-central/rev/a333081ac05e Break out some helpers from MST-resizeMode.https.html. r=jib https://github.com/mozilla-firefox/firefox/commit/6d15e2d2f0f1 https://hg.mozilla.org/mozilla-central/rev/47a9a530cdeb Test video capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/325ecb91be29 https://hg.mozilla.org/mozilla-central/rev/5ff03b3ab159 Test audio capture cloning independence. r=jib https://github.com/mozilla-firefox/firefox/commit/b9ccd5f6f0f9 https://hg.mozilla.org/mozilla-central/rev/ba7f8713dfcf Pass CubebInputStream the same CubebHandle used to enumerate its device id. r=padenot https://github.com/mozilla-firefox/firefox/commit/0e8d216b6ee7 https://hg.mozilla.org/mozilla-central/rev/9ed5a58f520e Clean up type mismatches and unused things in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/ae854f4c5bad https://hg.mozilla.org/mozilla-central/rev/fae4cc35f0e7 In PCameras rename captureId with streamId for consistency. r=jib https://github.com/mozilla-firefox/firefox/commit/ec13eb6d56fb https://hg.mozilla.org/mozilla-central/rev/d87b20e0d2c8 In nsTArray, allow Comparators to compare elements to a type defined by the caller. r=xpcom-reviewers,nika https://github.com/mozilla-firefox/firefox/commit/4249cd3e42d4 https://hg.mozilla.org/mozilla-central/rev/1f6e30c20c6c Refactor video capture source sharing in CamerasParent. r=jib https://github.com/mozilla-firefox/firefox/commit/1c7baf74eeb1 https://hg.mozilla.org/mozilla-central/rev/62cdf4cd9fa8 In CamerasParent use one ShmemPool per source. r=jib https://github.com/mozilla-firefox/firefox/commit/5f30f72c4a2b https://hg.mozilla.org/mozilla-central/rev/ed825825e907 Extend webrtc::VideoFrame lifetime a bit to avoid an extra allocation and copy in some cases. r=jib https://github.com/mozilla-firefox/firefox/commit/903b2ec85840 https://hg.mozilla.org/mozilla-central/rev/dd5ee0b73c8d Disregard failure to send Stop in MERVS state machine. r=jib https://github.com/mozilla-firefox/firefox/commit/0dc610422204 https://hg.mozilla.org/mozilla-central/rev/828e97f9302c Update browser-chrome recording-device-events expectations. r=jib
Blocks: 1942085
Blocks: 2004137
QA Whiteboard: [qa-triage-done-c148/b147]
Regressions: 2006940
Regressions: 2011622
See Also: → 2012814
Regressions: 2012855
Regressions: 2014435
Regressions: 2021925
See Also: → 2021379
Regressions: 2027384
Regressions: CVE-2026-8972
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: