diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 4f438f60..d7d0d95d 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -234,6 +234,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() @@ -770,7 +771,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; @@ -1416,6 +1418,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(); @@ -1436,7 +1461,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; @@ -1626,7 +1651,6 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque } #endif - mCaptureTriggered = true; } } @@ -2202,6 +2226,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 99cfd891..4d9b0390 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: