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

stream_filter: split out code for automatic filter probing

parent 3bf3de01
...@@ -2309,6 +2309,8 @@ static int InputSourceInit( input_thread_t *p_input, ...@@ -2309,6 +2309,8 @@ static int InputSourceInit( input_thread_t *p_input,
} }
/* Add stream filters */ /* Add stream filters */
p_stream = stream_FilterAutoNew( p_stream );
char *psz_stream_filter = var_GetNonEmptyString( p_input, char *psz_stream_filter = var_GetNonEmptyString( p_input,
"stream-filter" ); "stream-filter" );
p_stream = stream_FilterChainNew( p_stream, psz_stream_filter, p_stream = stream_FilterChainNew( p_stream, psz_stream_filter,
......
...@@ -46,11 +46,18 @@ stream_t *stream_AccessNew( access_t *p_access ); ...@@ -46,11 +46,18 @@ stream_t *stream_AccessNew( access_t *p_access );
stream_t *stream_FilterNew( stream_t *p_source, stream_t *stream_FilterNew( stream_t *p_source,
const char *psz_stream_filter ); 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: * This function creates a chain of filters:
* - first, automatic probed stream filters are inserted. * - optional user filters (configured by psz_chain) are inserted.
* - then, optional user filters (configured by psz_chain) are inserted. * - an optional record filter is inserted if b_record is true.
* - finaly, 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 * You must release the returned value using stream_Delete unless it is used as a
* source to another filter. * source to another filter.
......
...@@ -73,21 +73,25 @@ stream_t *stream_FilterNew( stream_t *p_source, ...@@ -73,21 +73,25 @@ stream_t *stream_FilterNew( stream_t *p_source,
return s; return s;
} }
stream_t *stream_FilterChainNew( stream_t *p_source, /* Add automatic stream filter */
const char *psz_chain, stream_t *stream_FilterAutoNew( stream_t *p_source )
bool b_record )
{ {
/* Add auto stream filter */
for( ;; ) for( ;; )
{ {
stream_t *p_filter = stream_FilterNew( p_source, NULL ); stream_t *p_filter = stream_FilterNew( p_source, NULL );
if( !p_filter ) if( p_filter == NULL )
break; break;
msg_Dbg( p_filter, "Inserted a stream filter" ); msg_Dbg( p_filter, "stream filter added to %p", p_source );
p_source = p_filter; p_source = p_filter;
} }
return p_source;
}
stream_t *stream_FilterChainNew( stream_t *p_source,
const char *psz_chain,
bool b_record )
{
/* Add user stream filter */ /* Add user stream filter */
char *psz_tmp = psz_chain ? strdup( psz_chain ) : NULL; char *psz_tmp = psz_chain ? strdup( psz_chain ) : NULL;
char *psz = psz_tmp; char *psz = psz_tmp;
......
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