-#include "libvlc.h"
-
-/*
- * Instances management (internal and external)
- */
-
-/* Local functions */
-static void aout_Destructor( vlc_object_t * p_this );
-
-#undef aout_New
-/*****************************************************************************
- * aout_New: initialize aout structure
- *****************************************************************************/
-audio_output_t *aout_New( vlc_object_t * p_parent )
-{
- audio_output_t *aout = vlc_custom_create (p_parent,
- sizeof (aout_instance_t),
- "audio output");
- if (unlikely(aout == NULL))
- return NULL;
-
- aout_owner_t *owner = aout_owner (aout);
-
- vlc_mutex_init (&owner->lock);
- owner->module = NULL;
- owner->input = NULL;
- vlc_mutex_init (&owner->volume.lock);
- owner->volume.multiplier = 1.0;
- owner->volume.mixer = NULL;
-
- aout->pf_play = aout_DecDeleteBuffer;
- aout_VolumeNoneInit (aout);
- vlc_object_set_destructor (aout, aout_Destructor);
-
- /*
- * Persistent audio output variables
- */
- vlc_value_t val, text;
- char *str;
-
- var_Create (aout, "volume", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
- var_Create (aout, "mute", VLC_VAR_BOOL | VLC_VAR_DOINHERIT);
- var_Create (aout, "intf-change", VLC_VAR_VOID);
-
- /* Visualizations */
- var_Create (aout, "visual", VLC_VAR_STRING | VLC_VAR_HASCHOICE);
- text.psz_string = _("Visualizations");
- var_Change (aout, "visual", VLC_VAR_SETTEXT, &text, NULL);
- val.psz_string = (char *)"";
- text.psz_string = _("Disable");
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- val.psz_string = (char *)"spectrometer";
- text.psz_string = _("Spectrometer");
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- val.psz_string = (char *)"scope";
- text.psz_string = _("Scope");
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- val.psz_string = (char *)"spectrum";
- text.psz_string = _("Spectrum");
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- val.psz_string = (char *)"vuMeter";
- text.psz_string = _("Vu meter");
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- /* Look for goom plugin */
- if (module_exists ("goom"))
- {
- val.psz_string = (char *)"goom";
- text.psz_string = (char *)"Goom";
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- }
- /* Look for libprojectM plugin */
- if (module_exists ("projectm"))
- {
- val.psz_string = (char *)"projectm";
- text.psz_string = (char*)"projectM";
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- }
- /* Look for VSXu plugin */
- if (module_exists ("vsxu"))
- {
- val.psz_string = (char *)"vsxu";
- text.psz_string = (char*)"Vovoid VSXu";
- var_Change (aout, "visual", VLC_VAR_ADDCHOICE, &val, &text);
- }
- str = var_GetNonEmptyString (aout, "effect-list");
- if (str != NULL)
- {
- var_SetString (aout, "visual", str);
- free (str);
- }
-
- /* Equalizer */
- var_Create (aout, "equalizer", VLC_VAR_STRING | VLC_VAR_HASCHOICE);
- text.psz_string = _("Equalizer");
- var_Change (aout, "equalizer", VLC_VAR_SETTEXT, &text, NULL);
- val.psz_string = (char*)"";
- text.psz_string = _("Disable");
- var_Change (aout, "equalizer", VLC_VAR_ADDCHOICE, &val, &text);
- {
- module_config_t *cfg = config_FindConfig (VLC_OBJECT(aout),
- "equalizer-preset");
- if (cfg != NULL)
- for (int i = 0; i < cfg->i_list; i++)
- {
- val.psz_string = (char *)cfg->ppsz_list[i];
- text.psz_string = (char *)cfg->ppsz_list_text[i];
- var_Change (aout, "equalizer", VLC_VAR_ADDCHOICE, &val, &text);
- }
- }
-
-
- var_Create (aout, "audio-filter", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
- text.psz_string = _("Audio filters");
- var_Change (aout, "audio-filter", VLC_VAR_SETTEXT, &text, NULL);
-
-
- var_Create (aout, "audio-visual", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
- text.psz_string = _("Audio visualizations");
- var_Change (aout, "audio-visual", VLC_VAR_SETTEXT, &text, NULL);
-
-
- /* Replay gain */
- var_Create (aout, "audio-replay-gain-mode",
- VLC_VAR_STRING | VLC_VAR_DOINHERIT );
- text.psz_string = _("Replay gain");
- var_Change (aout, "audio-replay-gain-mode", VLC_VAR_SETTEXT, &text, NULL);
- {
- module_config_t *cfg = config_FindConfig (VLC_OBJECT(aout),
- "audio-replay-gain-mode");
- if( cfg != NULL )
- for (int i = 0; i < cfg->i_list; i++)
- {
- val.psz_string = (char *)cfg->ppsz_list[i];
- text.psz_string = (char *)cfg->ppsz_list_text[i];
- var_Change (aout, "audio-replay-gain-mode", VLC_VAR_ADDCHOICE,
- &val, &text);
- }
- }
-
-
- return aout;
-}
-
-void aout_Destroy (audio_output_t *aout)
-{
- aout_owner_t *owner = aout_owner (aout);
-
- if (owner->module != NULL)
- aout_Shutdown (aout);
- vlc_object_release (aout);
-}
-
-/*****************************************************************************
- * aout_Destructor: destroy aout structure
- *****************************************************************************/
-static void aout_Destructor (vlc_object_t *obj)
-{
- audio_output_t *aout = (audio_output_t *)obj;
- aout_owner_t *owner = aout_owner (aout);
-
- vlc_mutex_destroy (&owner->volume.lock);
- vlc_mutex_destroy (&owner->lock);
-}
-
-#ifdef AOUT_DEBUG
-/* Lock debugging */
-static __thread unsigned aout_locks = 0;
-
-void aout_lock_check (unsigned i)
-{
- unsigned allowed;
- switch (i)
- {
- case VOLUME_LOCK:
- allowed = 0;
- break;
- case OUTPUT_LOCK:
- allowed = VOLUME_LOCK;
- break;
- default:
- abort ();
- }
-
- if (aout_locks & ~allowed)
- {
- fprintf (stderr, "Illegal audio lock transition (%x -> %x)\n",
- aout_locks, aout_locks|i);
- vlc_backtrace ();
- abort ();
- }
- aout_locks |= i;
-}
-
-void aout_unlock_check (unsigned i)
-{
- assert (aout_locks & i);
- aout_locks &= ~i;
-}
-#endif