stream_filter: split out code for automatic filter probing

This commit is contained in:
Rémi Denis-Courmont 2015-08-25 20:24:51 +03:00
parent 3bf3de015a
commit 15a2182a62
3 changed files with 27 additions and 14 deletions

View File

@ -2309,6 +2309,8 @@ static int InputSourceInit( input_thread_t *p_input,
}
/* Add stream filters */
p_stream = stream_FilterAutoNew( p_stream );
char *psz_stream_filter = var_GetNonEmptyString( p_input,
"stream-filter" );
p_stream = stream_FilterChainNew( p_stream, psz_stream_filter,

View File

@ -46,11 +46,18 @@ stream_t *stream_AccessNew( access_t *p_access );
stream_t *stream_FilterNew( stream_t *p_source,
const char *psz_stream_filter );
/**
* Automatically wraps a stream with any applicable stream filter.
* @return the (outermost/downstream) stream filter; if no filters were added,
* then the function return the source parameter.
* @note The function never returns NULL.
*/
stream_t *stream_FilterAutoNew( stream_t *source ) VLC_USED;
/**
* This function creates a chain of filters:
* - first, automatic probed stream filters are inserted.
* - then, optional user filters (configured by psz_chain) are inserted.
* - finaly, an optional record filter is inserted if b_record is true.
* - optional user filters (configured by psz_chain) are inserted.
* - an optional record filter is inserted if b_record is true.
*
* You must release the returned value using stream_Delete unless it is used as a
* source to another filter.

View File

@ -73,21 +73,25 @@ stream_t *stream_FilterNew( stream_t *p_source,
return s;
}
/* Add automatic stream filter */
stream_t *stream_FilterAutoNew( stream_t *p_source )
{
for( ;; )
{
stream_t *p_filter = stream_FilterNew( p_source, NULL );
if( p_filter == NULL )
break;
msg_Dbg( p_filter, "stream filter added to %p", p_source );
p_source = p_filter;
}
return p_source;
}
stream_t *stream_FilterChainNew( stream_t *p_source,
const char *psz_chain,
bool b_record )
{
/* Add auto stream filter */
for( ;; )
{
stream_t *p_filter = stream_FilterNew( p_source, NULL );
if( !p_filter )
break;
msg_Dbg( p_filter, "Inserted a stream filter" );
p_source = p_filter;
}
/* Add user stream filter */
char *psz_tmp = psz_chain ? strdup( psz_chain ) : NULL;
char *psz = psz_tmp;