summaryrefslogtreecommitdiff
path: root/src/wireplumber.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wireplumber.c')
-rw-r--r--src/wireplumber.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/wireplumber.c b/src/wireplumber.c
index f6bf948..3454a23 100644
--- a/src/wireplumber.c
+++ b/src/wireplumber.c
@@ -3,6 +3,7 @@
#include "audio.h"
#include "device-private.h"
#include "endpoint-private.h"
+#include "video.h"
#include "wp.h"
struct _AstalWpWp {
@@ -41,6 +42,7 @@ static guint astal_wp_wp_signals[ASTAL_WP_WP_N_SIGNALS] = {
typedef enum {
ASTAL_WP_WP_PROP_AUDIO = 1,
+ ASTAL_WP_WP_PROP_VIDEO,
ASTAL_WP_WP_PROP_ENDPOINTS,
ASTAL_WP_WP_PROP_DEVICES,
ASTAL_WP_WP_PROP_DEFAULT_SPEAKER,
@@ -112,6 +114,13 @@ GList *astal_wp_wp_get_devices(AstalWpWp *self) {
AstalWpAudio *astal_wp_wp_get_audio() { return astal_wp_audio_get_default(); }
/**
+ * astal_wp_wp_get_video
+ *
+ * Returns: (nullable) (transfer none): gets the video object
+ */
+AstalWpVideo *astal_wp_wp_get_video() { return astal_wp_video_get_default(); }
+
+/**
* astal_wp_wp_get_default_speaker
*
* Returns: (nullable) (transfer none): gets the default speaker object
@@ -136,6 +145,9 @@ static void astal_wp_wp_get_property(GObject *object, guint property_id, GValue
case ASTAL_WP_WP_PROP_AUDIO:
g_value_set_object(value, astal_wp_wp_get_audio());
break;
+ case ASTAL_WP_WP_PROP_VIDEO:
+ g_value_set_object(value, astal_wp_wp_get_video());
+ break;
case ASTAL_WP_WP_PROP_ENDPOINTS:
g_value_set_pointer(value, g_hash_table_get_values(priv->endpoints));
break;
@@ -166,6 +178,7 @@ static void astal_wp_wp_object_added(AstalWpWp *self, gpointer object) {
// key = wp_properties_item_get_key (pi);
// value = wp_properties_item_get_value (pi);
// g_print("%s: %s\n", key, value);
+ // g_value_unset(&item);
// }
AstalWpWpPrivate *priv = astal_wp_wp_get_instance_private(self);
@@ -316,7 +329,7 @@ static void astal_wp_wp_init(AstalWpWp *self) {
priv->endpoints = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
priv->devices = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
- wp_init(WP_INIT_ALL);
+ wp_init(7);
priv->core = wp_core_new(NULL, NULL, NULL);
if (!wp_core_connect(priv->core)) {
@@ -328,6 +341,7 @@ static void astal_wp_wp_init(AstalWpWp *self) {
WP_OBJECT_FEATURES_ALL);
wp_object_manager_request_object_features(priv->obj_manager, WP_TYPE_GLOBAL_PROXY,
WP_OBJECT_FEATURES_ALL);
+
wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
"media.class", "=s", "Audio/Sink", NULL);
wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
@@ -339,6 +353,18 @@ static void astal_wp_wp_init(AstalWpWp *self) {
wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_DEVICE,
WP_CONSTRAINT_TYPE_PW_GLOBAL_PROPERTY, "media.class", "=s",
"Audio/Device", NULL);
+
+ wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
+ "media.class", "=s", "Video/Sink", NULL);
+ wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
+ "media.class", "=s", "Video/Source", NULL);
+ wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
+ "media.class", "=s", "Stream/Output/Video", NULL);
+ wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
+ "media.class", "=s", "Stream/Input/Video", NULL);
+ wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_DEVICE,
+ WP_CONSTRAINT_TYPE_PW_GLOBAL_PROPERTY, "media.class", "=s",
+ "Video/Device", NULL);
// wp_object_manager_add_interest(priv->obj_manager, WP_TYPE_CLIENT, NULL);
g_signal_connect_swapped(priv->obj_manager, "installed", (GCallback)astal_wp_wp_objm_installed,
@@ -363,6 +389,8 @@ static void astal_wp_wp_class_init(AstalWpWpClass *class) {
astal_wp_wp_properties[ASTAL_WP_WP_PROP_AUDIO] =
g_param_spec_object("audio", "audio", "audio", ASTAL_WP_TYPE_AUDIO, G_PARAM_READABLE);
+ astal_wp_wp_properties[ASTAL_WP_WP_PROP_VIDEO] =
+ g_param_spec_object("video", "video", "video", ASTAL_WP_TYPE_VIDEO, G_PARAM_READABLE);
/**
* AstalWpWp:endpoints: (type GList(AstalWpEndpoint)) (transfer container)