diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index ec9c468e..5108a00b 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -1781,35 +1781,44 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< std::this_thread::sleep_for(std::chrono::seconds(5)); } time_t ts = time(NULL); - if(!pThis->GetPTZSensorsStatus() && !pThis->GetCameraStatus()) - { - pThis->OpenPTZSensors(localPhotoInfo.selfTestingTime); - } + + pThis->OpenPTZSensors(localPhotoInfo.selfTestingTime); + CameraPhotoCmd(ts, localPhotoInfo.channel, 0, localPhotoInfo.resolution, 0, param.serfile, param.baud, param.addr); XYLOG(XYLOG_SEVERITY_INFO, "Taking photo over"); + pThis->ClosePTZSensors(localPhotoInfo.closeDelayTime); + GpioControl::setCam3V3Enable(false, localPhotoInfo.closeDelayTime); + + time_t takingTime = time(NULL); + if (localPhotoInfo.remedy != 0) + { + if ((takingTime - localPhotoInfo.scheduleTime) > 30) + { + takingTime = localPhotoInfo.scheduleTime + localPhotoInfo.channel * 2; + } + } IMAGE_DEF photo = { 0 }; std::vector objects; GetImage(0, &photo); - if(photo.state == 5){ + if(photo.state == 5) + { XYLOG(XYLOG_SEVERITY_INFO,"Get Serials Photo, PhotoID = %s", photo.photoname); - + localPhotoInfo.photoTime = takingTime; cv::Mat img = cv::imread(photo.photoname, cv::IMREAD_COLOR); if (!img.empty()) { int result = std::remove(photo.photoname); - pThis->TakePhotoCb(1, localPhotoInfo, "", photo.phototime - 28800, objects); + pThis->TakePhotoCb(1, localPhotoInfo, "", takingTime, objects); pThis->PostProcessPhoto(localPhotoInfo, osds, path, "", img); } }else { XYLOG(XYLOG_SEVERITY_WARNING,"Get Serials Photo Failed"); - pThis->TakePhotoCb(0, localPhotoInfo, path, photo.phototime - 28800, objects); + pThis->TakePhotoCb(0, localPhotoInfo, path, takingTime, objects); } // pThis->TakePTZPhotoCb(3, localPhotoInfo); - pThis->ClosePTZSensors(localPhotoInfo.closeDelayTime); - GpioControl::setCam3V3Enable(false, localPhotoInfo.closeDelayTime); pThis->ReleaseWakelock(wid_serial); }); @@ -1900,17 +1909,17 @@ bool CPhoneDevice::OpenPTZSensors(uint32_t sec) { uint64_t wid = RequestWakelock(0); unsigned long long time_now = GetMicroTimeStamp(); - if(time_now < localDelayTime-1000) { std::lock_guard lock(m_cameraLocker); - m_sensorsStatus = true; - m_cameraStatus = true; - OpenSensors(MAIN_POWER_OPEN); - OpenSensors(CAMERA_SENSOR_OPEN); - } - { - std::lock_guard lock(m_cameraLocker); -// std::unique_lock lock(m_cameraLocker); + if(time_now < localDelayTime-1000) + { + std::lock_guard lock(m_cameraLocker); + m_sensorsStatus = true; + m_cameraStatus = true; + OpenSensors(MAIN_POWER_OPEN); + OpenSensors(CAMERA_SENSOR_OPEN); + } + if (!m_cameraStatus && !m_sensorsStatus) { m_sensorsStatus = true;