/*****************************************************************************
* Preamble
*****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <vlc/vlc.h>
#include <sys/types.h>
#define MAX_EMPTY_BLOCKS 200
-#if defined(WIN32) || defined(UNDER_CE)
-# define WINSOCK_STRERROR_SIZE 20
-static const char *winsock_strerror( char *buf )
-{
- snprintf( buf, WINSOCK_STRERROR_SIZE, "Winsock error %d",
- WSAGetLastError( ) );
- buf[WINSOCK_STRERROR_SIZE - 1] = '\0';
- return buf;
-}
-#endif
-
/*****************************************************************************
* Module descriptor
*****************************************************************************/
set_shortname( "UDP" );
set_category( CAT_SOUT );
set_subcategory( SUBCAT_SOUT_ACO );
- add_integer( SOUT_CFG_PREFIX "caching", DEFAULT_PTS_DELAY / 1000, NULL, CACHING_TEXT, CACHING_LONGTEXT, VLC_TRUE );
+ add_integer( SOUT_CFG_PREFIX "caching", DEFAULT_PTS_DELAY / 1000, NULL, CACHING_TEXT, CACHING_LONGTEXT, true );
add_integer( SOUT_CFG_PREFIX "group", 1, NULL, GROUP_TEXT, GROUP_LONGTEXT,
- VLC_TRUE );
+ true );
add_obsolete_integer( SOUT_CFG_PREFIX "late" );
add_obsolete_bool( SOUT_CFG_PREFIX "raw" );
- add_bool( SOUT_CFG_PREFIX "auto-mcast", VLC_FALSE, NULL, AUTO_MCAST_TEXT,
- AUTO_MCAST_LONGTEXT, VLC_TRUE );
+ add_bool( SOUT_CFG_PREFIX "auto-mcast", false, NULL, AUTO_MCAST_TEXT,
+ AUTO_MCAST_LONGTEXT, true );
set_capability( "sout access", 100 );
add_shortcut( "udp" );
NULL
};
-static int Write ( sout_access_out_t *, block_t * );
+static ssize_t Write ( sout_access_out_t *, block_t * );
static int Seek ( sout_access_out_t *, off_t );
static void ThreadWrite( vlc_object_t * );
struct sout_access_out_sys_t
{
int i_mtu;
- vlc_bool_t b_mtu_warning;
+ bool b_mtu_warning;
block_t *p_buffer;
};
#define DEFAULT_PORT 1234
-#define RTP_HEADER_LENGTH 12
/*****************************************************************************
* Open: open the file
if( i_handle == -1 )
{
msg_Err( p_access, "failed to create raw UDP socket" );
- vlc_object_destroy (p_sys->p_thread);
+ vlc_object_release (p_sys->p_thread);
free (p_sys);
return VLC_EGENERIC;
}
p_sys->p_buffer = NULL;
if( vlc_thread_create( p_sys->p_thread, "sout write thread", ThreadWrite,
- VLC_THREAD_PRIORITY_HIGHEST, VLC_FALSE ) )
+ VLC_THREAD_PRIORITY_HIGHEST, false ) )
{
msg_Err( p_access->p_sout, "cannot spawn sout access thread" );
net_Close (i_handle);
- vlc_object_destroy( p_sys->p_thread );
+ vlc_object_release( p_sys->p_thread );
free (p_sys);
return VLC_EGENERIC;
}
int i;
vlc_object_kill( p_sys->p_thread );
+ block_FifoWake( p_sys->p_thread->p_fifo );
+
for( i = 0; i < 10; i++ )
{
block_t *p_dummy = block_New( p_access, p_sys->i_mtu );
net_Close( p_sys->p_thread->i_handle );
vlc_object_detach( p_sys->p_thread );
- vlc_object_destroy( p_sys->p_thread );
+ vlc_object_release( p_sys->p_thread );
/* update p_sout->i_out_pace_nocontrol */
p_access->p_sout->i_out_pace_nocontrol--;
/*****************************************************************************
* Write: standard write on a file descriptor.
*****************************************************************************/
-static int Write( sout_access_out_t *p_access, block_t *p_buffer )
+static ssize_t Write( sout_access_out_t *p_access, block_t *p_buffer )
{
sout_access_out_sys_t *p_sys = p_access->p_sys;
int i_len = 0;
{
msg_Warn( p_access, "packet size > MTU, you should probably "
"increase the MTU" );
- p_sys->b_mtu_warning = VLC_TRUE;
+ p_sys->b_mtu_warning = true;
}
/* Check if there is enough space in the buffer */
sout_access_out_sys_t *p_sys = p_access->p_sys;
block_t *p_buffer;
- while ( p_sys->p_thread->p_empty_blocks->i_depth > MAX_EMPTY_BLOCKS )
+ while ( block_FifoCount( p_sys->p_thread->p_empty_blocks ) > MAX_EMPTY_BLOCKS )
{
p_buffer = block_FifoGet( p_sys->p_thread->p_empty_blocks );
block_Release( p_buffer );
}
- if( p_sys->p_thread->p_empty_blocks->i_depth == 0 )
+ if( block_FifoCount( p_sys->p_thread->p_empty_blocks ) == 0 )
{
p_buffer = block_New( p_access->p_sout, p_sys->i_mtu );
}
mtime_t i_date_last = -1;
mtime_t i_to_send = p_thread->i_group;
int i_dropped_packets = 0;
-#if defined(WIN32) || defined(UNDER_CE)
- char strerror_buf[WINSOCK_STRERROR_SIZE];
-# define strerror( x ) winsock_strerror( strerror_buf )
-#endif
while( !p_thread->b_die )
{
}
#endif
p_pk = block_FifoGet( p_thread->p_fifo );
+ if( p_pk == NULL )
+ continue; /* forced wake-up */
i_date = p_thread->i_caching + p_pk->i_dts;
if( i_date_last > 0 )
p_pk->i_buffer, 0 );
if (val == -1)
{
- msg_Warn( p_thread, "send error: %s", strerror(errno) );
+ msg_Warn( p_thread, "send error: %m" );
}
if( i_dropped_packets )
#endif
return NULL;
}
-
-