|
@@ -52,7 +52,7 @@ struct format_info {
|
|
|
DARRAY(uint64_t) modifiers;
|
|
|
};
|
|
|
|
|
|
-struct _obs_pipewire_data {
|
|
|
+struct _obs_pipewire {
|
|
|
int pipewire_fd;
|
|
|
|
|
|
gs_texture_t *texture;
|
|
@@ -112,7 +112,7 @@ static bool check_pw_version(const struct obs_pw_version *pw_version, int major,
|
|
|
return pw_version->micro >= micro;
|
|
|
}
|
|
|
|
|
|
-static void update_pw_versions(obs_pipewire_data *obs_pw, const char *version)
|
|
|
+static void update_pw_versions(obs_pipewire *obs_pw, const char *version)
|
|
|
{
|
|
|
blog(LOG_INFO, "[pipewire] Server version: %s", version);
|
|
|
blog(LOG_INFO, "[pipewire] Library version: %s",
|
|
@@ -124,7 +124,7 @@ static void update_pw_versions(obs_pipewire_data *obs_pw, const char *version)
|
|
|
blog(LOG_WARNING, "[pipewire] failed to parse server version");
|
|
|
}
|
|
|
|
|
|
-static void teardown_pipewire(obs_pipewire_data *obs_pw)
|
|
|
+static void teardown_pipewire(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
if (obs_pw->thread_loop) {
|
|
|
pw_thread_loop_wait(obs_pw->thread_loop);
|
|
@@ -145,7 +145,7 @@ static void teardown_pipewire(obs_pipewire_data *obs_pw)
|
|
|
obs_pw->negotiated = false;
|
|
|
}
|
|
|
|
|
|
-static void destroy_session(obs_pipewire_data *obs_pw)
|
|
|
+static void destroy_session(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
obs_enter_graphics();
|
|
|
g_clear_pointer(&obs_pw->cursor.texture, gs_texture_destroy);
|
|
@@ -153,7 +153,7 @@ static void destroy_session(obs_pipewire_data *obs_pw)
|
|
|
obs_leave_graphics();
|
|
|
}
|
|
|
|
|
|
-static inline bool has_effective_crop(obs_pipewire_data *obs_pw)
|
|
|
+static inline bool has_effective_crop(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
return obs_pw->crop.valid &&
|
|
|
(obs_pw->crop.x != 0 || obs_pw->crop.y != 0 ||
|
|
@@ -289,7 +289,7 @@ static inline struct spa_pod *build_format(struct spa_pod_builder *b,
|
|
|
return spa_pod_builder_pop(b, &format_frame);
|
|
|
}
|
|
|
|
|
|
-static bool build_format_params(obs_pipewire_data *obs_pw,
|
|
|
+static bool build_format_params(obs_pipewire *obs_pw,
|
|
|
struct spa_pod_builder *pod_builder,
|
|
|
const struct spa_pod ***param_list,
|
|
|
uint32_t *n_params)
|
|
@@ -342,7 +342,7 @@ static bool drm_format_available(uint32_t drm_format, uint32_t *drm_formats,
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-static void init_format_info(obs_pipewire_data *obs_pw)
|
|
|
+static void init_format_info(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
da_init(obs_pw->format_info);
|
|
|
|
|
@@ -389,7 +389,7 @@ static void init_format_info(obs_pipewire_data *obs_pw)
|
|
|
bfree(drm_formats);
|
|
|
}
|
|
|
|
|
|
-static void clear_format_info(obs_pipewire_data *obs_pw)
|
|
|
+static void clear_format_info(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
for (size_t i = 0; i < obs_pw->format_info.num; i++) {
|
|
|
da_free(obs_pw->format_info.array[i].modifiers);
|
|
@@ -397,7 +397,7 @@ static void clear_format_info(obs_pipewire_data *obs_pw)
|
|
|
da_free(obs_pw->format_info);
|
|
|
}
|
|
|
|
|
|
-static void remove_modifier_from_format(obs_pipewire_data *obs_pw,
|
|
|
+static void remove_modifier_from_format(obs_pipewire *obs_pw,
|
|
|
uint32_t spa_format, uint64_t modifier)
|
|
|
{
|
|
|
for (size_t i = 0; i < obs_pw->format_info.num; i++) {
|
|
@@ -424,7 +424,7 @@ static void remove_modifier_from_format(obs_pipewire_data *obs_pw,
|
|
|
static void renegotiate_format(void *data, uint64_t expirations)
|
|
|
{
|
|
|
UNUSED_PARAMETER(expirations);
|
|
|
- obs_pipewire_data *obs_pw = (obs_pipewire_data *)data;
|
|
|
+ obs_pipewire *obs_pw = (obs_pipewire *)data;
|
|
|
const struct spa_pod **params = NULL;
|
|
|
|
|
|
blog(LOG_INFO, "[pipewire] Renegotiating stream");
|
|
@@ -450,7 +450,7 @@ static void renegotiate_format(void *data, uint64_t expirations)
|
|
|
|
|
|
static void on_process_cb(void *user_data)
|
|
|
{
|
|
|
- obs_pipewire_data *obs_pw = user_data;
|
|
|
+ obs_pipewire *obs_pw = user_data;
|
|
|
struct spa_meta_cursor *cursor;
|
|
|
uint32_t drm_format;
|
|
|
struct spa_meta_header *header;
|
|
@@ -655,7 +655,7 @@ read_metadata:
|
|
|
static void on_param_changed_cb(void *user_data, uint32_t id,
|
|
|
const struct spa_pod *param)
|
|
|
{
|
|
|
- obs_pipewire_data *obs_pw = user_data;
|
|
|
+ obs_pipewire *obs_pw = user_data;
|
|
|
struct spa_pod_builder pod_builder;
|
|
|
const struct spa_pod *params[4];
|
|
|
uint32_t buffer_types;
|
|
@@ -743,7 +743,7 @@ static void on_state_changed_cb(void *user_data, enum pw_stream_state old,
|
|
|
{
|
|
|
UNUSED_PARAMETER(old);
|
|
|
|
|
|
- obs_pipewire_data *obs_pw = user_data;
|
|
|
+ obs_pipewire *obs_pw = user_data;
|
|
|
|
|
|
blog(LOG_INFO, "[pipewire] Stream %p state: \"%s\" (error: %s)",
|
|
|
obs_pw->stream, pw_stream_state_as_string(state),
|
|
@@ -759,7 +759,7 @@ static const struct pw_stream_events stream_events = {
|
|
|
|
|
|
static void on_core_info_cb(void *user_data, const struct pw_core_info *info)
|
|
|
{
|
|
|
- obs_pipewire_data *obs_pw = user_data;
|
|
|
+ obs_pipewire *obs_pw = user_data;
|
|
|
|
|
|
update_pw_versions(obs_pw, info->version);
|
|
|
}
|
|
@@ -767,7 +767,7 @@ static void on_core_info_cb(void *user_data, const struct pw_core_info *info)
|
|
|
static void on_core_error_cb(void *user_data, uint32_t id, int seq, int res,
|
|
|
const char *message)
|
|
|
{
|
|
|
- obs_pipewire_data *obs_pw = user_data;
|
|
|
+ obs_pipewire *obs_pw = user_data;
|
|
|
|
|
|
blog(LOG_ERROR, "[pipewire] Error id:%u seq:%d res:%d (%s): %s", id,
|
|
|
seq, res, g_strerror(res), message);
|
|
@@ -777,7 +777,7 @@ static void on_core_error_cb(void *user_data, uint32_t id, int seq, int res,
|
|
|
|
|
|
static void on_core_done_cb(void *user_data, uint32_t id, int seq)
|
|
|
{
|
|
|
- obs_pipewire_data *obs_pw = user_data;
|
|
|
+ obs_pipewire *obs_pw = user_data;
|
|
|
|
|
|
if (id == PW_ID_CORE && obs_pw->server_version_sync == seq)
|
|
|
pw_thread_loop_signal(obs_pw->thread_loop, FALSE);
|
|
@@ -792,11 +792,11 @@ static const struct pw_core_events core_events = {
|
|
|
|
|
|
/* obs_source_info methods */
|
|
|
|
|
|
-obs_pipewire_data *obs_pipewire_create(int pipewire_fd)
|
|
|
+obs_pipewire *obs_pipewire_create(int pipewire_fd)
|
|
|
{
|
|
|
- obs_pipewire_data *obs_pw;
|
|
|
+ obs_pipewire *obs_pw;
|
|
|
|
|
|
- obs_pw = bzalloc(sizeof(obs_pipewire_data));
|
|
|
+ obs_pw = bzalloc(sizeof(obs_pipewire));
|
|
|
obs_pw->pipewire_fd = pipewire_fd;
|
|
|
|
|
|
init_format_info(obs_pw);
|
|
@@ -836,7 +836,7 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd)
|
|
|
return obs_pw;
|
|
|
}
|
|
|
|
|
|
-void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node,
|
|
|
+void obs_pipewire_connect_stream(obs_pipewire *obs_pw, int pipewire_node,
|
|
|
const char *stream_name,
|
|
|
struct pw_properties *stream_properties)
|
|
|
{
|
|
@@ -882,7 +882,7 @@ void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node,
|
|
|
bfree(params);
|
|
|
}
|
|
|
|
|
|
-void obs_pipewire_destroy(obs_pipewire_data *obs_pw)
|
|
|
+void obs_pipewire_destroy(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
if (!obs_pw)
|
|
|
return;
|
|
@@ -895,19 +895,19 @@ void obs_pipewire_destroy(obs_pipewire_data *obs_pw)
|
|
|
bfree(obs_pw);
|
|
|
}
|
|
|
|
|
|
-void obs_pipewire_show(obs_pipewire_data *obs_pw)
|
|
|
+void obs_pipewire_show(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
if (obs_pw->stream)
|
|
|
pw_stream_set_active(obs_pw->stream, true);
|
|
|
}
|
|
|
|
|
|
-void obs_pipewire_hide(obs_pipewire_data *obs_pw)
|
|
|
+void obs_pipewire_hide(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
if (obs_pw->stream)
|
|
|
pw_stream_set_active(obs_pw->stream, false);
|
|
|
}
|
|
|
|
|
|
-uint32_t obs_pipewire_get_width(obs_pipewire_data *obs_pw)
|
|
|
+uint32_t obs_pipewire_get_width(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
if (!obs_pw->negotiated)
|
|
|
return 0;
|
|
@@ -918,7 +918,7 @@ uint32_t obs_pipewire_get_width(obs_pipewire_data *obs_pw)
|
|
|
return obs_pw->format.info.raw.size.width;
|
|
|
}
|
|
|
|
|
|
-uint32_t obs_pipewire_get_height(obs_pipewire_data *obs_pw)
|
|
|
+uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw)
|
|
|
{
|
|
|
if (!obs_pw->negotiated)
|
|
|
return 0;
|
|
@@ -929,7 +929,7 @@ uint32_t obs_pipewire_get_height(obs_pipewire_data *obs_pw)
|
|
|
return obs_pw->format.info.raw.size.height;
|
|
|
}
|
|
|
|
|
|
-void obs_pipewire_video_render(obs_pipewire_data *obs_pw, gs_effect_t *effect)
|
|
|
+void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect)
|
|
|
{
|
|
|
gs_eparam_t *image;
|
|
|
|
|
@@ -963,8 +963,7 @@ void obs_pipewire_video_render(obs_pipewire_data *obs_pw, gs_effect_t *effect)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void obs_pipewire_set_cursor_visible(obs_pipewire_data *obs_pw,
|
|
|
- bool cursor_visible)
|
|
|
+void obs_pipewire_set_cursor_visible(obs_pipewire *obs_pw, bool cursor_visible)
|
|
|
{
|
|
|
obs_pw->cursor.visible = cursor_visible;
|
|
|
}
|