From 0688756b71b40e0ac60c68af2fa1fe4aaeb1718d Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期一, 13 二月 2017 16:27:41 +0800 Subject: [PATCH] replace log to support android --- RtspFace/PL_SensetimeFaceTrack.cpp | 14 RtspFace/main.cpp | 22 RtspFace/PipeLinePool.cpp | 4 RtspFace/PL_RTSPServer.cpp | 12 RtspFace/ev_server.cpp | 34 +- RtspFace/PL_H264Decoder.cpp | 10 RtspFace/PL_H264Encoder.cpp | 14 RtspFace/logger.h | 58 --- RtspFace/live555/testProgs/testRTSPClient.hpp | 62 ++-- RtspFace/Logger/src/Makefile | 24 + RtspFace/main_dump_st_face.cpp | 14 RtspFace/Logger/src/test.cpp | 42 +++ RtspFace/PL_AVFrameBGRA.cpp | 4 RtspFace/Logger/link.URL | 4 RtspFace/PL_AVFrameYUV420.cpp | 4 RtspFace/PL_Scale.cpp | 16 RtspFace/main_face_daemon.cpp | 22 RtspFace/live555/config.android | 1 RtspFace/Logger/src/logger.hpp | 83 ++++++ RtspFace/PL_Payer.cpp | 2 RtspFace/PL_RTSPClient.cpp | 4 RtspFace/Logger/README.md | 46 +++ RtspFace/PL_SensetimeFaceDetect.cpp | 10 RtspFace/PipeLine.cpp | 6 RtspFace/make.sh | 14 RtspFace/PL_DlibFaceTrack.cpp | 14 RtspFace/PL_Fork.cpp | 6 RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp | 4 RtspFace/Logger/src/logger.cc | 133 ++++++++++ RtspFace/Logger/LICENSE | 38 ++ RtspFace/PL_Gainer.cpp | 4 31 files changed, 529 insertions(+), 196 deletions(-) diff --git a/RtspFace/Logger/LICENSE b/RtspFace/Logger/LICENSE new file mode 100644 index 0000000..10f6572 --- /dev/null +++ b/RtspFace/Logger/LICENSE @@ -0,0 +1,38 @@ +Copyright (C) 2013-2017 Bryant Moscon - bmoscon@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions, and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution, and in the same + place and form as other copyright, license and disclaimer information. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by Bryant Moscon (http://www.bryantmoscon.com/)", in the same + place and form as other third-party acknowledgments. Alternately, this + acknowledgment may appear in the software itself, in the same form and + location as other such third-party acknowledgments. + + 4. Except as contained in this notice, the name of the author, Bryant Moscon, + shall not be used in advertising or otherwise to promote the sale, use or + other dealings in this Software without prior written authorization from + the author. + + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + diff --git a/RtspFace/Logger/README.md b/RtspFace/Logger/README.md new file mode 100644 index 0000000..9d75004 --- /dev/null +++ b/RtspFace/Logger/README.md @@ -0,0 +1,46 @@ +##Simple, Lightweight Logging + +[](LICENSE) + +Usage: + + +Specify a filename when constructing: + +```c++ +Logger example("FILENAME"); +``` + +Log lines will be written to this file. Use the << operator to +direct messages to the log stream and indicate the log level. +If the log level is omitted, it defaults to verbose: + +```c++ +example << ERROR << "Out of Memory!" << std::endl; +``` + + +This line will look like this in the log file: + +``` +Sat Mar 15 08:06:58 2014 -- [ERROR] -- Out of Memory! +``` + +If you dont care for the formatting, change the code :) + + +You must end the line with an ```endl```. This tells the logger +to write the line and prepend the timestamp to the line +as well. + + +You can change the logging level like so: + +```c++ +example.set_level(VERBOSE); +``` + +The level defaults to ```VERBOSE``` is one is never set, and this can be changed via ```set_default_line_level``` + + +Note: This library requires C++11 compiler support diff --git a/RtspFace/Logger/link.URL b/RtspFace/Logger/link.URL new file mode 100644 index 0000000..43085e9 --- /dev/null +++ b/RtspFace/Logger/link.URL @@ -0,0 +1,4 @@ +[InternetShortcut] +URL=https://github.com/bmoscon/Logger +IDList= +HotKey=0 diff --git a/RtspFace/Logger/src/Makefile b/RtspFace/Logger/src/Makefile new file mode 100644 index 0000000..1b5baa2 --- /dev/null +++ b/RtspFace/Logger/src/Makefile @@ -0,0 +1,24 @@ +CC = g++ +CCFLAGS = -Wall -Werror -std=c++14 -ggdb3 -fPIC +AR = ar + +HEADERS = $(wildcard *.hpp) +SRC = $(wildcard *.cc) +OBJ = $(subst .cc,.o,$(SRC)) +NAME = liblogger +SO = $(NAME).so +A = $(NAME).a + +all: liblogger + +clean: + rm -f $(OBJ) $(SO) $(A) + +liblogger: $(OBJ) + $(CC) -shared -o $(SO) -Wl,-soname,$(SO) $(OBJ) + $(AR) -cvq $(A) $(OBJ) + +%.o: %.cc $(HEADERS) Makefile + $(CC) $(CCFLAGS) -c $< -o $@ + + diff --git a/RtspFace/Logger/src/logger.cc b/RtspFace/Logger/src/logger.cc new file mode 100644 index 0000000..06748f2 --- /dev/null +++ b/RtspFace/Logger/src/logger.cc @@ -0,0 +1,133 @@ +/* + * logger.cc + * + * + * Logger Library + * + * + * Copyright (C) 2013-2017 Bryant Moscon - bmoscon@gmail.com + * + * Please see the LICENSE file for the terms and conditions + * associated with this software. + * + */ + +#include "logger.hpp" + +Logger::Logger(std::ostream& s) : _file(), + _log(s), + _level(INFO), + _line_level(VERBOSE), + _default_line_level(VERBOSE) +{ +} + + +Logger::Logger(const char *f) : _file(f, std::ios::out | std::ios::app), + _log(_file), + _level(INFO), + _line_level(VERBOSE), + _default_line_level(VERBOSE) +{ + assert(_file.is_open()); +} + + +Logger::Logger(const std::string& f) : _file(f.c_str(), std::ios::out | std::ios::app), + _log(_file), + _level(INFO), + _line_level(VERBOSE), + _default_line_level(VERBOSE) +{ + assert(_file.is_open()); +} + + +Logger::~Logger() +{ + if (_file.is_open()) { + _log.flush(); + _file.close(); + } + else { + _log.flush(); + } +} + + +void Logger::set_level(const logger_level& level) +{ + _level = level; +} + + +void Logger::set_default_line_level(const logger_level& level) +{ + _default_line_level = level; +} + + +void Logger::flush() +{ + if (_line_level >= _level) { + _log << get_time() << " -- [" << level_str(_line_level) << "] -- " << str(); + if (_file.is_open()) + _log.flush(); + } + + str(""); + _line_level = _default_line_level; +} + + +Logger& Logger::operator<<(const logger_level& level) +{ + _line_level = level; + return (*this); +} + + +Logger& Logger::operator<<(LoggerManip m) +{ + return m(*this); +} + + +std::string Logger::get_time() const +{ + struct tm *timeinfo; + time_t rawtime; + char *time_buf; + + time(&rawtime); + timeinfo = localtime(&rawtime); + time_buf = asctime(timeinfo); + + std::string ret(time_buf); + if (!ret.empty() && ret[ret.length() - 1] == '\n') { + ret.erase(ret.length()-1); + } + + return (ret); +} + + +inline const char* Logger::level_str(const logger_level& level) +{ + switch (level) { + case VERBOSE: + return ("VRB"); + case DEBUG: + return ("DBG"); + case INFO: + return ("INF"); + case WARNING: + return ("WRN"); + case ERROR: + return ("ERR"); + case CRITICAL: + return ("CRT"); + default: + assert(false); + } +} diff --git a/RtspFace/Logger/src/logger.hpp b/RtspFace/Logger/src/logger.hpp new file mode 100644 index 0000000..a39cea1 --- /dev/null +++ b/RtspFace/Logger/src/logger.hpp @@ -0,0 +1,83 @@ +/* + * logger.hpp + * + * + * Logger Library Header + * + * + * Copyright (C) 2013-2017 Bryant Moscon - bmoscon@gmail.com + * + * Please see the LICENSE file for the terms and conditions + * associated with this software. + * + */ + +#ifndef __LOGGER__ +#define __LOGGER__ + + +#include <fstream> +#include <cassert> +#include <ctime> +#include <sstream> + + +// Log levels +typedef enum { + VERBOSE = 0, + DEBUG, + INFO, + WARNING, + ERROR, + CRITICAL +} logger_level; + + + +class Logger : public std::ostringstream { +public: + Logger(std::ostream& s); + Logger(const char *f); + Logger(const std::string& f); + Logger (const Logger &) = delete; + Logger &operator= (const Logger &) = delete; + ~Logger(); + + + void set_level(const logger_level& level); + void set_default_line_level(const logger_level& level); + void flush(); + template <typename T> + Logger& operator<<(const T& t) + { + *static_cast<std::ostringstream *>(this) << t; + return (*this); + } + + Logger& operator<<(const logger_level& level); + typedef Logger& (* LoggerManip)(Logger&); + Logger& operator<<(LoggerManip m); + +private: + std::string get_time() const; + inline const char* level_str(const logger_level& level); + + std::ofstream _file; + std::ostream& _log; + logger_level _level; + logger_level _line_level; + logger_level _default_line_level; +}; + + +namespace std { + inline Logger& endl(Logger& out) + { + out.put('\n'); + out.flush(); + return (out); + } +} + + +#endif diff --git a/RtspFace/Logger/src/test.cpp b/RtspFace/Logger/src/test.cpp new file mode 100644 index 0000000..324657a --- /dev/null +++ b/RtspFace/Logger/src/test.cpp @@ -0,0 +1,42 @@ +#include "Logger/src/logger.hpp" +#include <string.h> +#include <iostream> +#include <unistd.h> + +#ifndef LOG_TAG +#define LOG_TAG "logger" +#endif + +Logger g_logger(std::cout); + +#define LOG(__level) g_logger << __level << __FILE__ << ":" << __LINE__ << "\t" +#define LOGP(__level, __format, arg...) { char msg[1024]; sprintf(msg, "%s:%d\t" __format, __FILE__, __LINE__, ##arg); g_logger << __level << msg << std::endl; } + +#define LOG_DEBUG LOG(DEBUG) // Debug message do not care in any production environment +#define LOG_INFO LOG(INFO) // Not significant event but useful for deal with online problem +#define LOG_NOTICE LOG(NOTICE) // Important event +#define LOG_WARN LOG(WARN) // Important event or input which will lead to errors +#define LOG_ERROR LOG(ERROR) // Error message means program running in an abnormal (not expected) way + + +int main() +{ + //Logger example(std::cout); + //example.set_level(VERBOSE); + //example << ERROR << "Out of Memory!" << std::endl; + + //std::stringstream ss; + //Logger ex2(ss); + //ex2.set_level(VERBOSE); + //ex2 << ERROR << "aaaaaaaaa"<<std::endl; + //ex2 << ERROR << "bbbbbbb"<<std::endl; + //std::cout << ss.str().c_str(); + + //g_logger.set_level(VERBOSE); + //LOG_DEBUG << "aaaaa" << std::endl; + //LOG_DEBUG << "bbb" << std::endl; + // + //LOGP(INFO, "%d %d", 123, 456); + + return 0; +} diff --git a/RtspFace/PL_AVFrameBGRA.cpp b/RtspFace/PL_AVFrameBGRA.cpp index 0826c5b..816a3db 100644 --- a/RtspFace/PL_AVFrameBGRA.cpp +++ b/RtspFace/PL_AVFrameBGRA.cpp @@ -77,7 +77,7 @@ if (pm.type != PipeMaterial::PMT_FRAME) { - LOG_ERROR << "Only support PMT_FRAME"; + LOG_ERROR << "Only support PMT_FRAME" << std::endl; return false; } @@ -87,7 +87,7 @@ MB_Frame* frame = (MB_Frame*)pm.buffer; if (frame->type != MB_Frame::MBFT_PTR_AVFRAME) { - LOG_ERROR << "Only support MBFT_PTR_AVFRAME"; + LOG_ERROR << "Only support MBFT_PTR_AVFRAME" << std::endl; return false; } diff --git a/RtspFace/PL_AVFrameYUV420.cpp b/RtspFace/PL_AVFrameYUV420.cpp index 98bf843..3c61b7c 100644 --- a/RtspFace/PL_AVFrameYUV420.cpp +++ b/RtspFace/PL_AVFrameYUV420.cpp @@ -69,7 +69,7 @@ if (pm.type != PipeMaterial::PMT_FRAME) { - LOG_ERROR << "Only support PMT_FRAME"; + LOG_ERROR << "Only support PMT_FRAME" << std::endl; return false; } @@ -79,7 +79,7 @@ MB_Frame* frame = (MB_Frame*)pm.buffer; if (frame->type != MB_Frame::MBFT_PTR_AVFRAME) { - LOG_ERROR << "Only support MBFT_PTR_AVFRAME"; + LOG_ERROR << "Only support MBFT_PTR_AVFRAME" << std::endl; return false; } diff --git a/RtspFace/PL_DlibFaceTrack.cpp b/RtspFace/PL_DlibFaceTrack.cpp index 0f88a75..96964ab 100644 --- a/RtspFace/PL_DlibFaceTrack.cpp +++ b/RtspFace/PL_DlibFaceTrack.cpp @@ -75,18 +75,18 @@ in->config = *config; #ifdef __AVX__ - LOG_DEBUG << "AVX on"; + LOG_DEBUG << "AVX on" << std::endl; #ifdef DLIB_HAVE_SSE2 - LOG_DEBUG << "DLIB_HAVE_SSE2 on"; + LOG_DEBUG << "DLIB_HAVE_SSE2 on" << std::endl; #endif #ifdef DLIB_HAVE_SSE3 - LOG_DEBUG << "DLIB_HAVE_SSE3 on"; + LOG_DEBUG << "DLIB_HAVE_SSE3 on" << std::endl; #endif #ifdef DLIB_HAVE_SSE41 - LOG_DEBUG << "DLIB_HAVE_SSE41 on"; + LOG_DEBUG << "DLIB_HAVE_SSE41 on" << std::endl; #endif #ifdef DLIB_HAVE_AVX - LOG_DEBUG << "DLIB_HAVE_AVX on"; + LOG_DEBUG << "DLIB_HAVE_AVX on" << std::endl; #endif #endif @@ -256,7 +256,7 @@ if (pm.type != PipeMaterial::PMT_FRAME) { - LOG_ERROR << "Only support PMT_FRAME"; + LOG_ERROR << "Only support PMT_FRAME" << std::endl; return false; } @@ -266,7 +266,7 @@ MB_Frame* frame = (MB_Frame*)pm.buffer; if (frame->type != MB_Frame::MBFT_YUV420) { - LOG_ERROR << "Only support MBFT_YUV420"; + LOG_ERROR << "Only support MBFT_YUV420" << std::endl; return false; } diff --git a/RtspFace/PL_Fork.cpp b/RtspFace/PL_Fork.cpp index 627a857..91af5a9 100644 --- a/RtspFace/PL_Fork.cpp +++ b/RtspFace/PL_Fork.cpp @@ -64,7 +64,7 @@ if (args == nullptr) { - LOG_ERROR << "Config should give"; + LOG_ERROR << "Config should give" << std::endl; return false; } @@ -103,13 +103,13 @@ if (this->pl != nullptr) { - LOG_ERROR << "Has areadly attached pipe line"; + LOG_ERROR << "Has areadly attached pipe line" << std::endl; return; } if (pl == nullptr) { - LOG_NOTICE << "Detach pipe line"; + LOG_NOTICE << "Detach pipe line" << std::endl; this->pl->remove_elem(this); this->pl = nullptr; return; diff --git a/RtspFace/PL_Gainer.cpp b/RtspFace/PL_Gainer.cpp index 5e423dd..8e35880 100644 --- a/RtspFace/PL_Gainer.cpp +++ b/RtspFace/PL_Gainer.cpp @@ -88,7 +88,7 @@ break; default: //#todo support list or pm::copier operator - LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME"; + LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME" << std::endl; return; } } @@ -130,7 +130,7 @@ break; default: //#todo support list or pm::copier operator - LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME"; + LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME" << std::endl; return false; } diff --git a/RtspFace/PL_H264Decoder.cpp b/RtspFace/PL_H264Decoder.cpp index 7426bac..0391e6a 100644 --- a/RtspFace/PL_H264Decoder.cpp +++ b/RtspFace/PL_H264Decoder.cpp @@ -136,7 +136,7 @@ if (!avCodec) { - LOG_WARN << "codec not found!"; + LOG_WARN << "codec not found!" << std::endl; return false; } @@ -185,7 +185,7 @@ if (av_packet_from_data(&packet, buffer, buffSize) != 0) { - LOG_WARN << "av_packet_from_data error"; + LOG_WARN << "av_packet_from_data error" << std::endl; return false; } @@ -200,7 +200,7 @@ } else { - LOG_WARN << "incomplete frame"; + LOG_WARN << "incomplete frame" << std::endl; return false; } } @@ -224,7 +224,7 @@ SPropRecord *p_record = parseSPropParameterSets(fmtp.c_str(), numSPropRecords); if (numSPropRecords < 2) { - LOG_WARN << "numSPropRecords < 2"; + LOG_WARN << "numSPropRecords < 2" << std::endl; return false; } @@ -234,7 +234,7 @@ bool ret = initH264DecoderEnv(in, sps.sPropBytes, sps.sPropLength, pps.sPropBytes, pps.sPropLength); if (!ret) { - LOG_ERROR << "initH264DecoderEnv error"; + LOG_ERROR << "initH264DecoderEnv error" << std::endl; return false; } else diff --git a/RtspFace/PL_H264Encoder.cpp b/RtspFace/PL_H264Encoder.cpp index a4d3089..2af9e3e 100644 --- a/RtspFace/PL_H264Encoder.cpp +++ b/RtspFace/PL_H264Encoder.cpp @@ -122,7 +122,7 @@ if (!avCodec) { - LOG_ERROR << "codec not found!"; + LOG_ERROR << "codec not found!" << std::endl; return false; } @@ -156,13 +156,13 @@ in->pAVCodecContext->pix_fmt, 16); if (ret < 0) { - LOG_ERROR << "av_image_alloc error"; + LOG_ERROR << "av_image_alloc error" << std::endl; return false; } } else { - LOG_ERROR << "avcodec_open2 error"; + LOG_ERROR << "avcodec_open2 error" << std::endl; return false; } @@ -233,7 +233,7 @@ int ret = avcodec_encode_video2(in->pAVCodecContext, &pAVPacket, in->pAVFrame, &gotPacket); if (ret < 0) { - LOG_WARN << "avcodec_encode_video2 (1) error=" << ret; + LOG_WARN << "avcodec_encode_video2 (1) error=" << ret << std::endl; return false; } @@ -327,7 +327,7 @@ bool ret = initH264EncoderEnv(in); if (!ret) { - LOG_ERROR << "initH264EncoderEnv error"; + LOG_ERROR << "initH264EncoderEnv error" << std::endl; return false; } else @@ -336,7 +336,7 @@ if (pm.type != PipeMaterial::PMT_FRAME) { - LOG_ERROR << "Only support PMT_FRAME"; + LOG_ERROR << "Only support PMT_FRAME" << std::endl; return false; } @@ -353,7 +353,7 @@ ret = encodeH264(in, (uint8_t*)(frame->buffer), frame->pts); else { - LOG_ERROR << "Only support MBFT_PTR_AVFRAME / MBFT_YUV420"; + LOG_ERROR << "Only support MBFT_PTR_AVFRAME / MBFT_YUV420" << std::endl; in->payError = true; return false; } diff --git a/RtspFace/PL_Payer.cpp b/RtspFace/PL_Payer.cpp index 8ec8239..1022f4d 100644 --- a/RtspFace/PL_Payer.cpp +++ b/RtspFace/PL_Payer.cpp @@ -101,7 +101,7 @@ break; default: //#todo support list or pm::copier operator - LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME"; + LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME" << std::endl; } } diff --git a/RtspFace/PL_RTSPClient.cpp b/RtspFace/PL_RTSPClient.cpp index 759fc5d..8290f8a 100644 --- a/RtspFace/PL_RTSPClient.cpp +++ b/RtspFace/PL_RTSPClient.cpp @@ -231,7 +231,7 @@ int ret = pthread_mutex_unlock(in->frame_mutex); if(ret != 0) { - LOG_ERROR << "pthread_mutex_unlock frame_mutex: ", strerror(ret); + LOG_ERROR << "pthread_mutex_unlock frame_mutex: " << strerror(ret) << std::endl; } } @@ -246,6 +246,6 @@ int ret = pthread_mutex_lock(in->continue_mutex); if(ret != 0) { - printf("pthread_mutex_unlock continue_mutex: %s/n", strerror(ret));//#todo + LOG_ERROR << "pthread_mutex_unlock continue_mutex: " << strerror(ret) << std::endl; } } diff --git a/RtspFace/PL_RTSPServer.cpp b/RtspFace/PL_RTSPServer.cpp index 6d31f34..6610e04 100644 --- a/RtspFace/PL_RTSPServer.cpp +++ b/RtspFace/PL_RTSPServer.cpp @@ -113,7 +113,7 @@ *FrameBuffer = pBuffer; *FrameSize = newBufferSize; - LOG_DEBUG << "send frame size=" << in.buffSize; + LOG_DEBUG << "send frame size=" << in.buffSize << std::endl; } virtual char ReleaseFrame() @@ -125,7 +125,7 @@ int ret = pthread_mutex_unlock(in.frame_mutex); if(ret != 0) { - LOG_WARN << "pthread_mutex_unlock frame_mutex: " << strerror(ret); + LOG_WARN << "pthread_mutex_unlock frame_mutex: " << strerror(ret) << std::endl; return 0; } } @@ -143,7 +143,7 @@ int ret = pthread_mutex_lock(in.frame_mutex); if(ret != 0) { - LOG_WARN << "pthread_mutex_lock frame_mutex: " << strerror(ret); + LOG_WARN << "pthread_mutex_lock frame_mutex: " << strerror(ret) << std::endl; return; } } @@ -197,7 +197,7 @@ int ret = pthread_create(&(in->live_daemon_thid), NULL, live_daemon_thd, in); if(ret != 0) { - LOG_ERROR << "pthread_create: " << strerror(ret); + LOG_ERROR << "pthread_create: " << strerror(ret) << std::endl; return false; } @@ -220,12 +220,12 @@ if (pm.type != PipeMaterial::PMT_FRAME) { - LOG_ERROR << "PL_RTSPServer::pay only support PMT_FRAME"; + LOG_ERROR << "PL_RTSPServer::pay only support PMT_FRAME" << std::endl; return false; } if (in->buffSize > 0) - LOG_WARN << "PL_RTSPServer::pay may lost data size=" << in->buffSize; + LOG_WARN << "PL_RTSPServer::pay may lost data size=" << in->buffSize << std::endl; MB_Frame* frame = (MB_Frame*)pm.buffer; if (frame->buffer == nullptr) diff --git a/RtspFace/PL_Scale.cpp b/RtspFace/PL_Scale.cpp index bd6c507..c825591 100644 --- a/RtspFace/PL_Scale.cpp +++ b/RtspFace/PL_Scale.cpp @@ -77,7 +77,7 @@ if (in->config.toWidth <= 0 || in->config.toHeight <= 0) { - LOG_ERROR << "Config toWidth and toHeight should > 0"; + LOG_ERROR << "Config toWidth and toHeight should > 0" << std::endl; return false; } @@ -105,7 +105,7 @@ dstSizeMax = in->config.toWidth * in->config.toHeight * 4; else { - LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_BGRA"; + LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_BGRA" << std::endl; return false; } @@ -115,7 +115,7 @@ delete[] in->buffer; in->buffer = new uint8_t[dstSizeMax]; in->buffSizeMax = dstSizeMax; - LOG_INFO << "image_scale alloc buffer size=" << dstSizeMax; + LOG_INFO << "image_scale alloc buffer size=" << dstSizeMax << std::endl; } if (srcType == MB_Frame::MBFT_YUV420) @@ -143,7 +143,7 @@ else if (srcType == MB_Frame::MBFT_BGRA) { //#todo - LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_BGRA"; + LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_BGRA" << std::endl; return false; } } @@ -168,7 +168,7 @@ if (in->config.defaultBytesType <= 0 || in->config.defaultBytesWidth <= 0 || in->config.defaultBytesHeight <= 0) { - LOG_ERROR << "defaultBytesType/defaultBytesWidth/defaultBytesHeight not set"; + LOG_ERROR << "defaultBytesType/defaultBytesWidth/defaultBytesHeight not set" << std::endl; return false; } @@ -188,13 +188,13 @@ frame->width, frame->height); break; default: - LOG_ERROR << "Only support MBFT_YUV420 / MBFT_BGRA"; + LOG_ERROR << "Only support MBFT_YUV420 / MBFT_BGRA" << std::endl; return false; } } break; default: - LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME"; + LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME" << std::endl; return false; } @@ -232,7 +232,7 @@ } break; default: - LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME"; + LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME" << std::endl; } pm = newPm; diff --git a/RtspFace/PL_SensetimeFaceDetect.cpp b/RtspFace/PL_SensetimeFaceDetect.cpp index ceae262..db9c257 100644 --- a/RtspFace/PL_SensetimeFaceDetect.cpp +++ b/RtspFace/PL_SensetimeFaceDetect.cpp @@ -81,7 +81,7 @@ if (pm.type != PipeMaterial::PMT_FRAME || !(in->config.payWithDbFrame)) { - LOG_ERROR << "Only support PMT_FRAME (SensetimeFaceDetectDbFrame)"; + LOG_ERROR << "Only support PMT_FRAME (SensetimeFaceDetectDbFrame)" << std::endl; return false; } @@ -91,21 +91,21 @@ SensetimeFaceDetectDbFrame* frame = (SensetimeFaceDetectDbFrame*)pm.buffer; if (frame->type != MB_Frame::MBFT_YUV420) { - LOG_ERROR << "Only support MBFT_YUV420"; + LOG_ERROR << "Only support MBFT_YUV420" << std::endl; return false; } FaceDB* _faceDB = (FaceDB*)frame->_faceDB; if (_faceDB == nullptr) { - LOG_ERROR << "FaceDB is null"; + LOG_ERROR << "FaceDB is null" << std::endl; return false; } const size_t expectedYUVSize = frame->width * frame->height * 1.5; if (frame->buffSize < expectedYUVSize) { - LOG_WARN << "image size not ok"; + LOG_WARN << "image size not ok" << std::endl; return false; } @@ -134,7 +134,7 @@ if (! in->config.resultStructOnly) { - LOG_ERROR << "Only support resultStructOnly"; + LOG_ERROR << "Only support resultStructOnly" << std::endl; return false; } diff --git a/RtspFace/PL_SensetimeFaceTrack.cpp b/RtspFace/PL_SensetimeFaceTrack.cpp index 7802631..64dfa4f 100644 --- a/RtspFace/PL_SensetimeFaceTrack.cpp +++ b/RtspFace/PL_SensetimeFaceTrack.cpp @@ -77,7 +77,7 @@ in->config.point_size_config = CV_DETECT_ENABLE_ALIGN_106; else { - LOG_ERROR << "alignment point size must be 21 or 106"; + LOG_ERROR << "alignment point size must be 21 or 106" << std::endl; return false; } @@ -86,7 +86,7 @@ in->config.point_size_config | CV_FACE_TRACKING_TWO_THREAD); if (cv_result != CV_OK) { - LOG_ERROR << "cv_face_create_tracker failed, error code" << cv_result; + LOG_ERROR << "cv_face_create_tracker failed, error code" << cv_result << std::endl; return false; } @@ -94,11 +94,11 @@ cv_result = cv_face_track_set_detect_face_cnt_limit(in->handle_track, in->config.detect_face_cnt_limit, &val); if (cv_result != CV_OK) { - LOG_ERROR << "cv_face_track_set_detect_face_cnt_limit failed, error : " << cv_result; + LOG_ERROR << "cv_face_track_set_detect_face_cnt_limit failed, error : " << cv_result << std::endl; return false; } else - LOG_ERROR << "detect face count limit : " << val; + LOG_ERROR << "detect face count limit : " << val << std::endl; return true; } @@ -127,7 +127,7 @@ CV_FACE_UP, &p_face, &face_count); if (cv_result != CV_OK) { - LOG_ERROR << "cv_face_track failed, error : " << cv_result; + LOG_ERROR << "cv_face_track failed, error : " << cv_result << std::endl; cv_face_release_tracker_result(p_face, face_count); return -1; } @@ -213,7 +213,7 @@ if (pm.type != PipeMaterial::PMT_FRAME) { - LOG_ERROR << "Only support PMT_FRAME"; + LOG_ERROR << "Only support PMT_FRAME" << std::endl; return false; } @@ -223,7 +223,7 @@ MB_Frame* frame = (MB_Frame*)pm.buffer; if (frame->type != MB_Frame::MBFT_YUV420) { - LOG_ERROR << "Only support MBFT_YUV420"; + LOG_ERROR << "Only support MBFT_YUV420" << std::endl; return false; } diff --git a/RtspFace/PipeLine.cpp b/RtspFace/PipeLine.cpp index d74e148..0a5e73e 100644 --- a/RtspFace/PipeLine.cpp +++ b/RtspFace/PipeLine.cpp @@ -142,16 +142,16 @@ PipeDebugger(PipeLine* _pipeLine) : pipeLine(_pipeLine), retElem(nullptr), pm(nullptr) { - //LOG_DEBUG << "pipe line begin"; + //LOG_DEBUG << "pipe line begin" << std::endl; } ~PipeDebugger() { //bool retOK = (*(pipeLine->elems).rbegin() == retElem); //if (retOK) - // LOG_DEBUG << "pipe line end, ret OK"; + // LOG_DEBUG << "pipe line end, ret OK" << std::endl; //else - // LOG_WARN << "pipe line end, ret ERROR"; + // LOG_WARN << "pipe line end, ret ERROR" << std::endl; } }; diff --git a/RtspFace/PipeLinePool.cpp b/RtspFace/PipeLinePool.cpp index cba5a1b..d003a48 100644 --- a/RtspFace/PipeLinePool.cpp +++ b/RtspFace/PipeLinePool.cpp @@ -6,7 +6,7 @@ int ret = pthread_mutex_lock((pthread_mutex_t*)mut); \ if(ret != 0) \ { \ - LOG_ERROR << "pthread_mutex_lock " << #mut << ": " << ret; \ + LOG_ERROR << "pthread_mutex_lock " << #mut << ": " << ret << std::endl; \ return _ret; \ } \ } @@ -15,7 +15,7 @@ int ret = pthread_mutex_unlock((pthread_mutex_t*)mut); \ if(ret != 0) \ { \ - LOG_ERROR << "pthread_mutex_unlock " << #mut << ": " << ret; \ + LOG_ERROR << "pthread_mutex_unlock " << #mut << ": " << ret << std::endl; \ return _ret; \ } \ } diff --git a/RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp b/RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp index 1f87a5c..680d1e0 100644 --- a/RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp +++ b/RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp @@ -9,7 +9,7 @@ int ret = pthread_mutex_lock((pthread_mutex_t*)mut); \ if(ret != 0) \ { \ - LOG_ERROR << "pthread_mutex_lock " << #mut << ": " << ret; \ + LOG_ERROR << "pthread_mutex_lock " << #mut << ": " << ret << std::endl; \ return _ret; \ } \ } @@ -18,7 +18,7 @@ int ret = pthread_mutex_unlock((pthread_mutex_t*)mut); \ if(ret != 0) \ { \ - LOG_ERROR << "pthread_mutex_unlock " << #mut << ": " << ret; \ + LOG_ERROR << "pthread_mutex_unlock " << #mut << ": " << ret << std::endl; \ return _ret; \ } \ } diff --git a/RtspFace/ev_server.cpp b/RtspFace/ev_server.cpp index 87f4294..2f423a2 100644 --- a/RtspFace/ev_server.cpp +++ b/RtspFace/ev_server.cpp @@ -69,11 +69,11 @@ if (what & EVBUFFER_EOF) { //Client disconnected, remove the read event and the free the client structure. - LOG_INFO << "Client disconnected."; + LOG_INFO << "Client disconnected." << std::endl; } else { - LOG_WARN << "Client socket error, disconnecting."; + LOG_WARN << "Client socket error, disconnecting." << std::endl; } bufferevent_free(client->buf_ev); close(client->fd); @@ -89,12 +89,12 @@ // Write back the read buffer. It is important to note that // bufferevent_write_buffer will drain the incoming data so it // is effectively gone after we call it. - //LOG_DEBUG << (char*)bufev->input; + //LOG_DEBUG << (char*)bufev->input << std::endl; //bufferevent_write_buffer(bufev, bufev->input); //char buff[100] = {'\0'}; //size_t readSize = bufferevent_read(bufev, buff, sizeof(buff)); - //LOG_DEBUG << "readSize=" << readSize << "\t" << buff; + //LOG_DEBUG << "readSize=" << readSize << "\t" << buff << std::endl; EVPHeader* evpHeader = (EVPHeader*)client->recvbuff; @@ -107,7 +107,7 @@ client->read_times = 1; if (readSize != sizeof(headerBuff)) { - LOG_WARN << "client send incomplete header"; + LOG_WARN << "client send incomplete header" << std::endl; buffered_on_error(bufev, 0, arg); return; } @@ -118,7 +118,7 @@ if (evpHeader->cmd <= EVPCommand::EVPC__FIRST || evpHeader->cmd >= EVPCommand::EVPC__LAST || evpHeader->size < sizeof(EVPHeader) || evpHeader->size > CLIENT_BUFFER_MAX) { - LOG_WARN << "client send invalid header"; + LOG_WARN << "client send invalid header" << std::endl; buffered_on_error(bufev, 0, arg); return; } @@ -169,7 +169,7 @@ { size_t writeSize = bufferevent_write(bufev, cs.sendBuff, cs.sendBuffSize); if (writeSize != cs.sendBuffSize) - LOG_WARN << "server send truncate " << (cs.sendBuffSize - writeSize) << " bytes"; + LOG_WARN << "server send truncate " << (cs.sendBuffSize - writeSize) << " bytes" << std::endl; if (cs.deleteSendBuff) delete[] cs.sendBuff; @@ -178,7 +178,7 @@ if (closeClient) { - LOG_DEBUG << "server initiative close"; + LOG_DEBUG << "server initiative close" << std::endl; buffered_on_error(bufev, 0, arg); } @@ -190,7 +190,7 @@ // check read times if (client->read_times > CLIENT_READ_TIMES_MAX) { - LOG_WARN << "client read times to max"; + LOG_WARN << "client read times to max" << std::endl; buffered_on_error(bufev, 0, arg); } } @@ -209,19 +209,19 @@ int client_fd = accept(fd, (struct sockaddr *)&client_addr, &client_len); if (client_fd < 0) { - LOG_WARN << "accept failed"; + LOG_WARN << "accept failed" << std::endl; return; } // Set the client socket to non-blocking mode. if (setnonblock(client_fd) < 0) - LOG_WARN << "failed to set client socket non-blocking"; + LOG_WARN << "failed to set client socket non-blocking" << std::endl; // We've accepted a new client, create a client object. struct EVClient* client = new EVClient; if (client == NULL) { - LOG_ERROR << "malloc failed"; + LOG_ERROR << "malloc failed" << std::endl; } client->fd = client_fd; client->proc = evclient_proc; @@ -232,7 +232,7 @@ // We have to enable it before our callbacks will be called. bufferevent_enable(client->buf_ev, EV_READ); - LOG_INFO << "Accepted connection from " << inet_ntoa(client_addr.sin_addr); + LOG_INFO << "Accepted connection from " << inet_ntoa(client_addr.sin_addr) << std::endl; } int server_main(int argc, char **argv) @@ -246,7 +246,7 @@ int listen_fd = socket(AF_INET, SOCK_STREAM, 0); if (listen_fd < 0) { - LOG_ERROR << "create socket failed"; + LOG_ERROR << "create socket failed" << std::endl; return EXIT_FAILURE; } @@ -257,13 +257,13 @@ listen_addr.sin_port = htons(SERVER_PORT); if (bind(listen_fd, (struct sockaddr *)&listen_addr, sizeof(listen_addr)) < 0) { - LOG_ERROR << "bind failed"; + LOG_ERROR << "bind failed" << std::endl; return EXIT_FAILURE; } if (listen(listen_fd, 5) < 0) { - LOG_ERROR << "listen failed"; + LOG_ERROR << "listen failed" << std::endl; return EXIT_FAILURE; } @@ -272,7 +272,7 @@ setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr_on, sizeof(reuseaddr_on)); if (setnonblock(listen_fd) < 0) { - LOG_ERROR << "failed to set server socket to non-blocking"; + LOG_ERROR << "failed to set server socket to non-blocking" << std::endl; return EXIT_FAILURE; } diff --git a/RtspFace/live555/config.android b/RtspFace/live555/config.android index 4c904e7..cca14b6 100644 --- a/RtspFace/live555/config.android +++ b/RtspFace/live555/config.android @@ -11,6 +11,7 @@ # ./genMakefiles android # make NDKROOT="/opt/android-ndk-r13b" TOOLCHAINPREFIX="/opt/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" clean # make NDKROOT="/opt/android-ndk-r13b" TOOLCHAINPREFIX="/opt/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" +# make NDKROOT="/opt/android-ndk-r13b" TOOLCHAINPREFIX="/opt/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" PREFIX="/opt/live.android/inst" install ARCH = arm NDKLEVEL = 22 diff --git a/RtspFace/live555/testProgs/testRTSPClient.hpp b/RtspFace/live555/testProgs/testRTSPClient.hpp index ff4a861..f346165 100644 --- a/RtspFace/live555/testProgs/testRTSPClient.hpp +++ b/RtspFace/live555/testProgs/testRTSPClient.hpp @@ -75,8 +75,8 @@ void usage(UsageEnvironment& env, char const* progName) { - LOG_DEBUG << "Usage: " << progName << " <rtsp-url-1> ... <rtsp-url-N>"; - LOG_DEBUG << "\t(where each <rtsp-url-i> is a \"rtsp://\" URL)"; + LOG_DEBUG << "Usage: " << progName << " <rtsp-url-1> ... <rtsp-url-N>" << std::endl; + LOG_DEBUG << "\t(where each <rtsp-url-i> is a \"rtsp://\" URL)" << std::endl; } char eventLoopWatchVariable = 0; @@ -207,7 +207,7 @@ RTSPClient* rtspClient = ourRTSPClient::createNew(env, _rtspConfig); if (rtspClient == NULL) { - LOG_ERROR << "Failed to create a RTSP client for URL \"" << _rtspConfig.rtspURL.c_str() << "\": " << env.getResultMsg(); + LOG_ERROR << "Failed to create a RTSP client for URL \"" << _rtspConfig.rtspURL.c_str() << "\": " << env.getResultMsg() << std::endl; return; } @@ -231,25 +231,25 @@ if (resultCode != 0) { - LOG_WARN << *rtspClient << "Failed to get a SDP description: " << resultString; + LOG_WARN << *rtspClient << "Failed to get a SDP description: " << resultString << std::endl; delete[] resultString; break; } char* const sdpDescription = resultString; - LOG_INFO << *rtspClient << "Got a SDP description:\n" << sdpDescription; + LOG_INFO << *rtspClient << "Got a SDP description:\n" << sdpDescription << std::endl; // Create a media session object from this SDP description: scs.session = MediaSession::createNew(env, sdpDescription); delete[] sdpDescription; // because we don't need it anymore if (scs.session == NULL) { - LOG_ERROR << *rtspClient << "Failed to create a MediaSession object from the SDP description: " << env.getResultMsg(); + LOG_ERROR << *rtspClient << "Failed to create a MediaSession object from the SDP description: " << env.getResultMsg() << std::endl; break; } else if (!scs.session->hasSubsessions()) { - LOG_WARN << *rtspClient << "This session has no media subsessions (i.e., no \"m=\" lines)"; + LOG_WARN << *rtspClient << "This session has no media subsessions (i.e., no \"m=\" lines)" << std::endl; break; } @@ -276,17 +276,17 @@ { if (!scs.subsession->initiate()) { - LOG_ERROR << *rtspClient << "Failed to initiate the \"" << *scs.subsession << "\" subsession: " << env.getResultMsg(); + LOG_ERROR << *rtspClient << "Failed to initiate the \"" << *scs.subsession << "\" subsession: " << env.getResultMsg() << std::endl; setupNextSubsession(rtspClient); // give up on this subsession; go to the next one } else { - LOG_INFO << *rtspClient << "Initiated the \"" << *scs.subsession << "\" subsession ("; + LOG_INFO << *rtspClient << "Initiated the \"" << *scs.subsession << "\" subsession (" << std::endl; if (scs.subsession->rtcpIsMuxed()) - LOG_INFO << "client port " << scs.subsession->clientPortNum(); + LOG_INFO << "client port " << scs.subsession->clientPortNum() << std::endl; else - LOG_INFO << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum()+1; - LOG_INFO << ")"; + LOG_INFO << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum()+1 << std::endl; + LOG_INFO << ")" << std::endl; // Continue setting up this subsession, by sending a RTSP "SETUP" command: rtspClient->sendSetupCommand(*scs.subsession, continueAfterSETUP, False, REQUEST_STREAMING_OVER_TCP); @@ -316,20 +316,20 @@ if (resultCode != 0) { - LOG_ERROR << *rtspClient << "Failed to set up the \"" << *scs.subsession << "\" subsession: " << resultString; + LOG_ERROR << *rtspClient << "Failed to set up the \"" << *scs.subsession << "\" subsession: " << resultString << std::endl; break; } - LOG_INFO << *rtspClient << "Set up the \"" << *scs.subsession << "\" subsession ("; + LOG_INFO << *rtspClient << "Set up the \"" << *scs.subsession << "\" subsession (" << std::endl; if (scs.subsession->rtcpIsMuxed()) { - LOG_INFO << "client port " << scs.subsession->clientPortNum(); + LOG_INFO << "client port " << scs.subsession->clientPortNum() << std::endl; } else { - LOG_INFO << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum()+1; + LOG_INFO << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum()+1 << std::endl; } - LOG_INFO << ")"; + LOG_INFO << ")" << std::endl; // Having successfully setup the subsession, create a data sink for it, and call "startPlaying()" on it. // (This will prepare the data sink to receive data; the actual flow of data from the client won't start happening until later, @@ -341,11 +341,11 @@ if (scs.subsession->sink == NULL) { LOG_ERROR << *rtspClient << "Failed to create a data sink for the \"" << *scs.subsession - << "\" subsession: " << env.getResultMsg(); + << "\" subsession: " << env.getResultMsg() << std::endl; break; } - LOG_INFO << *rtspClient << "Created a data sink for the \"" << *scs.subsession << "\" subsession"; + LOG_INFO << *rtspClient << "Created a data sink for the \"" << *scs.subsession << "\" subsession" << std::endl; scs.subsession->miscPtr = rtspClient; // a hack to let subsession handler functions get the "RTSPClient" from the subsession scs.subsession->sink->startPlaying(*(scs.subsession->readSource()), subsessionAfterPlaying, scs.subsession); @@ -373,7 +373,7 @@ if (resultCode != 0) { - LOG_ERROR << *rtspClient << "Failed to start playing session: " << resultString; + LOG_ERROR << *rtspClient << "Failed to start playing session: " << resultString << std::endl; break; } @@ -389,12 +389,12 @@ scs.streamTimerTask = env.taskScheduler().scheduleDelayedTask(uSecsToDelay, (TaskFunc*)streamTimerHandler, rtspClient); } - LOG_INFO << *rtspClient << "Started playing session"; + LOG_INFO << *rtspClient << "Started playing session" << std::endl; if (scs.duration > 0) { - LOG_INFO << " (for up to " << scs.duration << " seconds)"; + LOG_INFO << " (for up to " << scs.duration << " seconds)" << std::endl; } - LOG_INFO << "..."; + LOG_INFO << "..." << std::endl; success = True; } @@ -438,7 +438,7 @@ RTSPClient* rtspClient = (RTSPClient*)subsession->miscPtr; UsageEnvironment& env = rtspClient->envir(); // alias - LOG_INFO << *rtspClient << "Received RTCP \"BYE\" on \"" << *subsession << "\" subsession"; + LOG_INFO << *rtspClient << "Received RTCP \"BYE\" on \"" << *subsession << "\" subsession" << std::endl; // Now act as if the subsession had closed: subsessionAfterPlaying(subsession); @@ -491,7 +491,7 @@ } } - LOG_NOTICE << *rtspClient << "Closing the stream."; + LOG_NOTICE << *rtspClient << "Closing the stream." << std::endl; Medium::close(rtspClient); // Note that this will also cause this stream's "StreamClientState" structure to get reclaimed. @@ -602,20 +602,20 @@ // We've just received a frame of data. (Optionally) print out information about it: #ifdef DEBUG_PRINT_EACH_RECEIVED_FRAME if (fStreamId != NULL) - LOG_DEBUG << "Stream \"" << fStreamId << "\"; "; - LOG_DEBUG << "\t" << fSubsession.mediumName() << "/" << fSubsession.codecName() << ":\tReceived " << frameSize << " bytes"; + LOG_DEBUG << "Stream \"" << fStreamId << "\"; " << std::endl; + LOG_DEBUG << "\t" << fSubsession.mediumName() << "/" << fSubsession.codecName() << ":\tReceived " << frameSize << " bytes" << std::endl; if (numTruncatedBytes > 0) - LOG_DEBUG << " (with " << numTruncatedBytes << " bytes truncated)"; + LOG_DEBUG << " (with " << numTruncatedBytes << " bytes truncated)" << std::endl; char uSecsStr[6+1]; // used to output the 'microseconds' part of the presentation time sprintf(uSecsStr, "%06u", (unsigned)presentationTime.tv_usec); - LOG_DEBUG << "\tPresentation time: " << (int)presentationTime.tv_sec << "." << uSecsStr; + LOG_DEBUG << "\tPresentation time: " << (int)presentationTime.tv_sec << "." << uSecsStr << std::endl; if (fSubsession.rtpSource() != NULL && !fSubsession.rtpSource()->hasBeenSynchronizedUsingRTCP()) { - LOG_DEBUG << "\tPTS not RTCP-synchronized"; // mark the debugging output to indicate that this presentation time is not RTCP-synchronized + LOG_DEBUG << "\tPTS not RTCP-synchronized" << std::endl; // mark the debugging output to indicate that this presentation time is not RTCP-synchronized } #ifdef DEBUG_PRINT_NPT - LOG_DEBUG << "\tNPT: " << fSubsession.getNormalPlayTime(presentationTime); + LOG_DEBUG << "\tNPT: " << fSubsession.getNormalPlayTime(presentationTime) << std::endl; #endif #endif diff --git a/RtspFace/logger.h b/RtspFace/logger.h index b0b0ffa..d541876 100644 --- a/RtspFace/logger.h +++ b/RtspFace/logger.h @@ -1,32 +1,18 @@ -/* --------------------------------------------------------------------------- -** This software is in the public domain, furnished "as is", without technical -** support, and with no warranty, express or implied, as to its usefulness for -** any purpose. -** -** logger.h -** -** -------------------------------------------------------------------------*/ - #ifndef LOGGER_H #define LOGGER_H +#include <Logger/src/logger.hpp> +#include <string.h> #include <unistd.h> -#include "log4cpp/Category.hh" -#include "log4cpp/FileAppender.hh" -#include "log4cpp/PatternLayout.hh" +#ifndef LOG_TAG +#define LOG_TAG "logger" +#endif -enum LoggerVerbose -{ - LV_ERROR, - LV_WARN, - LV_NOTICE, - LV_INFO, - LV_DEBUG -}; +extern Logger g_logger; -#define LOG(__level) log4cpp::Category::getRoot() << log4cpp::Priority::__level << __FILE__ << ":" << __LINE__ << "\t" -#define LOGP(__level, __format, arg...) log4cpp::Category::getRoot().log(log4cpp::Priority::__level, "%s:%d\t" __format, __FILE__, __LINE__, ##arg); +#define LOG(__level) g_logger << __level << __FILE__ << ":" << __LINE__ << "\t" +#define LOGP(__level, __format, arg...) { char msg[1024]; sprintf(msg, "%s:%d\t" __format, __FILE__, __LINE__, ##arg); g_logger << __level << msg << std::endl; } #define LOG_DEBUG LOG(DEBUG) // Debug message do not care in any production environment #define LOG_INFO LOG(INFO) // Not significant event but useful for deal with online problem @@ -34,33 +20,5 @@ #define LOG_WARN LOG(WARN) // Important event or input which will lead to errors #define LOG_ERROR LOG(ERROR) // Error message means program running in an abnormal (not expected) way -inline void initLogger(LoggerVerbose verbose) -{ - // initialize log4cpp - log4cpp::Category &log = log4cpp::Category::getRoot(); - log4cpp::Appender *app = new log4cpp::FileAppender("root", fileno(stdout)); - if (app) - { - log4cpp::PatternLayout *plt = new log4cpp::PatternLayout(); - if (plt) - { - plt->setConversionPattern("%d [%-6p] - %m%n"); - app->setLayout(plt); - } - log.addAppender(app); - } - switch (verbose) - { - case LV_DEBUG: log.setPriority(log4cpp::Priority::DEBUG); break; - case LV_INFO: log.setPriority(log4cpp::Priority::INFO); break; - case LV_NOTICE: log.setPriority(log4cpp::Priority::NOTICE); break; - case LV_WARN: log.setPriority(log4cpp::Priority::WARN); break; - case LV_ERROR: log.setPriority(log4cpp::Priority::ERROR); break; - default: log.setPriority(log4cpp::Priority::NOTICE); break; - - } - LOG_INFO << "level:" << log4cpp::Priority::getPriorityName(log.getPriority()); -} - #endif diff --git a/RtspFace/main.cpp b/RtspFace/main.cpp index e1d0cd3..bbedf4d 100644 --- a/RtspFace/main.cpp +++ b/RtspFace/main.cpp @@ -15,9 +15,11 @@ #include "logger.h" +Logger g_logger(stdout); + int main(int argc, char** argv) { - initLogger(LV_DEBUG); + g_logger.set_level(VERBOSE); PipeLine pipeLine; @@ -46,7 +48,7 @@ bool ret = rtspClient->init(&rtspConfig); if (!ret) { - LOG_ERROR << "rtspClient.init error"; + LOG_ERROR << "rtspClient.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -56,7 +58,7 @@ bool ret = h264Decoder->init(nullptr); if (!ret) { - LOG_ERROR << "PL_H264Decoder.init error"; + LOG_ERROR << "PL_H264Decoder.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -66,7 +68,7 @@ bool ret = avFrameYUV420->init(nullptr); if (!ret) { - LOG_ERROR << "PL_AVFrameYUV420.init error"; + LOG_ERROR << "PL_AVFrameYUV420.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -79,7 +81,7 @@ bool ret = ple->init(&config); if (!ret) { - LOG_ERROR << "PL_Scale.init error"; + LOG_ERROR << "PL_Scale.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -119,7 +121,7 @@ // bool ret = queue1->init(&config); // if (!ret) // { - // LOG_ERROR << "queue1.init error"; + // LOG_ERROR << "queue1.init error" << std::endl; // exit(EXIT_FAILURE); // } //} @@ -130,7 +132,7 @@ bool ret = h264Encoder->init(&config); if (!ret) { - LOG_ERROR << "PL_H264Encoder.init error"; + LOG_ERROR << "PL_H264Encoder.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -140,15 +142,15 @@ bool ret = rtspServer->init(nullptr); if (!ret) { - LOG_ERROR << "rtspServer.init error"; + LOG_ERROR << "rtspServer.init error" << std::endl; exit(EXIT_FAILURE); } } while(true) { - //LOG_ERROR << "begin pipe"; + //LOG_ERROR << "begin pipe" << std::endl; pipeLine.pipe(); - //LOG_ERROR << "end pipe"; + //LOG_ERROR << "end pipe" << std::endl; } } diff --git a/RtspFace/main_dump_st_face.cpp b/RtspFace/main_dump_st_face.cpp index 1285a81..eee3bf1 100644 --- a/RtspFace/main_dump_st_face.cpp +++ b/RtspFace/main_dump_st_face.cpp @@ -44,7 +44,7 @@ bool ret = rtspClient->init(&rtspConfig); if (!ret) { - LOG_ERROR << "rtspClient.init error"; + LOG_ERROR << "rtspClient.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -54,7 +54,7 @@ bool ret = h264Decoder->init(nullptr); if (!ret) { - LOG_ERROR << "PL_H264Decoder.init error"; + LOG_ERROR << "PL_H264Decoder.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -64,7 +64,7 @@ bool ret = avFrameYUV420->init(nullptr); if (!ret) { - LOG_ERROR << "PL_AVFrameYUV420.init error"; + LOG_ERROR << "PL_AVFrameYUV420.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -77,7 +77,7 @@ bool ret = ple->init(&config); if (!ret) { - LOG_ERROR << "PL_Scale.init error"; + LOG_ERROR << "PL_Scale.init error" << std::endl; exit(EXIT_FAILURE); } } @@ -92,7 +92,7 @@ while(true) { - //LOG_ERROR << "begin pipe"; + //LOG_ERROR << "begin pipe" << std::endl; PipeMaterial pm; if (pipeLine.pipe(&pm) == sensetimeFaceTrack); @@ -102,9 +102,9 @@ { PipeMaterial& facePM = ((PipeMaterial*)(pm.buffer))[1]; st_ff_vect_t& faceFeatures = *((st_ff_vect_t*)facePM.buffer); - LOG_NOTICE << "faceFeatures " << faceFeatures.size(); + LOG_NOTICE << "faceFeatures " << faceFeatures.size() << std::endl; } - //LOG_ERROR << "end pipe"; + //LOG_ERROR << "end pipe" << std::endl; } } diff --git a/RtspFace/main_face_daemon.cpp b/RtspFace/main_face_daemon.cpp index 2867f70..9058ee4 100644 --- a/RtspFace/main_face_daemon.cpp +++ b/RtspFace/main_face_daemon.cpp @@ -68,12 +68,12 @@ //PipeMaterial& facePM = ((PipeMaterial*)(lastPm.buffer))[1]; //st_ff_vect_t& faceFeatures = *((st_ff_vect_t*)facePM.buffer); - //LOG_NOTICE << "faceFeatures " << faceFeatures.size(); + //LOG_NOTICE << "faceFeatures " << faceFeatures.size() << std::endl; //#todo send result packet if (lastPm.buffer == nullptr || lastPm.type != PipeMaterial::PMT_BYTES || lastPm.buffSize != sizeof(SensetimeFaceDetectResult)) { - LOG_WARN << "pm not available"; + LOG_WARN << "pm not available" << std::endl; ev_send_status_packet(client, EVPStatus::EVPS_INTERNAL_ERROR); return false; } @@ -98,7 +98,7 @@ bool ev_proc_SensetimeFaceDetect(EVClientStub& client) { //#test send 01000B0000004142434445 - //LOG_DEBUG << "cmd=" << evpHeader->cmd << ", size=" << evpHeader->size << ", \t" << (char*)(evpHeader + sizeof(EVPHeader)); + //LOG_DEBUG << "cmd=" << evpHeader->cmd << ", size=" << evpHeader->size << ", \t" << (char*)(evpHeader + sizeof(EVPHeader)) << std::endl; //return true; FDP_Image* fdpImage = (FDP_Image*)(client.recvBuff + sizeof(EVPHeader)); @@ -106,7 +106,7 @@ FaceDB* _faceDB = g_faceAPIPool.get_free(fdpImage->school_id); if (_faceDB == nullptr) { - LOG_WARN << "can't get face db"; + LOG_WARN << "can't get face db" << std::endl; ev_send_status_packet(client, EVPStatus::EVPS_PARAMETER_ERROR); return false; } @@ -116,7 +116,7 @@ PipeLine* pipeLine = g_PipeLinePool.get_free(); if (pipeLine == nullptr) { - LOG_WARN << "can't get free pipeline"; + LOG_WARN << "can't get free pipeline" << std::endl; ev_send_status_packet(client, EVPStatus::EVPS_INTERNAL_ERROR); return false; } @@ -143,14 +143,14 @@ PipeLineElem* plElem = pipeLine->pipe(&pm); if (! pipeLine->check_pipe_complete(plElem)) { - LOG_WARN << "pipeline not complete"; + LOG_WARN << "pipeline not complete" << std::endl; ev_send_status_packet(client, EVPStatus::EVPS_INTERNAL_ERROR); return false; } if (!plElem->gain(pm)) { - LOG_WARN << "pipeline gain error"; + LOG_WARN << "pipeline gain error" << std::endl; ev_send_status_packet(client, EVPStatus::EVPS_INTERNAL_ERROR); return false; } @@ -166,7 +166,7 @@ EVPHeader* evpHeader = (EVPHeader*)client.recvBuff; if (evpHeader->size != client.recvBuffSize) { - LOG_WARN << "Truncated buffer " << (evpHeader->size - client.recvBuffSize) << " bytes"; + LOG_WARN << "Truncated buffer " << (evpHeader->size - client.recvBuffSize) << " bytes" << std::endl; return false; } @@ -176,7 +176,7 @@ return ev_proc_SensetimeFaceDetect(client); break; default: - LOG_WARN << "Unknown command"; + LOG_WARN << "Unknown command" << std::endl; ev_send_status_packet(client, EVPStatus::EVPS_PARAMETER_ERROR); return false; break; @@ -206,7 +206,7 @@ bool ret = ple->init(&config); if (!ret) { - LOG_ERROR << "ple init error"; + LOG_ERROR << "ple init error" << std::endl; exit(EXIT_FAILURE); } } @@ -220,7 +220,7 @@ bool ret = ple->init(&config); if (!ret) { - LOG_ERROR << "ple init error"; + LOG_ERROR << "ple init error" << std::endl; exit(EXIT_FAILURE); } } diff --git a/RtspFace/make.sh b/RtspFace/make.sh index f534195..1fa56b8 100644 --- a/RtspFace/make.sh +++ b/RtspFace/make.sh @@ -33,13 +33,12 @@ DLIB_INC="-I$DLIB_BASE" DLIB_LIB="-L$DLIB_BASE/build/dlib -ldlib" -LIBLOG4CPP_BASE=/opt/log4cpp/inst -LIBLOG4CPP_INC="-I$LIBLOG4CPP_BASE/include" -LIBLOG4CPP_LIB="-L$LIBLOG4CPP_BASE/lib -llog4cpp" +LOGGER_BASE=./Logger/src +LOGGER_OBJ="logger.o" # -O3 -CPPFLAGS+="-g -mavx -c -std=c++11 -pthread $LIVEMEDIA_INC $FFMPEG_INC $LIBBASE64_INC $LIBYUV_INC $SENSETIMEFACESDK_INC $LIBLOG4CPP_INC $DLIB_INC " -LDFLAGS+="-pthread -levent $LIVEMEDIA_LIB $FFMPEG_LIB $LIBBASE64_LIB $LIBYUV_LIB $LIBX264_LIB $SENSETIMEFACESDK_LIB $OPENCV_LIB $LIBLOG4CPP_LIB $DLIB_LIB " +CPPFLAGS+="-g -mavx -c -std=c++11 -pthread $LIVEMEDIA_INC $FFMPEG_INC $LIBBASE64_INC $LIBYUV_INC $SENSETIMEFACESDK_INC $LIBLOG4CPLUS_INC $DLIB_INC " +LDFLAGS+="-pthread -levent $LIVEMEDIA_LIB $FFMPEG_LIB $LIBBASE64_LIB $LIBYUV_LIB $LIBX264_LIB $SENSETIMEFACESDK_LIB $OPENCV_LIB $LIBLOG4CPLUS_LIB $DLIB_LIB " CFLAGS+="-D__STDC_CONSTANT_MACROS" @@ -56,6 +55,8 @@ g++ ev_server.cpp $CFLAGS $CPPFLAGS g++ PipeLine.cpp $CFLAGS $CPPFLAGS g++ PipeLinePool.cpp $CFLAGS $CPPFLAGS + +g++ $LOGGER_BASE/logger.cc $CFLAGS $CPPFLAGS g++ PL_RTSPClient.cpp $CFLAGS $CPPFLAGS g++ PL_RTSPServer.cpp $CFLAGS $CPPFLAGS @@ -83,6 +84,7 @@ g++ -g -std=c++11 \ main.o PipeLine.o PipeLinePool.o \ + $LOGGER_OBJ \ ev_server.o \ PL_RTSPClient.o PL_H264Decoder.o PL_H264Encoder.o PL_AVFrameYUV420.o PL_AVFrameBGRA.o PL_Queue.o PL_Scale.o PL_Fork.o PL_Payer.o PL_Gainer.o \ PL_SensetimeFaceTrack.o PL_SensetimeFaceDetect.o \ @@ -91,6 +93,6 @@ FaceDBPool.o faceAPI.o \ $LDFLAGS -o rtsp_face -#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBX264_BASE/lib:$FFMPEG_BASE/lib:$SENSETIMEFACESDK_BASE/libs/linux-x86_64:$LIBLOG4CPP_BASE/lib:$DLIB_BASE/build/dlib +#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBX264_BASE/lib:$FFMPEG_BASE/lib:$SENSETIMEFACESDK_BASE/libs/linux-x86_64:$LOGGER_BASE/lib64:$DLIB_BASE/build/dlib #./rtsp_face rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream #rtsp://admin:a1234567@192.168.1.68:554/h264/ch1/main/av_stream -- Gitblit v1.8.0