mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
tcp: remove some dataprotocol cruft
The protocol=gdp property has been removed in favour of explicit gdppay/depay.
This commit is contained in:
parent
281803cf2b
commit
17359744f3
10 changed files with 12 additions and 276 deletions
|
@ -23,8 +23,7 @@ LOCAL_SHARED_LIBRARIES := \
|
|||
libglib-2.0 \
|
||||
libgthread-2.0 \
|
||||
libgmodule-2.0 \
|
||||
libgobject-2.0 \
|
||||
libgstdataprotocol-0.11
|
||||
libgobject-2.0
|
||||
|
||||
LOCAL_MODULE:= libgsttcp
|
||||
|
||||
|
|
|
@ -23,10 +23,9 @@ libgsttcp_la_SOURCES = \
|
|||
nodist_libgsttcp_la_SOURCES = \
|
||||
$(built_sources)
|
||||
|
||||
# remove ENABLE_NEW when dataprotocol is stable
|
||||
libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_GDP_CFLAGS) $(GST_CFLAGS) -DGST_ENABLE_NEW
|
||||
libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
|
||||
libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_GDP_LIBS) $(GST_LIBS)
|
||||
libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
|
||||
libgsttcp_la_LIBTOOLFLAGS = --tag=disable-static
|
||||
|
||||
noinst_HEADERS = \
|
||||
|
|
|
@ -1296,8 +1296,7 @@ is_sync_frame (GstMultiFdSink * sink, GstBuffer * buffer)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* queue the given buffer for the given client, possibly adding the GDP
|
||||
* header if GDP is being used */
|
||||
/* queue the given buffer for the given client */
|
||||
static gboolean
|
||||
gst_multi_fd_sink_client_queue_buffer (GstMultiFdSink * sink,
|
||||
GstTCPClient * client, GstBuffer * buffer)
|
||||
|
@ -1878,12 +1877,9 @@ gst_multi_fd_sink_new_client (GstMultiFdSink * sink, GstTCPClient * client)
|
|||
* which indicates a read request from a client.
|
||||
*
|
||||
* For each client we maintain a queue of GstBuffers that contain the raw bytes
|
||||
* we need to send to the client. In the case of the GDP protocol, we create
|
||||
* buffers out of the header bytes so that we can focus only on sending
|
||||
* buffers.
|
||||
* we need to send to the client.
|
||||
*
|
||||
* We first check to see if we need to send caps (in GDP) and streamheaders.
|
||||
* If so, we queue them.
|
||||
* We first check to see if we need to send streamheaders. If so, we queue them.
|
||||
*
|
||||
* Then we run into the main loop that tries to send as many buffers as
|
||||
* possible. It will first exhaust the client->sending queue and if the queue
|
||||
|
|
250
gst/tcp/gsttcp.c
250
gst/tcp/gsttcp.c
|
@ -120,91 +120,6 @@ gst_tcp_socket_write (int socket, const void *buf, size_t count)
|
|||
return bytes_written;
|
||||
}
|
||||
|
||||
/* atomically read count bytes into buf, cancellable. return val of GST_FLOW_OK
|
||||
* indicates success, anything else is failure.
|
||||
*/
|
||||
static GstFlowReturn
|
||||
gst_tcp_socket_read (GstElement * this, int socket, void *buf, size_t count,
|
||||
GstPoll * fdset)
|
||||
{
|
||||
ssize_t n;
|
||||
size_t bytes_read;
|
||||
int num_to_read;
|
||||
int ret;
|
||||
|
||||
bytes_read = 0;
|
||||
|
||||
while (bytes_read < count) {
|
||||
/* do a blocking select on the socket */
|
||||
/* no action (0) is an error too in our case */
|
||||
if ((ret = gst_poll_wait (fdset, GST_CLOCK_TIME_NONE)) <= 0) {
|
||||
if (ret == -1 && errno == EBUSY)
|
||||
goto cancelled;
|
||||
else
|
||||
goto select_error;
|
||||
}
|
||||
|
||||
/* ask how much is available for reading on the socket */
|
||||
if (ioctl (socket, FIONREAD, &num_to_read) < 0)
|
||||
goto ioctl_error;
|
||||
|
||||
if (num_to_read == 0)
|
||||
goto got_eos;
|
||||
|
||||
/* sizeof(ssize_t) >= sizeof(int), so I know num_to_read <= SSIZE_MAX */
|
||||
|
||||
num_to_read = MIN (num_to_read, count - bytes_read);
|
||||
|
||||
n = read (socket, ((guint8 *) buf) + bytes_read, num_to_read);
|
||||
|
||||
if (n < 0)
|
||||
goto read_error;
|
||||
|
||||
if (n < num_to_read)
|
||||
goto short_read;
|
||||
|
||||
bytes_read += num_to_read;
|
||||
}
|
||||
|
||||
return GST_FLOW_OK;
|
||||
|
||||
/* ERRORS */
|
||||
select_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("select failed: %s", g_strerror (errno)));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
cancelled:
|
||||
{
|
||||
GST_DEBUG_OBJECT (this, "Select was cancelled");
|
||||
return GST_FLOW_WRONG_STATE;
|
||||
}
|
||||
ioctl_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("ioctl failed: %s", g_strerror (errno)));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
got_eos:
|
||||
{
|
||||
GST_DEBUG_OBJECT (this, "Got EOS on socket stream");
|
||||
return GST_FLOW_EOS;
|
||||
}
|
||||
read_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("read failed: %s", g_strerror (errno)));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
short_read:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("short read: wanted %d bytes, got %" G_GSSIZE_FORMAT, num_to_read, n));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* close the socket and reset the fd. Used to clean up after errors. */
|
||||
void
|
||||
gst_tcp_socket_close (GstPollFD * socket)
|
||||
|
@ -308,168 +223,3 @@ short_read:
|
|||
return GST_FLOW_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* read a buffer from the given socket
|
||||
* returns:
|
||||
* - a GstBuffer in which data should be read
|
||||
* - NULL, indicating a connection close or an error, to be handled with
|
||||
* EOS
|
||||
*/
|
||||
GstFlowReturn
|
||||
gst_tcp_gdp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
|
||||
GstBuffer ** buf)
|
||||
{
|
||||
GstFlowReturn ret;
|
||||
guint8 *header = NULL;
|
||||
guint8 *data;
|
||||
gsize size;
|
||||
|
||||
GST_LOG_OBJECT (this, "Reading %d bytes for buffer packet header",
|
||||
GST_DP_HEADER_LENGTH);
|
||||
|
||||
*buf = NULL;
|
||||
header = g_malloc (GST_DP_HEADER_LENGTH);
|
||||
|
||||
ret = gst_tcp_socket_read (this, socket, header, GST_DP_HEADER_LENGTH, fdset);
|
||||
|
||||
if (ret != GST_FLOW_OK)
|
||||
goto header_read_error;
|
||||
|
||||
if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header))
|
||||
goto validate_error;
|
||||
|
||||
if (gst_dp_header_payload_type (header) != GST_DP_PAYLOAD_BUFFER)
|
||||
goto is_not_buffer;
|
||||
|
||||
GST_LOG_OBJECT (this, "validated buffer packet header");
|
||||
|
||||
*buf = gst_dp_buffer_from_header (GST_DP_HEADER_LENGTH, header);
|
||||
|
||||
g_free (header);
|
||||
|
||||
data = gst_buffer_map (*buf, &size, NULL, GST_MAP_WRITE);
|
||||
ret = gst_tcp_socket_read (this, socket, data, size, fdset);
|
||||
gst_buffer_unmap (*buf, data, size);
|
||||
|
||||
if (ret != GST_FLOW_OK)
|
||||
goto data_read_error;
|
||||
|
||||
return GST_FLOW_OK;
|
||||
|
||||
/* ERRORS */
|
||||
header_read_error:
|
||||
{
|
||||
g_free (header);
|
||||
return ret;
|
||||
}
|
||||
validate_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("GDP buffer packet header does not validate"));
|
||||
g_free (header);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
is_not_buffer:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("GDP packet contains something that is not a buffer (type %d)",
|
||||
gst_dp_header_payload_type (header)));
|
||||
g_free (header);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
data_read_error:
|
||||
{
|
||||
gst_buffer_unref (*buf);
|
||||
*buf = NULL;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
GstFlowReturn
|
||||
gst_tcp_gdp_read_caps (GstElement * this, int socket, GstPoll * fdset,
|
||||
GstCaps ** caps)
|
||||
{
|
||||
GstFlowReturn ret;
|
||||
guint8 *header = NULL;
|
||||
guint8 *payload = NULL;
|
||||
size_t payload_length;
|
||||
|
||||
GST_LOG_OBJECT (this, "Reading %d bytes for caps packet header",
|
||||
GST_DP_HEADER_LENGTH);
|
||||
|
||||
*caps = NULL;
|
||||
header = g_malloc (GST_DP_HEADER_LENGTH);
|
||||
|
||||
ret = gst_tcp_socket_read (this, socket, header, GST_DP_HEADER_LENGTH, fdset);
|
||||
|
||||
if (ret != GST_FLOW_OK)
|
||||
goto header_read_error;
|
||||
|
||||
if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header))
|
||||
goto header_validate_error;
|
||||
|
||||
if (gst_dp_header_payload_type (header) != GST_DP_PAYLOAD_CAPS)
|
||||
goto is_not_caps;
|
||||
|
||||
GST_LOG_OBJECT (this, "validated caps packet header");
|
||||
|
||||
payload_length = gst_dp_header_payload_length (header);
|
||||
payload = g_malloc (payload_length);
|
||||
|
||||
GST_LOG_OBJECT (this,
|
||||
"Reading %" G_GSIZE_FORMAT " bytes for caps packet payload",
|
||||
payload_length);
|
||||
|
||||
ret = gst_tcp_socket_read (this, socket, payload, payload_length, fdset);
|
||||
|
||||
if (ret != GST_FLOW_OK)
|
||||
goto payload_read_error;
|
||||
|
||||
if (!gst_dp_validate_payload (GST_DP_HEADER_LENGTH, header, payload))
|
||||
goto payload_validate_error;
|
||||
|
||||
*caps = gst_dp_caps_from_packet (GST_DP_HEADER_LENGTH, header, payload);
|
||||
|
||||
GST_DEBUG_OBJECT (this, "Got caps over GDP: %" GST_PTR_FORMAT, *caps);
|
||||
|
||||
g_free (header);
|
||||
g_free (payload);
|
||||
|
||||
return GST_FLOW_OK;
|
||||
|
||||
/* ERRORS */
|
||||
header_read_error:
|
||||
{
|
||||
g_free (header);
|
||||
return ret;
|
||||
}
|
||||
header_validate_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("GDP caps packet header does not validate"));
|
||||
g_free (header);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
is_not_caps:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("GDP packet contains something that is not a caps (type %d)",
|
||||
gst_dp_header_payload_type (header)));
|
||||
g_free (header);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
payload_read_error:
|
||||
{
|
||||
g_free (header);
|
||||
g_free (payload);
|
||||
return ret;
|
||||
}
|
||||
payload_validate_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
|
||||
("GDP caps packet payload does not validate"));
|
||||
g_free (header);
|
||||
g_free (payload);
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "gsttcp-enumtypes.h"
|
||||
#include <gst/gst.h>
|
||||
#undef GST_DISABLE_DEPRECATED
|
||||
#include <gst/dataprotocol/dataprotocol.h>
|
||||
|
||||
#define TCP_HIGHEST_PORT 65535
|
||||
#define TCP_DEFAULT_HOST "localhost"
|
||||
|
@ -42,9 +41,6 @@ void gst_tcp_socket_close (GstPollFD *socket);
|
|||
|
||||
GstFlowReturn gst_tcp_read_buffer (GstElement * this, int socket, GstPoll * fdset, GstBuffer **buf);
|
||||
|
||||
GstFlowReturn gst_tcp_gdp_read_buffer (GstElement * this, int socket, GstPoll * fdset, GstBuffer **buf);
|
||||
GstFlowReturn gst_tcp_gdp_read_caps (GstElement * this, int socket, GstPoll * fdset, GstCaps **caps);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GST_TCP_HELP_H__ */
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
* # server:
|
||||
* nc -l -p 3000
|
||||
* # client:
|
||||
* gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
|
||||
* gst-launch fdsrc fd=1 ! tcpclientsink port=3000
|
||||
* ]| everything you type in the client is shown on the server
|
||||
* </refsect2>
|
||||
*/
|
||||
|
@ -37,7 +37,6 @@
|
|||
#include "config.h"
|
||||
#endif
|
||||
#include <gst/gst-i18n-plugin.h>
|
||||
#include <gst/dataprotocol/dataprotocol.h>
|
||||
#include "gsttcp.h"
|
||||
#include "gsttcpclientsink.h"
|
||||
#include <string.h> /* memset */
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
* # server:
|
||||
* nc -l -p 3000
|
||||
* # client:
|
||||
* gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
|
||||
* gst-launch tcpclientsrc port=3000 ! fdsink fd=2
|
||||
* ]| everything you type in the server is shown on the client
|
||||
* </refsect2>
|
||||
*/
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gst/dataprotocol/dataprotocol.h>
|
||||
#include "gsttcpclientsrc.h"
|
||||
#include "gsttcpclientsink.h"
|
||||
#include "gsttcpserversrc.h"
|
||||
|
@ -33,8 +32,6 @@ GST_DEBUG_CATEGORY (tcp_debug);
|
|||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
gst_dp_init ();
|
||||
|
||||
if (!gst_element_register (plugin, "tcpclientsink", GST_RANK_NONE,
|
||||
GST_TYPE_TCP_CLIENT_SINK))
|
||||
return FALSE;
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
* <title>Example launch line</title>
|
||||
* |[
|
||||
* # server:
|
||||
* gst-launch fdsrc fd=1 ! tcpserversink protocol=none port=3000
|
||||
* gst-launch fdsrc fd=1 ! tcpserversink port=3000
|
||||
* # client:
|
||||
* gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
|
||||
* gst-launch tcpclientsrc port=3000 ! fdsink fd=2
|
||||
* ]|
|
||||
* </refsect2>
|
||||
*/
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
* <title>Example launch line</title>
|
||||
* |[
|
||||
* # server:
|
||||
* gst-launch tcpserversrc protocol=none port=3000 ! fdsink fd=2
|
||||
* gst-launch tcpserversrc port=3000 ! fdsink fd=2
|
||||
* # client:
|
||||
* gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
|
||||
* gst-launch fdsrc fd=1 ! tcpclientsink port=3000
|
||||
* ]|
|
||||
* </refsect2>
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue