[vlc-devel] [PATCH] Remove libvlc equalizer implementation from the audio output core.
Rémi Denis-Courmont
remi at remlab.net
Thu Sep 20 20:06:35 CEST 2012
Le mardi 18 septembre 2012 20:11:34, Mark Lee a écrit :
> Rather than using callbacks in the core, the audio equalizer is simply
> directly applied (when enabled) to the aout:
>
> 1. each time an aout is created;
> 2. each time the equalizer is set on the media player.
>
> This is similar, in part, to how libvlc_set_fullscreen is implemented.
> ---
> lib/media_player.c | 31 +++++++++++++++++++++++++++----
> src/audio_output/common.c | 15 ---------------
> 2 files changed, 27 insertions(+), 19 deletions(-)
>
> diff --git a/lib/media_player.c b/lib/media_player.c
> index b9b2a11..b468f96 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -32,6 +32,7 @@
>
> #include <vlc_demux.h>
> #include <vlc_input.h>
> +#include <vlc_aout.h>
> #include <vlc_vout.h>
> #include <vlc_keys.h>
> #include <vlc_aout_intf.h>
> @@ -191,6 +192,21 @@ static void set_state( libvlc_media_player_t *p_mi,
> libvlc_state_t state, }
> }
>
> +static void apply_equalizer( input_thread_t *p_input,
> libvlc_media_player_t *p_mi ) +{
> + audio_output_t *p_aout;
> + if( input_Control( p_input, INPUT_GET_AOUT, &p_aout ) == VLC_SUCCESS )
> + {
> + var_SetString( p_aout, "equalizer-bands", var_GetString( p_mi,
> "equalizer-bands" ) ); + var_SetFloat( p_aout, "equalizer-preamp",
> var_GetFloat( p_mi, "equalizer-preamp" ) ); +
> + if( strlen( var_GetString( p_mi, "equalizer-bands" ) ) > 0 )
> + aout_EnableFilter( p_mi, "equalizer", true );
Memory leak and potential NULL dereference. Also in the old code that should
not have been merged.
> +
> + vlc_object_release( p_aout );
> + }
> +}
> +
> static int
> input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,
> vlc_value_t oldval, vlc_value_t newval,
> @@ -335,6 +351,8 @@ input_event_changed( vlc_object_t * p_this, char const
> * psz_cmd, event.u.media_player_vout.new_count = i_vout;
> libvlc_event_send( p_mi->p_event_manager, &event );
> }
> + else if( newval.i_int == INPUT_EVENT_AOUT )
> + apply_equalizer( p_input, p_mi );
>
> return VLC_SUCCESS;
> }
> @@ -751,9 +769,6 @@ int libvlc_media_player_play( libvlc_media_player_t
> *p_mi ) p_mi->input.p_thread = p_input_thread;
> unlock_input(p_mi);
>
> - if( strlen( var_GetString( p_mi, "equalizer-bands" ) ) > 0 )
> - aout_EnableFilter( p_mi, "equalizer", true );
> -
> return 0;
> }
>
> @@ -1420,6 +1435,8 @@ void libvlc_media_player_next_frame(
> libvlc_media_player_t *p_mi )
>
> int libvlc_media_player_set_equalizer( libvlc_media_player_t *p_mi,
> libvlc_equalizer_t *p_equalizer ) {
> + input_thread_t *p_input_thread;
> +
> if ( !p_equalizer )
> {
> aout_EnableFilter( p_mi, "equalizer", false );
> @@ -1444,6 +1461,12 @@ int libvlc_media_player_set_equalizer(
> libvlc_media_player_t *p_mi, libvlc_equal var_SetString( p_mi,
> "equalizer-bands", psz_bands );
> free( psz_bands );
>
> - aout_EnableFilter( p_mi, "equalizer", true );
> + p_input_thread = libvlc_get_input_thread( p_mi );
> + if ( !p_input_thread )
> + return 0;
> +
> + apply_equalizer( p_input_thread, p_mi );
> +
> + vlc_object_release( p_input_thread );
> return 0;
> }
> diff --git a/src/audio_output/common.c b/src/audio_output/common.c
> index 949d3b5..f839d02 100644
> --- a/src/audio_output/common.c
> +++ b/src/audio_output/common.c
> @@ -177,15 +177,6 @@ audio_output_t *aout_New( vlc_object_t * p_parent )
> &val, &text);
> }
>
> - if (var_Type (p_parent, "equalizer-bands"))
> - {
> - var_Create (aout, "equalizer-preamp", VLC_VAR_FLOAT |
> VLC_VAR_DOINHERIT); - var_Create (aout, "equalizer-bands",
> VLC_VAR_STRING | VLC_VAR_DOINHERIT); -
> - var_AddCallback (p_parent, "equalizer-preamp", var_Copy, aout);
> - var_AddCallback (p_parent, "equalizer-bands", var_Copy, aout);
> - }
> -
> return aout;
> }
>
> @@ -200,12 +191,6 @@ void aout_Destroy (audio_output_t *aout)
> var_SetFloat (aout, "volume", -1.f);
> var_DelCallback (aout, "volume", var_Copy, aout->p_parent);
>
> - if (var_Type (aout->p_parent, "equalizer-bands"))
> - {
> - var_DelCallback (aout->p_parent, "equalizer-preamp", var_Copy,
> aout); - var_DelCallback (aout->p_parent, "equalizer-bands",
> var_Copy, aout); - }
> -
> vlc_object_release (aout);
> }
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list