* input_ps.c: PS demux and packet management
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: input_ps.c,v 1.22 2001/05/07 04:42:42 sam Exp $
+ * $Id: input_ps.c,v 1.23 2001/05/08 00:43:57 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Cyril Deguet <asmax@via.ecp.fr>
return;
}
p_input->p_method_data = (void *)p_packet_cache;
+
+ /* Initialize packet cache mutex */
+ vlc_mutex_init( &p_packet_cache->lock );
/* allocates the data cache */
p_packet_cache->data.p_stack = malloc( DATA_CACHE_SIZE *
*****************************************************************************/
static void PSEnd( input_thread_t * p_input )
{
+ vlc_mutex_destroy( &((packet_cache_t *)p_input->p_plugin_data)->lock );
free( p_input->p_plugin_data );
}
return NULL;
}
+ vlc_mutex_lock( &p_cache->lock );
+
/* Checks whether the data cache is empty */
if( p_cache->data.l_index == 0 )
{
if ( (p_data = malloc( sizeof(data_packet_t) )) == NULL )
{
intf_ErrMsg( "Out of memory" );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
#ifdef TRACE_INPUT
== NULL )
{
intf_ErrMsg( "NULL packet in the data cache" );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
}
{
intf_DbgMsg( "Out of memory" );
free( p_data );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
#ifdef TRACE_INPUT
{
intf_ErrMsg( "NULL packet in the small buffer cache" );
free( p_data );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
/* Reallocates the packet if it is too small or too large */
{
intf_ErrMsg( "Out of memory" );
free( p_data );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
#ifdef TRACE_INPUT
{
intf_ErrMsg( "NULL packet in the small buffer cache" );
free( p_data );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
/* Reallocates the packet if it is too small or too large */
}
}
+ vlc_mutex_unlock( &p_cache->lock );
+
/* Initialize data */
p_data->p_next = NULL;
p_data->b_discard_payload = 0;
}
#endif
+ vlc_mutex_lock( &p_cache->lock );
+
/* Checks whether the PES cache is empty */
if( p_cache->pes.l_index == 0 )
{
if ( (p_pes = malloc( sizeof(pes_packet_t) )) == NULL )
{
intf_DbgMsg( "Out of memory" );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
#ifdef TRACE_INPUT
== NULL )
{
intf_ErrMsg( "NULL packet in the data cache" );
+ vlc_mutex_unlock( &p_cache->lock );
return NULL;
}
}
+ vlc_mutex_unlock( &p_cache->lock );
+
p_pes->b_data_alignment = p_pes->b_discontinuity =
p_pes->i_pts = p_pes->i_dts = 0;
p_pes->i_pes_size = 0;
ASSERT( p_data );
+ vlc_mutex_lock( &p_cache->lock );
+
/* Checks whether the data cache is full */
if ( p_cache->data.l_index < DATA_CACHE_SIZE )
{
#endif
}
+ vlc_mutex_unlock( &p_cache->lock );
}
/*****************************************************************************
p_data = p_next;
}
+ vlc_mutex_lock( &p_cache->lock );
+
/* Checks whether the PES cache is full */
if ( p_cache->pes.l_index < PES_CACHE_SIZE )
{
intf_DbgMsg( "PS input: PES packet freed" );
#endif
}
+
+ vlc_mutex_unlock( &p_cache->lock );
}