core: write log messages via __android_log_print (logcat) too
authorAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 14 Mar 2018 12:33:02 +0000 (15:33 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 14 Mar 2018 14:24:29 +0000 (17:24 +0300)
modules/core/src/logger.cpp
modules/core/src/system.cpp

index b390a25..2459e4f 100644 (file)
 #include <iostream>
 #include <fstream>
 
+#ifdef __ANDROID__
+# include <android/log.h>
+#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;
index 11e12b0..e0113c5 100644 (file)
@@ -47,6 +47,8 @@
 #include <opencv2/core/utils/configuration.private.hpp>
 #include <opencv2/core/utils/trace.private.hpp>
 
+#include <opencv2/core/utils/logger.hpp>
+
 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__