text: // This file is part of OpenCV project.
  // It is subject to the license terms in the LICENSE file found in the top-level directory
  // of this distribution and at http://opencv.org/license.html.
  
  #ifndef __OPENCV_STITCHING_UTIL_LOG_HPP__
  #define __OPENCV_STITCHING_UTIL_LOG_HPP__
  
  #ifndef ENABLE_LOG
  #define ENABLE_LOG 1
  #endif
  
  // TODO remove LOG macros, add logging class
  #if ENABLE_LOG
  #ifdef ANDROID
    #include <iostream>
    #include <sstream>
    #include <android/log.h>
    #define LOG_STITCHING_MSG(msg) \
      do { \
          Stringstream _os; \
          _os << msg; \
         __android_log_print(ANDROID_LOG_DEBUG, "STITCHING", "%s", _os.str().c_str()); \
      } while(0);
  #else
    #include <iostream>
    #define LOG_STITCHING_MSG(msg) for(;;) { std::cout << msg; std::cout.flush(); break; }
  #endif
  #else
    #define LOG_STITCHING_MSG(msg)
  #endif
  
  #define LOG_(_level, _msg)                     \
      for(;;)                                    \
      {                                          \
          using namespace std;                   \
          if ((_level) >= ::cv::detail::stitchingLogLevel()) \
          {                                      \
              LOG_STITCHING_MSG(_msg);           \
          }                                      \
      break;                                 \
      }
  
  
  #define LOG(msg) LOG_(1, msg)
  #define LOG_CHAT(msg) LOG_(0, msg)
  
  #define LOGLN(msg) LOG(msg << std::endl)
  #define LOGLN_CHAT(msg) LOG_CHAT(msg << std::endl)
  
  //#if DEBUG_LOG_CHAT
  //  #define LOG_CHAT(msg) LOG(msg)
  //  #define LOGLN_CHAT(msg) LOGLN(msg)
  //#else
  //  #define LOG_CHAT(msg) do{}while(0)
  //  #define LOGLN_CHAT(msg) do{}while(0)
  //#endif
  
  #endif // __OPENCV_STITCHING_UTIL_LOG_HPP__
  