mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 03:00:35 +00:00
udpsrc: add "retrieve-sender-address" property
This allows disabling of sender address retrieval, which might be useful in certain scenarios, like when the socket is connected, or the sender address is not of interest (e.g. when receiving an MPEG-TS stream). Disabling sender address retrieval in those cases can have minor performance advantages. https://bugzilla.gnome.org/show_bug.cgi?id=563323
This commit is contained in:
parent
df9eed0ab5
commit
76506190e9
2 changed files with 32 additions and 2 deletions
|
@ -139,6 +139,7 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
|
|||
#define UDP_DEFAULT_AUTO_MULTICAST TRUE
|
||||
#define UDP_DEFAULT_REUSE TRUE
|
||||
#define UDP_DEFAULT_LOOP TRUE
|
||||
#define UDP_DEFAULT_RETRIEVE_SENDER_ADDRESS TRUE
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -158,7 +159,8 @@ enum
|
|||
PROP_AUTO_MULTICAST,
|
||||
PROP_REUSE,
|
||||
PROP_ADDRESS,
|
||||
PROP_LOOP
|
||||
PROP_LOOP,
|
||||
PROP_RETRIEVE_SENDER_ADDRESS
|
||||
};
|
||||
|
||||
static void gst_udpsrc_uri_handler_init (gpointer g_iface, gpointer iface_data);
|
||||
|
@ -273,6 +275,22 @@ gst_udpsrc_class_init (GstUDPSrcClass * klass)
|
|||
"Used for setting the multicast loop parameter. TRUE = enable,"
|
||||
" FALSE = disable", UDP_DEFAULT_LOOP,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
/**
|
||||
* GstUDPSrc::retrieve-sender-address:
|
||||
*
|
||||
* Whether to retrieve the sender address and add it to the buffers as
|
||||
* meta. Disabling this might result in minor performance improvements
|
||||
* in certain scenarios.
|
||||
*
|
||||
* Since: 1.10
|
||||
*/
|
||||
g_object_class_install_property (gobject_class, PROP_RETRIEVE_SENDER_ADDRESS,
|
||||
g_param_spec_boolean ("retrieve-sender-address",
|
||||
"Retrieve Sender Address",
|
||||
"Whether to retrieve the sender address and add it to buffers as "
|
||||
"meta. Disabling this might result in minor performance improvements "
|
||||
"in certain scenarios", UDP_DEFAULT_RETRIEVE_SENDER_ADDRESS,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
gst_element_class_add_static_pad_template (gstelement_class, &src_template);
|
||||
|
||||
|
@ -312,6 +330,7 @@ gst_udpsrc_init (GstUDPSrc * udpsrc)
|
|||
udpsrc->used_socket = UDP_DEFAULT_USED_SOCKET;
|
||||
udpsrc->reuse = UDP_DEFAULT_REUSE;
|
||||
udpsrc->loop = UDP_DEFAULT_LOOP;
|
||||
udpsrc->retrieve_sender_address = UDP_DEFAULT_RETRIEVE_SENDER_ADDRESS;
|
||||
|
||||
/* configure basesrc to be a live source */
|
||||
gst_base_src_set_live (GST_BASE_SRC (udpsrc), TRUE);
|
||||
|
@ -511,6 +530,7 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
|
|||
GstUDPSrc *udpsrc;
|
||||
GstBuffer *outbuf = NULL;
|
||||
GSocketAddress *saddr = NULL;
|
||||
GSocketAddress **p_saddr;
|
||||
gint flags = G_SOCKET_MSG_NONE;
|
||||
gboolean try_again;
|
||||
GError *err = NULL;
|
||||
|
@ -522,6 +542,9 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
|
|||
if (!gst_udpsrc_ensure_mem (udpsrc))
|
||||
goto memory_alloc_error;
|
||||
|
||||
/* Retrieve sender address unless we've been configured not to do so */
|
||||
p_saddr = (udpsrc->retrieve_sender_address) ? &saddr : NULL;
|
||||
|
||||
retry:
|
||||
|
||||
do {
|
||||
|
@ -562,7 +585,7 @@ retry:
|
|||
}
|
||||
|
||||
res =
|
||||
g_socket_receive_message (udpsrc->used_socket, &saddr, udpsrc->vec, 2,
|
||||
g_socket_receive_message (udpsrc->used_socket, p_saddr, udpsrc->vec, 2,
|
||||
NULL, NULL, &flags, udpsrc->cancellable, &err);
|
||||
|
||||
if (G_UNLIKELY (res < 0)) {
|
||||
|
@ -801,6 +824,9 @@ gst_udpsrc_set_property (GObject * object, guint prop_id, const GValue * value,
|
|||
case PROP_LOOP:
|
||||
udpsrc->loop = g_value_get_boolean (value);
|
||||
break;
|
||||
case PROP_RETRIEVE_SENDER_ADDRESS:
|
||||
udpsrc->retrieve_sender_address = g_value_get_boolean (value);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -858,6 +884,9 @@ gst_udpsrc_get_property (GObject * object, guint prop_id, GValue * value,
|
|||
case PROP_LOOP:
|
||||
g_value_set_boolean (value, udpsrc->loop);
|
||||
break;
|
||||
case PROP_RETRIEVE_SENDER_ADDRESS:
|
||||
g_value_set_boolean (value, udpsrc->retrieve_sender_address);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
|
|
@ -61,6 +61,7 @@ struct _GstUDPSrc {
|
|||
gboolean auto_multicast;
|
||||
gboolean reuse;
|
||||
gboolean loop;
|
||||
gboolean retrieve_sender_address;
|
||||
|
||||
/* stats */
|
||||
guint max_size;
|
||||
|
|
Loading…
Reference in a new issue