diff options
author | Jakub Adam <jakub.adam@ktknet.cz> | 2016-06-22 09:37:16 +0200 |
---|---|---|
committer | Jakub Adam <jakub.adam@ktknet.cz> | 2016-06-22 09:37:16 +0200 |
commit | 1797aa8cb632e97c5e8365f73d850349523e96e6 (patch) | |
tree | 1de3b1899c83dd8a81fef7659ec64abffc435e9e | |
parent | 394406004d1d54eb9cb445fabeadc60cad5cf6bf (diff) | |
download | pidgin-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.c | 38 |
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); |