]> git.sesse.net Git - vlc/commitdiff
libvlc: Add a --verbose-objects option to select which objects should print their...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Sun, 6 Jul 2008 13:45:23 +0000 (15:45 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Mon, 1 Sep 2008 23:39:10 +0000 (01:39 +0200)
Sample usage:
--verbose-objects=+input,-all

include/vlc_messages.h
src/libvlc-module.c
src/libvlc.c
src/libvlc.h
src/misc/messages.c

index c0b8ee5e178ee6bd185bb20f83e0c3da4ea03316..25ec167fb3ead517c9656089c04532e04438fded 100644 (file)
@@ -108,6 +108,12 @@ VLC_EXPORT( void, __msg_Dbg,    ( vlc_object_t *, const char *, ... ) LIBVLC_FOR
 VLC_EXPORT( msg_subscription_t*, __msg_Subscribe, ( vlc_object_t * ) );
 VLC_EXPORT( void, __msg_Unsubscribe, ( vlc_object_t *, msg_subscription_t * ) );
 
+/* Enable or disable a certain object debug messages */
+#define msg_EnableObjectPrinting(a,b) __msg_EnableObjectPrinting(VLC_OBJECT(a),b)
+#define msg_DisableObjectPrinting(a,b) __msg_DisableObjectPrinting(VLC_OBJECT(a),b)
+VLC_EXPORT( void, __msg_EnableObjectPrinting, ( vlc_object_t *, char * psz_object ) );
+VLC_EXPORT( void, __msg_DisableObjectPrinting, ( vlc_object_t *, char * psz_object ) );
+
 /**
  * @}
  */
index bc432b03f69400a8808346d973617604e6927531..3eff29cda675793a5d46bc69307cf78fa0b1599f 100644 (file)
@@ -166,6 +166,14 @@ static const char *const ppsz_snap_formats[] =
     "This is the verbosity level (0=only errors and " \
     "standard messages, 1=warnings, 2=debug).")
 
+#define VERBOSE_OBJECTS_TEXT N_("Choose which objects should print debug " \
+    "message")
+#define VERBOSE_OBJECTS_LONGTEXT N_( \
+    "This is a ',' separated string, each objects should be prefixed by " \
+    "a '+' or a '-' to respectively enable or disable it. The keyword " \
+    "'all' refers to all objects. Note, you still need to use -vvv " \
+    "to actually display debug message.")
+
 #define QUIET_TEXT N_("Be quiet")
 #define QUIET_LONGTEXT N_( \
     "Turn off all warning and information messages.")
@@ -1958,6 +1966,8 @@ vlc_module_begin();
     add_integer( "verbose", 0, NULL, VERBOSE_TEXT, VERBOSE_LONGTEXT,
                  false );
         change_short('v');
+    add_string( "verbose-objects", 0, NULL, VERBOSE_OBJECTS_TEXT, VERBOSE_OBJECTS_LONGTEXT,
+                 false );
     add_bool( "quiet", 0, NULL, QUIET_TEXT, QUIET_LONGTEXT, true );
         change_short('q');
 
index ca2dd48c71ec4748fa11427c497d70819660f198..456323632080e660e0b330b36de3c10547e23265 100644 (file)
@@ -666,6 +666,28 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /*
      * Message queue options
      */
