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