From 8781ee971c88868f5b3e3560e66a75656c281b6f Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 14 Mar 2018 15:33:02 +0300 Subject: [PATCH] core: write log messages via __android_log_print (logcat) too --- modules/core/src/logger.cpp | 23 +++++++++++++++++++++-- modules/core/src/system.cpp | 16 +++++++++------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/modules/core/src/logger.cpp b/modules/core/src/logger.cpp index b390a25..2459e4f 100644 --- a/modules/core/src/logger.cpp +++ b/modules/core/src/logger.cpp @@ -11,6 +11,10 @@ #include #include +#ifdef __ANDROID__ +# include +#endif + namespace cv { namespace utils { namespace logging { @@ -62,8 +66,7 @@ namespace internal { void writeLogMessage(LogLevel logLevel, const char* message) { const int threadID = cv::utils::getThreadID(); - std::ostream* out = (logLevel <= LOG_LEVEL_WARNING) ? &std::cerr : &std::cout; - std::stringstream ss; + std::ostringstream ss; switch (logLevel) { case LOG_LEVEL_FATAL: ss << "[FATAL:" << threadID << "] " << message << std::endl; break; @@ -75,6 +78,22 @@ void writeLogMessage(LogLevel logLevel, const char* message) default: return; } +#ifdef __ANDROID__ + int android_logLevel = ANDROID_LOG_INFO; + switch (logLevel) + { + case LOG_LEVEL_FATAL: android_logLevel = ANDROID_LOG_FATAL; break; + case LOG_LEVEL_ERROR: android_logLevel = ANDROID_LOG_ERROR; break; + case LOG_LEVEL_WARNING: android_logLevel = ANDROID_LOG_WARN; break; + case LOG_LEVEL_INFO: android_logLevel = ANDROID_LOG_INFO; break; + case LOG_LEVEL_DEBUG: android_logLevel = ANDROID_LOG_DEBUG; break; + case LOG_LEVEL_VERBOSE: android_logLevel = ANDROID_LOG_VERBOSE; break; + default: + break; + } + __android_log_print(android_logLevel, "OpenCV/" CV_VERSION, "%s", ss.str().c_str()); +#endif + std::ostream* out = (logLevel <= LOG_LEVEL_WARNING) ? &std::cerr : &std::cout; (*out) << ss.str(); if (logLevel <= LOG_LEVEL_WARNING) (*out) << std::flush; diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp index 11e12b0..e0113c5 100644 --- a/modules/core/src/system.cpp +++ b/modules/core/src/system.cpp @@ -47,6 +47,8 @@ #include #include +#include + namespace cv { static Mutex* __initialization_mutex = NULL; @@ -412,24 +414,24 @@ struct HWFeatures have[CV_CPU_FP16] = true; #elif defined __arm__ && defined __ANDROID__ #if defined HAVE_CPUFEATURES - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "calling android_getCpuFeatures() ..."); + CV_LOG_INFO(NULL, "calling android_getCpuFeatures() ..."); uint64_t features = android_getCpuFeatures(); - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "calling android_getCpuFeatures() ... Done (%llx)", features); + CV_LOG_INFO(NULL, cv::format("calling android_getCpuFeatures() ... Done (%llx)", (long long)features)); have[CV_CPU_NEON] = (features & ANDROID_CPU_ARM_FEATURE_NEON) != 0; have[CV_CPU_FP16] = (features & ANDROID_CPU_ARM_FEATURE_VFP_FP16) != 0; #else - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "cpufeatures library is not available for CPU detection"); + CV_LOG_INFO(NULL, "cpufeatures library is not available for CPU detection"); #if CV_NEON - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "- NEON instructions is enabled via build flags"); + CV_LOG_INFO(NULL, "- NEON instructions is enabled via build flags"); have[CV_CPU_NEON] = true; #else - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "- NEON instructions is NOT enabled via build flags"); + CV_LOG_INFO(NULL, "- NEON instructions is NOT enabled via build flags"); #endif #if CV_FP16 - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "- FP16 instructions is enabled via build flags"); + CV_LOG_INFO(NULL, "- FP16 instructions is enabled via build flags"); have[CV_CPU_FP16] = true; #else - __android_log_print(ANDROID_LOG_INFO, "OpenCV", "- FP16 instructions is NOT enabled via build flags"); + CV_LOG_INFO(NULL, "- FP16 instructions is NOT enabled via build flags"); #endif #endif #elif defined __arm__ -- 2.7.4