Hello,<br><br>It's "right" in so much as it works.<br><br>Anyway, I gave it my best shot and I'm not going back to square one again. I'm done.<br><br>Revert it if you like.<br><br>Regards.<br><br><div class="gmail_quote">
On 21 September 2012 11:16, Rémi Denis-Courmont <span dir="ltr"><<a href="mailto:remi@remlab.net" target="_blank">remi@remlab.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Le vendredi 21 septembre 2012 12:21:04, Mark Lee a écrit :<br>
<div><div class="h5">> Rather than using callbacks in the core, the audio equalizer is simply<br>
> directly applied (when enabled) to the aout:<br>
><br>
>  1. each time an aout is created;<br>
>  2. each time the equalizer is set on the media player.<br>
> ---<br>
>  lib/media_player.c        |   34 ++++++++++++++++++++++++++++++----<br>
>  src/audio_output/common.c |   15 ---------------<br>
>  2 files changed, 30 insertions(+), 19 deletions(-)<br>
><br>
> diff --git a/lib/media_player.c b/lib/media_player.c<br>
> index b9b2a11..e4950b1 100644<br>
> --- a/lib/media_player.c<br>
> +++ b/lib/media_player.c<br>
> @@ -32,6 +32,7 @@<br>
><br>
>  #include <vlc_demux.h><br>
>  #include <vlc_input.h><br>
> +#include <vlc_aout.h><br>
>  #include <vlc_vout.h><br>
>  #include <vlc_keys.h><br>
>  #include <vlc_aout_intf.h><br>
> @@ -191,6 +192,24 @@ static void set_state( libvlc_media_player_t *p_mi,<br>
> libvlc_state_t state, }<br>
>  }<br>
><br>
> +static void apply_equalizer( input_thread_t *p_input,<br>
> libvlc_media_player_t *p_mi ) +{<br>
> +    audio_output_t *p_aout;<br>
> +    if( input_Control( p_input, INPUT_GET_AOUT, &p_aout ) == VLC_SUCCESS )<br>
> +    {<br>
> +        char *psz_bands = var_GetString( p_mi, "equalizer-bands" );<br>
> +        if( psz_bands && *psz_bands )<br>
> +        {<br>
> +            var_SetString( p_aout, "equalizer-bands", psz_bands );<br>
> +            var_SetFloat( p_aout, "equalizer-preamp", var_GetFloat( p_mi,<br>
> "equalizer-preamp" ) ); +            aout_EnableFilter( p_mi, "equalizer",<br>
> true );<br>
> +        }<br>
> +        free( psz_bands );<br>
> +<br>
> +        vlc_object_release( p_aout );<br>
> +    }<br>
> +}<br>
<br>
</div></div>This cannot be right. Variable inheritance deals with this automatically if<br>
the rest is done correctly.<br>
<div class="HOEnZb"><div class="h5"><br>
> +<br>
>  static int<br>
>  input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,<br>
>                          vlc_value_t oldval, vlc_value_t newval,<br>
> @@ -335,6 +354,8 @@ input_event_changed( vlc_object_t * p_this, char const<br>
> * psz_cmd, event.u.media_player_vout.new_count = i_vout;<br>
>          libvlc_event_send( p_mi->p_event_manager, &event );<br>
>      }<br>
> +    else if( newval.i_int == INPUT_EVENT_AOUT )<br>
> +        apply_equalizer( p_input, p_mi );<br>
><br>
>      return VLC_SUCCESS;<br>
>  }<br>
> @@ -751,9 +772,6 @@ int libvlc_media_player_play( libvlc_media_player_t<br>
> *p_mi ) p_mi->input.p_thread = p_input_thread;<br>
>      unlock_input(p_mi);<br>
><br>
> -    if( strlen( var_GetString( p_mi, "equalizer-bands" ) ) > 0 )<br>
> -        aout_EnableFilter( p_mi, "equalizer", true );<br>
> -<br>
>      return 0;<br>
>  }<br>
><br>
> @@ -1420,6 +1438,8 @@ void libvlc_media_player_next_frame(<br>
> libvlc_media_player_t *p_mi )<br>
><br>
>  int libvlc_media_player_set_equalizer( libvlc_media_player_t *p_mi,<br>
> libvlc_equalizer_t *p_equalizer ) {<br>
> +    input_thread_t *p_input_thread;<br>
> +<br>
>      if ( !p_equalizer )<br>
>      {<br>
>          aout_EnableFilter( p_mi, "equalizer", false );<br>
> @@ -1444,6 +1464,12 @@ int libvlc_media_player_set_equalizer(<br>
> libvlc_media_player_t *p_mi, libvlc_equal var_SetString( p_mi,<br>
> "equalizer-bands", psz_bands );<br>
>      free( psz_bands );<br>
><br>
> -    aout_EnableFilter( p_mi, "equalizer", true );<br>
> +    p_input_thread = libvlc_get_input_thread( p_mi );<br>
> +    if ( !p_input_thread )<br>
> +        return 0;<br>
> +<br>
> +    apply_equalizer( p_input_thread, p_mi );<br>
> +<br>
> +    vlc_object_release( p_input_thread );<br>
>      return 0;<br>
>  }<br>
> diff --git a/src/audio_output/common.c b/src/audio_output/common.c<br>
> index 949d3b5..f839d02 100644<br>
> --- a/src/audio_output/common.c<br>
> +++ b/src/audio_output/common.c<br>
> @@ -177,15 +177,6 @@ audio_output_t *aout_New( vlc_object_t * p_parent )<br>
>                              &val, &text);<br>
>          }<br>
><br>
> -    if (var_Type (p_parent, "equalizer-bands"))<br>
> -    {<br>
> -        var_Create (aout, "equalizer-preamp", VLC_VAR_FLOAT |<br>
> VLC_VAR_DOINHERIT); -        var_Create (aout, "equalizer-bands",<br>
> VLC_VAR_STRING | VLC_VAR_DOINHERIT); -<br>
> -        var_AddCallback (p_parent, "equalizer-preamp", var_Copy, aout);<br>
> -        var_AddCallback (p_parent, "equalizer-bands", var_Copy, aout);<br>
> -    }<br>
> -<br>
>      return aout;<br>
>  }<br>
><br>
> @@ -200,12 +191,6 @@ void aout_Destroy (audio_output_t *aout)<br>
>      var_SetFloat (aout, "volume", -1.f);<br>
>      var_DelCallback (aout, "volume", var_Copy, aout->p_parent);<br>
><br>
> -    if (var_Type (aout->p_parent, "equalizer-bands"))<br>
> -    {<br>
> -        var_DelCallback (aout->p_parent, "equalizer-preamp", var_Copy,<br>
> aout); -        var_DelCallback (aout->p_parent, "equalizer-bands",<br>
> var_Copy, aout); -    }<br>
> -<br>
>      vlc_object_release (aout);<br>
>  }<br>
<br>
--<br>
</div></div><div class="HOEnZb"><div class="h5">Rémi Denis-Courmont<br>
<a href="http://www.remlab.net/" target="_blank">http://www.remlab.net/</a><br>
_______________________________________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="http://mailman.videolan.org/listinfo/vlc-devel" target="_blank">http://mailman.videolan.org/listinfo/vlc-devel</a><br>
</div></div></blockquote></div><br>