*****************************************************************************/
struct vout_sys_t
{
+ vlc_mutex_t lock;
vout_thread_t *p_vout;
unsigned int i_x, i_y;
}
#ifdef BEST_AUTOCROP
+ vlc_mutex_init( &p_vout->p_sys->lock );
var_AddCallback( p_vout, "ratio-crop", FilterCallback, NULL );
#endif
}
vout_filter_ReleaseDirectBuffers( p_vout );
+ var_DelCallback( p_vout, "ratio-crop", FilterCallback, NULL );
+ vlc_mutex_destroy( &p_sys->lock );
}
/*****************************************************************************
memset( &fmt, 0, sizeof(video_format_t) );
#ifdef BEST_AUTOCROP
+ /* XXX: not thread-safe with FilterCallback */
msg_Dbg( p_vout, "cropping at %ix%i+%i+%i, %sautocropping",
p_vout->p_sys->i_width, p_vout->p_sys->i_height,
p_vout->p_sys->i_x, p_vout->p_sys->i_y,
vout_filter_AddChild( p_vout, p_vout->p_sys->p_vout, MouseEvent );
p_vout->p_sys->b_changed = false;
+ vlc_mutex_lock( &p_vout->p_sys->lock );
p_vout->p_sys->i_lastchange = 0;
+ vlc_mutex_unlock( &p_vout->p_sys->lock );
return VLC_SUCCESS;
}
vout_DisplayPicture( p_vout->p_sys->p_vout, p_outpic );
/* The source image may still be in the cache ... parse it! */
+ vlc_mutex_lock( &p_vout->p_sys->lock );
if( p_vout->p_sys->b_autocrop )
- {
UpdateStats( p_vout, p_pic );
- }
+ vlc_mutex_unlock( &p_vout->p_sys->lock );
}
#ifdef BEST_AUTOCROP
if( !strcmp( psz_var, "ratio-crop" ) )
{
+ vlc_mutex_lock( &p_vout->p_sys->lock );
if ( !strcmp( newval.psz_string, "Auto" ) )
p_vout->p_sys->i_ratio = 0;
else
if (p_vout->p_sys->i_ratio < p_vout->output.i_aspect / 432)
p_vout->p_sys->i_ratio = p_vout->output.i_aspect / 432;
}
+ vlc_mutex_unlock( &p_vout->p_sys->lock );
}
return VLC_SUCCESS;
}