Sigh...<br><br>I need to do some more testing on this. I have found instances where the equalizer is not restoring previously set values and I need to work out if it's just my test application that is broken or actually the patch itself that is broken.<br>
<br>Please disregard this patch for now pending further testing.<br><br><div class="gmail_quote">On 28 August 2012 20:29, Mark Lee <span dir="ltr"><<a href="mailto:mark.lee@capricasoftware.co.uk" target="_blank">mark.lee@capricasoftware.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">New methods are provided to:<br>
<br>
 - get the available equalizer presets;<br>
 - get the available frequency bands (useful for creating a UI);<br>
 - create a new default equalizer, or create a new equalizer from a preset;<br>
 - release a previously created equalizer;<br>
 - get/set preamp and individual frequency amplification values;<br>
 - set an equalizer on a media player.<br>
<br>
Equalizer settings are persistent, can be made whether media is currently playing or not, and will automatically be applied to subsequently played media.<br>
---<br>
 include/vlc/libvlc_media_player.h        |  167 ++++++++++++++++++++++++++++++<br>
</div> lib/audio.c                              |  149 ++++++++++++++++++++++++++<br>
 lib/libvlc.sym                           |   12 +++<br>
 lib/media_player.c                       |   33 ++++++<br>
<div class="im"> lib/media_player_internal.h              |   11 ++<br>
 modules/audio_filter/equalizer.c         |   24 +++--<br>
 modules/audio_filter/equalizer_presets.h |   16 +++<br>
</div> 7 files changed, 401 insertions(+), 11 deletions(-)<br>
<div><div class="h5"><br>
diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h<br>
index aefef02..64727e8 100644<br>
--- a/include/vlc/libvlc_media_player.h<br>
+++ b/include/vlc/libvlc_media_player.h<br>
@@ -121,6 +121,13 @@ typedef enum libvlc_navigate_mode_t<br>
 } libvlc_navigate_mode_t;<br>
<br>
 /**<br>
+ * Opaque equalizer handle.<br>
+ *<br>
+ * An equalizer can be applied to a media player.<br>
+ */<br>
+typedef struct libvlc_equalizer_t libvlc_equalizer_t;<br>
+<br>
+/**<br>
  * Create an empty Media Player object<br>
  *<br>
  * \param p_libvlc_instance the libvlc instance in which the Media Player<br>
@@ -1626,6 +1633,166 @@ LIBVLC_API int64_t libvlc_audio_get_delay( libvlc_media_player_t *p_mi );<br>
  */<br>
 LIBVLC_API int libvlc_audio_set_delay( libvlc_media_player_t *p_mi, int64_t i_delay );<br>
<br>
+/**<br>
+ * Get the number of equalizer presets.<br>
+ *<br>
+ * \return number of presets<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API unsigned libvlc_audio_equalizer_get_preset_count( void );<br>
+<br>
+/**<br>
+ * Get the name of a particular equalizer preset.<br>
+ *<br>
+ * This name can be used, for example, to prepare a preset label or menu in a user<br>
+ * interface.<br>
+ *<br>
+ * \param u_index index of the preset, counting from zero<br>
+ * \return preset name, or NULL if there is no such preset<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
</div></div>+LIBVLC_API const char *libvlc_audio_equalizer_get_preset_name( unsigned u_index );<br>
+<br>
<div><div class="h5">+/**<br>
+ * Get the number of distinct frequency bands for an equalizer.<br>
+ *<br>
+ * \return number of frequency bands<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API unsigned libvlc_audio_equalizer_get_band_count( void );<br>
+<br>
+/**<br>
+ * Get a particular equalizer band frequency.<br>
+ *<br>
+ * This value can be used, for example, to create a label for an equalizer band control<br>
+ * in a user interface.<br>
+ *<br>
+ * \param u_index index of the band, counting from zero<br>
+ * \return equalizer band frequency (Hz), or -1 if there is no such band<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API float libvlc_audio_equalizer_get_band_frequency( unsigned u_index );<br>
+<br>
+/**<br>
+ * Create a new default equalizer, with all frequency values zeroed.<br>
+ *<br>
+ * The new equalizer can subsequently be applied to a media player by invoking<br>
+ * libvlc_media_player_set_equalizer().<br>
+ *<br>
+ * The returned handle should be freed via libvlc_audio_equalizer_release() when<br>
+ * it is no longer needed.<br>
+ *<br>
+ * \return opaque equalizer handle, or NULL on error<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API libvlc_equalizer_t *libvlc_audio_equalizer_new( void );<br>
+<br>
+/**<br>
+ * Create a new equalizer, with initial frequency values copied from an existing<br>
+ * preset.<br>
+ *<br>
+ * The new equalizer can subsequently be applied to a media player by invoking<br>
+ * libvlc_media_player_set_equalizer().<br>
+ *<br>
+ * The returned handle should be freed via libvlc_audio_equalizer_release() when<br>
+ * it is no longer needed.<br>
+ *<br>
+ * \param u_index index of the preset, counting from zero<br>
+ * \return opaque equalizer handle, or NULL on error<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API libvlc_equalizer_t *libvlc_audio_equalizer_new_from_preset( unsigned u_index );<br>
+<br>
+/**<br>
+ * Release a previously created equalizer instance.<br>
+ *<br>
+ * The equalizer was previously created by using libvlc_audio_equalizer_new() or<br>
+ * libvlc_audio_equalizer_new_from_preset().<br>
+ *<br>
+ * It is safe to invoke this method with a NULL p_equalizer parameter for no effect.<br>
+ *<br>
+ * \param p_equalizer opaque equalizer handle, or NULL<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API void libvlc_audio_equalizer_release( libvlc_equalizer_t *p_equalizer );<br>
+<br>
+/**<br>
+ * Set a new pre-amplification value for an equalizer.<br>
+ *<br>
+ * The new equalizer settings are subsequently applied to a media player by invoking<br>
+ * libvlc_media_player_set_equalizer().<br>
+ *<br>
+ * \param p_equalizer opaque equalizer handle<br>
+ * \param f_preamp preamp value (-20.0 to 20.0 Hz)<br>
+ * \return zero on success, -1 on error<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API int libvlc_audio_equalizer_set_preamp( libvlc_equalizer_t *p_equalizer, float f_preamp );<br>
+<br>
+/**<br>
+ * Get the current pre-amplification value from an equalizer.<br>
+ *<br>
+ * \param p_equalizer opaque equalizer handle<br>
+ * \return preamp value (Hz)<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API float libvlc_audio_equalizer_get_preamp( libvlc_equalizer_t *p_equalizer );<br>
+<br>
+/**<br>
+ * Set a new amplification value for a particular equalizer frequency band.<br>
+ *<br>
+ * The new equalizer settings are subsequently applied to a media player by invoking<br>
+ * libvlc_media_player_set_equalizer().<br>
+ *<br>
+ * \param p_equalizer opaque equalizer handle<br>
+ * \param f_amp amplification value (-20.0 to 20.0 Hz)<br>
+ * \param u_band index, counting from zero, of the frequency band to set<br>
+ * \return zero on success, -1 on error<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API int libvlc_audio_equalizer_set_amp_at_index( libvlc_equalizer_t *p_equalizer, float f_amp, unsigned u_band );<br>
+<br>
+/**<br>
+ * Get the amplification value for a particular equalizer frequency band.<br>
+ *<br>
+ * \param p_equalizer opaque equalizer handle<br>
+ * \param u_band index, counting from zero, of the frequency band to get<br>
+ * \return amplification value (Hz); zero if there is no such frequency band<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API float libvlc_audio_equalizer_get_amp_at_index( libvlc_equalizer_t *p_equalizer, unsigned u_band );<br>
+<br>
+/**<br>
+ * Apply new equalizer settings to a media player.<br>
+ *<br>
+ * The equalizer is first created by invoking libvlc_audio_equalizer_new() or<br>
+ * libvlc_audio_equalizer_new_from_preset().<br>
+ *<br>
+ * It is possible to apply new equalizer settings to a media player whether the media<br>
+ * player is currently playing media or not.<br>
+ *<br>
+ * Invoking this method will immediately apply the new equalizer settings to the audio<br>
+ * output of the currently playing media if there is any.<br>
+ *<br>
+ * If there is no currently playing media, the new equalizer settings will be applied<br>
+ * later if and when new media is played.<br>
+ *<br>
+ * Equalizer settings will automatically be applied to subsequently played media.<br>
+ *<br>
+ * To disable the equalizer for a media player invoke this method passing NULL for the<br>
+ * p_equalizer parameter.<br>
+ *<br>
+ * The media player does not keep a reference to the supplied equalizer so it is safe<br>
+ * for an application to release the equalizer reference any time after this method<br>
+ * returns.<br>
+ *<br>
+ * \param p_mi opaque media player handle<br>
+ * \param p_equalizer opaque equalizer handle, or NULL to disable the equalizer for this media player<br>
+ * \return zero on success, -1 on error<br>
+ * \version LibVLC 2.1.0 or later<br>
+ */<br>
+LIBVLC_API int libvlc_media_player_set_equalizer( libvlc_media_player_t *p_mi, libvlc_equalizer_t *p_equalizer );<br>
+<br>
 /** @} audio */<br>
<br>
 /** @} media_player */<br>
diff --git a/lib/audio.c b/lib/audio.c<br>
</div></div>index 5a5ebd3..dfe9354 100644<br>
--- a/lib/audio.c<br>
+++ b/lib/audio.c<br>
@@ -449,3 +449,152 @@ int libvlc_audio_set_delay( libvlc_media_player_t *p_mi, int64_t i_delay )<br>
<div class="im">     }<br>
     return ret;<br>
 }<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_get_preset_count : Get the number of equalizer presets<br>
+ *****************************************************************************/<br>
+unsigned libvlc_audio_equalizer_get_preset_count( void )<br>
+{<br>
+    return NB_PRESETS;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
</div><div class="im">+ * libvlc_audio_equalizer_get_preset_name : Get the name for a preset<br>
+ *****************************************************************************/<br>
+const char *libvlc_audio_equalizer_get_preset_name( unsigned u_index )<br>
+{<br>
+    if ( u_index >= NB_PRESETS )<br>
+        return NULL;<br>
</div><div class="im">+<br>
+    return preset_list_text[ u_index ];<br>
+}<br>
</div><div class="im">+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_get_band_count : Get the number of equalizer frequency bands<br>
+ *****************************************************************************/<br>
+unsigned libvlc_audio_equalizer_get_band_count( void )<br>
+{<br>
+    return EQZ_BANDS_MAX;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_get_band_frequency : Get the frequency for a band<br>
+ *****************************************************************************/<br>
</div>+float libvlc_audio_equalizer_get_band_frequency( unsigned u_index )<br>
+{<br>
<div class="im">+    if ( u_index >= EQZ_BANDS_MAX )<br>
+        return -1.f;<br>
</div><div class="im">+<br>
+    return f_vlc_frequency_table_10b[ u_index ];<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_new : Create a new audio equalizer with zeroed values<br>
+ *****************************************************************************/<br>
+libvlc_equalizer_t *libvlc_audio_equalizer_new( void )<br>
+{<br>
+    libvlc_equalizer_t *p_equalizer;<br>
+<br>
+    p_equalizer = malloc( sizeof( *p_equalizer ) );<br>
+    if ( unlikely( p_equalizer == NULL ) )<br>
+        return NULL;<br>
</div><div class="im">+<br>
+    p_equalizer->f_preamp = 0.f;<br>
+<br>
+    for ( unsigned i = 0; i < EQZ_BANDS_MAX; i++ )<br>
+        p_equalizer->f_amp[ i ] = 0.f;<br>
+<br>
+    return p_equalizer;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_new_from_preset : Create a new audio equalizer based on a preset<br>
+ *****************************************************************************/<br>
</div>+libvlc_equalizer_t *libvlc_audio_equalizer_new_from_preset( unsigned u_index )<br>
+{<br>
+    libvlc_equalizer_t *p_equalizer;<br>
<div class="im">+<br>
+    if ( u_index >= NB_PRESETS )<br>
+        return NULL;<br>
</div><div class="im">+<br>
+    p_equalizer = malloc( sizeof( *p_equalizer ) );<br>
+    if ( unlikely( p_equalizer == NULL ) )<br>
+        return NULL;<br>
+<br>
+    p_equalizer->f_preamp = eqz_preset_10b[ u_index ].f_preamp;<br>
+<br>
+    for ( unsigned i = 0; i < EQZ_BANDS_MAX; i++ )<br>
+        p_equalizer->f_amp[ i ] = eqz_preset_10b[ u_index ].f_amp[ i ];<br>
+<br>
+    return p_equalizer;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_release : Release a previously created equalizer<br>
+ *****************************************************************************/<br>
+void libvlc_audio_equalizer_release( libvlc_equalizer_t *p_equalizer )<br>
+{<br>
+    free( p_equalizer );<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_set_preamp : Set the preamp value for an equalizer<br>
+ *****************************************************************************/<br>
</div>+int libvlc_audio_equalizer_set_preamp( libvlc_equalizer_t *p_equalizer, float f_preamp )<br>
+{<br>
<div class="im">+    if ( !p_equalizer )<br>
+        return -1;<br>
+<br>
</div><div class="im">+    if ( f_preamp < -20.0f )<br>
+        f_preamp = -20.0f;<br>
+    else if ( f_preamp > 20.0f )<br>
+        f_preamp = 20.0f;<br>
+<br>
+    p_equalizer->f_preamp = f_preamp;<br>
+    return 0;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_get_preamp : Get the preamp value for an equalizer<br>
+ *****************************************************************************/<br>
</div>+float libvlc_audio_equalizer_get_preamp( libvlc_equalizer_t *p_equalizer )<br>
+{<br>
<div class="im">+    if ( !p_equalizer )<br>
+        return 0.f;<br>
+<br>
+    return p_equalizer->f_preamp;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_set_amp_at_index : Set the amplification value for an equalizer band<br>
+ *****************************************************************************/<br>
</div>+int libvlc_audio_equalizer_set_amp_at_index( libvlc_equalizer_t *p_equalizer, float f_amp, unsigned u_band )<br>
+{<br>
<div class="im">+    if ( !p_equalizer )<br>
+        return -1;<br>
+<br>
+    if ( u_band >= EQZ_BANDS_MAX )<br>
+        return -1;<br>
+<br>
+    if ( f_amp < -20.0f )<br>
+        f_amp = -20.0f;<br>
+    else if ( f_amp > 20.0f )<br>
+        f_amp = 20.0f;<br>
+<br>
+    p_equalizer->f_amp[ u_band ] = f_amp;<br>
+    return 0;<br>
+}<br>
+<br>
+/*****************************************************************************<br>
+ * libvlc_audio_equalizer_get_amp_at_index : Get the amplification value for an equalizer band<br>
+ *****************************************************************************/<br>
</div>+float libvlc_audio_equalizer_get_amp_at_index( libvlc_equalizer_t *p_equalizer, unsigned u_band )<br>
+{<br>
<div><div class="h5">+    if ( !p_equalizer )<br>
+        return 0.f;<br>
+<br>
+    if ( u_band >= EQZ_BANDS_MAX )<br>
+        return 0.f;<br>
+<br>
+    return p_equalizer->f_amp[ u_band ];<br>
+}<br>
diff --git a/lib/libvlc.sym b/lib/libvlc.sym<br>
index 42dad5c..7c1874f 100644<br>
--- a/lib/libvlc.sym<br>
+++ b/lib/libvlc.sym<br>
@@ -3,6 +3,17 @@ libvlc_clearerr<br>
 libvlc_printerr<br>
 libvlc_vprinterr<br>
 libvlc_add_intf<br>
+libvlc_audio_equalizer_get_amp_at_index<br>
+libvlc_audio_equalizer_get_band_count<br>
+libvlc_audio_equalizer_get_band_frequency<br>
+libvlc_audio_equalizer_get_preamp<br>
+libvlc_audio_equalizer_get_preset_count<br>
+libvlc_audio_equalizer_get_preset_name<br>
+libvlc_audio_equalizer_new<br>
+libvlc_audio_equalizer_new_from_preset<br>
+libvlc_audio_equalizer_release<br>
+libvlc_audio_equalizer_set_amp_at_index<br>
+libvlc_audio_equalizer_set_preamp<br>
 libvlc_audio_output_device_count<br>
 libvlc_audio_output_device_id<br>
 libvlc_audio_output_device_list_get<br>
@@ -150,6 +161,7 @@ libvlc_media_player_release<br>
 libvlc_media_player_retain<br>
 libvlc_media_player_set_agl<br>
 libvlc_media_player_set_chapter<br>
+libvlc_media_player_set_equalizer<br>
 libvlc_media_player_set_hwnd<br>
 libvlc_media_player_set_media<br>
 libvlc_media_player_set_nsobject<br>
diff --git a/lib/media_player.c b/lib/media_player.c<br>
</div></div>index a41b8c7..fd04222 100644<br>
--- a/lib/media_player.c<br>
+++ b/lib/media_player.c<br>
@@ -34,6 +34,7 @@<br>
<div class="im"> #include <vlc_input.h><br>
 #include <vlc_vout.h><br>
 #include <vlc_keys.h><br>
+#include <vlc_aout_intf.h><br>
<br>
 #include "libvlc_internal.h"<br>
 #include "media_internal.h" // libvlc_media_set_state()<br>
</div>@@ -482,6 +483,9 @@ libvlc_media_player_new( libvlc_instance_t *instance )<br>
<div class="im">     var_Create (mp, "amem-rate", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);<br>
     var_Create (mp, "amem-channels", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);<br>
<br>
+    var_Create (mp, "equalizer-preamp", VLC_VAR_FLOAT);<br>
+    var_Create (mp, "equalizer-bands", VLC_VAR_STRING);<br>
+<br>
     mp->p_md = NULL;<br>
     mp->state = libvlc_NothingSpecial;<br>
     mp->p_libvlc_instance = instance;<br>
</div>@@ -1409,3 +1413,32 @@ void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi )<br>
         vlc_object_release( p_input_thread );<br>
     }<br>
 }<br>
+<br>
+int libvlc_media_player_set_equalizer( libvlc_media_player_t *p_mi, libvlc_equalizer_t *p_equalizer )<br>
+{<br>
<div><div class="h5">+    if ( !p_equalizer )<br>
+    {<br>
+        aout_EnableFilter( p_mi, "equalizer", false );<br>
+        return 0;<br>
+    }<br>
+<br>
+    var_SetFloat( p_mi, "equalizer-preamp", p_equalizer->f_preamp );<br>
+<br>
+    char *psz_bands = NULL;<br>
+    for ( int i = 0; i < EQZ_BANDS_MAX; i++ )<br>
+    {<br>
+        char *psz;<br>
+        if ( asprintf( &psz, "%s %.07f", psz_bands ? psz_bands : "", p_equalizer->f_amp[i] ) == -1 )<br>
+        {<br>
+            free( psz_bands );<br>
+            return -1;<br>
+        }<br>
+        free( psz_bands );<br>
+        psz_bands = psz;<br>
+    }<br>
+    var_SetString( p_mi, "equalizer-bands", psz_bands );<br>
+    free( psz_bands );<br>
+<br>
+    aout_EnableFilter( p_mi, "equalizer", true );<br>
+    return 0;<br>
+}<br>
diff --git a/lib/media_player_internal.h b/lib/media_player_internal.h<br>
</div></div>index 185f183..27fbf1f 100644<br>
<div class="im">--- a/lib/media_player_internal.h<br>
+++ b/lib/media_player_internal.h<br>
@@ -34,6 +34,8 @@<br>
 #include <vlc/libvlc_media.h><br>
 #include <vlc_input.h><br>
<br>
</div>+#include "../modules/audio_filter/equalizer_presets.h"<br>
<div><div class="h5">+<br>
 struct libvlc_media_player_t<br>
 {<br>
     VLC_COMMON_MEMBERS<br>
@@ -62,4 +64,13 @@ libvlc_track_description_t * libvlc_get_track_description(<br>
         libvlc_media_player_t *p_mi,<br>
         const char *psz_variable );<br>
<br>
+/**<br>
+ * Internal equalizer structure.<br>
+ */<br>
+struct libvlc_equalizer_t<br>
+{<br>
+    float f_preamp;<br>
+    float f_amp[EQZ_BANDS_MAX];<br>
+};<br>
+<br>
 #endif<br>
diff --git a/modules/audio_filter/equalizer.c b/modules/audio_filter/equalizer.c<br>
index 41a89eb..1a36eac 100644<br>
--- a/modules/audio_filter/equalizer.c<br>
+++ b/modules/audio_filter/equalizer.c<br>
@@ -232,17 +232,6 @@ typedef struct<br>
<br>
 } eqz_config_t;<br>
<br>
-/* The frequency tables */<br>
-static const float f_vlc_frequency_table_10b[EQZ_BANDS_MAX] =<br>
-{<br>
-    60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000,<br>
-};<br>
-<br>
-static const float f_iso_frequency_table_10b[EQZ_BANDS_MAX] =<br>
-{<br>
-    31.25, 62.5, 125, 250, 500, 1000, 2000, 4000, 8000, 16000,<br>
-};<br>
-<br>
 /* Equalizer coefficient calculation function based on equ-xmms */<br>
 static void EqzCoeffs( int i_rate, float f_octave_percent,<br>
                        bool b_use_vlc_freqs,<br>
@@ -413,6 +402,13 @@ static int EqzInit( filter_t *p_filter, int i_rate )<br>
     var_AddCallback( p_aout, "equalizer-preamp", PreampCallback, p_sys );<br>
     var_AddCallback( p_aout, "equalizer-2pass", TwoPassCallback, p_sys );<br>
<br>
+    /* Preamp and bands go together, so we only need check for one or the other, not both */<br>
+    if ( var_Type( p_aout->p_parent, "equalizer-preamp" ) )<br>
+    {<br>
+        var_AddCallback( p_aout->p_parent, "equalizer-preamp", PreampCallback, p_sys );<br>
+        var_AddCallback( p_aout->p_parent, "equalizer-bands", BandsCallback, p_sys );<br>
+    }<br>
+<br>
     msg_Dbg( p_filter, "equalizer loaded for %d Hz with %d bands %d pass",<br>
                         i_rate, p_sys->i_band, p_sys->b_2eqz ? 2 : 1 );<br>
     for( i = 0; i < p_sys->i_band; i++ )<br>
@@ -498,6 +494,12 @@ static void EqzClean( filter_t *p_filter )<br>
     filter_sys_t *p_sys = p_filter->p_sys;<br>
     vlc_object_t *p_aout = p_filter->p_parent;<br>
<br>
+    if ( var_Type( p_aout->p_parent, "equalizer-preamp" ) )<br>
+    {<br>
+        var_DelCallback( p_aout->p_parent, "equalizer-preamp", PreampCallback, p_sys );<br>
+        var_DelCallback( p_aout->p_parent, "equalizer-bands", BandsCallback, p_sys );<br>
+    }<br>
+<br>
     var_DelCallback( p_aout, "equalizer-bands", BandsCallback, p_sys );<br>
     var_DelCallback( p_aout, "equalizer-preset", PresetCallback, p_sys );<br>
     var_DelCallback( p_aout, "equalizer-preamp", PreampCallback, p_sys );<br>
diff --git a/modules/audio_filter/equalizer_presets.h b/modules/audio_filter/equalizer_presets.h<br>
index 0c0c812..f0830ad 100644<br>
--- a/modules/audio_filter/equalizer_presets.h<br>
+++ b/modules/audio_filter/equalizer_presets.h<br>
@@ -21,6 +21,9 @@<br>
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.<br>
  *****************************************************************************/<br>
<br>
+#ifndef _EQUALIZER_PRESETS_H<br>
+#define _EQUALIZER_PRESETS_H 1<br>
+<br>
 /*****************************************************************************<br>
  * Equalizer presets<br>
  *****************************************************************************/<br>
@@ -30,6 +33,17 @@<br>
<br>
 #define EQZ_BANDS_MAX 10<br>
<br>
+/* The frequency tables */<br>
+static const float f_vlc_frequency_table_10b[EQZ_BANDS_MAX] =<br>
+{<br>
+    60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000,<br>
+};<br>
+<br>
+static const float f_iso_frequency_table_10b[EQZ_BANDS_MAX] =<br>
+{<br>
+    31.25, 62.5, 125, 250, 500, 1000, 2000, 4000, 8000, 16000,<br>
+};<br>
+<br>
 #define NB_PRESETS 18<br>
 static const char *const preset_list[NB_PRESETS] = {<br>
     "flat", "classical", "club", "dance", "fullbass", "fullbasstreble",<br>
@@ -132,3 +146,5 @@ static const eqz_preset_t eqz_preset_10b[NB_PRESETS] =<br>
         { 8, 5.6, -1.11022e-15, -5.6, -4.8, -1.11022e-15, 8, 9.6, 9.6, 8.8 }<br>
     },<br>
 };<br>
+<br>
+#endif<br>
--<br>
</div></div>1.7.9.5<br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>Mark Lee<br>mark1 'at' <a href="http://mark-lee.com" target="_blank">mark-lee.com</a><br>