if( !p_input->p )
return NULL;
- /* One "randomly" selected input thread is responsible for computing
- * the global stats. Check if there is already someone doing this */
- if( p_input->p_libvlc->p_stats && !b_quick )
- {
- libvlc_priv_t *p_private = libvlc_priv( p_input->p_libvlc );
- vlc_mutex_lock( &p_input->p_libvlc->p_stats->lock );
- if( p_private->p_stats_computer == NULL )
- p_private->p_stats_computer = p_input;
- vlc_mutex_unlock( &p_input->p_libvlc->p_stats->lock );
- }
-
p_input->b_preparsing = b_quick;
p_input->psz_header = psz_header ? strdup( psz_header ) : NULL;
/**
* Initialize an input and initialize it to preparse the item
- * This function is blocking. It will only accept to parse files
+ * This function is blocking. It will only accept parsing regular files.
*
* \param p_parent a vlc_object_t
* \param p_item an input item
* \return VLC_SUCCESS or an error
*/
-int __input_Preparse( vlc_object_t *p_parent, input_item_t *p_item )
+int input_Preparse( vlc_object_t *p_parent, input_item_t *p_item )
{
input_thread_t *p_input;
static void MainLoopStatistic( input_thread_t *p_input )
{
stats_ComputeInputStats( p_input, p_input->p->p_item->p_stats );
- /* Are we the thread responsible for computing global stats ? */
- if( libvlc_priv( p_input->p_libvlc )->p_stats_computer == p_input )
- {
- stats_ComputeGlobalStats( p_input->p_libvlc,
- p_input->p_libvlc->p_stats );
- }
input_SendEventStatistics( p_input );
}
{
/* Setup variables */
input_ControlVarNavigation( p_input );
- input_ControlVarTitle( p_input, 0 );
+ input_SendEventTitle( p_input, 0 );
}
/* Global flag */
#ifdef ENABLE_SOUT
ret = InitSout( p_input );
if( ret != VLC_SUCCESS )
- return ret; /* FIXME: goto error; should be better here */
+ goto error_stats;
#endif
/* Create es out */
InputUpdateMeta( p_input, p_meta );
}
- if( !p_input->b_preparsing )
- {
- msg_Dbg( p_input, "`%s' successfully opened",
- p_input->p->p_item->psz_uri );
-
- }
+ msg_Dbg( p_input, "`%s' successfully opened",
+ p_input->p->p_item->psz_uri );
/* initialization is complete */
input_ChangeState( p_input, PLAYING_S );
input_ressource_SetInput( p_input->p->p_ressource, NULL );
}
+#ifdef ENABLE_SOUT
+error_stats:
+#endif
if( !p_input->b_preparsing && libvlc_stats( p_input ) )
{
#define EXIT_COUNTER( c ) do { if( p_input->p->counters.p_##c ) \
/* make sure we are up to date */
stats_ComputeInputStats( p_input, p_input->p->p_item->p_stats );
- if( p_private->p_stats_computer == p_input )
- {
- stats_ComputeGlobalStats( p_input->p_libvlc,
- p_input->p_libvlc->p_stats );
- /* FIXME how can it be thread safe ? */
- p_private->p_stats_computer = NULL;
- }
CL_CO( read_bytes );
CL_CO( read_packets );
CL_CO( demux_read );
es_out_SetTime( p_input->p->p_es_out, -1 );
demux_Control( p_demux, DEMUX_SET_TITLE, i_title );
- input_ControlVarTitle( p_input, i_title );
+ input_SendEventTitle( p_input, i_title );
}
}
else if( p_input->p->input.i_title > 0 )
stream_Control( p_input->p->input.p_stream, STREAM_CONTROL_ACCESS,
ACCESS_SET_TITLE, i_title );
+ input_SendEventTitle( p_input, i_title );
}
}
break;
es_out_SetTime( p_input->p->p_es_out, -1 );
demux_Control( p_demux, DEMUX_SET_SEEKPOINT, i_seekpoint );
+ input_SendEventSeekpoint( p_input, p_demux->info.i_title, i_seekpoint );
}
}
else if( p_input->p->input.i_title > 0 )
stream_Control( p_input->p->input.p_stream, STREAM_CONTROL_ACCESS,
ACCESS_SET_SEEKPOINT, i_seekpoint );
+ input_SendEventSeekpoint( p_input, p_access->info.i_title, i_seekpoint );
}
}
break;
}
{
- /* Take access redirections into account */
+ /* Take access/stream redirections into account */
char *psz_real_path;
char *psz_buf = NULL;
- if( in->p_access->psz_path )
+ if( in->p_stream->psz_path )
{
const char *psz_a, *psz_d;
- psz_buf = strdup( in->p_access->psz_path );
+ psz_buf = strdup( in->p_stream->psz_path );
input_SplitMRL( &psz_a, &psz_d, &psz_real_path, psz_buf );
}
else
if( !psz_arturl || *psz_arturl == '\0' )
{
- psz_arturl = vlc_meta_Get( p_item->p_meta, vlc_meta_ArtworkURL );
- if( psz_arturl )
- psz_arturl = strdup( psz_arturl );
+ const char *psz_tmp = vlc_meta_Get( p_item->p_meta, vlc_meta_ArtworkURL );
+ if( psz_tmp )
+ psz_arturl = strdup( psz_tmp );
}
+ vlc_mutex_unlock( &p_item->lock );
if( psz_arturl && *psz_arturl )
{
- vlc_meta_Set( p_item->p_meta, vlc_meta_ArtworkURL, psz_arturl );
+ input_item_SetArtURL( p_item, psz_arturl );
if( !strncmp( psz_arturl, "attachment://", strlen("attachment") ) )
{
/* Don't look for art cover if sout
* XXX It can change when sout has meta data support */
if( p_input->p->p_sout && !p_input->b_preparsing )
- vlc_meta_Set( p_item->p_meta, vlc_meta_ArtworkURL, "" );
+ input_item_SetArtURL( p_item, "" );
else
input_ExtractAttachmentAndCacheArt( p_input );
}
}
- vlc_mutex_unlock( &p_item->lock );
free( psz_arturl );
if( psz_title )