From: Jan Grulich 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 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. Differential Revision: https://phabricator.services.mozilla.com/D189929 Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/ed31b2acb5fbca3e2d0691a64bc52e65952070c0 --- 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/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_); + if (deviceNumber >= NumberOfDevices()) return -1; 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; // 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; /* * Display OS /capture device specific settings dialog