0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 04:42:18 +02:00

linux-pipewire: Move stream properties to constructors

And let each portal pass the stream properties relevant to them.
This makes the pipewire.c more independent of the actual portal
by providing a wrapper to create a stream. This will be relevant
later, when linux-pipewire introduces more portals like the Camera
one.
This commit is contained in:
columbarius 2022-06-29 00:28:26 +02:00 committed by Georges Basile Stavracas Neto
parent 874c30cb88
commit 86be35ae99
3 changed files with 20 additions and 11 deletions

View File

@ -791,7 +791,9 @@ static const struct pw_core_events core_events = {
.error = on_core_error_cb,
};
static void play_pipewire_stream(obs_pipewire_data *obs_pw)
static void play_pipewire_stream(obs_pipewire_data *obs_pw,
const char *stream_name,
struct pw_properties *stream_properties)
{
struct spa_pod_builder pod_builder;
const struct spa_pod **params = NULL;
@ -834,11 +836,8 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw)
pw_thread_loop_wait(obs_pw->thread_loop);
/* Stream */
obs_pw->stream = pw_stream_new(
obs_pw->core, "OBS Studio",
pw_properties_new(PW_KEY_MEDIA_TYPE, "Video",
PW_KEY_MEDIA_CATEGORY, "Capture",
PW_KEY_MEDIA_ROLE, "Screen", NULL));
obs_pw->stream =
pw_stream_new(obs_pw->core, stream_name, stream_properties);
pw_stream_add_listener(obs_pw->stream, &obs_pw->stream_listener,
&stream_events, obs_pw);
blog(LOG_INFO, "[pipewire] Created stream %p", obs_pw->stream);
@ -868,7 +867,9 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw)
/* obs_source_info methods */
obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node)
obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node,
const char *stream_name,
struct pw_properties *stream_properties)
{
obs_pipewire_data *obs_pw = bzalloc(sizeof(obs_pipewire_data));
@ -876,7 +877,7 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node)
obs_pw->pipewire_node = pipewire_node;
init_format_info(obs_pw);
play_pipewire_stream(obs_pw);
play_pipewire_stream(obs_pw, stream_name, stream_properties);
return obs_pw;
}

View File

@ -22,9 +22,14 @@
#include <obs-module.h>
#include <pipewire/keys.h>
#include <pipewire/properties.h>
typedef struct _obs_pipewire_data obs_pipewire_data;
obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node);
obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node,
const char *stream_name,
struct pw_properties *stream_properties);
void obs_pipewire_destroy(obs_pipewire_data *obs_pw);
void obs_pipewire_show(obs_pipewire_data *obs_pw);

View File

@ -245,8 +245,11 @@ static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res,
return;
}
capture->obs_pw =
obs_pipewire_create(pipewire_fd, capture->pipewire_node);
capture->obs_pw = obs_pipewire_create(
pipewire_fd, capture->pipewire_node, "OBS Studio",
pw_properties_new(PW_KEY_MEDIA_TYPE, "Video",
PW_KEY_MEDIA_CATEGORY, "Capture",
PW_KEY_MEDIA_ROLE, "Screen", NULL));
obs_pipewire_set_cursor_visible(capture->obs_pw,
capture->cursor_visible);
}