summaryrefslogtreecommitdiff
path: root/ext/jack/gstjackaudiosrc.c
diff options
context:
space:
mode:
authorStefan Sauer <ensonic@users.sf.net>2012-01-10 22:27:11 +0100
committerStefan Sauer <ensonic@users.sf.net>2012-01-10 22:35:02 +0100
commit7d4044aa46a947f96cbfff11e89fed395b289a08 (patch)
tree229302d1640d9b8d7a6764dc0363bcb7a68ed249 /ext/jack/gstjackaudiosrc.c
parentd1bb060d71923e6db5c9f837232281a9b33b08cc (diff)
jack: add transport control handling
This feature allows to start and stop playback from other jack applications (e.g. qjackctl).
Diffstat (limited to 'ext/jack/gstjackaudiosrc.c')
-rw-r--r--ext/jack/gstjackaudiosrc.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ext/jack/gstjackaudiosrc.c b/ext/jack/gstjackaudiosrc.c
index 3c3797062..a8ca1ed7d 100644
--- a/ext/jack/gstjackaudiosrc.c
+++ b/ext/jack/gstjackaudiosrc.c
@@ -211,10 +211,20 @@ jack_process_cb (jack_nframes_t nframes, void *arg)
gint writeseg;
gint channels, i, j, flen;
sample_t *data;
+ GstState state;
buf = GST_RING_BUFFER_CAST (arg);
src = GST_JACK_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+ /* handle transport state requisitions */
+ state = gst_jack_audio_client_get_transport_state (src->client);
+ if ((state != GST_STATE_VOID_PENDING) && (GST_STATE (src) != state)) {
+ GST_DEBUG_OBJECT (src, "requesting state change: %s",
+ gst_element_state_get_name (state));
+ gst_element_post_message (GST_ELEMENT (src),
+ gst_message_new_request_state (GST_OBJECT (src), state));
+ }
+
channels = buf->spec.channels;
/* get input buffers */