mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-03 01:02:19 +00:00
jack: change the transport-mode enum into flags
One can use (or not use) master and slave mode independently.
This commit is contained in:
parent
073a03ef5c
commit
18e8aa48e6
7 changed files with 22 additions and 24 deletions
|
@ -52,16 +52,14 @@ gst_jack_transport_get_type (void)
|
||||||
static volatile gsize type = 0;
|
static volatile gsize type = 0;
|
||||||
|
|
||||||
if (g_once_init_enter (&type)) {
|
if (g_once_init_enter (&type)) {
|
||||||
static const GEnumValue enum_values[] = {
|
static const GFlagsValue flag_values[] = {
|
||||||
{GST_JACK_TRANSPORT_AUTONOMOUS,
|
|
||||||
"No transport support", "autonomous"},
|
|
||||||
{GST_JACK_TRANSPORT_MASTER,
|
{GST_JACK_TRANSPORT_MASTER,
|
||||||
"Start and stop transport with state changes", "master"},
|
"Start and stop transport with state changes", "master"},
|
||||||
{GST_JACK_TRANSPORT_SLAVE,
|
{GST_JACK_TRANSPORT_SLAVE,
|
||||||
"Follow transport state changes", "slave"},
|
"Follow transport state changes", "slave"},
|
||||||
{0, NULL, NULL},
|
{0, NULL, NULL},
|
||||||
};
|
};
|
||||||
GType tmp = g_enum_register_static ("GstJackTransport", enum_values);
|
GType tmp = g_flags_register_static ("GstJackTransport", flag_values);
|
||||||
g_once_init_leave (&type, tmp);
|
g_once_init_leave (&type, tmp);
|
||||||
}
|
}
|
||||||
return (GType) type;
|
return (GType) type;
|
||||||
|
|
|
@ -53,9 +53,9 @@ typedef enum {
|
||||||
* client behaviour regarding to the transport mechanism.
|
* client behaviour regarding to the transport mechanism.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GST_JACK_TRANSPORT_AUTONOMOUS,
|
GST_JACK_TRANSPORT_AUTONOMOUS = 0,
|
||||||
GST_JACK_TRANSPORT_MASTER,
|
GST_JACK_TRANSPORT_MASTER = (0 << 1),
|
||||||
GST_JACK_TRANSPORT_SLAVE
|
GST_JACK_TRANSPORT_SLAVE = (1 << 1),
|
||||||
} GstJackTransport;
|
} GstJackTransport;
|
||||||
|
|
||||||
typedef jack_default_audio_sample_t sample_t;
|
typedef jack_default_audio_sample_t sample_t;
|
||||||
|
|
|
@ -88,10 +88,10 @@ static gboolean
|
||||||
jack_handle_transport_change (GstJackAudioClient * client, GstState state)
|
jack_handle_transport_change (GstJackAudioClient * client, GstState state)
|
||||||
{
|
{
|
||||||
GstObject *obj = GST_OBJECT_PARENT (client->user_data);
|
GstObject *obj = GST_OBJECT_PARENT (client->user_data);
|
||||||
GstJackTransport mode;
|
guint mode;
|
||||||
|
|
||||||
g_object_get (obj, "transport", &mode, NULL);
|
g_object_get (obj, "transport", &mode, NULL);
|
||||||
if ((mode == GST_JACK_TRANSPORT_SLAVE) && (GST_STATE (obj) != state)) {
|
if ((mode & GST_JACK_TRANSPORT_SLAVE) && (GST_STATE (obj) != state)) {
|
||||||
GST_INFO_OBJECT (obj, "requesting state change: %s",
|
GST_INFO_OBJECT (obj, "requesting state change: %s",
|
||||||
gst_element_state_get_name (state));
|
gst_element_state_get_name (state));
|
||||||
gst_element_post_message (GST_ELEMENT (obj),
|
gst_element_post_message (GST_ELEMENT (obj),
|
||||||
|
|
|
@ -560,7 +560,7 @@ gst_jack_ring_buffer_start (GstRingBuffer * buf)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (sink, "start");
|
GST_DEBUG_OBJECT (sink, "start");
|
||||||
|
|
||||||
if (sink->transport == GST_JACK_TRANSPORT_MASTER) {
|
if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|
||||||
client = gst_jack_audio_client_get_client (sink->client);
|
client = gst_jack_audio_client_get_client (sink->client);
|
||||||
|
@ -579,7 +579,7 @@ gst_jack_ring_buffer_pause (GstRingBuffer * buf)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (sink, "pause");
|
GST_DEBUG_OBJECT (sink, "pause");
|
||||||
|
|
||||||
if (sink->transport == GST_JACK_TRANSPORT_MASTER) {
|
if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|
||||||
client = gst_jack_audio_client_get_client (sink->client);
|
client = gst_jack_audio_client_get_client (sink->client);
|
||||||
|
@ -598,7 +598,7 @@ gst_jack_ring_buffer_stop (GstRingBuffer * buf)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (sink, "stop");
|
GST_DEBUG_OBJECT (sink, "stop");
|
||||||
|
|
||||||
if (sink->transport == GST_JACK_TRANSPORT_MASTER) {
|
if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|
||||||
client = gst_jack_audio_client_get_client (sink->client);
|
client = gst_jack_audio_client_get_client (sink->client);
|
||||||
|
@ -767,7 +767,7 @@ gst_jack_audio_sink_class_init (GstJackAudioSinkClass * klass)
|
||||||
* Since: 0.10.31
|
* Since: 0.10.31
|
||||||
*/
|
*/
|
||||||
g_object_class_install_property (gobject_class, PROP_TRANSPORT,
|
g_object_class_install_property (gobject_class, PROP_TRANSPORT,
|
||||||
g_param_spec_enum ("transport", "Transport mode",
|
g_param_spec_flags ("transport", "Transport mode",
|
||||||
"Jack transport behaviour of the client",
|
"Jack transport behaviour of the client",
|
||||||
GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
|
GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
@ -840,7 +840,7 @@ gst_jack_audio_sink_set_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PROP_TRANSPORT:
|
case PROP_TRANSPORT:
|
||||||
sink->transport = g_value_get_enum (value);
|
sink->transport = g_value_get_flags (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -870,7 +870,7 @@ gst_jack_audio_sink_get_property (GObject * object, guint prop_id,
|
||||||
g_value_set_boxed (value, sink->jclient);
|
g_value_set_boxed (value, sink->jclient);
|
||||||
break;
|
break;
|
||||||
case PROP_TRANSPORT:
|
case PROP_TRANSPORT:
|
||||||
g_value_set_enum (value, sink->transport);
|
g_value_set_flags (value, sink->transport);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct _GstJackAudioSink {
|
||||||
gchar *server;
|
gchar *server;
|
||||||
jack_client_t *jclient;
|
jack_client_t *jclient;
|
||||||
gchar *client_name;
|
gchar *client_name;
|
||||||
GstJackTransport transport;
|
guint transport;
|
||||||
|
|
||||||
/* our client */
|
/* our client */
|
||||||
GstJackAudioClient *client;
|
GstJackAudioClient *client;
|
||||||
|
|
|
@ -572,7 +572,7 @@ gst_jack_ring_buffer_start (GstRingBuffer * buf)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "start");
|
GST_DEBUG_OBJECT (src, "start");
|
||||||
|
|
||||||
if (src->transport == GST_JACK_TRANSPORT_MASTER) {
|
if (src->transport & GST_JACK_TRANSPORT_MASTER) {
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|
||||||
client = gst_jack_audio_client_get_client (src->client);
|
client = gst_jack_audio_client_get_client (src->client);
|
||||||
|
@ -591,7 +591,7 @@ gst_jack_ring_buffer_pause (GstRingBuffer * buf)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "pause");
|
GST_DEBUG_OBJECT (src, "pause");
|
||||||
|
|
||||||
if (src->transport == GST_JACK_TRANSPORT_MASTER) {
|
if (src->transport & GST_JACK_TRANSPORT_MASTER) {
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|
||||||
client = gst_jack_audio_client_get_client (src->client);
|
client = gst_jack_audio_client_get_client (src->client);
|
||||||
|
@ -610,7 +610,7 @@ gst_jack_ring_buffer_stop (GstRingBuffer * buf)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "stop");
|
GST_DEBUG_OBJECT (src, "stop");
|
||||||
|
|
||||||
if (src->transport == GST_JACK_TRANSPORT_MASTER) {
|
if (src->transport & GST_JACK_TRANSPORT_MASTER) {
|
||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
|
|
||||||
client = gst_jack_audio_client_get_client (src->client);
|
client = gst_jack_audio_client_get_client (src->client);
|
||||||
|
@ -787,7 +787,7 @@ gst_jack_audio_src_class_init (GstJackAudioSrcClass * klass)
|
||||||
* Since: 0.10.31
|
* Since: 0.10.31
|
||||||
*/
|
*/
|
||||||
g_object_class_install_property (gobject_class, PROP_TRANSPORT,
|
g_object_class_install_property (gobject_class, PROP_TRANSPORT,
|
||||||
g_param_spec_enum ("transport", "Transport mode",
|
g_param_spec_flags ("transport", "Transport mode",
|
||||||
"Jack transport behaviour of the client",
|
"Jack transport behaviour of the client",
|
||||||
GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
|
GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
@ -857,7 +857,7 @@ gst_jack_audio_src_set_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PROP_TRANSPORT:
|
case PROP_TRANSPORT:
|
||||||
src->transport = g_value_get_enum (value);
|
src->transport = g_value_get_flags (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -885,7 +885,7 @@ gst_jack_audio_src_get_property (GObject * object, guint prop_id,
|
||||||
g_value_set_boxed (value, src->jclient);
|
g_value_set_boxed (value, src->jclient);
|
||||||
break;
|
break;
|
||||||
case PROP_TRANSPORT:
|
case PROP_TRANSPORT:
|
||||||
g_value_set_enum (value, src->transport);
|
g_value_set_flags (value, src->transport);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
|
|
@ -76,7 +76,7 @@ struct _GstJackAudioSrc
|
||||||
gchar *server;
|
gchar *server;
|
||||||
jack_client_t *jclient;
|
jack_client_t *jclient;
|
||||||
gchar *client_name;
|
gchar *client_name;
|
||||||
GstJackTransport transport;
|
guint transport;
|
||||||
|
|
||||||
/* our client */
|
/* our client */
|
||||||
GstJackAudioClient *client;
|
GstJackAudioClient *client;
|
||||||
|
|
Loading…
Reference in a new issue