gst/udp/gstudpsrc.*: Add support to strip proprietary headers. Fixes #350296.
Original commit message from CVS: Patch by: Thijs Vermeir <thijsvermeir at gmail dot com> * gst/udp/gstudpsrc.c: (gst_udpsrc_class_init), (gst_udpsrc_init), (gst_udpsrc_create), (gst_udpsrc_set_property), (gst_udpsrc_get_property): * gst/udp/gstudpsrc.h: Add support to strip proprietary headers. Fixes #350296.
This commit is contained in:
parent
2bd9964f12
commit
afd829326e
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2007-03-02 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
Patch by: Thijs Vermeir <thijsvermeir at gmail dot com>
|
||||||
|
|
||||||
|
* gst/udp/gstudpsrc.c: (gst_udpsrc_class_init), (gst_udpsrc_init),
|
||||||
|
(gst_udpsrc_create), (gst_udpsrc_set_property),
|
||||||
|
(gst_udpsrc_get_property):
|
||||||
|
* gst/udp/gstudpsrc.h:
|
||||||
|
Add support to strip proprietary headers. Fixes #350296.
|
||||||
|
|
||||||
2007-03-02 Wim Taymans <wim@fluendo.com>
|
2007-03-02 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* gst/rtp/gstrtpmp2tdepay.c: (gst_rtp_mp2t_depay_process):
|
* gst/rtp/gstrtpmp2tdepay.c: (gst_rtp_mp2t_depay_process):
|
||||||
|
@ -71,6 +71,10 @@
|
|||||||
* default buffer size is typically 50K and can be increased to maximally 100K.
|
* default buffer size is typically 50K and can be increased to maximally 100K.
|
||||||
* </para>
|
* </para>
|
||||||
* <para>
|
* <para>
|
||||||
|
* The "skip-first-bytes" property is used to strip off an arbitrary number of
|
||||||
|
* bytes from the start of the raw udp packet and can be used to .
|
||||||
|
* </para>
|
||||||
|
* <para>
|
||||||
* The udpsrc is always a live source. It does however not provide a GstClock, this
|
* The udpsrc is always a live source. It does however not provide a GstClock, this
|
||||||
* is left for upstream elements such as an RTP session manager or demuxer (such
|
* is left for upstream elements such as an RTP session manager or demuxer (such
|
||||||
* as an MPEG demuxer).
|
* as an MPEG demuxer).
|
||||||
@ -98,7 +102,7 @@
|
|||||||
* because it is blocked by a firewall.
|
* because it is blocked by a firewall.
|
||||||
* </para>
|
* </para>
|
||||||
* <para>
|
* <para>
|
||||||
* Last reviewed on 2006-09-29 (0.10.5)
|
* Last reviewed on 2007-03-02 (0.10.6)
|
||||||
* </para>
|
* </para>
|
||||||
* </refsect2>
|
* </refsect2>
|
||||||
*/
|
*/
|
||||||
@ -160,6 +164,7 @@ GST_ELEMENT_DETAILS ("UDP packet receiver",
|
|||||||
#define UDP_DEFAULT_SOCKFD -1
|
#define UDP_DEFAULT_SOCKFD -1
|
||||||
#define UDP_DEFAULT_BUFFER_SIZE 0
|
#define UDP_DEFAULT_BUFFER_SIZE 0
|
||||||
#define UDP_DEFAULT_TIMEOUT 0
|
#define UDP_DEFAULT_TIMEOUT 0
|
||||||
|
#define UDP_DEFAULT_SKIP_FIRST_BYTES 0
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -170,7 +175,8 @@ enum
|
|||||||
PROP_CAPS,
|
PROP_CAPS,
|
||||||
PROP_SOCKFD,
|
PROP_SOCKFD,
|
||||||
PROP_BUFFER_SIZE,
|
PROP_BUFFER_SIZE,
|
||||||
PROP_TIMEOUT
|
PROP_TIMEOUT,
|
||||||
|
PROP_SKIP_FIRST_BYTES
|
||||||
};
|
};
|
||||||
|
|
||||||
static void gst_udpsrc_uri_handler_init (gpointer g_iface, gpointer iface_data);
|
static void gst_udpsrc_uri_handler_init (gpointer g_iface, gpointer iface_data);
|
||||||
@ -257,6 +263,10 @@ gst_udpsrc_class_init (GstUDPSrcClass * klass)
|
|||||||
g_param_spec_uint64 ("timeout", "Timeout",
|
g_param_spec_uint64 ("timeout", "Timeout",
|
||||||
"Post a message after timeout microseconds (0 = disabled)", 0,
|
"Post a message after timeout microseconds (0 = disabled)", 0,
|
||||||
G_MAXUINT64, UDP_DEFAULT_TIMEOUT, G_PARAM_READWRITE));
|
G_MAXUINT64, UDP_DEFAULT_TIMEOUT, G_PARAM_READWRITE));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass),
|
||||||
|
PROP_SKIP_FIRST_BYTES, g_param_spec_int ("skip-first-bytes",
|
||||||
|
"Skip first bytes", "number of bytes to skip for each udp packet", 0,
|
||||||
|
G_MAXINT, UDP_DEFAULT_SKIP_FIRST_BYTES, G_PARAM_READWRITE));
|
||||||
|
|
||||||
gstbasesrc_class->start = gst_udpsrc_start;
|
gstbasesrc_class->start = gst_udpsrc_start;
|
||||||
gstbasesrc_class->stop = gst_udpsrc_stop;
|
gstbasesrc_class->stop = gst_udpsrc_stop;
|
||||||
@ -278,6 +288,7 @@ gst_udpsrc_init (GstUDPSrc * udpsrc, GstUDPSrcClass * g_class)
|
|||||||
udpsrc->uri = g_strdup (UDP_DEFAULT_URI);
|
udpsrc->uri = g_strdup (UDP_DEFAULT_URI);
|
||||||
udpsrc->buffer_size = UDP_DEFAULT_BUFFER_SIZE;
|
udpsrc->buffer_size = UDP_DEFAULT_BUFFER_SIZE;
|
||||||
udpsrc->timeout = UDP_DEFAULT_TIMEOUT;
|
udpsrc->timeout = UDP_DEFAULT_TIMEOUT;
|
||||||
|
udpsrc->skip_first_bytes = UDP_DEFAULT_SKIP_FIRST_BYTES;
|
||||||
|
|
||||||
udpsrc->control_sock[0] = -1;
|
udpsrc->control_sock[0] = -1;
|
||||||
udpsrc->control_sock[1] = -1;
|
udpsrc->control_sock[1] = -1;
|
||||||
@ -320,7 +331,7 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
|
|||||||
socklen_t len;
|
socklen_t len;
|
||||||
fd_set read_fds;
|
fd_set read_fds;
|
||||||
guint max_sock;
|
guint max_sock;
|
||||||
gchar *pktdata;
|
guint8 *pktdata;
|
||||||
gint pktsize;
|
gint pktsize;
|
||||||
|
|
||||||
#ifdef G_OS_UNIX
|
#ifdef G_OS_UNIX
|
||||||
@ -441,8 +452,17 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
|
|||||||
|
|
||||||
/* special case buffer so receivers can also track the address */
|
/* special case buffer so receivers can also track the address */
|
||||||
outbuf = gst_netbuffer_new ();
|
outbuf = gst_netbuffer_new ();
|
||||||
GST_BUFFER_DATA (outbuf) = (guint8 *) pktdata;
|
GST_BUFFER_MALLOCDATA (outbuf) = pktdata;
|
||||||
GST_BUFFER_MALLOCDATA (outbuf) = (guint8 *) pktdata;
|
|
||||||
|
/* patch pktdata and len when stripping off the headers */
|
||||||
|
if (udpsrc->skip_first_bytes != 0) {
|
||||||
|
if (G_UNLIKELY (readsize <= udpsrc->skip_first_bytes))
|
||||||
|
goto skip_error;
|
||||||
|
|
||||||
|
pktdata += udpsrc->skip_first_bytes;
|
||||||
|
ret -= udpsrc->skip_first_bytes;
|
||||||
|
}
|
||||||
|
GST_BUFFER_DATA (outbuf) = pktdata;
|
||||||
GST_BUFFER_SIZE (outbuf) = ret;
|
GST_BUFFER_SIZE (outbuf) = ret;
|
||||||
|
|
||||||
gst_netaddress_set_ip4_address (&outbuf->from, tmpaddr.sin_addr.s_addr,
|
gst_netaddress_set_ip4_address (&outbuf->from, tmpaddr.sin_addr.s_addr,
|
||||||
@ -481,6 +501,12 @@ receive_error:
|
|||||||
("receive error %d: %s (%d)", ret, g_strerror (errno), errno));
|
("receive error %d: %s (%d)", ret, g_strerror (errno), errno));
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
skip_error:
|
||||||
|
{
|
||||||
|
GST_ELEMENT_ERROR (udpsrc, STREAM, DECODE, (NULL),
|
||||||
|
("UDP buffer to small to skip header"));
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call this function when multicastgroup and/or port are updated */
|
/* Call this function when multicastgroup and/or port are updated */
|
||||||
@ -585,6 +611,9 @@ gst_udpsrc_set_property (GObject * object, guint prop_id, const GValue * value,
|
|||||||
case PROP_TIMEOUT:
|
case PROP_TIMEOUT:
|
||||||
udpsrc->timeout = g_value_get_uint64 (value);
|
udpsrc->timeout = g_value_get_uint64 (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SKIP_FIRST_BYTES:
|
||||||
|
udpsrc->skip_first_bytes = g_value_get_int (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -618,6 +647,9 @@ gst_udpsrc_get_property (GObject * object, guint prop_id, GValue * value,
|
|||||||
case PROP_TIMEOUT:
|
case PROP_TIMEOUT:
|
||||||
g_value_set_uint64 (value, udpsrc->timeout);
|
g_value_set_uint64 (value, udpsrc->timeout);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SKIP_FIRST_BYTES:
|
||||||
|
g_value_set_int (value, udpsrc->skip_first_bytes);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -59,6 +59,7 @@ struct _GstUDPSrc {
|
|||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gint buffer_size;
|
gint buffer_size;
|
||||||
guint64 timeout;
|
guint64 timeout;
|
||||||
|
gint skip_first_bytes;
|
||||||
|
|
||||||
/* our sockets */
|
/* our sockets */
|
||||||
int sock;
|
int sock;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user