jack: Add new connection mode

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.
This commit is contained in:
Wim Taymans 2009-03-16 11:21:02 +01:00
parent 276228da80
commit 13bc8b8c03
4 changed files with 13 additions and 6 deletions

View file

@ -33,6 +33,9 @@ gst_jack_connect_get_type (void)
"Don't automatically connect ports to physical ports", "none"}, "Don't automatically connect ports to physical ports", "none"},
{GST_JACK_CONNECT_AUTO, {GST_JACK_CONNECT_AUTO,
"Automatically connect ports to physical ports", "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}, {0, NULL, NULL},
}; };

View file

@ -31,13 +31,17 @@
* @GST_JACK_CONNECT_AUTO: In this mode, the element will try to connect each * @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 * output port to a random physical jack input pin. The sink will
* expose the number of physical channels on its pad caps. * 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. * Specify how the output ports will be connected.
*/ */
typedef enum { typedef enum {
GST_JACK_CONNECT_NONE, GST_JACK_CONNECT_NONE,
GST_JACK_CONNECT_AUTO GST_JACK_CONNECT_AUTO,
GST_JACK_CONNECT_AUTO_FORCED
} GstJackConnect; } GstJackConnect;
typedef jack_default_audio_sample_t sample_t; typedef jack_default_audio_sample_t sample_t;

View 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 /* if we need to automatically connect the ports, do so now. We must do this
* after activating the client. */ * 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 /* find all the physical input ports. A physical input port is a port
* associated with a hardware device. Someone needs connect to a physical * associated with a hardware device. Someone needs connect to a physical
* port in order to hear something. */ * port in order to hear something. */

View 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 /* the samples in the jack input buffers have to be interleaved into the
* ringbuffer * ringbuffer
*/ */
for (i = 0; i < nframes; ++i) for (i = 0; i < nframes; ++i)
for (j = 0; j < channels; ++j) for (j = 0; j < channels; ++j)
*data++ = buffers[j][i]; *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 /* if we need to automatically connect the ports, do so now. We must do this
* after activating the client. */ * 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 /* find all the physical output ports. A physical output port is a port
* associated with a hardware device. Someone needs connect to a physical * associated with a hardware device. Someone needs connect to a physical
* port in order to capture something. */ * 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", GST_DEBUG_OBJECT (src, "try connecting to %s",
jack_port_name (src->ports[i])); 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])); 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) if (res != 0 && res != EEXIST)
goto cannot_connect; goto cannot_connect;
} }