*****************************************************************************/
struct filter_sys_t
{
+ vlc_mutex_t lock;
int i_mode;
/* For the gradient mode */
p_filter->p_sys->b_cartoon =
var_CreateGetBoolCommand( p_filter, FILTER_PREFIX "cartoon" );
+ vlc_mutex_init( &p_filter->p_sys->lock );
var_AddCallback( p_filter, FILTER_PREFIX "mode",
GradientCallback, p_filter->p_sys );
var_AddCallback( p_filter, FILTER_PREFIX "type",
static void Destroy( vlc_object_t *p_this )
{
filter_t *p_filter = (filter_t *)p_this;
-
- free( p_filter->p_sys->p_buf32 );
- free( p_filter->p_sys->p_buf32_bis );
- free( p_filter->p_sys->p_buf8 );
- free( p_filter->p_sys->p_pre_hough );
-
- free( p_filter->p_sys );
+ filter_sys_t *p_sys = p_filter->p_sys;
+
+ var_DelCallback( p_filter, FILTER_PREFIX "mode",
+ GradientCallback, p_sys );
+ var_DelCallback( p_filter, FILTER_PREFIX "type",
+ GradientCallback, p_sys );
+ var_DelCallback( p_filter, FILTER_PREFIX "cartoon",
+ GradientCallback, p_sys );
+ vlc_mutex_destroy( &p_sys->lock );
+
+ free( p_sys->p_buf32 );
+ free( p_sys->p_buf32_bis );
+ free( p_sys->p_buf8 );
+ free( p_sys->p_pre_hough );
+
+ free( p_sys );
}
/*****************************************************************************
return NULL;
}
+ vlc_mutex_lock( &p_filter->p_sys->lock );
switch( p_filter->p_sys->i_mode )
{
case EDGE:
default:
break;
}
+ vlc_mutex_unlock( &p_filter->p_sys->lock );
return CopyInfoAndRelease( p_outpic, p_pic );
}
{
VLC_UNUSED(oldval);
filter_sys_t *p_sys = (filter_sys_t *)p_data;
+
+ vlc_mutex_lock( &p_sys->lock );
if( !strcmp( psz_var, FILTER_PREFIX "mode" ) )
{
if( !strcmp( newval.psz_string, "gradient" ) )
{
p_sys->b_cartoon = newval.b_bool;
}
+ vlc_mutex_unlock( &p_sys->lock );
+
return VLC_SUCCESS;
}