[vlc-devel] [PATCH 3/3] android: convert Android logger to module
Rémi Denis-Courmont
remi at remlab.net
Mon Feb 9 11:41:54 CET 2015
Le 2015-02-09 13:10, Thomas Guillem a écrit :
> ---
> modules/logger/Makefile.am | 6 ++++
> modules/logger/android.c | 85
> ++++++++++++++++++++++++++++++++++++++++++++++
> src/misc/messages.c | 45 ------------------------
> 3 files changed, 91 insertions(+), 45 deletions(-)
> create mode 100644 modules/logger/android.c
>
> diff --git a/modules/logger/Makefile.am b/modules/logger/Makefile.am
> index 4c77999..79f5ad6 100644
> --- a/modules/logger/Makefile.am
> +++ b/modules/logger/Makefile.am
> @@ -18,3 +18,9 @@ libsd_journal_plugin_la_LIBADD = $(SYSTEMD_LIBS)
> if HAVE_SYSTEMD
> logger_LTLIBRARIES += libsd_journal_plugin.la
> endif
> +
> +libandroid_logger_plugin_la_SOURCES = logger/android.c
> +libandroid_logger_plugin_la_CFLAGS = $(AM_CFLAGS)
> +if HAVE_ANDROID
> +logger_LTLIBRARIES += libandroid_logger_plugin.la
> +endif
> diff --git a/modules/logger/android.c b/modules/logger/android.c
> new file mode 100644
> index 0000000..f8369ff
> --- /dev/null
> +++ b/modules/logger/android.c
> @@ -0,0 +1,85 @@
>
> +/*****************************************************************************
> + * android.c: Android logger using logcat
> +
>
> *****************************************************************************
> + * Copyright © 2015 VLC authors and VideoLAN
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU Lesser General Public License as
> published by
> + * the Free Software Foundation; either version 2.1 of the License,
> or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> License
> + * along with this program; if not, write to the Free Software
> Foundation,
> + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> +
>
> *****************************************************************************/
> +
> +#ifndef __ANDROID__
> +#error __ANDROID__ not defined
> +#endif
> +
> +#ifdef HAVE_CONFIG_H
> +# include "config.h"
> +#endif
> +
> +#include <android/log.h>
> +
> +#include <stdarg.h>
> +#include <stdio.h>
> +
> +#include <vlc_common.h>
> +#include <vlc_plugin.h>
> +
> +static const int ptr_width = 2 * /* hex digits */ sizeof
> (uintptr_t);
> +
> +static void AndroidPrintMsg(void *d, int type, const vlc_log_t
> *p_item,
> + const char *format, va_list ap)
> +{
> + int prio;
> + char *format2;
> +
> + int canc = vlc_savecancel();
> +
> + if (asprintf(&format2, "[%0*"PRIxPTR"] %s %s: %s",
> + ptr_width, p_item->i_object_id, p_item->psz_module,
> + p_item->psz_object_type, format) < 0)
> + return;
FWIW, that assumes the module name and object type do not contain a
percentage sign. (Yes, the bug is not new, so not a merge blocker.)
> + switch (type) {
> + case VLC_MSG_INFO:
> + prio = ANDROID_LOG_INFO;
> + break;
> + case VLC_MSG_ERR:
> + prio = ANDROID_LOG_ERROR;
> + break;
> + case VLC_MSG_WARN:
> + prio = ANDROID_LOG_WARN;
> + break;
> + default:
> + case VLC_MSG_DBG:
> + prio = ANDROID_LOG_DEBUG;
> + }
> + __android_log_vprint(prio, "VLC", format2, ap);
> + free(format2);
> + vlc_restorecancel(canc);
> +}
> +
> +static vlc_log_cb Open(vlc_object_t *obj, void **sysp)
> +{
> + VLC_UNUSED(obj);
> + VLC_UNUSED(sysp);
> +
> + return AndroidPrintMsg;
> +}
> +
> +vlc_module_begin()
> + set_shortname(N_("Android log"))
> + set_description(N_("Android log using logcat"))
> + set_category(CAT_ADVANCED)
> + set_subcategory(SUBCAT_ADVANCED_MISC)
> + set_capability("logger", 30)
> + set_callbacks(Open, NULL)
> +vlc_module_end ()
> diff --git a/src/misc/messages.c b/src/misc/messages.c
> index 3679ade..e22e4fe7 100644
> --- a/src/misc/messages.c
> +++ b/src/misc/messages.c
> @@ -43,10 +43,6 @@
> #include <vlc_modules.h>
> #include "../libvlc.h"
>
> -#ifdef __ANDROID__
> -#include <android/log.h>
> -#endif
> -
> struct vlc_logger_t
> {
> VLC_COMMON_MEMBERS
> @@ -205,43 +201,6 @@ static void Win32DebugOutputMsg (void* d, int
> type, const vlc_log_t *p_item,
> }
> #endif
>
> -#ifdef __ANDROID__
> -static void AndroidPrintMsg (void *d, int type, const vlc_log_t
> *p_item,
> - const char *format, va_list ap)
> -{
> - int verbose = (intptr_t)d;
> - int prio;
> -
> - if (verbose < 0 || verbose < (type - VLC_MSG_ERR))
> - return;
> -
> - int canc = vlc_savecancel ();
> -
> - char *format2;
> - if (asprintf (&format2, "[%0*"PRIxPTR"] %s %s: %s",
> - ptr_width, p_item->i_object_id,
> p_item->psz_module,
> - p_item->psz_object_type, format) < 0)
> - return;
> - switch (type) {
> - case VLC_MSG_INFO:
> - prio = ANDROID_LOG_INFO;
> - break;
> - case VLC_MSG_ERR:
> - prio = ANDROID_LOG_ERROR;
> - break;
> - case VLC_MSG_WARN:
> - prio = ANDROID_LOG_WARN;
> - break;
> - default:
> - case VLC_MSG_DBG:
> - prio = ANDROID_LOG_DEBUG;
> - }
> - __android_log_vprint (prio, "VLC", format2, ap);
> - free (format2);
> - vlc_restorecancel (canc);
> -}
> -#endif
> -
> typedef struct vlc_log_early_t
> {
> struct vlc_log_early_t *next;
> @@ -403,11 +362,7 @@ int vlc_LogInit(libvlc_int_t *vlc)
> module_t *module = vlc_module_load(logger, "logger", NULL,
> false,
> vlc_logger_load, logger, &cb,
> &sys);
> if (module == NULL)
> -#ifdef __ANDROID__
> - cb = AndroidPrintMsg, sys = NULL;
> -#else
> cb = vlc_vaLogDiscard;
> -#endif
>
> vlc_rwlock_wrlock(&logger->lock);
> if (logger->log == vlc_vaLogEarly)
--
Rémi Denis-Courmont
More information about the vlc-devel
mailing list