mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-19 20:32:15 +02:00
linux-pipewire: Allow passing registry events on creation
This will allow consumers of obs_pipewire to handle the device registry themselves. This is not useful for the screencast code since there's always only one node in the registry, but it will be used by the camera and audio code to list hardware devices.
This commit is contained in:
parent
a8866fe3fa
commit
6499d01bec
@ -87,6 +87,9 @@ struct _obs_pipewire {
|
||||
|
||||
struct obs_pw_version server_version;
|
||||
|
||||
struct pw_registry *registry;
|
||||
struct spa_hook registry_listener;
|
||||
|
||||
GPtrArray *streams;
|
||||
};
|
||||
|
||||
@ -1164,7 +1167,10 @@ static const struct pw_core_events core_events = {
|
||||
|
||||
/* obs_source_info methods */
|
||||
|
||||
obs_pipewire *obs_pipewire_create(int pipewire_fd)
|
||||
obs_pipewire *
|
||||
obs_pipewire_create(int pipewire_fd,
|
||||
const struct pw_registry_events *registry_events,
|
||||
void *user_data)
|
||||
{
|
||||
obs_pipewire *obs_pw;
|
||||
|
||||
@ -1200,6 +1206,18 @@ obs_pipewire *obs_pipewire_create(int pipewire_fd)
|
||||
obs_pw->server_version_sync = pw_core_sync(obs_pw->core, PW_ID_CORE,
|
||||
obs_pw->server_version_sync);
|
||||
pw_thread_loop_wait(obs_pw->thread_loop);
|
||||
|
||||
/* Registry */
|
||||
if (registry_events) {
|
||||
obs_pw->registry = pw_core_get_registry(obs_pw->core,
|
||||
PW_VERSION_REGISTRY, 0);
|
||||
pw_registry_add_listener(obs_pw->registry,
|
||||
&obs_pw->registry_listener,
|
||||
registry_events, user_data);
|
||||
blog(LOG_INFO, "[pipewire] Created registry %p",
|
||||
obs_pw->registry);
|
||||
}
|
||||
|
||||
pw_thread_loop_unlock(obs_pw->thread_loop);
|
||||
|
||||
obs_pw->streams = g_ptr_array_new();
|
||||
@ -1207,6 +1225,11 @@ obs_pipewire *obs_pipewire_create(int pipewire_fd)
|
||||
return obs_pw;
|
||||
}
|
||||
|
||||
struct pw_registry *obs_pipewire_get_registry(obs_pipewire *obs_pw)
|
||||
{
|
||||
return obs_pw->registry;
|
||||
}
|
||||
|
||||
void obs_pipewire_destroy(obs_pipewire *obs_pw)
|
||||
{
|
||||
if (!obs_pw)
|
||||
|
@ -22,8 +22,7 @@
|
||||
|
||||
#include <obs-module.h>
|
||||
|
||||
#include <pipewire/keys.h>
|
||||
#include <pipewire/properties.h>
|
||||
#include <pipewire/pipewire.h>
|
||||
|
||||
typedef struct _obs_pipewire obs_pipewire;
|
||||
typedef struct _obs_pipewire_stream obs_pipewire_stream;
|
||||
@ -36,7 +35,11 @@ struct obs_pipwire_connect_stream_info {
|
||||
} screencast;
|
||||
};
|
||||
|
||||
obs_pipewire *obs_pipewire_create(int pipewire_fd);
|
||||
obs_pipewire *
|
||||
obs_pipewire_create(int pipewire_fd,
|
||||
const struct pw_registry_events *registry_events,
|
||||
void *user_data);
|
||||
struct pw_registry *obs_pipewire_get_registry(obs_pipewire *obs_pw);
|
||||
void obs_pipewire_destroy(obs_pipewire *obs_pw);
|
||||
|
||||
obs_pipewire_stream *obs_pipewire_connect_stream(
|
||||
|
@ -188,7 +188,7 @@ static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res,
|
||||
return;
|
||||
}
|
||||
|
||||
capture->obs_pw = obs_pipewire_create(pipewire_fd);
|
||||
capture->obs_pw = obs_pipewire_create(pipewire_fd, NULL, NULL);
|
||||
|
||||
if (!capture->obs_pw)
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user