diff --git a/share/emscripten/gpac.html b/share/emscripten/gpac.html
index 4cb1ab6270..b69b051d56 100644
--- a/share/emscripten/gpac.html
+++ b/share/emscripten/gpac.html
@@ -1032,12 +1032,24 @@
var ansiCodes = []
// Replace with markup.
var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) {
+ if (seq=='0') {
+ r = '';
+ ansiCodes.forEach( c => {
+ if (c == '3') r+='';
+ else if (c == '4') r+='';
+ });
+ ansiCodes.length=0;
+ return r+'';
+ }
var ot = _openTags[seq]
if (ot) {
// If current sequence has been opened, close it.
if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast
- ansiCodes.pop()
- return ''
+ var r='';
+ var c = ansiCodes.pop()
+ if (c == '3') r+='';
+ else if (c == '4') r+='';
+ return r+''
}
// Open tag.
ansiCodes.push(seq)
@@ -1918,6 +1930,7 @@
{
let gpac_has_threads = LIBGPAC.cwrap('gpac_has_threads', 'number', []);
_lib.has_threads = gpac_has_threads();
+ _lib.in_logs = false;
//error codes
_lib.SCRIPT_INFO = 3;
_lib.PENDING_PACKET = 2;
@@ -2115,8 +2128,10 @@
};
})(),
printErr: function(text) {
- //console.log(text);
- LIBGPAC.print(text);
+ if (LIBGPAC.in_logs)
+ console.log(text);
+ else
+ LIBGPAC.print(text);
},
canvas: (function() {
diff --git a/src/filter_core/filter_session.c b/src/filter_core/filter_session.c
index ca080653c4..ccb04e01d8 100644
--- a/src/filter_core/filter_session.c
+++ b/src/filter_core/filter_session.c
@@ -1602,7 +1602,11 @@ Bool em_check_yield_th_proc(u32 thid, GF_SessionThread *sess_thread, u64 enter_t
}
#endif
+#ifndef GPAC_DISABLE_THREADS
const char *gf_th_log_name(GF_Thread *t);
+#else
+#define gf_th_log_name(_t) "Main Process"
+#endif
static u32 gf_fs_thread_proc(GF_SessionThread *sess_thread)
{
diff --git a/src/utils/downloader.c b/src/utils/downloader.c
index 4fc4bc9779..7e562771ce 100644
--- a/src/utils/downloader.c
+++ b/src/utils/downloader.c
@@ -7715,7 +7715,6 @@ EM_JS(int, dm_fetch_init, (int sess, int _url, int _method, int _headers, int nb
libgpac._fetcher_set_header(fetcher.sess, 0, 0);
} else {
libgpac._fetcher_set_reply(fetcher.sess, response.status, null);
- do_log_err('fetcher for ' + url + ' failed ' + response.status);
fetcher._state = 3;
}
})
diff --git a/src/utils/error.c b/src/utils/error.c
index 59e8a50556..3455fe5e62 100644
--- a/src/utils/error.c
+++ b/src/utils/error.c
@@ -833,6 +833,9 @@ void default_log_callback_color(void *cbck, GF_LOG_Level level, GF_LOG_Tool tool
static void *user_log_cbk = NULL;
gf_log_cbk log_cbk = default_log_callback_color;
static Bool log_exit_on_error = GF_FALSE;
+#ifdef GPAC_CONFIG_EMSCRIPTEN
+Bool gpac_log_console = GF_FALSE;
+#endif
GF_EXPORT
Bool gf_log_use_color()
@@ -843,12 +846,26 @@ Bool gf_log_use_color()
GF_EXPORT
void gf_log(const char *fmt, ...)
{
+#ifdef GPAC_CONFIG_EMSCRIPTEN
+ if (gpac_log_console && (call_tool!=GF_LOG_APP)) {
+ EM_ASM({
+ libgpac.in_logs = true;
+ });
+ }
+#endif
va_list vl;
va_start(vl, fmt);
gf_mx_p(logs_mx);
log_cbk(user_log_cbk, call_lev, call_tool, fmt, vl);
gf_mx_v(logs_mx);
va_end(vl);
+#ifdef GPAC_CONFIG_EMSCRIPTEN
+ if (gpac_log_console && (call_tool!=GF_LOG_APP)) {
+ EM_ASM({
+ libgpac.in_logs = false;
+ });
+ }
+#endif
if (log_exit_on_error && (call_lev==GF_LOG_ERROR) && (call_tool != GF_LOG_MEMORY)) {
exit(1);
}
diff --git a/src/utils/os_config_init.c b/src/utils/os_config_init.c
index 62f70cecf0..a19fe59f8f 100644
--- a/src/utils/os_config_init.c
+++ b/src/utils/os_config_init.c
@@ -1386,7 +1386,11 @@ GF_GPACArg GPAC_Args[] = {
GF_DEF_ARG("tmp", NULL, "specify directory for temporary file creation instead of OS-default temporary file management", NULL, NULL, GF_ARG_STRING, 0),
GF_DEF_ARG("noprog", NULL, "disable progress messages", NULL, NULL, GF_ARG_BOOL, GF_ARG_HINT_ADVANCED|GF_ARG_SUBSYS_LOG),
GF_DEF_ARG("quiet", NULL, "disable all messages, including errors", NULL, NULL, GF_ARG_BOOL, GF_ARG_HINT_ADVANCED|GF_ARG_SUBSYS_LOG),
- GF_DEF_ARG("log-file", "lf", "set output log file", NULL, NULL, GF_ARG_STRING, GF_ARG_SUBSYS_LOG),
+ GF_DEF_ARG("log-file", "lf", "set output log file"
+#ifdef GPAC_CONFIG_EMSCRIPTEN
+ " - use `console` for browser console log"
+#endif
+ , NULL, NULL, GF_ARG_STRING, GF_ARG_SUBSYS_LOG),
GF_DEF_ARG("log-clock", "lc", "log time in micro sec since start time of GPAC before each log line except for `app` tool", NULL, NULL, GF_ARG_BOOL, GF_ARG_SUBSYS_LOG),
GF_DEF_ARG("log-utc", "lu", "log UTC time in ms before each log line except for `app` tool", NULL, NULL, GF_ARG_BOOL, GF_ARG_SUBSYS_LOG),
GF_DEF_ARG("logs", NULL, "set log tools and levels. \n"
diff --git a/src/utils/os_divers.c b/src/utils/os_divers.c
index e1d513c316..a39041bf8d 100644
--- a/src/utils/os_divers.c
+++ b/src/utils/os_divers.c
@@ -900,6 +900,9 @@ Bool gf_sys_is_cov_mode()
const char *gpac_log_file_name=NULL;
#ifndef GPAC_DISABLE_LOG
extern Bool gpac_log_dual;
+#ifdef GPAC_CONFIG_EMSCRIPTEN
+extern Bool gpac_log_console;
+#endif
#endif
GF_EXPORT
@@ -908,6 +911,14 @@ void gf_log_reset_file()
#ifndef GPAC_DISABLE_LOG
if (gpac_log_file_name) {
if (gpac_log_file) gf_fclose(gpac_log_file);
+#ifdef GPAC_CONFIG_EMSCRIPTEN
+ gpac_log_console = GF_FALSE;
+ if (gpac_log_file_name && !strcmp(gpac_log_file_name, "console")) {
+ gpac_log_file = NULL;
+ gpac_log_console = GF_TRUE;
+ return;
+ }
+#endif
gpac_log_file = gf_fopen(gpac_log_file_name, "wt");
}
#endif
@@ -1051,9 +1062,7 @@ GF_Err gf_sys_set_args(s32 argc, const char **argv)
#ifndef GPAC_DISABLE_LOG
- if (gpac_log_file_name) {
- gpac_log_file = gf_fopen(gpac_log_file_name, "wt");
- }
+ gf_log_reset_file();
#endif
if (gf_opts_get_bool("core", "rmt"))
gf_sys_enable_remotery(GF_TRUE, GF_FALSE);