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 ) );
+
/**
* @}
*/
"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.")
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');
/*
* 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 )
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
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;
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
*
#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);
}
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