Commit 94df30dc authored by Thomas Guillem's avatar Thomas Guillem Committed by Jean-Baptiste Kempf

Messages: add AndroidPrintMsg cb for Android

On android 5.0, PrintMsg blocks on fprintf when stderr is locked by flockfile.

This commit adds a default log callback for android in order to fix this issue,
and in order to have early logs (before libvlc_log_set is called).

Close #12870
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
(cherry picked from commit 1df6e651c0a46a99bcc99a66f98c7277d84aff16)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent af9c39d9
......@@ -41,6 +41,10 @@
#include <vlc_charset.h>
#include "../libvlc.h"
#ifdef __ANDROID__
#include <android/log.h>
#endif
/**
* Emit a log message.
* \param obj VLC object emitting the message or NULL
......@@ -227,6 +231,43 @@ 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
/**
* Sets the message logging callback.
* \param cb message callback, or NULL to reset
......@@ -238,12 +279,16 @@ void vlc_LogSet (libvlc_int_t *vlc, vlc_log_cb cb, void *opaque)
if (cb == NULL)
{
#ifdef __ANDROID__
cb = AndroidPrintMsg;
#else
#if defined (HAVE_ISATTY) && !defined (_WIN32)
if (isatty (STDERR_FILENO) && var_InheritBool (vlc, "color"))
cb = PrintColorMsg;
else
#endif
cb = PrintMsg;
#endif // __ANDROID__
opaque = (void *)(intptr_t)priv->log.verbose;
}
......
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