From c6eee571158bf79e5d07f1f2a15ea9d85f0d1d93 Mon Sep 17 00:00:00 2001 From: "XI.CHEN" Date: Tue, 26 Nov 2024 17:31:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=8D=E7=85=A7=E5=A2=9E=E5=8A=A0=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E9=A2=84=E7=BD=AE=E4=BD=8D=EF=BC=8C=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E5=85=B3=E7=94=B5=E6=BA=90=E4=B8=8D=E7=AD=89=E5=BE=85=E8=87=AA?= =?UTF-8?q?=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/PhoneDevice.cpp | 57 ++++++++++++++++++++++++++------ app/src/main/cpp/PhoneDevice.h | 1 + 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index a5351aa0..cf8c3e3f 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -441,6 +441,7 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPa m_cameraStatus = false; m_sensorsStatus = false; m_lastTime = 0; + m_shouldStopWaiting = false; RegisterHandlerForSignal(SIGUSR2); @@ -1690,9 +1691,11 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< } else if (mPhotoInfo.mediaType == 0 && (mPhotoInfo.cameraType == CAM_TYPE_SERIAL)) { - // if (photoInfo.mediaType == 0) { - // CameraPhotoCmd(time(NULL), channel, MOVE_PRESETNO, 0, type); - // std::this_thread::sleep_for(std::chrono::seconds(2)); + if (photoInfo.preset != 0 && photoInfo.preset != 0xFF) + { + CameraPhotoCmd(time(NULL), photoInfo.channel, MOVE_PRESETNO, 0, photoInfo.preset); + std::this_thread::sleep_for(std::chrono::seconds(2)); + } time_t ts = time(NULL); CameraPhotoCmd(ts, photoInfo.channel, 0, 6, 0); TakePTZPhotoCb(3, photoInfo); @@ -1783,7 +1786,9 @@ bool CPhoneDevice::OpenPTZSensors(int sec) { { std::lock_guard lock(m_cameraLocker); - if (!m_cameraStatus && !m_sensorsStatus) { +// std::unique_lock lock(m_cameraLocker); + if (!m_cameraStatus && !m_sensorsStatus) + { m_sensorsStatus = true; OpenSensors(MAIN_POWER_OPEN); OpenSensors(CAMERA_SENSOR_OPEN); @@ -1792,25 +1797,55 @@ bool CPhoneDevice::OpenPTZSensors(int sec) } if(m_sensorsStatus && !m_cameraStatus) - std::this_thread::sleep_for(std::chrono::seconds(sec)); + { + auto start = std::chrono::steady_clock::now(); + while (std::chrono::steady_clock::now() - start < std::chrono::seconds(sec)) + { + if (m_shouldStopWaiting.load()) + { + CloseSensors(CAMERA_SENSOR_OPEN); + CloseSensors(MAIN_POWER_OPEN); + m_cameraStatus = false; + m_sensorsStatus = false; + m_shouldStopWaiting.store(false); + return false; + } + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + } + } + +// if(m_sensorsStatus && !m_cameraStatus) +// std::this_thread::sleep_for(std::chrono::seconds(sec)); { std::lock_guard lock(m_cameraLocker); - if (!m_cameraStatus && m_sensorsStatus) { +// std::unique_lock lock(m_cameraLocker); + if (!m_cameraStatus && m_sensorsStatus) + { m_cameraStatus = true; } } return m_cameraStatus; + + } bool CPhoneDevice::ClosePTZSensors() { - std::lock_guard lock(m_cameraLocker); - CloseSensors(CAMERA_SENSOR_OPEN); - CloseSensors(MAIN_POWER_OPEN); - m_cameraStatus = false; - m_sensorsStatus = false; + if(m_sensorsStatus && !m_cameraStatus) + { + m_shouldStopWaiting.store(true); + } + else + { + std::lock_guard lock(m_cameraLocker); +// std::unique_lock lock(m_cameraLocker); + CloseSensors(CAMERA_SENSOR_OPEN); + CloseSensors(MAIN_POWER_OPEN); + m_cameraStatus = false; + m_sensorsStatus = false; + } return true; } diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index f24ca7f1..367a24fc 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -396,6 +396,7 @@ protected: bool m_cameraStatus; bool m_sensorsStatus; time_t m_lastTime; + std::atomic m_shouldStopWaiting; };