* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc_common.h>
#include <vlc_aout.h>
-#include <vlc_modules.h>
#include "aout_internal.h"
-#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->pf_volume_set = NULL;
- 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);
-
- /* 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
/*
* Formats management (internal and external)
| AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_MIDDLELEFT
| AOUT_CHAN_MIDDLERIGHT | AOUT_CHAN_LFE:
return "3F2M2R/LFE";
+ case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
+ | AOUT_CHAN_REARCENTER | AOUT_CHAN_MIDDLELEFT
+ | AOUT_CHAN_MIDDLERIGHT | AOUT_CHAN_LFE:
+ return "3F2M1R/LFE";
}
return "ERROR";
static int FilterOrder( const char *psz_name )
{
static const struct {
- const char *psz_name;
+ const char psz_name[10];
int i_order;
} filter[] = {
{ "equalizer", 0 },
- { NULL, INT_MAX },
};
- for( int i = 0; filter[i].psz_name; i++ )
+ for( unsigned i = 0; i < ARRAY_SIZE(filter); i++ )
{
if( !strcmp( filter[i].psz_name, psz_name ) )
return filter[i].i_order;
return true;
}
-
-
-