Commit de1eb83f authored by Laurent Aimar's avatar Laurent Aimar

Cosmetics.

parent 76901ea3
...@@ -70,6 +70,8 @@ static void WaitDie ( input_thread_t *p_input ); ...@@ -70,6 +70,8 @@ static void WaitDie ( input_thread_t *p_input );
static void End ( input_thread_t *p_input ); static void End ( input_thread_t *p_input );
static void MainLoop( input_thread_t *p_input ); static void MainLoop( input_thread_t *p_input );
static void ObjectKillChildrens( input_thread_t *, vlc_object_t * );
static inline int ControlPopNoLock( input_thread_t *, int *, vlc_value_t *, mtime_t i_deadline ); static inline int ControlPopNoLock( input_thread_t *, int *, vlc_value_t *, mtime_t i_deadline );
static void ControlReduce( input_thread_t * ); static void ControlReduce( input_thread_t * );
static bool Control( input_thread_t *, int, vlc_value_t ); static bool Control( input_thread_t *, int, vlc_value_t );
...@@ -86,6 +88,8 @@ static input_source_t *InputSourceNew( input_thread_t *); ...@@ -86,6 +88,8 @@ static input_source_t *InputSourceNew( input_thread_t *);
static int InputSourceInit( input_thread_t *, input_source_t *, static int InputSourceInit( input_thread_t *, input_source_t *,
const char *, const char *psz_forced_demux ); const char *, const char *psz_forced_demux );
static void InputSourceClean( input_source_t * ); static void InputSourceClean( input_source_t * );
static void InputSourceMeta( input_thread_t *, input_source_t *, vlc_meta_t * );
/* TODO */ /* TODO */
//static void InputGetAttachments( input_thread_t *, input_source_t * ); //static void InputGetAttachments( input_thread_t *, input_source_t * );
static void SlaveDemux( input_thread_t *p_input ); static void SlaveDemux( input_thread_t *p_input );
...@@ -96,8 +100,6 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta ); ...@@ -96,8 +100,6 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta );
static char *InputGetExtraFiles( input_thread_t *p_input, static char *InputGetExtraFiles( input_thread_t *p_input,
const char *psz_access, const char *psz_path ); const char *psz_access, const char *psz_path );
static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_demux );
static void AccessMeta( input_thread_t * p_input, vlc_meta_t *p_meta );
static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment, static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment,
int i_new, input_attachment_t **pp_new ); int i_new, input_attachment_t **pp_new );
...@@ -443,23 +445,6 @@ int __input_Preparse( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -443,23 +445,6 @@ int __input_Preparse( vlc_object_t *p_parent, input_item_t *p_item )
* *
* \param the input thread to stop * \param the input thread to stop
*/ */
static void ObjectKillChildrens( input_thread_t *p_input, vlc_object_t *p_obj )
{
vlc_list_t *p_list;
int i;
if( p_obj->i_object_type == VLC_OBJECT_VOUT ||
p_obj->i_object_type == VLC_OBJECT_AOUT ||
p_obj == VLC_OBJECT(p_input->p->p_sout) )
return;
vlc_object_kill( p_obj );
p_list = vlc_list_children( p_obj );
for( i = 0; i < p_list->i_count; i++ )
ObjectKillChildrens( p_input, p_list->p_values[i].p_object );
vlc_list_release( p_list );
}
void input_StopThread( input_thread_t *p_input ) void input_StopThread( input_thread_t *p_input )
{ {
/* Set die for input and ALL of this childrens (even (grand-)grand-childrens) /* Set die for input and ALL of this childrens (even (grand-)grand-childrens)
...@@ -479,6 +464,27 @@ sout_instance_t *input_DetachSout( input_thread_t *p_input ) ...@@ -479,6 +464,27 @@ sout_instance_t *input_DetachSout( input_thread_t *p_input )
return p_sout; return p_sout;
} }
/*****************************************************************************
* ObjectKillChildrens
*****************************************************************************/
static void ObjectKillChildrens( input_thread_t *p_input, vlc_object_t *p_obj )
{
vlc_list_t *p_list;
int i;
if( p_obj->i_object_type == VLC_OBJECT_VOUT ||
p_obj->i_object_type == VLC_OBJECT_AOUT ||
p_obj == VLC_OBJECT(p_input->p->p_sout) )
return;
vlc_object_kill( p_obj );
p_list = vlc_list_children( p_obj );
for( i = 0; i < p_list->i_count; i++ )
ObjectKillChildrens( p_input, p_list->p_values[i].p_object );
vlc_list_release( p_list );
}
/***************************************************************************** /*****************************************************************************
* Run: main thread loop * Run: main thread loop
* This is the "normal" thread that spawns the input processing chain, * This is the "normal" thread that spawns the input processing chain,
...@@ -1204,11 +1210,13 @@ static int Init( input_thread_t * p_input ) ...@@ -1204,11 +1210,13 @@ static int Init( input_thread_t * p_input )
InputMetaUser( p_input, p_meta ); InputMetaUser( p_input, p_meta );
/* Get meta data from master input */ /* Get meta data from master input */
DemuxMeta( p_input, p_meta, p_input->p->input.p_demux ); InputSourceMeta( p_input, &p_input->p->input, p_meta );
/* Access_file does not give any meta, and there are no slave */ /* And from slave */
AccessMeta( p_input, p_meta ); for( int i = 0; i < p_input->p->i_slave; i++ )
InputSourceMeta( p_input, p_input->p->slave[i], p_meta );
/* */
InputUpdateMeta( p_input, p_meta ); InputUpdateMeta( p_input, p_meta );
if( !p_input->b_preparsing ) if( !p_input->b_preparsing )
...@@ -2235,10 +2243,8 @@ static void UpdateGenericFromAccess( input_thread_t *p_input ) ...@@ -2235,10 +2243,8 @@ static void UpdateGenericFromAccess( input_thread_t *p_input )
static input_source_t *InputSourceNew( input_thread_t *p_input ) static input_source_t *InputSourceNew( input_thread_t *p_input )
{ {
VLC_UNUSED(p_input); VLC_UNUSED(p_input);
input_source_t *in = malloc( sizeof( input_source_t ) );
if( in ) return calloc( 1, sizeof( input_source_t ) );
memset( in, 0, sizeof( input_source_t ) );
return in;
} }
/***************************************************************************** /*****************************************************************************
...@@ -2717,61 +2723,6 @@ static void InputMetaUser( input_thread_t *p_input, vlc_meta_t *p_meta ) ...@@ -2717,61 +2723,6 @@ static void InputMetaUser( input_thread_t *p_input, vlc_meta_t *p_meta )
#undef GET_META #undef GET_META
} }
/*****************************************************************************
* InputGetExtraFiles
* Autodetect extra input list
*****************************************************************************/
static char *InputGetExtraFiles( input_thread_t *p_input,
const char *psz_access, const char *psz_path )
{
char *psz_list = NULL;
if( ( psz_access && *psz_access && strcmp( psz_access, "file" ) ) || !psz_path )
return NULL;
const char *psz_ext = strrchr( psz_path, '.' );
if( !psz_ext || strcmp( psz_ext, ".001" ) )
return NULL;
char *psz_file = strdup( psz_path );
if( !psz_file )
return NULL;
/* Try to list .xyz files */
for( int i = 2; i < 999; i++ )
{
char *psz_ext = strrchr( psz_file, '.' );
struct stat st;
snprintf( psz_ext, 5, ".%.3d", i );
if( utf8_stat( psz_file, &st )
|| !S_ISREG( st.st_mode ) || !st.st_size )
continue;
msg_Dbg( p_input, "Detected extra file `%s'", psz_file );
if( psz_list )
{
char *psz_old = psz_list;
/* FIXME how to handle file with ',' ?*/
if( asprintf( &psz_list, "%s,%s", psz_old, psz_file ) < 0 )
{
psz_list = psz_old;
break;
}
}
else
{
psz_list = strdup( psz_file );
}
}
free( psz_file );
return psz_list;
}
/***************************************************************************** /*****************************************************************************
* InputUpdateMeta: merge p_item meta data with p_meta taking care of * InputUpdateMeta: merge p_item meta data with p_meta taking care of
* arturl and locking issue. * arturl and locking issue.
...@@ -2826,7 +2777,6 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta ) ...@@ -2826,7 +2777,6 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta )
/** \todo handle sout meta */ /** \todo handle sout meta */
} }
static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment, static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment,
int i_new, input_attachment_t **pp_new ) int i_new, input_attachment_t **pp_new )
{ {
...@@ -2845,61 +2795,36 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta ...@@ -2845,61 +2795,36 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta
*ppp_attachment = attachment; *ppp_attachment = attachment;
} }
static void AccessMeta( input_thread_t * p_input, vlc_meta_t *p_meta ) static void InputSourceMeta( input_thread_t *p_input,
input_source_t *p_source, vlc_meta_t *p_meta )
{ {
int i; access_t *p_access = p_source->p_access;
demux_t *p_demux = p_source->p_demux;
if( p_input->b_preparsing ) /* XXX Remember that checking against p_item->p_meta->i_status & ITEM_PREPARSED
return; * is a bad idea */
if( p_input->p->input.p_access ) /* Read access meta */
access_Control( p_input->p->input.p_access, ACCESS_GET_META, if( p_access )
p_meta ); access_Control( p_access, ACCESS_GET_META, p_meta );
/* Get meta data from slave input */ /* Read demux meta */
for( i = 0; i < p_input->p->i_slave; i++ ) demux_Control( p_demux, DEMUX_GET_META, p_meta );
{
DemuxMeta( p_input, p_meta, p_input->p->slave[i]->p_demux );
if( p_input->p->slave[i]->p_access )
{
access_Control( p_input->p->slave[i]->p_access,
ACCESS_GET_META, p_meta );
}
}
}
static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_demux ) /* If the demux report unsupported meta data, try an external "meta reader" */
{
bool b_bool; bool b_bool;
module_t *p_id3;
#if 0
/* XXX I am not sure it is a great idea, besides, there is more than that
* if we want to do it right */
vlc_mutex_lock( &p_item->lock );
if( p_item->p_meta && (p_item->p_meta->i_status & ITEM_PREPARSED ) )
{
vlc_mutex_unlock( &p_item->lock );
return;
}
vlc_mutex_unlock( &p_item->lock );
#endif
demux_Control( p_demux, DEMUX_GET_META, p_meta );
if( demux_Control( p_demux, DEMUX_HAS_UNSUPPORTED_META, &b_bool ) ) if( demux_Control( p_demux, DEMUX_HAS_UNSUPPORTED_META, &b_bool ) )
return; return;
if( !b_bool ) if( !b_bool )
return; return;
p_demux->p_private = calloc( 1, sizeof( demux_meta_t ) ); demux_meta_t *p_demux_meta = p_demux->p_private = calloc( 1, sizeof(*p_demux_meta) );
if(! p_demux->p_private ) if( !p_demux_meta )
return; return;
p_id3 = module_need( p_demux, "meta reader", NULL, 0 ); module_t *p_id3 = module_need( p_demux, "meta reader", NULL, 0 );
if( p_id3 ) if( p_id3 )
{ {
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
if( p_demux_meta->p_meta ) if( p_demux_meta->p_meta )
{ {
vlc_meta_Merge( p_meta, p_demux_meta->p_meta ); vlc_meta_Merge( p_meta, p_demux_meta->p_meta );
...@@ -2915,9 +2840,66 @@ static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_d ...@@ -2915,9 +2840,66 @@ static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_d
} }
module_unneed( p_demux, p_id3 ); module_unneed( p_demux, p_id3 );
} }
free( p_demux->p_private ); free( p_demux_meta );
} }
/*****************************************************************************
* InputGetExtraFiles
* Autodetect extra input list
*****************************************************************************/
static char *InputGetExtraFiles( input_thread_t *p_input,
const char *psz_access, const char *psz_path )
{
char *psz_list = NULL;
if( ( psz_access && *psz_access && strcmp( psz_access, "file" ) ) || !psz_path )
return NULL;
const char *psz_ext = strrchr( psz_path, '.' );
if( !psz_ext || strcmp( psz_ext, ".001" ) )
return NULL;
char *psz_file = strdup( psz_path );
if( !psz_file )
return NULL;
/* Try to list .xyz files */
for( int i = 2; i < 999; i++ )
{
char *psz_ext = strrchr( psz_file, '.' );
struct stat st;
snprintf( psz_ext, 5, ".%.3d", i );
if( utf8_stat( psz_file, &st )
|| !S_ISREG( st.st_mode ) || !st.st_size )
continue;
msg_Dbg( p_input, "Detected extra file `%s'", psz_file );
if( psz_list )
{
char *psz_old = psz_list;
/* FIXME how to handle file with ',' ?*/
if( asprintf( &psz_list, "%s,%s", psz_old, psz_file ) < 0 )
{
psz_list = psz_old;
break;
}
}
else
{
psz_list = strdup( psz_file );
}
}
free( psz_file );
return psz_list;
}
/* */
static void input_ChangeState( input_thread_t *p_input, int i_state ) static void input_ChangeState( input_thread_t *p_input, int i_state )
{ {
const bool b_changed = p_input->i_state != i_state; const bool b_changed = p_input->i_state != i_state;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment