From: Wim Taymans Date: Mon, 28 Feb 2011 12:14:37 +0000 (+0100) Subject: udp: implement NetAddress with metadata X-Git-Tag: RELEASE-0.11.1~633 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6c4ccb272c55ae4cfb182b42071308c62acc5161;p=platform%2Fupstream%2Fgst-plugins-good.git udp: implement NetAddress with metadata --- diff --git a/gst/udp/gstdynudpsink.c b/gst/udp/gstdynudpsink.c index b015634..ec65089 100644 --- a/gst/udp/gstdynudpsink.c +++ b/gst/udp/gstdynudpsink.c @@ -211,34 +211,29 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer) GstDynUDPSink *sink; gint ret, size; guint8 *data; - GstBuffer *netbuf; + GstMetaNetAddress *meta; struct sockaddr_in theiraddr; guint16 destport; guint32 destaddr; memset (&theiraddr, 0, sizeof (theiraddr)); -#if 0 - if (GST_IS_NETBUFFER (buffer)) { - netbuf = GST_NETBUFFER (buffer); - } else -#endif - { + meta = gst_buffer_get_meta_net_address (buffer); + + if (meta == NULL) { GST_DEBUG ("Received buffer is not a GstNetBuffer, skipping"); return GST_FLOW_OK; } sink = GST_DYNUDPSINK (bsink); - size = GST_BUFFER_SIZE (netbuf); - data = GST_BUFFER_DATA (netbuf); + size = GST_BUFFER_SIZE (buffer); + data = GST_BUFFER_DATA (buffer); GST_DEBUG ("about to send %d bytes", size); -#if 0 - // let's get the address from the netbuffer - gst_netaddress_get_ip4_address (&netbuf->to, &destaddr, &destport); -#endif + /* let's get the address from the metaata */ + gst_netaddress_get_ip4_address (&meta->naddr, &destaddr, &destport); GST_DEBUG ("sending %d bytes to client %d port %d", size, destaddr, destport); diff --git a/gst/udp/gstudp.c b/gst/udp/gstudp.c index 35bc25c..3b77865 100644 --- a/gst/udp/gstudp.c +++ b/gst/udp/gstudp.c @@ -36,11 +36,10 @@ plugin_init (GstPlugin * plugin) return FALSE; #endif -#if 0 - /* register type of the netbuffer so that we can use it from multiple threads - * right away. Note that the plugin loading is always serialized */ - gst_netbuffer_get_type (); -#endif + /* register info of the netaddress metadata so that we can use it from + * multiple threads right away. Note that the plugin loading is always + * serialized */ + gst_meta_net_address_get_info (); if (!gst_element_register (plugin, "udpsink", GST_RANK_NONE, GST_TYPE_UDPSINK)) diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index 7f12ea9..d2db1d2 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -409,9 +409,7 @@ static GstFlowReturn gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf) { GstUDPSrc *udpsrc; -#if 0 - GstNetBuffer *outbuf; -#endif + GstMetaNetAddress *meta; GstBuffer *outbuf; union gst_sockaddr { @@ -530,7 +528,6 @@ no_select: break; } - /* FIXME use buffer metadata so receivers can also track the address */ outbuf = gst_buffer_new (); GST_BUFFER_MALLOCDATA (outbuf) = pktdata; @@ -545,11 +542,13 @@ no_select: GST_BUFFER_DATA (outbuf) = pktdata; GST_BUFFER_SIZE (outbuf) = ret; -#if 0 + /* use buffer metadata so receivers can also track the address */ + meta = gst_buffer_add_meta_net_address (outbuf); + switch (sa.sa.sa_family) { case AF_INET: { - gst_netaddress_set_ip4_address (&outbuf->from, sa.sa_in.sin_addr.s_addr, + gst_netaddress_set_ip4_address (&meta->naddr, sa.sa_in.sin_addr.s_addr, sa.sa_in.sin_port); } break; @@ -558,7 +557,7 @@ no_select: guint8 ip6[16]; memcpy (ip6, &sa.sa_in6.sin6_addr, sizeof (ip6)); - gst_netaddress_set_ip6_address (&outbuf->from, ip6, sa.sa_in6.sin6_port); + gst_netaddress_set_ip6_address (&meta->naddr, ip6, sa.sa_in6.sin6_port); } break; default: @@ -569,7 +568,6 @@ no_select: #endif goto receive_error; } -#endif GST_LOG_OBJECT (udpsrc, "read %d bytes", (int) readsize); *buf = GST_BUFFER_CAST (outbuf);