- 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 );
+ /* 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 );
+ }