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:
parent
afab71aa80
commit
a1db8e5bde
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user