]> git.sesse.net Git - vlc/blobdiff - modules/video_filter/puzzle.c
check if media_list_player->media_list is null before locking - fixes #1524
[vlc] / modules / video_filter / puzzle.c
index e2de62a2d5f8d520c116659bf9d012276e68fb2d..f4a9137b577b302a1d3814d79fa2d7c7b5008de1 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <stdlib.h>                                      /* malloc(), free() */
-#include <string.h>
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include <vlc/vlc.h>
 #include <vlc_vout.h>
@@ -52,6 +54,9 @@ static int  SendEvents   ( vlc_object_t *, char const *,
 static int  MouseEvent   ( vlc_object_t *, char const *,
                            vlc_value_t, vlc_value_t, void * );
 
+static int PuzzleCallback( vlc_object_t *, char const *,
+                           vlc_value_t, vlc_value_t, void * );
+
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
@@ -208,10 +213,18 @@ static int Create( vlc_object_t *p_this )
     config_ChainParse( p_vout, CFG_PREFIX, ppsz_filter_options,
                        p_vout->p_cfg );
 
-    p_vout->p_sys->i_rows = var_CreateGetInteger( p_vout, CFG_PREFIX "rows" );
-    p_vout->p_sys->i_cols = var_CreateGetInteger( p_vout, CFG_PREFIX "cols" );
+    p_vout->p_sys->i_rows =
+        var_CreateGetIntegerCommand( p_vout, CFG_PREFIX "rows" );
+    p_vout->p_sys->i_cols =
+        var_CreateGetIntegerCommand( p_vout, CFG_PREFIX "cols" );
     p_vout->p_sys->b_blackslot =
-                      var_CreateGetInteger( p_vout, CFG_PREFIX "black-slot" );
+        var_CreateGetBoolCommand( p_vout, CFG_PREFIX "black-slot" );
+    var_AddCallback( p_vout, CFG_PREFIX "rows",
+                     PuzzleCallback, p_vout->p_sys );
+    var_AddCallback( p_vout, CFG_PREFIX "cols",
+                     PuzzleCallback, p_vout->p_sys );
+    var_AddCallback( p_vout, CFG_PREFIX "black-slot",
+                     PuzzleCallback, p_vout->p_sys );
 
     p_vout->p_sys->pi_order = NULL;
     shuffle( p_vout->p_sys );
@@ -233,7 +246,8 @@ static int Init( vout_thread_t *p_vout )
 {
     int i_index;
     picture_t *p_pic;
-    video_format_t fmt = {0};
+    video_format_t fmt;
+    memset( &fmt, 0, sizeof( video_format_t ) );
 
     I_OUTPUTPICTURES = 0;
 
@@ -337,7 +351,8 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic )
 {
     picture_t *p_outpic;
 
-    //video_format_t fmt_out = {0};
+    //video_format_t fmt_out;
+    // memset( &fmt_out, 0, sizeof(video_format_t) );
     //picture_t *p_converted;
 
     int i_plane;
@@ -457,6 +472,8 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic )
 static int SendEvents( vlc_object_t *p_this, char const *psz_var,
                        vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(p_this); VLC_UNUSED(oldval);
+
     var_Set( (vlc_object_t *)p_data, psz_var, newval );
 
     return VLC_SUCCESS;
@@ -468,6 +485,7 @@ static int SendEvents( vlc_object_t *p_this, char const *psz_var,
 static int SendEventsToChild( vlc_object_t *p_this, char const *psz_var,
                        vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(p_data); VLC_UNUSED(oldval);
     vout_thread_t *p_vout = (vout_thread_t *)p_this;
     var_Set( p_vout->p_sys->p_vout, psz_var, newval );
     return VLC_SUCCESS;
@@ -479,6 +497,7 @@ static int SendEventsToChild( vlc_object_t *p_this, char const *psz_var,
 static int MouseEvent( vlc_object_t *p_this, char const *psz_var,
                        vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(p_this); VLC_UNUSED(oldval); VLC_UNUSED(newval);
     vout_thread_t *p_vout = (vout_thread_t*)p_data;
     int i_x, i_y;
     int i_v;
@@ -544,3 +563,25 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var,
     }
     return VLC_SUCCESS;
 }
+
+static int PuzzleCallback( vlc_object_t *p_this, char const *psz_var,
+                           vlc_value_t oldval, vlc_value_t newval,
+                           void *p_data )
+{
+    VLC_UNUSED(p_this); VLC_UNUSED(oldval);
+    vout_sys_t *p_sys = (vout_sys_t *)p_data;
+    if( !strcmp( psz_var, CFG_PREFIX "rows" ) )
+    {
+        p_sys->i_rows = __MAX( 1, newval.i_int );
+    }
+    else if( !strcmp( psz_var, CFG_PREFIX "cols" ) )
+    {
+        p_sys->i_cols = __MAX( 1, newval.i_int );
+    }
+    else if( !strcmp( psz_var, CFG_PREFIX "black-slot" ) )
+    {
+        p_sys->b_blackslot = newval.b_bool;
+    }
+    shuffle( p_sys );
+    return VLC_SUCCESS;
+}