mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 20:42:30 +00:00
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:
parent
276228da80
commit
13bc8b8c03
4 changed files with 13 additions and 6 deletions
|
@ -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},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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. */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue