Commit 9f9d8982 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

libvlc: Add a --verbose-objects option to select which objects should print their msg.

Sample usage:
--verbose-objects=+input,-all
parent dfa0e1e9
......@@ -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 ) );
/**
* @}
*/
......
......@@ -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');
......
......@@ -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 )
......
......@@ -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
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment