-/*****************************************************************************
- * Create: allocate headphone downmixer
- *****************************************************************************/
-static int Create( vlc_object_t *p_this )
-{
- aout_filter_t * p_filter = (aout_filter_t *)p_this;
- bool b_fit = true;
-
- /* Activate this filter only with stereo devices */
- 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 = false;
- p_filter->input.i_original_channels =
- p_filter->output.i_original_channels;
- }
- if( p_filter->input.i_format != VLC_CODEC_FL32
- || p_filter->output.i_format != VLC_CODEC_FL32 )
- {
- b_fit = false;
- p_filter->input.i_format = VLC_CODEC_FL32;
- p_filter->output.i_format = VLC_CODEC_FL32;
- }
- if( p_filter->input.i_rate != p_filter->output.i_rate )
- {
- b_fit = false;
- p_filter->input.i_rate = p_filter->output.i_rate;
- }
- if( p_filter->input.i_physical_channels == (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT)
- && ( p_filter->input.i_original_channels & AOUT_CHAN_DOLBYSTEREO )
- && ! config_GetInt ( p_filter , "headphone-dolby" ) )
- {
- b_fit = false;
- p_filter->input.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
- AOUT_CHAN_CENTER |
- AOUT_CHAN_REARLEFT |
- AOUT_CHAN_REARRIGHT;
- }
-
- if( !b_fit )
- {
- msg_Dbg( p_filter, "requesting specific format" );
- return VLC_EGENERIC;
- }
-
- /* Allocate the memory needed to store the module's structure */
- p_filter->p_sys = malloc( sizeof(struct aout_filter_sys_t) );
- if( p_filter->p_sys == NULL )
- return VLC_ENOMEM;
- p_filter->p_sys->i_overflow_buffer_size = 0;
- p_filter->p_sys->p_overflow_buffer = NULL;
- p_filter->p_sys->i_nb_atomic_operations = 0;
- p_filter->p_sys->p_atomic_operations = NULL;
-
- if( Init( VLC_OBJECT(p_filter), p_filter->p_sys
- , aout_FormatNbChannels ( &p_filter->input )
- , p_filter->input.i_physical_channels
- , p_filter->input.i_rate ) < 0 )
- {
- free( p_filter->p_sys );
- return VLC_EGENERIC;
- }
-
- p_filter->pf_do_work = DoWork;
- p_filter->b_in_place = 0;
-
- return VLC_SUCCESS;
-}
-
-/*****************************************************************************
- * Destroy: deallocate resources associated with headphone downmixer
- *****************************************************************************/
-static void Destroy( vlc_object_t *p_this )
-{
- aout_filter_t * p_filter = (aout_filter_t *)p_this;
-
- if( p_filter->p_sys != NULL )
- {
- free( p_filter->p_sys->p_overflow_buffer );
- free( p_filter->p_sys->p_atomic_operations );
- free( p_filter->p_sys );
- p_filter->p_sys = NULL;
- }
-}
-