+ /* try to find the requested filter */
+ if( i_visual == 1 ) /* this can only be a visualization module */
+ {
+ /* request format */
+ memcpy( &p_filter->input, &chain_output_format,
+ sizeof(audio_sample_format_t) );
+ memcpy( &p_filter->output, &chain_output_format,
+ sizeof(audio_sample_format_t) );
+
+ p_filter->p_module = module_Need( p_filter, "visualization",
+ psz_parser, VLC_TRUE );
+ }
+ else /* this can be a audio filter module as well as a visualization module */
+ {
+ /* request format */
+ memcpy( &p_filter->input, &chain_input_format,
+ sizeof(audio_sample_format_t) );
+ memcpy( &p_filter->output, &chain_output_format,
+ sizeof(audio_sample_format_t) );
+
+ p_filter->p_module = module_Need( p_filter, "audio filter",
+ psz_parser, VLC_TRUE );
+
+ if ( p_filter->p_module == NULL )
+ {
+ /* if the filter requested a special format, retry */
+ if ( !( AOUT_FMTS_IDENTICAL( &p_filter->input,
+ &chain_input_format )
+ && AOUT_FMTS_IDENTICAL( &p_filter->output,
+ &chain_output_format ) ) )
+ {
+ aout_FormatPrepare( &p_filter->input );
+ aout_FormatPrepare( &p_filter->output );
+ p_filter->p_module = module_Need( p_filter,
+ "audio filter",
+ psz_parser, VLC_TRUE );
+ }
+ /* try visual filters */
+ else
+ {
+ memcpy( &p_filter->input, &chain_output_format,
+ sizeof(audio_sample_format_t) );
+ memcpy( &p_filter->output, &chain_output_format,
+ sizeof(audio_sample_format_t) );
+ p_filter->p_module = module_Need( p_filter,
+ "visualization",
+ psz_parser, VLC_TRUE );
+ }
+ }
+ }