+    char * psz_verbose_objects = config_GetPsz( p_libvlc, "verbose-objects" );
+    if( psz_verbose_objects )
+    {
+        char * psz_object, * iter = psz_verbose_objects;
+        while( (psz_object = strsep( &iter, "," )) )
+        {
+            switch( psz_object[0] )
+            {
+                printf("%s\n", psz_object+1);
+                case '+': msg_EnableObjectPrinting(p_libvlc, psz_object+1); break;
+                case '-': msg_DisableObjectPrinting(p_libvlc, psz_object+1); break;
+                default:
+                    msg_Err( p_libvlc, "verbose-objects usage: \n"
+                            "--verbose-objects=+printthatobject,"
+                            "-dontprintthatone\n"
+                            "(keyword 'all' to applies to all objects)\n");
+                    free( psz_verbose_objects );
+                    return VLC_EGENERIC;
+            }
+        }
+        free( psz_verbose_objects );
+    }
 
     var_Create( p_libvlc, "verbose", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
     if( config_GetInt( p_libvlc, "quiet" ) > 0 )
index b188090e98fd853ff8452f5c96b104c1c33783a6..5940754f25c323b4e1231b8c6f9402785b3435d8 100644 (file)
@@ -209,6 +209,8 @@ typedef struct libvlc_priv_t
     msg_bank_t         msg_bank;    ///< The message bank
     int                i_verbose;   ///< info messages
     bool               b_color;     ///< color messages?
+    vlc_dictionary_t   msg_enabled_objects; ///< Enabled objects
+    bool               msg_all_objects_enabled; ///< Should we print all objects?
 
     /* Timer stats */
     vlc_mutex_t        timer_lock;  ///< Lock to protect timers
index 3b5298c83648733c390cb7191add6e5fa49fbc08..329d4709cdd6df09ab5a4c7dc741785ffa3ded12 100644 (file)
@@ -96,6 +96,9 @@ void msg_Create (libvlc_int_t *p_libvlc)
     libvlc_priv_t *priv = libvlc_priv (p_libvlc);
     vlc_mutex_init( &priv->msg_bank.lock );
     vlc_mutex_init( &QUEUE.lock );
+    vlc_dictionary_init( &priv->msg_enabled_objects, 0 );
+    priv->msg_all_objects_enabled = true;
+
     QUEUE.b_overflow = false;
     QUEUE.i_start = 0;
     QUEUE.i_stop = 0;
@@ -127,6 +130,35 @@ void msg_Flush (libvlc_int_t *p_libvlc)
     vlc_mutex_unlock( &QUEUE.lock );
 }
 
+
+/**
+ * Object Printing selection
+ */
+static void const * kObjectPrintingEnabled = (void *) 1;
+static void const * kObjectPrintingDisabled = (void *) -1;
+
+void __msg_EnableObjectPrinting (vlc_object_t *p_this, char * psz_object)
+{
+    libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc);
+    vlc_mutex_lock( &QUEUE.lock );
+    if( !strcmp(psz_object, "all") )
+        priv->msg_all_objects_enabled = true;
+    else
+        vlc_dictionary_insert( &priv->msg_enabled_objects, psz_object, kObjectPrintingEnabled );
+    vlc_mutex_unlock( &QUEUE.lock );
+}
+
+void __msg_DisableObjectPrinting (vlc_object_t *p_this, char * psz_object)
+{
+    libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc);
+    vlc_mutex_lock( &QUEUE.lock );
+    if( !strcmp(psz_object, "all") )
+        priv->msg_all_objects_enabled = false;
+    else
+        vlc_dictionary_insert( &priv->msg_enabled_objects, psz_object, kObjectPrintingDisabled );
+    vlc_mutex_unlock( &QUEUE.lock );
+}
+
 /**
  * Destroy the message queues
  *
@@ -151,6 +183,9 @@ void msg_Destroy (libvlc_int_t *p_libvlc)
 #ifdef UNDER_CE
     CloseHandle( QUEUE.logfile );
 #endif
+
+    vlc_dictionary_clear( &priv->msg_enabled_objects );
+
     /* Destroy lock */
     vlc_mutex_destroy( &QUEUE.lock );
     vlc_mutex_destroy( &priv->msg_bank.lock);
@@ -567,6 +602,14 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
     }
 
     psz_object = p_item->psz_object_type;
+    void * val = vlc_dictionary_value_for_key( &priv->msg_enabled_objects,
+                                               psz_object );
+    if( val == kObjectPrintingDisabled )
+        return;
+    if( val == kObjectPrintingEnabled )
+        /* Allowed */;
+    else if( !priv->msg_all_objects_enabled )
+        return;
 
     int canc = vlc_savecancel ();
 #ifdef UNDER_CE