diff --git a/modules/video_capture/linux/pipewire_session.cc b/modules/video_capture/linux/pipewire_session.cc index 85ccb289d8..98eb656096 100644 --- a/modules/video_capture/linux/pipewire_session.cc +++ b/modules/video_capture/linux/pipewire_session.cc @@ -75,7 +75,7 @@ PipeWireNode::PipeWireNode(PipeWireSession* session, : session_(session), id_(id), display_name_(spa_dict_lookup(props, PW_KEY_NODE_DESCRIPTION)), - unique_id_(rtc::ToString(id)) { + unique_id_(spa_dict_lookup(props, PW_KEY_NODE_NAME)) { RTC_LOG(LS_VERBOSE) << "Found Camera: " << display_name_; proxy_ = static_cast(pw_registry_bind( diff --git a/modules/video_capture/linux/video_capture_pipewire.cc b/modules/video_capture/linux/video_capture_pipewire.cc index e9d99133f5..f6cd57ac36 100644 --- a/modules/video_capture/linux/video_capture_pipewire.cc +++ b/modules/video_capture/linux/video_capture_pipewire.cc @@ -83,12 +83,15 @@ int32_t VideoCaptureModulePipeWire::Init(const char* deviceUniqueId) { RTC_CHECK_RUNS_SERIALIZED(&capture_checker_); RTC_DCHECK_RUN_ON(&api_checker_); - std::optional id; - id = rtc::StringToNumber(deviceUniqueId); - if (id == std::nullopt) + auto node = + std::find_if(session_->nodes_.begin(), session_->nodes_.end(), + [deviceUniqueId](const PipeWireNode::PipeWireNodePtr& node) { + return node->unique_id() == deviceUniqueId; + }); + if (node == session_->nodes_.end()) return -1; - node_id_ = id.value(); + node_id_ = (*node)->id(); const int len = strlen(deviceUniqueId); _deviceUniqueId = new (std::nothrow) char[len + 1];