From fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 03:14:29 +0200 Subject: Merging upstream version 125.0.1. Signed-off-by: Daniel Baumann --- third_party/libwebrtc/moz-patch-stack/0102.patch | 213 ++++++++++++----------- 1 file changed, 112 insertions(+), 101 deletions(-) (limited to 'third_party/libwebrtc/moz-patch-stack/0102.patch') diff --git a/third_party/libwebrtc/moz-patch-stack/0102.patch b/third_party/libwebrtc/moz-patch-stack/0102.patch index 9b0e544701..07be6fc934 100644 --- a/third_party/libwebrtc/moz-patch-stack/0102.patch +++ b/third_party/libwebrtc/moz-patch-stack/0102.patch @@ -1,110 +1,121 @@ From: Jan Grulich -Date: Mon, 27 Nov 2023 10:33:00 +0000 -Subject: Bug 1865872 - Fix thread and lock annotations in PipeWire video - capture r=pehrsons,webrtc-reviewers +Date: Thu, 30 Nov 2023 11:49:00 +0000 +Subject: Bug 1844020 - Add option to DeviceInfo::GetDeviceName() identifying a + placeholder device r=pehrsons,webrtc-reviewers -This is a simple backport of an WebRTC upstream change. +Adds a new parameter "deviceIsPlaceholder" that will be set to true in +case the returned device is not a real device but a placeholder that is +just used to inform about camera device existence. -Upstream commit: a9d497b52dc21497fdfd0e8c03ab2f8559e02d15 - -Differential Revision: https://phabricator.services.mozilla.com/D194247 -Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/f8332fd7347051f18a029f5c9314698cf3cd68ae +Differential Revision: https://phabricator.services.mozilla.com/D189929 +Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/ed31b2acb5fbca3e2d0691a64bc52e65952070c0 --- - modules/video_capture/linux/video_capture_pipewire.cc | 8 +++++--- - modules/video_capture/linux/video_capture_pipewire.h | 8 +++++--- - rtc_base/race_checker.h | 11 ++++++++--- - 3 files changed, 18 insertions(+), 9 deletions(-) + modules/video_capture/linux/device_info_pipewire.cc | 4 +++- + modules/video_capture/linux/device_info_pipewire.h | 3 ++- + modules/video_capture/linux/device_info_v4l2.cc | 3 ++- + modules/video_capture/linux/device_info_v4l2.h | 3 ++- + modules/video_capture/video_capture.h | 3 ++- + modules/video_capture/windows/device_info_ds.cc | 3 ++- + modules/video_capture/windows/device_info_ds.h | 3 ++- + 7 files changed, 15 insertions(+), 7 deletions(-) -diff --git a/modules/video_capture/linux/video_capture_pipewire.cc b/modules/video_capture/linux/video_capture_pipewire.cc -index 7b79f15a6c..9d47e3ddbf 100644 ---- a/modules/video_capture/linux/video_capture_pipewire.cc -+++ b/modules/video_capture/linux/video_capture_pipewire.cc -@@ -126,6 +126,7 @@ int32_t VideoCaptureModulePipeWire::StartCapture( - RTC_LOG(LS_VERBOSE) << "Creating new PipeWire stream for node " << node_id_; - - PipeWireThreadLoopLock thread_loop_lock(session_->pw_main_loop_); -+ RTC_CHECK_RUNS_SERIALIZED(&pipewire_checker_); - pw_properties* reuse_props = - pw_properties_new_string("pipewire.client.reuse=1"); - stream_ = pw_stream_new(session_->pw_core_, "camera-stream", reuse_props); -@@ -178,6 +179,7 @@ int32_t VideoCaptureModulePipeWire::StopCapture() { - RTC_DCHECK_RUN_ON(&api_checker_); - - PipeWireThreadLoopLock thread_loop_lock(session_->pw_main_loop_); -+ RTC_CHECK_RUNS_SERIALIZED(&pipewire_checker_); - if (stream_) { - pw_stream_destroy(stream_); - stream_ = nullptr; -@@ -210,14 +212,14 @@ void VideoCaptureModulePipeWire::OnStreamParamChanged( - VideoCaptureModulePipeWire* that = - static_cast(data); - RTC_DCHECK(that); -- RTC_CHECK_RUNS_SERIALIZED(&that->capture_checker_); -+ RTC_CHECK_RUNS_SERIALIZED(&that->pipewire_checker_); - - if (format && id == SPA_PARAM_Format) - that->OnFormatChanged(format); - } - - void VideoCaptureModulePipeWire::OnFormatChanged(const struct spa_pod* format) { -- RTC_CHECK_RUNS_SERIALIZED(&capture_checker_); -+ RTC_CHECK_RUNS_SERIALIZED(&pipewire_checker_); - - uint32_t media_type, media_subtype; - -@@ -359,7 +361,7 @@ static VideoRotation VideorotationFromPipeWireTransform(uint32_t transform) { - } - - void VideoCaptureModulePipeWire::ProcessBuffers() { -- RTC_CHECK_RUNS_SERIALIZED(&capture_checker_); -+ RTC_CHECK_RUNS_SERIALIZED(&pipewire_checker_); - - while (pw_buffer* buffer = pw_stream_dequeue_buffer(stream_)) { - struct spa_meta_header* h; -diff --git a/modules/video_capture/linux/video_capture_pipewire.h b/modules/video_capture/linux/video_capture_pipewire.h -index 316fb2449d..620ee520ca 100644 ---- a/modules/video_capture/linux/video_capture_pipewire.h -+++ b/modules/video_capture/linux/video_capture_pipewire.h -@@ -43,15 +43,17 @@ class VideoCaptureModulePipeWire : public VideoCaptureImpl { - void OnFormatChanged(const struct spa_pod* format); - void ProcessBuffers(); - -+ rtc::RaceChecker pipewire_checker_; +diff --git a/modules/video_capture/linux/device_info_pipewire.cc b/modules/video_capture/linux/device_info_pipewire.cc +index fc0554f384..f9f08a9c27 100644 +--- a/modules/video_capture/linux/device_info_pipewire.cc ++++ b/modules/video_capture/linux/device_info_pipewire.cc +@@ -50,8 +50,10 @@ int32_t DeviceInfoPipeWire::GetDeviceName(uint32_t deviceNumber, + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8, + uint32_t productUniqueIdUTF8Length, +- pid_t* pid) { ++ pid_t* pid, ++ bool* deviceIsPlaceholder) { + RTC_CHECK(pipewire_session_); + - const rtc::scoped_refptr session_ - RTC_GUARDED_BY(capture_checker_); - int node_id_ RTC_GUARDED_BY(capture_checker_); - VideoCaptureCapability configured_capability_ -- RTC_GUARDED_BY(capture_checker_); -+ RTC_GUARDED_BY(pipewire_checker_); - bool started_ RTC_GUARDED_BY(api_lock_); + if (deviceNumber >= NumberOfDevices()) + return -1; -- struct pw_stream* stream_ RTC_GUARDED_BY(capture_checker_) = nullptr; -- struct spa_hook stream_listener_ RTC_GUARDED_BY(capture_checker_); -+ struct pw_stream* stream_ RTC_GUARDED_BY(pipewire_checker_) = nullptr; -+ struct spa_hook stream_listener_ RTC_GUARDED_BY(pipewire_checker_); - }; - } // namespace videocapturemodule - } // namespace webrtc -diff --git a/rtc_base/race_checker.h b/rtc_base/race_checker.h -index 4d574601eb..00bab52f33 100644 ---- a/rtc_base/race_checker.h -+++ b/rtc_base/race_checker.h -@@ -62,9 +62,14 @@ class RTC_SCOPED_LOCKABLE RaceCheckerScopeDoNothing { - } // namespace internal - } // namespace rtc +diff --git a/modules/video_capture/linux/device_info_pipewire.h b/modules/video_capture/linux/device_info_pipewire.h +index 8a33d75892..00715c94bc 100644 +--- a/modules/video_capture/linux/device_info_pipewire.h ++++ b/modules/video_capture/linux/device_info_pipewire.h +@@ -30,7 +30,8 @@ class DeviceInfoPipeWire : public DeviceInfoImpl { + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8 = nullptr, + uint32_t productUniqueIdUTF8Length = 0, +- pid_t* pid = 0) override; ++ pid_t* pid = 0, ++ bool* deviceIsPlaceholder = 0) override; + /* + * Fills the membervariable _captureCapabilities with capabilites for the + * given device name. +diff --git a/modules/video_capture/linux/device_info_v4l2.cc b/modules/video_capture/linux/device_info_v4l2.cc +index 04caaea592..401c38f9c5 100644 +--- a/modules/video_capture/linux/device_info_v4l2.cc ++++ b/modules/video_capture/linux/device_info_v4l2.cc +@@ -232,7 +232,8 @@ int32_t DeviceInfoV4l2::GetDeviceName(uint32_t deviceNumber, + uint32_t deviceUniqueIdUTF8Length, + char* /*productUniqueIdUTF8*/, + uint32_t /*productUniqueIdUTF8Length*/, +- pid_t* /*pid*/) { ++ pid_t* /*pid*/, ++ bool* /*deviceIsPlaceholder*/) { + // Travel through /dev/video [0-63] + uint32_t count = 0; + char device[20]; +diff --git a/modules/video_capture/linux/device_info_v4l2.h b/modules/video_capture/linux/device_info_v4l2.h +index 0bec3eb765..55415845ad 100644 +--- a/modules/video_capture/linux/device_info_v4l2.h ++++ b/modules/video_capture/linux/device_info_v4l2.h +@@ -36,7 +36,8 @@ class DeviceInfoV4l2 : public DeviceInfoImpl { + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8 = 0, + uint32_t productUniqueIdUTF8Length = 0, +- pid_t* pid=0) override; ++ pid_t* pid = 0, ++ bool* deviceIsPlaceholder = 0) override; + /* + * Fills the membervariable _captureCapabilities with capabilites for the + * given device name. +diff --git a/modules/video_capture/video_capture.h b/modules/video_capture/video_capture.h +index 43a6a7f832..f59c34f8b2 100644 +--- a/modules/video_capture/video_capture.h ++++ b/modules/video_capture/video_capture.h +@@ -74,7 +74,8 @@ class VideoCaptureModule : public RefCountInterface { + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8 = 0, + uint32_t productUniqueIdUTF8Length = 0, +- pid_t* pid = 0) = 0; ++ pid_t* pid = 0, ++ bool* deviceIsPlaceholder = 0) = 0; --#define RTC_CHECK_RUNS_SERIALIZED(x) \ -- rtc::internal::RaceCheckerScope race_checker(x); \ -- RTC_CHECK(!race_checker.RaceDetected()) -+#define RTC_CHECK_RUNS_SERIALIZED(x) RTC_CHECK_RUNS_SERIALIZED_NEXT(x, __LINE__) -+ -+#define RTC_CHECK_RUNS_SERIALIZED_NEXT(x, suffix) \ -+ RTC_CHECK_RUNS_SERIALIZED_IMPL(x, suffix) -+ -+#define RTC_CHECK_RUNS_SERIALIZED_IMPL(x, suffix) \ -+ rtc::internal::RaceCheckerScope race_checker##suffix(x); \ -+ RTC_CHECK(!race_checker##suffix.RaceDetected()) + // Returns the number of capabilities this device. + virtual int32_t NumberOfCapabilities(const char* deviceUniqueIdUTF8) = 0; +diff --git a/modules/video_capture/windows/device_info_ds.cc b/modules/video_capture/windows/device_info_ds.cc +index f6927281f3..8ca741239c 100644 +--- a/modules/video_capture/windows/device_info_ds.cc ++++ b/modules/video_capture/windows/device_info_ds.cc +@@ -173,7 +173,8 @@ int32_t DeviceInfoDS::GetDeviceName(uint32_t deviceNumber, + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8, + uint32_t productUniqueIdUTF8Length, +- pid_t* pid) { ++ pid_t* pid, ++ bool* deviceIsPlaceholder) { + MutexLock lock(&_apiLock); + const int32_t result = GetDeviceInfo( + deviceNumber, deviceNameUTF8, deviceNameLength, deviceUniqueIdUTF8, +diff --git a/modules/video_capture/windows/device_info_ds.h b/modules/video_capture/windows/device_info_ds.h +index e6dfaed366..a9a1449b99 100644 +--- a/modules/video_capture/windows/device_info_ds.h ++++ b/modules/video_capture/windows/device_info_ds.h +@@ -51,7 +51,8 @@ class DeviceInfoDS : public DeviceInfoImpl { + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8, + uint32_t productUniqueIdUTF8Length, +- pid_t* pid) override; ++ pid_t* pid, ++ bool* deviceIsPlaceholder) override; - #if RTC_DCHECK_IS_ON - #define RTC_DCHECK_RUNS_SERIALIZED(x) \ + /* + * Display OS /capture device specific settings dialog -- cgit v1.2.3