X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fpuzzle.c;h=2c922703f034970a8bde33d399030c62f6fab117;hb=a72b9a0a4d382885ab7b657e82981735b16a5d74;hp=6ab8a1e31dc81482cbe4975c1795854df1233881;hpb=fd1445521170c8d715d88acd70e791f0106fe98f;p=vlc diff --git a/modules/video_filter/puzzle.c b/modules/video_filter/puzzle.c index 6ab8a1e31d..2c922703f0 100644 --- a/modules/video_filter/puzzle.c +++ b/modules/video_filter/puzzle.c @@ -97,6 +97,12 @@ struct filter_sys_t /* */ vlc_mutex_t lock; bool b_change; + struct + { + int i_cols; + int i_rows; + bool b_blackslot; + } change; }; #define SHUFFLE_WIDTH 81 @@ -145,9 +151,12 @@ static int Open( vlc_object_t *p_this ) p_sys->pi_order = NULL; vlc_mutex_init( &p_sys->lock ); - p_sys->i_rows = var_CreateGetIntegerCommand( p_filter, CFG_PREFIX "rows" ); - p_sys->i_cols = var_CreateGetIntegerCommand( p_filter, CFG_PREFIX "cols" ); - p_sys->b_blackslot = var_CreateGetBoolCommand( p_filter, CFG_PREFIX "black-slot" ); + p_sys->change.i_rows = + var_CreateGetIntegerCommand( p_filter, CFG_PREFIX "rows" ); + p_sys->change.i_cols = + var_CreateGetIntegerCommand( p_filter, CFG_PREFIX "cols" ); + p_sys->change.b_blackslot = + var_CreateGetBoolCommand( p_filter, CFG_PREFIX "black-slot" ); p_sys->b_change = true; var_AddCallback( p_filter, CFG_PREFIX "rows", PuzzleCallback, p_sys ); @@ -155,7 +164,7 @@ static int Open( vlc_object_t *p_this ) var_AddCallback( p_filter, CFG_PREFIX "black-slot", PuzzleCallback, p_sys ); p_filter->pf_video_filter = Filter; - p_filter->pf_mouse = Mouse; + p_filter->pf_video_mouse = Mouse; return VLC_SUCCESS; } @@ -196,7 +205,11 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic ) vlc_mutex_lock( &p_sys->lock ); if( p_sys->b_change ) { + p_sys->i_rows = p_sys->change.i_rows; + p_sys->i_cols = p_sys->change.i_cols; + p_sys->b_blackslot = p_sys->change.b_blackslot; p_sys->b_change = false; + Shuffle( p_sys ); } vlc_mutex_unlock( &p_sys->lock ); @@ -362,15 +375,15 @@ static int PuzzleCallback( vlc_object_t *p_this, char const *psz_var, vlc_mutex_lock( &p_sys->lock ); if( !strcmp( psz_var, CFG_PREFIX "rows" ) ) { - p_sys->i_rows = __MAX( 1, newval.i_int ); + p_sys->change.i_rows = __MAX( 1, newval.i_int ); } else if( !strcmp( psz_var, CFG_PREFIX "cols" ) ) { - p_sys->i_cols = __MAX( 1, newval.i_int ); + p_sys->change.i_cols = __MAX( 1, newval.i_int ); } else if( !strcmp( psz_var, CFG_PREFIX "black-slot" ) ) { - p_sys->b_blackslot = newval.b_bool; + p_sys->change.b_blackslot = newval.b_bool; } p_sys->b_change = true; vlc_mutex_unlock( &p_sys->lock ); @@ -392,7 +405,7 @@ static bool IsValid( filter_sys_t *p_sys ) { const int i_count = p_sys->i_cols * p_sys->i_rows; - if( p_sys->b_blackslot ) + if( !p_sys->b_blackslot ) return true; int d = 0; @@ -434,7 +447,7 @@ static void Shuffle( filter_sys_t *p_sys ) } p_sys->b_finished = IsFinished( p_sys ); - } while( p_sys->b_finished || IsValid( p_sys ) ); + } while( p_sys->b_finished || !IsValid( p_sys ) ); if( p_sys->b_blackslot ) {