[vlc-devel] [PATCH] udp: limit the udp buffer to a configurable size
Tzu-Jung Lee
roylee17 at gmail.com
Fri Aug 16 18:48:52 CEST 2013
Signed-off-by: Tzu-Jung Lee <tjlee at ambarella.com>
---
modules/access/udp.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/modules/access/udp.c b/modules/access/udp.c
index c8bc519..16ff1a3 100644
--- a/modules/access/udp.c
+++ b/modules/access/udp.c
@@ -50,6 +50,11 @@
static int Open ( vlc_object_t * );
static void Close( vlc_object_t * );
+#define BUFFER_TEXT N_("UDP buffer size")
+#define BUFFER_LONGTEXT N_("The UDP access module pulls recieved packets " \
+ "from socket buffer into a fifo to avoid or " \
+ "reduce packet loss due to socket buffer " \
+ "overflow. The default size is 4M Bytes" )
vlc_module_begin ()
set_shortname( N_("UDP" ) )
set_description( N_("UDP input") )
@@ -57,6 +62,7 @@ vlc_module_begin ()
set_subcategory( SUBCAT_INPUT_ACCESS )
add_obsolete_integer( "server-port" ) /* since 2.0.0 */
+ add_integer( "udp-buffer", 0x400000, BUFFER_TEXT, BUFFER_LONGTEXT, true )
set_capability( "access", 0 )
add_shortcut( "udp", "udpstream", "udp4", "udp6" )
@@ -67,6 +73,7 @@ vlc_module_end ()
struct access_sys_t
{
int i_handle;
+ int i_fifo_size;
block_fifo_t *p_fifo;
@@ -156,6 +163,7 @@ static int Open( vlc_object_t *p_this )
p_sys->i_handle = i_handle;
p_sys->p_fifo = block_FifoNew();
+ p_sys->i_fifo_size = var_InheritInteger(p_access, "udp-buffer");
if( vlc_clone( &p_sys->thread, ThreadRead, p_access,
VLC_THREAD_PRIORITY_HIGHEST ) )
@@ -241,9 +249,12 @@ static void* ThreadRead( void *data )
{
access_t *p_access = (access_t*)data;
access_sys_t *p_sys = p_access->p_sys;
+ int i_fifo_size = p_sys->i_fifo_size;
for (;;)
{
+ block_FifoPace(p_sys->p_fifo, SIZE_MAX, i_fifo_size);
+
block_t *p_pk = block_Alloc( MTU );
if( unlikely(p_pk == NULL) )
return NULL;
--
1.8.3.2
More information about the vlc-devel
mailing list