Commit cb233fee authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

input: use concat access rather than stream access

parent dfe06d6e
......@@ -2231,72 +2231,78 @@ static int InputSourceInit( input_thread_t *p_input,
}
else
{ /* Now try a real access */
access_t *p_access = access_New( p_input, p_input,
psz_access, psz_demux, psz_path );
if( p_access == NULL )
if( &p_input->p->input == in )
{ /* On master stream only, use input-list */
char *str = var_InheritString( p_input, "input-list" );
if( str != NULL )
{
msg_Err( p_input, "open of `%s' failed", psz_mrl );
if( !b_in_can_fail && !input_Stopped( p_input ) )
dialog_Fatal( p_input, _("Your input can't be opened"),
_("VLC is unable to open the MRL '%s'."
" Check the log for details."), psz_mrl );
goto error;
}
char *list;
/* Access-forced demuxer (PARENTAL ADVISORY: EXPLICIT HACK) */
if( !psz_demux[0] || !strcasecmp( psz_demux, "any" ) )
psz_demux = p_access->psz_demux;
/* */
int i_input_list;
char **ppsz_input_list;
TAB_INIT( i_input_list, ppsz_input_list );
/* On master stream only, use input-list */
if( &p_input->p->input == in )
var_Create( p_input, "concat-list", VLC_VAR_STRING );
if( likely(asprintf( &list, "%s://%s,%s", psz_access, psz_path,
str ) >= 0) )
{
char *psz_list;
char *psz_parser;
var_SetString( p_input, "concat-list", list );
free( list );
}
free( str );
psz_access = "concat";
}
}
psz_list =
psz_parser = var_CreateGetNonEmptyString( p_input, "input-list" );
if( strcasecmp( psz_access, "concat" ) )
{ /* Autodetect extra files if none specified */
int count;
char **tab;
while( psz_parser && *psz_parser )
TAB_INIT( count, tab );
InputGetExtraFiles( p_input, &count, &tab, psz_access, psz_path );
if( count > 0 )
{
char *p = strchr( psz_parser, ',' );
if( p )
*p++ = '\0';
char *list = NULL;
if( *psz_parser )
for( int i = 0; i < count; i++ )
{
char *psz_name = strdup( psz_parser );
if( psz_name )
TAB_APPEND( i_input_list, ppsz_input_list, psz_name );
char *str;
if( asprintf( &str, "%s,%s", list ? list : psz_mrl,
tab[i] ) < 0 )
break;
free( tab[i] );
free( list );
list = str;
}
psz_parser = p;
var_Create( p_input, "concat-list", VLC_VAR_STRING );
if( likely(list != NULL) )
{
var_SetString( p_input, "concat-list", list );
free( list );
}
free( psz_list );
psz_access = "concat";
}
/* Autodetect extra files if none specified */
if( i_input_list <= 0 )
{
InputGetExtraFiles( p_input, &i_input_list, &ppsz_input_list,
psz_access, psz_path );
TAB_CLEAN( count, tab );
}
if( i_input_list > 0 )
TAB_APPEND( i_input_list, ppsz_input_list, NULL );
/* Create the stream_t */
stream_t *p_stream = stream_AccessNew( p_access, ppsz_input_list );
if( ppsz_input_list )
/* */
access_t *p_access = access_New( p_input, p_input,
psz_access, psz_demux, psz_path );
if( p_access == NULL )
{
for( int i = 0; ppsz_input_list[i] != NULL; i++ )
free( ppsz_input_list[i] );
TAB_CLEAN( i_input_list, ppsz_input_list );
msg_Err( p_input, "open of `%s' failed", psz_mrl );
if( !b_in_can_fail && !input_Stopped( p_input ) )
dialog_Fatal( p_input, _("Your input can't be opened"),
_("VLC is unable to open the MRL '%s'."
" Check the log for details."), psz_mrl );
goto error;
}
/* Access-forced demuxer (PARENTAL ADVISORY: EXPLICIT HACK) */
if( !psz_demux[0] || !strcasecmp( psz_demux, "any" ) )
psz_demux = p_access->psz_demux;
/* Create the stream_t */
stream_t *p_stream = stream_AccessNew( p_access, NULL );
if( p_stream == NULL )
{
msg_Warn( p_input, "cannot create a stream_t from access" );
......
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