+2005-09-09 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst-plugins-good.spec.in:
+ spec file fixes
+ * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_class_init),
+ (gst_multiudpsink_render), (gst_multiudpsink_add),
+ (gst_multiudpsink_clear):
+ it actually helps to actually stream if we hook up the
+ "add" signal to an actual implementation
+ * gst/udp/gstudpsrc.c: (gst_udpsrc_start):
+ some debugging
+
2005-09-08 Flavio Oliveira <flavio.oliveira@indt.org.br>
* ext/jpeg/Makefile.am:
BuildRequires: gcc-c++
-@USE_ESD_TRUE@Requires: esound >= 0.2.8
@USE_ESD_TRUE@BuildRequires: esound-devel >= 0.2.8
@USE_ESD_TRUE@Obsoletes: gstreamer-esd
@USE_ESD_TRUE@
@USE_ESD_TRUE@Provides: gstreamer-audiosrc
@USE_ESD_TRUE@Provides: gstreamer-audiosink
-@USE_FLAC_TRUE@Requires: flac >= 1.0.3
@USE_FLAC_TRUE@BuildRequires: flac-devel >= 1.0.3
-@USE_GCONF_TRUE@Requires: GConf2
@USE_GCONF_TRUE@BuildRequires: GConf2-devel
-@USE_JPEG_TRUE@Requires: libjpeg
@USE_JPEG_TRUE@BuildRequires: libjpeg-devel
-@USE_LIBPNG_TRUE@Requires: libpng >= 1.2.0
+@USE_LIBCACA_TRUE@BuildRequires: libcaca-devel
+@USE_LIBDV_TRUE@BuildRequires: libdv-devel
@USE_LIBPNG_TRUE@BuildRequires: libpng-devel >= 1.2.0
-# @USE_MIKMOD_TRUE@Requires: mikmod
-# @USE_MIKMOD_TRUE@BuildRequires: mikmod
+@USE_MIKMOD_TRUE@BuildRequires: mikmod
@USE_OSS_TRUE@BuildRequires: glibc-devel
-# @USE_PANGO_TRUE@Requires: pango
-# @USE_PANGO_TRUE@BuildRequires: pango-devel
-# @USE_RAW1394_TRUE@Requires: libraw1394
-# @USE_RAW1394_TRUE@BuildRequires: libraw1394-devel
-@USE_SPEEX_TRUE@Requires: speex
+@USE_PANGO_TRUE@BuildRequires: pango-devel
+@USE_RAW1394_TRUE@BuildRequires: libraw1394-devel
+@USE_RAW1394_TRUE@BuildRequires: libavc1394-devel
@USE_SPEEX_TRUE@BuildRequires: speex-devel
@USE_SHOUT2_TRUE@BuildRequires: libshout-devel >= 2.0
-# @USE_LADSPA_TRUE@BuildRequires: ladspa-devel
+@USE_LADSPA_TRUE@BuildRequires: ladspa-devel
@USE_AALIB_TRUE@BuildRequires: aalib-devel >= 1.3
@USE_AALIB_TRUE@Provides: gstreamer-aasink = %{version}-%{release}
%{_libdir}/gstreamer-%{majorminor}/libgstrtp.so
%{_libdir}/gstreamer-%{majorminor}/libgstrtsp.so
%{_libdir}/gstreamer-%{majorminor}/libgstsmpte.so
-# %{_libdir}/gstreamer-%{majorminor}/libgsttcp.so
%{_libdir}/gstreamer-%{majorminor}/libgstudp.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideoflip.so
};
static void gst_multiudpsink_base_init (gpointer g_class);
-static void gst_multiudpsink_class_init (GstMultiUDPSink * klass);
+static void gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass);
static void gst_multiudpsink_init (GstMultiUDPSink * udpsink);
static void gst_multiudpsink_finalize (GObject * object);
}
static void
-gst_multiudpsink_class_init (GstMultiUDPSink * klass)
+gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
gstelement_class->change_state = gst_multiudpsink_change_state;
gstbasesink_class->render = gst_multiudpsink_render;
+ klass->add = gst_multiudpsink_add;
+ klass->remove = gst_multiudpsink_remove;
+ klass->clear = gst_multiudpsink_clear;
+ klass->get_stats = gst_multiudpsink_get_stats;
GST_DEBUG_CATEGORY_INIT (multiudpsink_debug, "multiudpsink", 0, "UDP sink");
}
gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
{
GstMultiUDPSink *sink;
- gint ret, size;
+ gint ret, size, num = 0;
guint8 *data;
GList *clients;
size = GST_BUFFER_SIZE (buffer);
data = GST_BUFFER_DATA (buffer);
- GST_DEBUG ("about to send %d bytes", size);
-
g_mutex_lock (sink->client_lock);
+ GST_LOG_OBJECT (bsink, "about to send %d bytes", size);
+
for (clients = sink->clients; clients; clients = g_list_next (clients)) {
GstUDPClient *client;
client = (GstUDPClient *) clients->data;
- GST_DEBUG ("sending %d bytes to client %p", size, client);
+ ++num;
+ GST_LOG_OBJECT (sink, "sending %d bytes to client %p", size, client);
while (TRUE) {
ret = sendto (*client->sock, data, size, 0,
}
g_mutex_unlock (sink->client_lock);
- GST_DEBUG ("sent %d bytes", size);
+ GST_LOG_OBJECT (sink, "sent %d bytes to %d clients", size, num);
return GST_FLOW_OK;
struct ip_mreq multi_addr;
GstUDPClient *client;
+ GST_DEBUG_OBJECT (sink, "adding client on host %s, port %d", host, port);
client = g_new0 (GstUDPClient, 1);
client->host = g_strdup (host);
client->port = port;
void
gst_multiudpsink_clear (GstMultiUDPSink * sink)
{
+ GST_DEBUG_OBJECT (sink, "clearing");
g_mutex_lock (sink->client_lock);
g_list_foreach (sink->clients, (GFunc) free_client, sink);
g_list_free (sink->clients);
src = GST_UDPSRC (bsrc);
+ GST_DEBUG_OBJECT (src, "creating socket pair");
if ((ret = socketpair (PF_UNIX, SOCK_STREAM, 0, CONTROL_SOCKETS (src))) < 0)
goto no_socket_pair;
src->myaddr.sin_port = htons (src->port); /* short, network byte order */
src->myaddr.sin_addr.s_addr = INADDR_ANY;
+ GST_DEBUG_OBJECT (src, "binding on port %d", src->port);
if ((ret =
bind (src->sock, (struct sockaddr *) &src->myaddr,
sizeof (src->myaddr))) < 0)
goto getsockname_error;
port = ntohs (my_addr.sin_port);
+ GST_DEBUG_OBJECT (src, "bound, on port %d", port);
if (port != src->port) {
src->port = port;
+ GST_DEBUG_OBJECT (src, "notifying %d", port);
g_object_notify (G_OBJECT (src), "port");
}