From 497b59e4fc525cca1fd422c0b5ece0672d4d8036 Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Sun, 6 Jul 2008 15:45:23 +0200 Subject: [PATCH] libvlc: Add a --verbose-objects option to select which objects should print their msg. Sample usage: --verbose-objects=+input,-all --- include/vlc_messages.h | 6 ++++++ src/libvlc-module.c | 10 ++++++++++ src/libvlc.c | 22 +++++++++++++++++++++ src/libvlc.h | 2 ++ src/misc/messages.c | 43 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+) diff --git a/include/vlc_messages.h b/include/vlc_messages.h index 1ce7d7b914..d0fd0a1f49 100644 --- a/include/vlc_messages.h +++ b/include/vlc_messages.h @@ -103,6 +103,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 ) ); + /** * @} */ diff --git a/src/libvlc-module.c b/src/libvlc-module.c index 46b0580fac..fba980f9e8 100644 --- a/src/libvlc-module.c +++ b/src/libvlc-module.c @@ -162,6 +162,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.") @@ -1934,6 +1942,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'); diff --git a/src/libvlc.c b/src/libvlc.c index 71ed33ad93..70236ec3b3 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -633,6 +633,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 ) diff --git a/src/libvlc.h b/src/libvlc.h index e0e9e8603f..c8eed26a91 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -233,6 +233,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 diff --git a/src/misc/messages.c b/src/misc/messages.c index be832c65c8..a2e6e8ddbf 100644 --- a/src/misc/messages.c +++ b/src/misc/messages.c @@ -87,6 +87,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; @@ -113,6 +116,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 * @@ -132,6 +164,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); @@ -546,6 +581,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; #ifdef UNDER_CE # define CE_WRITE(str) WriteFile( QUEUE.logfile, \ -- 2.39.2