[0.11] gst-plugins-good: dynudpsink: Port to GIO

Sebastian Dröge slomo at kemper.freedesktop.org
Tue Jan 17 06:02:50 PST 2012


Module: gst-plugins-good
Branch: 0.11
Commit: 6f055d554bc28f59a480bb7fcc63560c71d9ded0
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=6f055d554bc28f59a480bb7fcc63560c71d9ded0

Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date:   Tue Jan 17 09:38:33 2012 +0100

dynudpsink: Port to GIO

---

 gst/udp/gstdynudpsink.c |   40 ++++++++++++++++++----------------------
 gst/udp/gstdynudpsink.h |    2 +-
 gst/udp/gstudpsrc.c     |    2 --
 3 files changed, 19 insertions(+), 25 deletions(-)

diff --git a/gst/udp/gstdynudpsink.c b/gst/udp/gstdynudpsink.c
index abcd6f4..255f2f5 100644
--- a/gst/udp/gstdynudpsink.c
+++ b/gst/udp/gstdynudpsink.c
@@ -51,14 +51,12 @@ enum
 
 #define UDP_DEFAULT_SOCKET		NULL
 #define UDP_DEFAULT_CLOSE_SOCKET	TRUE
-#define UDP_DEFAULT_FAMILY              G_SOCKET_FAMILY_IPV4
 
 enum
 {
   PROP_0,
   PROP_SOCKET,
-  PROP_CLOSE_SOCKET,
-  PROP_FAMILY
+  PROP_CLOSE_SOCKET
 };
 
 static void gst_dynudpsink_finalize (GObject * object);
@@ -113,12 +111,6 @@ gst_dynudpsink_class_init (GstDynUDPSinkClass * klass)
           UDP_DEFAULT_CLOSE_SOCKET,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (gobject_class, PROP_FAMILY,
-      g_param_spec_enum ("family", "Socket family",
-          "Use IPv4 or IPv6",
-          G_TYPE_SOCKET_FAMILY, UDP_DEFAULT_FAMILY,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&sink_template));
 
@@ -142,10 +134,10 @@ gst_dynudpsink_init (GstDynUDPSink * sink)
   sink->socket = UDP_DEFAULT_SOCKET;
   sink->close_socket = UDP_DEFAULT_CLOSE_SOCKET;
   sink->external_socket = FALSE;
-  sink->family = G_SOCKET_FAMILY_IPV4;
 
   sink->used_socket = NULL;
   sink->cancellable = g_cancellable_new ();
+  sink->family = G_SOCKET_FAMILY_IPV6;
 }
 
 static void
@@ -180,6 +172,7 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
   GstNetAddressMeta *meta;
   GSocketAddress *addr;
   GError *err = NULL;
+  GSocketFamily family;
 
   meta = gst_buffer_get_net_address_meta (buffer);
 
@@ -193,7 +186,8 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
   /* let's get the address from the metadata */
   addr = meta->addr;
 
-  if (g_socket_address_get_family (addr) != sink->family)
+  family = g_socket_address_get_family (addr);
+  if (sink->family != family && family != G_SOCKET_FAMILY_IPV4)
     goto invalid_family;
 
   data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
@@ -267,9 +261,6 @@ gst_dynudpsink_set_property (GObject * object, guint prop_id,
     case PROP_CLOSE_SOCKET:
       udpsink->close_socket = g_value_get_boolean (value);
       break;
-    case PROP_FAMILY:
-      udpsink->family = g_value_get_enum (value);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -291,9 +282,6 @@ gst_dynudpsink_get_property (GObject * object, guint prop_id, GValue * value,
     case PROP_CLOSE_SOCKET:
       g_value_set_boolean (value, udpsink->close_socket);
       break;
-    case PROP_FAMILY:
-      g_value_set_enum (value, udpsink->family);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -310,19 +298,27 @@ gst_dynudpsink_start (GstBaseSink * bsink)
   udpsink = GST_DYNUDPSINK (bsink);
 
   if (udpsink->socket == NULL) {
-    /* create sender socket if none available */
+    /* create sender socket if none available, first try IPv6, then
+     * fall-back to IPv4 */
+    udpsink->family = G_SOCKET_FAMILY_IPV6;
     if ((udpsink->used_socket =
-            g_socket_new (udpsink->family,
-                G_SOCKET_TYPE_DATAGRAM, G_SOCKET_PROTOCOL_UDP, &err)) == NULL)
-      goto no_socket;
+            g_socket_new (G_SOCKET_FAMILY_IPV6,
+                G_SOCKET_TYPE_DATAGRAM, G_SOCKET_PROTOCOL_UDP, &err)) == NULL) {
+      udpsink->family = G_SOCKET_FAMILY_IPV4;
+      if ((udpsink->used_socket = g_socket_new (G_SOCKET_FAMILY_IPV4,
+                  G_SOCKET_TYPE_DATAGRAM, G_SOCKET_PROTOCOL_UDP, &err)) == NULL)
+        goto no_socket;
+    }
 
-    g_socket_set_broadcast (udpsink->used_socket, TRUE);
     udpsink->external_socket = FALSE;
   } else {
     udpsink->used_socket = G_SOCKET (g_object_ref (udpsink->socket));
     udpsink->external_socket = TRUE;
+    udpsink->family = g_socket_get_family (udpsink->used_socket);
   }
 
+  g_socket_set_broadcast (udpsink->used_socket, TRUE);
+
   return TRUE;
 
   /* ERRORS */
diff --git a/gst/udp/gstdynudpsink.h b/gst/udp/gstdynudpsink.h
index a59d875..d7f4d01 100644
--- a/gst/udp/gstdynudpsink.h
+++ b/gst/udp/gstdynudpsink.h
@@ -47,12 +47,12 @@ struct _GstDynUDPSink {
   /* properties */
   GSocket *socket;
   gboolean close_socket;
-  GSocketFamily family;
 
   /* the socket in use */
   GSocket *used_socket;
   gboolean external_socket;
   GCancellable *cancellable;
+  GSocketFamily family;
 };
 
 struct _GstDynUDPSinkClass {
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index ce913d7..aa9b13e 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -278,8 +278,6 @@ gst_udpsrc_class_init (GstUDPSrcClass * klass)
 static void
 gst_udpsrc_init (GstUDPSrc * udpsrc)
 {
-  WSA_STARTUP (udpsrc);
-
   udpsrc->uri =
       g_strdup_printf ("udp://%s:%u", UDP_DEFAULT_MULTICAST_GROUP,
       UDP_DEFAULT_PORT);



More information about the gstreamer-commits mailing list