static guint gst_device_monitor_add_filter_unlocked (GstDeviceMonitor * monitor,
const gchar * classes, GstCaps * caps);
+static void
+provider_hidden (GstDeviceProvider * provider, const gchar * hidden,
+ GstDeviceMonitor * monitor);
+
+static void
+provider_unhidden (GstDeviceProvider * provider, const gchar * hidden,
+ GstDeviceMonitor * monitor);
+
struct DeviceFilter
{
guint id;
static void
-gst_device_monitor_remove (GstDeviceMonitor * self, guint i)
+gst_device_monitor_remove_provider (GstDeviceMonitor * self, guint i)
{
GstDeviceProvider *provider = g_ptr_array_index (self->priv->providers, i);
GstBus *bus;
g_signal_handlers_disconnect_by_func (bus, bus_sync_message, self);
gst_object_unref (bus);
+ g_signal_handlers_disconnect_by_func (provider, provider_hidden, self);
+ g_signal_handlers_disconnect_by_func (provider, provider_unhidden, self);
+
gst_object_unref (provider);
}
if (self->priv->providers) {
while (self->priv->providers->len)
- gst_device_monitor_remove (self, self->priv->providers->len - 1);
+ gst_device_monitor_remove_provider (self, self->priv->providers->len - 1);
g_ptr_array_unref (self->priv->providers);
self->priv->providers = NULL;
}
self->priv->filters = NULL;
}
+ if (self->priv->hidden) {
+ g_list_free_full (self->priv->hidden, g_free);
+ self->priv->hidden = NULL;
+ }
+
gst_object_replace ((GstObject **) & self->priv->bus, NULL);
G_OBJECT_CLASS (gst_device_monitor_parent_class)->dispose (object);
}
if (!valid) {
- gst_device_monitor_remove (monitor, i);
+ gst_device_monitor_remove_provider (monitor, i);
i--;
}
}