jack: Add new connection mode
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 16 Mar 2009 10:21:02 +0000 (11:21 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sun, 2 Jan 2011 14:30:07 +0000 (14:30 +0000)
Add a new connection mode to jacksrc and jacksink. In this new auto-force
connection mode jack will create as many ports as requested/needed in the
pipeline and will then connect as many physical ports as possible, possibly
leaving some ports unconnected.

Also get rid of some leftover g_print.

Fixes #575284.

ext/jack/gstjack.c
ext/jack/gstjack.h
ext/jack/gstjackaudiosink.c
ext/jack/gstjackaudiosrc.c

index 96afd06..0830250 100644 (file)
@@ -33,6 +33,9 @@ gst_jack_connect_get_type (void)
         "Don't automatically connect ports to physical ports", "none"},
     {GST_JACK_CONNECT_AUTO,
         "Automatically connect ports to physical ports", "auto"},
+    {GST_JACK_CONNECT_AUTO_FORCED,
+          "Automatically connect ports to as many physical ports as possible",
+        "auto-forced"},
     {0, NULL, NULL},
   };
 
index 585b72e..fc26b71 100644 (file)
  * @GST_JACK_CONNECT_AUTO: In this mode, the element will try to connect each
  *     output port to a random physical jack input pin. The sink will
  *     expose the number of physical channels on its pad caps.
+ * @GST_JACK_CONNECT_AUTO_FORCED: In this mode, the element will try to connect each
+ *     output port to a random physical jack input pin. The  element will accept any number
+ *     of input channels.
  *
  * Specify how the output ports will be connected.
  */
 
 typedef enum {
   GST_JACK_CONNECT_NONE,
-  GST_JACK_CONNECT_AUTO
+  GST_JACK_CONNECT_AUTO,
+  GST_JACK_CONNECT_AUTO_FORCED
 } GstJackConnect;
 
 typedef jack_default_audio_sample_t sample_t;
index 228a229..01383cb 100644 (file)
@@ -454,7 +454,8 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
 
   /* if we need to automatically connect the ports, do so now. We must do this
    * after activating the client. */
-  if (sink->connect == GST_JACK_CONNECT_AUTO) {
+  if (sink->connect == GST_JACK_CONNECT_AUTO
+      || sink->connect == GST_JACK_CONNECT_AUTO_FORCED) {
     /* find all the physical input ports. A physical input port is a port
      * associated with a hardware device. Someone needs connect to a physical
      * port in order to hear something. */
index 682a684..ca4bf73 100644 (file)
@@ -233,7 +233,6 @@ jack_process_cb (jack_nframes_t nframes, void *arg)
   /* the samples in the jack input buffers have to be interleaved into the 
    * ringbuffer 
    */
-
   for (i = 0; i < nframes; ++i)
     for (j = 0; j < channels; ++j)
       *data++ = buffers[j][i];
@@ -458,7 +457,8 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
 
   /* if we need to automatically connect the ports, do so now. We must do this
    * after activating the client. */
-  if (src->connect == GST_JACK_CONNECT_AUTO) {
+  if (src->connect == GST_JACK_CONNECT_AUTO
+      || src->connect == GST_JACK_CONNECT_AUTO_FORCED) {
     /* find all the physical output ports. A physical output port is a port
      * associated with a hardware device. Someone needs connect to a physical
      * port in order to capture something. */
@@ -483,10 +483,9 @@ gst_jack_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
       }
       GST_DEBUG_OBJECT (src, "try connecting to %s",
           jack_port_name (src->ports[i]));
-      /* connect the physical port to a port */
 
+      /* connect the physical port to a port */
       res = jack_connect (client, ports[i], jack_port_name (src->ports[i]));
-      g_print ("connecting to %s\n", jack_port_name (src->ports[i]));
       if (res != 0 && res != EEXIST)
         goto cannot_connect;
     }