pulsedevicemonitor: Index are per facility, not global
authorOlivier Crête <olivier.crete@ocrete.ca>
Sun, 4 May 2014 05:14:33 +0000 (01:14 -0400)
committerOlivier Crête <olivier.crete@ocrete.ca>
Sun, 4 May 2014 05:14:39 +0000 (01:14 -0400)
So need to keep the type of device in the device object

ext/pulse/pulsedevicemonitor.c
ext/pulse/pulsedevicemonitor.h

index af4db6d..b4ee819 100644 (file)
@@ -282,7 +282,11 @@ context_subscribe_cb (pa_context * context, pa_subscription_event_type_t type,
     for (item = monitor->devices; item; item = item->next) {
       dev = item->data;
 
-      if (dev->device_index == idx) {
+      if (((facility == PA_SUBSCRIPTION_EVENT_SOURCE &&
+                  dev->type == GST_PULSE_DEVICE_TYPE_SOURCE) ||
+              (facility == PA_SUBSCRIPTION_EVENT_SINK &&
+                  dev->type == GST_PULSE_DEVICE_TYPE_SINK)) &&
+          dev->device_index == idx) {
         gst_object_ref (dev);
         break;
       }
@@ -629,6 +633,7 @@ gst_pulse_device_new (guint device_index, const gchar * device_name,
       "display-name", device_name, "caps", caps, "klass", klass,
       "internal-name", internal_name, NULL);
 
+  gstdev->type = type;
   gstdev->device_index = device_index;
   gstdev->element = element;
 
index 9d9070e..100ba9b 100644 (file)
@@ -83,6 +83,7 @@ typedef struct _GstPulseDeviceClass GstPulseDeviceClass;
 struct _GstPulseDevice {
   GstDevice         parent;
 
+  GstPulseDeviceType type;
   guint             device_index;
   gchar            *internal_name;
   const gchar      *element;