summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Adam <jakub.adam@ktknet.cz>2016-06-22 09:37:16 +0200
committerJakub Adam <jakub.adam@ktknet.cz>2016-06-22 09:37:16 +0200
commit1797aa8cb632e97c5e8365f73d850349523e96e6 (patch)
tree1de3b1899c83dd8a81fef7659ec64abffc435e9e
parent394406004d1d54eb9cb445fabeadc60cad5cf6bf (diff)
downloadpidgin-1797aa8cb632e97c5e8365f73d850349523e96e6.tar.gz
mediamanager: ignore PulseAudio monitors
Ignore PulseAudio monitor audio sources since they have little use in the context of telephony.
-rw-r--r--libpurple/mediamanager.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
index dff3e19e0c..9f06a8582e 100644
--- a/libpurple/mediamanager.c
+++ b/libpurple/mediamanager.c
@@ -2001,6 +2001,40 @@ gst_device_create_cb(PurpleMediaElementInfo *info, PurpleMedia *media,
return result;
}
+static gboolean
+device_is_ignored(GstDevice *device)
+{
+ gboolean result = FALSE;
+
+#if GST_CHECK_VERSION(1, 6, 0)
+ gchar *device_class;
+
+ g_return_val_if_fail(device, TRUE);
+
+ device_class = gst_device_get_device_class(device);
+
+ /* Ignore PulseAudio monitor audio sources since they have little use
+ * in the context of telephony.*/
+ if (purple_strequal(device_class, "Audio/Source")) {
+ GstStructure *properties;
+ const gchar *pa_class;
+
+ properties = gst_device_get_properties(device);
+
+ pa_class = gst_structure_get_string(properties, "device.class");
+ if (purple_strequal(pa_class, "monitor")) {
+ result = TRUE;
+ }
+
+ gst_structure_free(properties);
+ }
+
+ g_free(device_class);
+#endif /* GST_CHECK_VERSION(1, 6, 0) */
+
+ return result;
+}
+
static void
purple_media_manager_register_gst_device(PurpleMediaManager *manager,
GstDevice *device)
@@ -2011,6 +2045,10 @@ purple_media_manager_register_gst_device(PurpleMediaManager *manager,
gchar *device_class;
gchar *id;
+ if (device_is_ignored(device)) {
+ return;
+ }
+
name = gst_device_get_display_name(device);
device_class = gst_device_get_device_class(device);