X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Faudio_output%2Fcommon.c;h=1050811ce57c2a9a42babb13cbae51db9c4d65fc;hb=e24e9a5f50d1a3e1cf5a9c36e066dc1fa45f86dc;hp=6029d0599544bd81bf1be27eea1225201e4d0571;hpb=1f62c2643041d27b2b31839a5e5797ea245bd548;p=vlc diff --git a/src/audio_output/common.c b/src/audio_output/common.c index 6029d05995..1050811ce5 100644 --- a/src/audio_output/common.c +++ b/src/audio_output/common.c @@ -33,6 +33,7 @@ #include #include +#include #include "aout_internal.h" #include "libvlc.h" @@ -49,40 +50,134 @@ static void aout_Destructor( vlc_object_t * p_this ); *****************************************************************************/ audio_output_t *aout_New( vlc_object_t * p_parent ) { - audio_output_t * p_aout; - - /* Allocate descriptor. */ - p_aout = vlc_custom_create( p_parent, sizeof( *p_aout ), "audio output" ); - if( p_aout == NULL ) - { + 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_VolumeNoneInit (aout); + vlc_object_set_destructor (aout, aout_Destructor); + + /* + * Persistent audio output variables + */ + vlc_value_t val, text; + char *str; + + 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); + } + 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); + } } - /* Initialize members. */ - vlc_mutex_init( &p_aout->volume_lock ); - vlc_mutex_init( &p_aout->lock ); - p_aout->p_input = NULL; - p_aout->mixer_multiplier = 1.0; - p_aout->mixer = NULL; - p_aout->b_starving = true; - p_aout->module = NULL; - aout_VolumeNoneInit( p_aout ); - var_Create( p_aout, "intf-change", VLC_VAR_VOID ); + 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); + - vlc_object_set_destructor( p_aout, aout_Destructor ); + 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); - return p_aout; + + /* 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; } /***************************************************************************** * aout_Destructor: destroy aout structure *****************************************************************************/ -static void aout_Destructor( vlc_object_t * p_this ) +static void aout_Destructor (vlc_object_t *obj) { - audio_output_t * p_aout = (audio_output_t *)p_this; - vlc_mutex_destroy( &p_aout->volume_lock ); - vlc_mutex_destroy( &p_aout->lock ); + 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 @@ -292,26 +387,28 @@ const char * aout_FormatPrintChannels( const audio_sample_format_t * p_format ) return "ERROR"; } -/***************************************************************************** - * aout_FormatPrint : print a format in a human-readable form - *****************************************************************************/ -void aout_FormatPrint( audio_output_t * p_aout, const char * psz_text, - const audio_sample_format_t * p_format ) +#undef aout_FormatPrint +/** + * Prints an audio sample format in a human-readable form. + */ +void aout_FormatPrint( vlc_object_t *obj, const char *psz_text, + const audio_sample_format_t *p_format ) { - msg_Dbg( p_aout, "%s '%4.4s' %d Hz %s frame=%d samples/%d bytes", psz_text, + msg_Dbg( obj, "%s '%4.4s' %d Hz %s frame=%d samples/%d bytes", psz_text, (char *)&p_format->i_format, p_format->i_rate, aout_FormatPrintChannels( p_format ), p_format->i_frame_length, p_format->i_bytes_per_frame ); } -/***************************************************************************** - * aout_FormatsPrint : print two formats in a human-readable form - *****************************************************************************/ -void aout_FormatsPrint( audio_output_t * p_aout, const char * psz_text, +#undef aout_FormatsPrint +/** + * Prints two formats in a human-readable form + */ +void aout_FormatsPrint( vlc_object_t *obj, const char * psz_text, const audio_sample_format_t * p_format1, const audio_sample_format_t * p_format2 ) { - msg_Dbg( p_aout, "%s '%4.4s'->'%4.4s' %d Hz->%d Hz %s->%s", + msg_Dbg( obj, "%s '%4.4s'->'%4.4s' %d Hz->%d Hz %s->%s", psz_text, (char *)&p_format1->i_format, (char *)&p_format2->i_format, p_format1->i_rate, p_format2->i_rate, @@ -398,24 +495,6 @@ void aout_FifoMoveDates( aout_fifo_t *fifo, mtime_t difference ) block->i_pts += difference; } -/***************************************************************************** - * aout_FifoNextStart : return the current end_date - *****************************************************************************/ -mtime_t aout_FifoNextStart( const aout_fifo_t *p_fifo ) -{ - return date_Get( &p_fifo->end_date ); -} - -/***************************************************************************** - * aout_FifoFirstDate : return the playing date of the first buffer in the - * FIFO - *****************************************************************************/ -mtime_t aout_FifoFirstDate( const aout_fifo_t *fifo ) -{ - block_t *first = fifo->p_first; - return (first != NULL) ? first->i_pts : VLC_TS_INVALID; -} - /***************************************************************************** * aout_FifoPop : get the next buffer out of the FIFO *****************************************************************************/ @@ -682,7 +761,7 @@ static int FilterOrder( const char *psz_name ) /* This function will add or remove a a module from a string list (colon * separated). It will return true if there is a modification * In case p_aout is NULL, we will use configuration instead of variable */ -bool aout_ChangeFilterString( vlc_object_t *p_obj, audio_output_t *p_aout, +bool aout_ChangeFilterString( vlc_object_t *p_obj, vlc_object_t *p_aout, const char *psz_variable, const char *psz_name, bool b_add ) {