../../third_party/webrtc/modules/video_capture/linux/pipewire_session.cc:90:3: error: no matching function for call to 'pw_node_add_listener' 90 | pw_node_add_listener(proxy_, &node_listener_, &node_events, this); | ^~~~~~~~~~~~~~~~~~~~ /usr/include/pipewire-0.3/pipewire/node.h:189:22: note: candidate function not viable: cannot convert argument of incomplete type 'pw_proxy *' to 'struct pw_node *' for 1st argument 189 | PW_API_NODE_IMPL int pw_node_add_listener(struct pw_node *object, | ^ ~~~~~~~~~~~~~~~~~~~~~~ ../../third_party/webrtc/modules/video_capture/linux/pipewire_session.cc:122:9: error: no matching function for call to 'pw_node_enum_params' 122 | pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr); | ^~~~~~~~~~~~~~~~~~~ /usr/include/pipewire-0.3/pipewire/node.h:208:22: note: candidate function not viable: cannot convert argument of incomplete type 'pw_proxy *' to 'struct pw_node *' for 1st argument 208 | PW_API_NODE_IMPL int pw_node_enum_params(struct pw_node *object, | ^ ~~~~~~~~~~~~~~~~~~~~~~ 2 errors generated. This started with pipewire 1.4.0. I initially thought that since they were calling a bunch of pw_node_* functions, they should've been requesting a pw_node rather than a pw_proxy. But it looks like casting between the two is just a thing that pipewire does (see, for example, pipewire source code's src/modules/module-protocol-pulse/manager.c calls to pw_node_enum_params()). So we fix this by casting, under the assumption that the webrtc folks actually did intend to call pw_node_* functions on a pw_proxy. --- a/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc +++ b/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc @@ -87,7 +87,7 @@ PipeWireNode::PipeWireNode(PipeWireSessi .param = OnNodeParam, }; - pw_node_add_listener(proxy_, &node_listener_, &node_events, this); + pw_node_add_listener((struct pw_node*) proxy_, &node_listener_, &node_events, this); } // static @@ -119,7 +119,7 @@ void PipeWireNode::OnNodeInfo(void* data uint32_t id = info->params[i].id; if (id == SPA_PARAM_EnumFormat && info->params[i].flags & SPA_PARAM_INFO_READ) { - pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr); + pw_node_enum_params((struct pw_node*) that->proxy_, 0, id, 0, UINT32_MAX, nullptr); break; } }