0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-19 20:32:15 +02:00

linux-pipewire: Factor out connection props in a struct

So that we can expand the number of construct-time connection
properties without changing the function signature every time.
This is mostly an ergonomic change for now, but it'll be very
useful when introducing the Camera portal code.
This commit is contained in:
Georges Basile Stavracas Neto 2023-12-13 21:21:05 -03:00 committed by Georges Basile Stavracas Neto
parent afab71aa80
commit a1db8e5bde
3 changed files with 25 additions and 14 deletions

View File

@ -1222,10 +1222,9 @@ void obs_pipewire_destroy(obs_pipewire *obs_pw)
bfree(obs_pw);
}
obs_pipewire_stream *
obs_pipewire_connect_stream(obs_pipewire *obs_pw, obs_source_t *source,
int pipewire_node, const char *stream_name,
struct pw_properties *stream_properties)
obs_pipewire_stream *obs_pipewire_connect_stream(
obs_pipewire *obs_pw, obs_source_t *source, int pipewire_node,
const struct obs_pipwire_connect_stream_info *connect_info)
{
struct spa_pod_builder pod_builder;
const struct spa_pod **params = NULL;
@ -1233,6 +1232,8 @@ obs_pipewire_connect_stream(obs_pipewire *obs_pw, obs_source_t *source,
uint32_t n_params;
uint8_t params_buffer[4096];
assert(connect_info != NULL);
obs_pw_stream = bzalloc(sizeof(obs_pipewire_stream));
obs_pw_stream->obs_pw = obs_pw;
obs_pw_stream->source = source;
@ -1248,8 +1249,9 @@ obs_pipewire_connect_stream(obs_pipewire *obs_pw, obs_source_t *source,
blog(LOG_DEBUG, "[pipewire] registered event %p", obs_pw_stream->reneg);
/* Stream */
obs_pw_stream->stream =
pw_stream_new(obs_pw->core, stream_name, stream_properties);
obs_pw_stream->stream = pw_stream_new(obs_pw->core,
connect_info->stream_name,
connect_info->stream_properties);
pw_stream_add_listener(obs_pw_stream->stream,
&obs_pw_stream->stream_listener, &stream_events,
obs_pw_stream);

View File

@ -28,13 +28,17 @@
typedef struct _obs_pipewire obs_pipewire;
typedef struct _obs_pipewire_stream obs_pipewire_stream;
struct obs_pipwire_connect_stream_info {
const char *stream_name;
struct pw_properties *stream_properties;
};
obs_pipewire *obs_pipewire_create(int pipewire_fd);
void obs_pipewire_destroy(obs_pipewire *obs_pw);
obs_pipewire_stream *
obs_pipewire_connect_stream(obs_pipewire *obs_pw, obs_source_t *source,
int pipewire_node, const char *stream_name,
struct pw_properties *stream_properties);
obs_pipewire_stream *obs_pipewire_connect_stream(
obs_pipewire *obs_pw, obs_source_t *source, int pipewire_node,
const struct obs_pipwire_connect_stream_info *connect_info);
void obs_pipewire_stream_show(obs_pipewire_stream *obs_pw_stream);
void obs_pipewire_stream_hide(obs_pipewire_stream *obs_pw_stream);

View File

@ -158,6 +158,7 @@ static const char *capture_type_to_string(enum portal_capture_type capture_type)
static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res,
void *user_data)
{
struct obs_pipwire_connect_stream_info connect_info;
struct screencast_portal_capture *capture;
g_autoptr(GUnixFDList) fd_list = NULL;
g_autoptr(GVariant) result = NULL;
@ -192,12 +193,16 @@ static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res,
if (!capture->obs_pw)
return;
connect_info = (struct obs_pipwire_connect_stream_info){
.stream_name = "OBS Studio",
.stream_properties = pw_properties_new(
PW_KEY_MEDIA_TYPE, "Video", PW_KEY_MEDIA_CATEGORY,
"Capture", PW_KEY_MEDIA_ROLE, "Screen", NULL),
};
capture->obs_pw_stream = obs_pipewire_connect_stream(
capture->obs_pw, capture->source, capture->pipewire_node,
"OBS Studio",
pw_properties_new(PW_KEY_MEDIA_TYPE, "Video",
PW_KEY_MEDIA_CATEGORY, "Capture",
PW_KEY_MEDIA_ROLE, "Screen", NULL));
&connect_info);
obs_pipewire_stream_set_cursor_visible(capture->obs_pw_stream,
capture->cursor_visible);
}