From 8510a53bb7ef7523e211355c8d4d85881f8eb31c Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 21 Jul 2024 09:45:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8B=8D=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 测光如果50次还不能锁定,则取消重新开始测光 --- app/src/main/cpp/camera2/ndkcamera.cpp | 48 ++++++++++++++++++-------- app/src/main/cpp/camera2/ndkcamera.h | 1 + 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 38f2ddc0..14a55359 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -124,6 +124,8 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA sceneModeSupported = false; + numberOfPrecaptures = 0; + activeArraySize[0] = 0; activeArraySize[1] = 0; @@ -625,7 +627,7 @@ int NdkCamera::open(const std::string& cameraId) { // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); trig = ACAMERA_CONTROL_AF_TRIGGER_START; - // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); } if (status == ACAMERA_OK) { @@ -641,13 +643,13 @@ int NdkCamera::open(const std::string& cameraId) { // std::this_thread::sleep_for(std::chrono::milliseconds(128)); + if (m_params.sceneMode != 0) { - if (m_params.sceneMode != 0) - { - uint8_t sceneMode = m_params.sceneMode; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); - } + uint8_t sceneMode = m_params.sceneMode; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); + } + { if (m_params.autoExposure) { uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON; @@ -686,13 +688,6 @@ int NdkCamera::open(const std::string& cameraId) { } } - uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - if (status == ACAMERA_OK) - { - m_imagesCaptured = ~0; - } - if (aeLockAvailable) { uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON; @@ -705,6 +700,16 @@ int NdkCamera::open(const std::string& cameraId) { { XYLOG(XYLOG_SEVERITY_DEBUG, "AE_Lock Not Supported"); } + + uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); + XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d", (int)status); + if (status == ACAMERA_OK) + { + m_imagesCaptured = ~0; + } + + // ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff); } else @@ -1241,11 +1246,26 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque if (m_params.autoExposure != 0) { + if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_SEARCHING) + { + numberOfPrecaptures ++; + if (numberOfPrecaptures > 50) + { + uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); + + aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); + + XYLOG(XYLOG_SEVERITY_WARNING, "Retrigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState); + numberOfPrecaptures = 0; + } + } if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_PRECAPTURE) { uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - XYLOG(XYLOG_SEVERITY_DEBUG, "PreCapture AES=%u", (unsigned int)mResult.aeState); + XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState); } } diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index d4fef490..40841ea4 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -155,6 +155,7 @@ protected: bool aeLockAvailable; bool awbLockAvailable; + uint64_t numberOfPrecaptures; bool lightDetected; // int64_t exposureTime_;