]> git.sesse.net Git - vlc/blobdiff - modules/access_output/udp.c
* mp4.c: added support for SVQ1.
[vlc] / modules / access_output / udp.c
index b3249ca6626968c7d00d7df7dd877409912eebb8..584358ae4e0366cd85c2f0d029a970d9b12211ee 100644 (file)
@@ -2,7 +2,7 @@
  * udp.c
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
- * $Id: udp.c,v 1.23 2004/03/03 20:39:51 gbazin Exp $
+ * $Id$
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Eric Petit <titer@videolan.org>
@@ -96,6 +96,7 @@ typedef struct sout_access_thread_t
     int         i_handle;
 
     int64_t     i_caching;
+    int64_t     i_late;
     int         i_group;
 
 } sout_access_thread_t;
@@ -227,6 +228,13 @@ static int Open( vlc_object_t *p_this )
         p_sys->p_thread->i_group = atoi( psz_val );
     }
 
+    p_sys->p_thread->i_late = 0;
+    if( ( psz_val = sout_cfg_find_value( p_access->p_cfg, "late" ) ) )
+    {
+        p_sys->p_thread->i_late = atoll( psz_val ) * 1000;
+    }
+
+
     p_sys->i_mtu = socket_desc.i_mtu;
 
 #ifdef WIN32
@@ -261,6 +269,10 @@ static int Open( vlc_object_t *p_this )
     msg_Info( p_access, "Open: addr:`%s' port:`%d'", psz_dst_addr, i_dst_port);
 
     free( psz_dst_addr );
+
+    /* update p_sout->i_out_pace_nocontrol */
+    p_access->p_sout->i_out_pace_nocontrol++;
+
     return VLC_SUCCESS;
 }
 
@@ -293,13 +305,10 @@ static void Close( vlc_object_t * p_this )
         sout_BufferDelete( p_access->p_sout, p_sys->p_buffer );
     }
 
-#if defined( UNDER_CE )
-    CloseHandle( (HANDLE)p_sys->p_thread->i_handle );
-#elif defined( WIN32 )
-    closesocket( p_sys->p_thread->i_handle );
-#else
-    close( p_sys->p_thread->i_handle );
-#endif
+    net_Close( p_sys->p_thread->i_handle );
+
+    /* update p_sout->i_out_pace_nocontrol */
+    p_access->p_sout->i_out_pace_nocontrol--;
 
     free( p_sys );
     msg_Info( p_access, "Close" );
@@ -458,11 +467,13 @@ static void ThreadWrite( vlc_object_t *p_this )
         }
 
         i_sent = mdate();
-        if ( i_sent > i_date + 100000 )
+        if( p_thread->i_late > 0 && i_sent > i_date + p_thread->i_late )
         {
             if( !i_dropped_packets )
+            {
                 msg_Dbg( p_thread, "late packet to send (" I64Fd ") -> drop",
                          i_sent - i_date );
+            }
             sout_BufferDelete( p_sout, p_pk );
             i_date_last = i_date;
             i_dropped_packets++;