]> git.sesse.net Git - vlc/commitdiff
* include/variables.h
authorDerk-Jan Hartman <hartman@videolan.org>
Fri, 9 Jan 2004 20:36:21 +0000 (20:36 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Fri, 9 Jan 2004 20:36:21 +0000 (20:36 +0000)
  src/misc/variables.c: Added a VLC_VAR_TRIGGER_CALLBACKS action
* src/libvlc.c: You can now change verbosity on the fly by using the "verbose"
  variable of p_vlc. -1 == quiet

include/variables.h
src/libvlc.c
src/misc/variables.c

index a37dcdc6c0233b1d3369913e22c4b0c0623d6bf4..8e658ea701563e3cbea1f16df1346e15ae8b38a7 100644 (file)
@@ -2,7 +2,7 @@
  * variables.h: variables handling
  *****************************************************************************
  * Copyright (C) 2002 VideoLAN
- * $Id: variables.h,v 1.19 2003/12/02 12:57:35 gbazin Exp $
+ * $Id: variables.h,v 1.20 2004/01/09 20:36:21 hartman Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -137,36 +137,37 @@ struct variable_t
  * \param p_val The new minimum value
  * \param p_val2 Unused
  */
-#define VLC_VAR_SETMIN        0x0010
+#define VLC_VAR_SETMIN              0x0010
 /**
  * Set the maximum value of this variable
  * \param p_val The new maximum value
  * \param p_val2 Unused
  */
-#define VLC_VAR_SETMAX        0x0011
-#define VLC_VAR_SETSTEP       0x0012
+#define VLC_VAR_SETMAX              0x0011
+#define VLC_VAR_SETSTEP             0x0012
 
 /**
  * Set the value of this variable without triggering any callbacks
  * \param p_val The new value
  * \param p_val2 Unused
  */
-#define VLC_VAR_SETVALUE      0x0013
-
-#define VLC_VAR_SETTEXT       0x0014
-#define VLC_VAR_GETTEXT       0x0015
-
-#define VLC_VAR_ADDCHOICE     0x0020
-#define VLC_VAR_DELCHOICE     0x0021
-#define VLC_VAR_CLEARCHOICES  0x0022
-#define VLC_VAR_SETDEFAULT    0x0023
-#define VLC_VAR_GETCHOICES    0x0024
-#define VLC_VAR_FREECHOICES   0x0025
-#define VLC_VAR_GETLIST       0x0026
-#define VLC_VAR_FREELIST      0x0027
-#define VLC_VAR_CHOICESCOUNT  0x0028
-
-#define VLC_VAR_INHERITVALUE  0x0030
+#define VLC_VAR_SETVALUE            0x0013
+
+#define VLC_VAR_SETTEXT             0x0014
+#define VLC_VAR_GETTEXT             0x0015
+
+#define VLC_VAR_ADDCHOICE           0x0020
+#define VLC_VAR_DELCHOICE           0x0021
+#define VLC_VAR_CLEARCHOICES        0x0022
+#define VLC_VAR_SETDEFAULT          0x0023
+#define VLC_VAR_GETCHOICES          0x0024
+#define VLC_VAR_FREECHOICES         0x0025
+#define VLC_VAR_GETLIST             0x0026
+#define VLC_VAR_FREELIST            0x0027
+#define VLC_VAR_CHOICESCOUNT        0x0028
+
+#define VLC_VAR_INHERITVALUE        0x0030
+#define VLC_VAR_TRIGGER_CALLBACKS   0x0035
 /**@}*/
 
 /*****************************************************************************
index 4c5e51ad703eb653d96fa32f7464deca290c3ec6..1d8c24cb88289afa354873113673334b0cf9f301 100644 (file)
@@ -2,7 +2,7 @@
  * libvlc.c: main libvlc source
  *****************************************************************************
  * Copyright (C) 1998-2004 VideoLAN
- * $Id: libvlc.c,v 1.109 2004/01/06 12:02:05 zorglub Exp $
+ * $Id: libvlc.c,v 1.110 2004/01/09 20:36:21 hartman Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -99,6 +99,8 @@ static void ShowConsole   ( void );
 #endif
 static int  ConsoleWidth  ( void );
 
+static int  VerboseCallback( vlc_object_t *, char const *,
+                             vlc_value_t, vlc_value_t, void * );
 
 /*****************************************************************************
  * vlc_current_object: return the current object.
@@ -497,18 +499,17 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
     /*
      * Message queue options
      */
+
+    var_Create( p_vlc, "verbose", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
     if( config_GetInt( p_vlc, "quiet" ) )
     {
-        libvlc.i_verbose = -1;
-    }
-    else
-    {
-        int i_tmp = config_GetInt( p_vlc, "verbose" );
-        if( i_tmp >= 0 )
-        {
-            libvlc.i_verbose = __MIN( i_tmp, 2 );
-        }
+        vlc_value_t val;
+        val.i_int = -1;
+        var_Set( p_vlc, "verbose", val );
     }
+    var_AddCallback( p_vlc, "verbose", VerboseCallback, NULL );
+    var_Change( p_vlc, "verbose", VLC_VAR_TRIGGER_CALLBACKS, NULL, NULL );
+    
     libvlc.b_color = libvlc.b_color && config_GetInt( p_vlc, "color" );
 
     /*
@@ -1630,3 +1631,15 @@ static int ConsoleWidth( void )
 
     return i_width;
 }
+
+static int VerboseCallback( vlc_object_t *p_this, const char *psz_variable,
+                     vlc_value_t old_val, vlc_value_t new_val, void *param)
+{
+    vlc_t *p_vlc = (vlc_t *)p_this;
+
+    if( new_val.i_int >= -1 )
+    {
+        p_vlc->p_libvlc->i_verbose = __MIN( new_val.i_int, 2 );
+    }
+    return VLC_SUCCESS;
+}
index ca8de1e17d62db9f6c5d325de8078ad5a98a881d..6e9442f708ae16b02b10eed769c0b115f04e1017 100644 (file)
@@ -2,7 +2,7 @@
  * variables.c: routines for object variables handling
  *****************************************************************************
  * Copyright (C) 2002-2004 VideoLAN
- * $Id: variables.c,v 1.35 2004/01/06 12:02:06 zorglub Exp $
+ * $Id: variables.c,v 1.36 2004/01/09 20:36:21 hartman Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -614,6 +614,41 @@ int __var_Change( vlc_object_t *p_this, const char *psz_name,
                 }
             }
             break;
+        case VLC_VAR_TRIGGER_CALLBACKS:
+            {
+                /* Deal with callbacks. Tell we're in a callback, release the lock,
+                 * call stored functions, retake the lock. */
+                if( p_var->i_entries )
+                {
+                    int i_var;
+                    int i_entries = p_var->i_entries;
+                    callback_entry_t *p_entries = p_var->p_entries;
+
+                    p_var->b_incallback = VLC_TRUE;
+                    vlc_mutex_unlock( &p_this->var_lock );
+
+                    /* The real calls */
+                    for( ; i_entries-- ; )
+                    {
+                        p_entries[i_entries].pf_callback( p_this, psz_name, p_var->val, p_var->val,
+                                                          p_entries[i_entries].p_data );
+                    }
+
+                    vlc_mutex_lock( &p_this->var_lock );
+
+                    i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name );
+                    if( i_var < 0 )
+                    {
+                        msg_Err( p_this, "variable %s has disappeared", psz_name );
+                        vlc_mutex_unlock( &p_this->var_lock );
+                        return VLC_ENOVAR;
+                    }
+
+                    p_var = &p_this->p_vars[i_var];
+                    p_var->b_incallback = VLC_FALSE;
+                }
+            }
+            break;
 
         default:
             break;