[vlc-devel] [PATCH] logger: support android
Rafaël Carré
funman at videolan.org
Sat Jan 21 00:36:20 CET 2012
---
modules/misc/Modules.am | 5 ++++
modules/misc/logger.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/modules/misc/Modules.am b/modules/misc/Modules.am
index 4697942..37d4ba2 100644
--- a/modules/misc/Modules.am
+++ b/modules/misc/Modules.am
@@ -44,6 +44,11 @@ libmce_plugin_la_DEPENDENCIES =
EXTRA_LTLIBRARIES += libmce_plugin.la
libvlc_LTLIBRARIES += $(LTLIBmce)
+liblogger_plugin_la_LIBADD = $(AM_LIBADD)
+if HAVE_ANDROID
+liblogger_plugin_la_LIBADD += -llog
+endif
+
libvlc_LTLIBRARIES += \
libaudioscrobbler_plugin.la \
liblogger_plugin.la
diff --git a/modules/misc/logger.c b/modules/misc/logger.c
index 7f7ed6c..9927357 100644
--- a/modules/misc/logger.c
+++ b/modules/misc/logger.c
@@ -38,6 +38,10 @@
#include <stdarg.h>
#include <assert.h>
+#ifdef __ANDROID__
+# include <android/log.h>
+#endif
+
#define MODE_TEXT 0
#define MODE_HTML 1
#define MODE_SYSLOG 2
@@ -95,6 +99,9 @@ static void HtmlPrint(void *, int, const msg_item_t *, const char *, va_list);
static void SyslogPrint(void *, int, const msg_item_t *, const char *,
va_list);
#endif
+#ifdef __ANDROID__
+static void AndroidPrint(void *, int, const msg_item_t *, const char *, va_list);
+#endif
/*****************************************************************************
* Module descriptor
@@ -103,11 +110,17 @@ static const char *const mode_list[] = { "text", "html"
#ifdef HAVE_SYSLOG_H
,"syslog"
#endif
+#ifdef __ANDROID__
+,"android"
+#endif
};
static const char *const mode_list_text[] = { N_("Text"), "HTML"
#ifdef HAVE_SYSLOG_H
, "syslog"
#endif
+#ifdef __ANDROID__
+,"android"
+#endif
};
#define LOGMODE_TEXT N_("Log format")
@@ -117,8 +130,9 @@ static const char *const mode_list_text[] = { N_("Text"), "HTML"
#else
#define LOGMODE_LONGTEXT N_("Specify the log format. Available choices are " \
- "\"text\" (default), \"html\", and \"syslog\" (special mode to send to " \
- "syslog instead of file.")
+ "\"text\" (default), \"html\", \"syslog\" (special mode to send to " \
+ "syslog instead of file), and \"android\" (special mode to send to " \
+ "android logging facility).")
#define SYSLOG_FACILITY_TEXT N_("Syslog facility")
#define SYSLOG_FACILITY_LONGTEXT N_("Select the syslog facility where logs " \
@@ -212,6 +226,10 @@ static int Open( vlc_object_t *p_this )
else if( !strcmp( mode, "syslog" ) )
cb = SyslogPrint;
#endif
+#ifdef __ANDROID__
+ else if( !strcmp( mode, "android" ) )
+ cb = AndroidPrint;
+#endif
else if( strcmp( mode, "text" ) )
msg_Warn( p_intf, "invalid log mode `%s', using `text'", mode );
free( mode );
@@ -254,6 +272,9 @@ static int Open( vlc_object_t *p_this )
}
else
#endif
+#ifdef __ANDROID__
+ if( cb != AndroidPrint )
+#endif
{
char *psz_file = var_InheritString( p_intf, "logfile" );
if( !psz_file )
@@ -338,6 +359,29 @@ static const char ppsz_type[4][9] = {
" debug",
};
+#ifdef __ANDROID__
+static const android_LogPriority prioritytype[4] = {
+ ANDROID_LOG_INFO,
+ ANDROID_LOG_ERROR,
+ ANDROID_LOG_WARN,
+ ANDROID_LOG_DEBUG
+};
+
+static void AndroidPrint( void *opaque, int type, const msg_item_t *item,
+ const char *fmt, va_list ap )
+{
+ (void)item;
+ intf_thread_t *p_intf = opaque;
+
+ if( IgnoreMessage( p_intf, type ) )
+ return;
+
+ int canc = vlc_savecancel();
+ __android_log_vprint(prioritytype[type], "vlc", fmt, ap);
+ vlc_restorecancel( canc );
+}
+#endif
+
static void TextPrint( void *opaque, int type, const msg_item_t *item,
const char *fmt, va_list ap )
{
--
1.7.8.3
More information about the vlc-devel
mailing list