jack: change the transport-mode enum into flags
authorStefan Sauer <ensonic@users.sf.net>
Sun, 4 Mar 2012 18:55:26 +0000 (19:55 +0100)
committerStefan Sauer <ensonic@users.sf.net>
Sun, 4 Mar 2012 18:56:43 +0000 (19:56 +0100)
One can use (or not use) master and slave mode independently.

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

index 019bef9..680a12d 100644 (file)
@@ -52,16 +52,14 @@ gst_jack_transport_get_type (void)
   static volatile gsize type = 0;
 
   if (g_once_init_enter (&type)) {
-    static const GEnumValue enum_values[] = {
-      {GST_JACK_TRANSPORT_AUTONOMOUS,
-          "No transport support", "autonomous"},
+    static const GFlagsValue flag_values[] = {
       {GST_JACK_TRANSPORT_MASTER,
           "Start and stop transport with state changes", "master"},
       {GST_JACK_TRANSPORT_SLAVE,
           "Follow transport state changes", "slave"},
       {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);
   }
   return (GType) type;
index d00c0e7..ff0712f 100644 (file)
@@ -53,9 +53,9 @@ typedef enum {
  * client behaviour regarding to the transport mechanism.
  */
 typedef enum {
-  GST_JACK_TRANSPORT_AUTONOMOUS,
-  GST_JACK_TRANSPORT_MASTER,
-  GST_JACK_TRANSPORT_SLAVE
+  GST_JACK_TRANSPORT_AUTONOMOUS = 0,
+  GST_JACK_TRANSPORT_MASTER = (0 << 1),
+  GST_JACK_TRANSPORT_SLAVE = (1 << 1),
 } GstJackTransport;
 
 typedef jack_default_audio_sample_t sample_t;
index ef544d1..8680cda 100644 (file)
@@ -88,10 +88,10 @@ static gboolean
 jack_handle_transport_change (GstJackAudioClient * client, GstState state)
 {
   GstObject *obj = GST_OBJECT_PARENT (client->user_data);
-  GstJackTransport mode;
+  guint mode;
 
   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_element_state_get_name (state));
     gst_element_post_message (GST_ELEMENT (obj),
index 1a7fc28..527a864 100644 (file)
@@ -560,7 +560,7 @@ gst_jack_ring_buffer_start (GstRingBuffer * buf)
 
   GST_DEBUG_OBJECT (sink, "start");
 
-  if (sink->transport == GST_JACK_TRANSPORT_MASTER) {
+  if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
     jack_client_t *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");
 
-  if (sink->transport == GST_JACK_TRANSPORT_MASTER) {
+  if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
     jack_client_t *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");
 
-  if (sink->transport == GST_JACK_TRANSPORT_MASTER) {
+  if (sink->transport & GST_JACK_TRANSPORT_MASTER) {
     jack_client_t *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
    */
   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",
           GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -840,7 +840,7 @@ gst_jack_audio_sink_set_property (GObject * object, guint prop_id,
       }
       break;
     case PROP_TRANSPORT:
-      sink->transport = g_value_get_enum (value);
+      sink->transport = g_value_get_flags (value);
       break;
     default:
       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);
       break;
     case PROP_TRANSPORT:
-      g_value_set_enum (value, sink->transport);
+      g_value_set_flags (value, sink->transport);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
index 6665f10..fbb660d 100644 (file)
@@ -59,7 +59,7 @@ struct _GstJackAudioSink {
   gchar           *server;
   jack_client_t   *jclient;
   gchar           *client_name;
-  GstJackTransport transport;
+  guint            transport;
 
   /* our client */
   GstJackAudioClient *client;
index e2b2bc0..2063875 100644 (file)
@@ -572,7 +572,7 @@ gst_jack_ring_buffer_start (GstRingBuffer * buf)
 
   GST_DEBUG_OBJECT (src, "start");
 
-  if (src->transport == GST_JACK_TRANSPORT_MASTER) {
+  if (src->transport & GST_JACK_TRANSPORT_MASTER) {
     jack_client_t *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");
 
-  if (src->transport == GST_JACK_TRANSPORT_MASTER) {
+  if (src->transport & GST_JACK_TRANSPORT_MASTER) {
     jack_client_t *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");
 
-  if (src->transport == GST_JACK_TRANSPORT_MASTER) {
+  if (src->transport & GST_JACK_TRANSPORT_MASTER) {
     jack_client_t *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
    */
   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",
           GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -857,7 +857,7 @@ gst_jack_audio_src_set_property (GObject * object, guint prop_id,
       }
       break;
     case PROP_TRANSPORT:
-      src->transport = g_value_get_enum (value);
+      src->transport = g_value_get_flags (value);
       break;
     default:
       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);
       break;
     case PROP_TRANSPORT:
-      g_value_set_enum (value, src->transport);
+      g_value_set_flags (value, src->transport);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
index ae19ba5..c63f40c 100644 (file)
@@ -72,11 +72,11 @@ struct _GstJackAudioSrc
     GstCaps         *caps;
 
     /* properties */
-    GstJackConnect connect;
+    GstJackConnect   connect;
     gchar           *server;
     jack_client_t   *jclient;
     gchar           *client_name;
-    GstJackTransport transport;
+    guint            transport;
 
     /* our client */
     GstJackAudioClient *client;