#include "CameraWrapper.h" #include #include CameraWrapper::~CameraWrapper() { stop(); delete pipeLine; } bool CameraWrapper::start() { LOG_INFO << "CameraWrapper::start" << LOG_ENDL; running = true; int ret = pthread_create(&live_daemon_thid, NULL, CameraWrapper::live_daemon_thd, this); if(ret != 0) { LOGP(ERROR, "pthread_create: %s/n", strerror(ret)); running = false; return false; } return true; } void CameraWrapper::stop() { LOG_INFO << "CameraWrapper::stop" << LOG_ENDL; if (!running) return; running = false; pthread_join(live_daemon_thid, NULL); } bool CameraWrapper::initPl() { PL_RTSPClient* rtspClient = (PL_RTSPClient*)pipeLine->push_elem("PL_RTSPClient"); bool ret = rtspClient->init(&rtspConfig); if (!ret) { LOG_ERROR << "rtspClient.init error" << LOG_ENDL; return false; } PL_AndroidMediaCodecDecoder* amcDecoder = (PL_AndroidMediaCodecDecoder*)pipeLine->push_elem("PL_AndroidMediaCodecDecoder"); ret = amcDecoder->init(&amcdConfig); if (!ret) { LOG_ERROR << "amcDecoder.init error" << LOG_ENDL; return false; } #ifdef USE_ST_SDK PL_SensetimeFaceTrack* sfTrack = (PL_SensetimeFaceTrack*)pipeLine->push_elem("PL_SensetimeFaceTrack"); ret = sfTrack->init(&sftConfig); if (!ret) { LOG_ERROR << "sfTrack.init error" << LOG_ENDL; return false; } #endif return true; } /*static*/ void* CameraWrapper::live_daemon_thd(void* arg) { LOG_INFO << "CameraWrapper::live_daemon_thd start" << LOG_ENDL; CameraWrapper& cameraWrapper = *(CameraWrapper*)arg; while(cameraWrapper.running) { PipeLineElem* last = cameraWrapper.pipeLine->pipe(); bool ret = cameraWrapper.pipeLine->check_pipe_complete(last); LOG_DEBUG << "pipe ret=" << ret << LOG_ENDL; if (!ret) continue; if (cameraWrapper.faceCacheLocked) continue; #ifdef USE_ST_SDK PipeMaterial pm; ret = last->gain(pm); if (!ret) continue; int faceCount = cameraWrapper.faceCache.cachePm(pm); if (faceCount != 0 && cameraWrapper.faceCallback != 0) { // #todo jni thread may not able to invoke java callback //env->CallVoidMethod(obj, callback, cameraIdx , faceCount); } #endif } LOG_INFO << "CameraWrapper::live_daemon_thd stop, ret=" << LOG_ENDL; } void CameraWrapper::lockFace() { faceCacheLocked = true; } void CameraWrapper::releaseFace() { faceCacheLocked = false; }