[vlc-devel] [PATCH 04/11] qt: save/retrieve video filters to/from the playlist

Rémi Denis-Courmont remi at remlab.net
Mon May 29 19:25:40 CEST 2017


Le maanantaina 29. toukokuuta 2017, 18.52.58 EEST Thomas Guillem a écrit :
> ---
>  modules/gui/qt/components/extended_panels.cpp | 25
> ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/modules/gui/qt/components/extended_panels.cpp
> b/modules/gui/qt/components/extended_panels.cpp index
> de070d3625..b66297ac30 100644
> --- a/modules/gui/qt/components/extended_panels.cpp
> +++ b/modules/gui/qt/components/extended_panels.cpp
> @@ -93,13 +93,18 @@ static QString OptionFromWidgetName( QObject *obj )
> 
>  static inline void setup_vfilter( intf_thread_t *p_intf, const char*
> psz_name, QWidget *widget ) {
> -    vlc_object_t *p_obj = ( vlc_object_t * )
> -        vlc_object_find_name( p_intf->obj.libvlc, psz_name );
> +    const char *psz_filter_type = GetVFilterType( p_intf, psz_name );
> +    if( psz_filter_type == NULL )
> +        return;
> +
> +    char *psz_filters = var_InheritString( THEPL, psz_filter_type );
> +    if( psz_filters == NULL )
> +        return;
> +
>      QCheckBox *checkbox = qobject_cast<QCheckBox*>( widget );
>      QGroupBox *groupbox = qobject_cast<QGroupBox*>( widget );
> -    if( p_obj )
> +    if( strstr( psz_filters, psz_name ) )

Substring search might lead to false positives.

>      {
> -        vlc_object_release( p_obj ); \
>          if( checkbox ) checkbox->setChecked( true ); \
>          else if (groupbox) groupbox->setChecked( true ); \
>      }
> @@ -108,6 +113,7 @@ static inline void setup_vfilter( intf_thread_t *p_intf,
> const char* psz_name, Q if( checkbox ) checkbox->setChecked( false );
>          else if (groupbox) groupbox->setChecked( false );
>      }
> +    free( psz_filters );
>  }
> 
>  #define SETUP_VFILTER( widget ) \
> @@ -309,13 +315,10 @@ static void ChangeVFiltersString( struct intf_thread_t
> *p_intf, const char *psz_ /* Vout is not kept, so put that in the config */
>      config_PutPsz( p_intf, psz_filter_type, qtu( result ) );
> 
> -    /* Try to set on the fly */
> -    if( !strcmp( psz_filter_type, "video-splitter" ) )
> -    {
> -        playlist_t *p_playlist = THEPL;
> -        var_SetString( p_playlist, psz_filter_type, qtu( result ) );
> -    }
> -    else
> +    var_SetString( THEPL, psz_filter_type, qtu( result ) );
> +
> +    /* Try to set non splitter filters on the fly */
> +    if( strcmp( psz_filter_type, "video-splitter" ) )
>      {
>          vout_thread_t *p_vout = THEMIM->getVout();
>          if( p_vout )

Is that code executed during initialization as a side effect? If so, it *will* 
cause races.

-- 
雷米‧德尼-库尔蒙
https://www.remlab.net/



More information about the vlc-devel mailing list