From eb96c9c6c791c267f854d568b72597c36ce70ae5 Mon Sep 17 00:00:00 2001 From: Matthew Date: Tue, 15 Apr 2025 22:30:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=A2=84=E8=A7=88=E5=88=B0?= =?UTF-8?q?=E9=9D=99=E6=80=81=E6=8A=93=E6=8B=8D=E7=9A=84=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/camera2/ndkcamera.cpp | 32 ++++++++++++++++++++++---- app/src/main/cpp/camera2/ndkcamera.h | 1 + 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 1057bd90..b81747ec 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -282,6 +282,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA mLdr = ~0; mFinalLdr = 0; mFinalOutputFormat = AIMAGE_FORMAT_YUV_420_888; + m_delayFrames = 0; } NdkCamera::~NdkCamera() @@ -813,7 +814,8 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest) uint8_t ctrlMode = ACAMERA_CONTROL_MODE_AUTO; status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_MODE, 1, &ctrlMode); - uint8_t captureIntent = GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate); + // uint8_t captureIntent = GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate); + uint8_t captureIntent = ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW; status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent); uint8_t flashMode = ACAMERA_FLASH_MODE_OFF; @@ -1468,6 +1470,29 @@ void NdkCamera::onCaptureProgressed(ACameraCaptureSession* session, ACaptureRequ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result) { + camera_status_t status = ACAMERA_ERROR_BASE; + m_delayFrames++; + + if (m_delayFrames <= 4) + { + if (m_delayFrames == 4) + { + uint8_t captureIntent = GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate); + if (captureIntent != ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW) + { + status = ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent); + + if (m_params.burstRawCapture == 2 || m_params.burstRawCapture == 3) + { + int32_t stillCaptureHint = 1; + status = ACaptureRequest_setEntry_i32(request, MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING, 1, &stillCaptureHint); + } + } + mCaptureTriggered = true; + } + return; + } + m_locker.lock(); int64_t minTs = m_minTimestamp; m_locker.unlock(); @@ -1488,7 +1513,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque CaptureRequest* pCaptureRequest = reinterpret_cast(context); bool readyForCapture = true; - camera_status_t status = ACAMERA_ERROR_BASE; + uint64_t ts = GetMicroTimeStamp(); uint8_t aeState = ACAMERA_CONTROL_AE_STATE_INACTIVE; @@ -1688,7 +1713,6 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque } #endif - mCaptureTriggered = true; } } @@ -2264,6 +2288,4 @@ void NdkCamera::SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* req ALOGE("Failed to set MTK_CONTROL_AE_EXPOSURE_COMPENSATION, status: %d", status); } } - - } diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index fb1aaa8a..6086f4b5 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -246,6 +246,7 @@ protected: CAPTURE_RESULT mResult; uint64_t m_startTime; + uint64_t m_delayFrames; protected: