aout_filter_t * p_filter = (aout_filter_t *)p_this;
/* Validate audio filter format */
- if ( p_filter->input.i_original_channels
- != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT|AOUT_CHAN_DOLBYSTEREO )
- || aout_FormatNbChannels( &p_filter->output ) <= 2
- || p_filter->output.i_physical_channels
- != ( p_filter->output.i_original_channels & AOUT_CHAN_PHYSMASK )
- || p_filter->input.i_physical_channels
- != ( p_filter->input.i_original_channels & AOUT_CHAN_PHYSMASK ))
+ if ( p_filter->input.i_physical_channels != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT)
+ || ! ( p_filter->input.i_original_channels & AOUT_CHAN_DOLBYSTEREO )
+ || aout_FormatNbChannels( &p_filter->output ) <= 2
+ || ( p_filter->input.i_original_channels & ~AOUT_CHAN_DOLBYSTEREO )
+ != ( p_filter->output.i_original_channels & ~AOUT_CHAN_DOLBYSTEREO ) )
{
return VLC_EGENERIC;
}
vlc_bool_t b_fit = VLC_TRUE;
/* Activate this filter only with stereo devices */
- if ( p_filter->output.i_physical_channels != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT)
- || p_filter->output.i_physical_channels
- != ( p_filter->output.i_original_channels & AOUT_CHAN_PHYSMASK )
- || p_filter->input.i_physical_channels
- != ( p_filter->input.i_original_channels & AOUT_CHAN_PHYSMASK ) )
+ if ( p_filter->output.i_physical_channels
+ != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT) )
{
msg_Dbg( p_filter, "Filter discarded (incompatible format)" );
return VLC_EGENERIC;
}
/* Request a specific format if not already compatible */
+ if ( p_filter->input.i_original_channels
+ != p_filter->output.i_original_channels )
+ {
+ b_fit = VLC_FALSE;
+ p_filter->input.i_original_channels =
+ p_filter->output.i_original_channels;
+ }
if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
|| p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
{
AOUT_CHAN_CENTER |
AOUT_CHAN_REARLEFT |
AOUT_CHAN_REARRIGHT;
- p_filter->input.i_original_channels = p_filter->input.i_physical_channels;
}
if ( ! b_fit )
{