From 476ebbd5e075e67d0171c72c869a8b688fb5f1dc Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 17 Apr 2025 15:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=BA=E5=88=B6=E8=B5=B0=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E7=9A=84=E8=8C=83=E5=9B=B4=E6=94=B9=E6=88=90?= =?UTF-8?q?200-400?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/camera2/ndkcamera.cpp | 29 ++++++++++---------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 96862ce4..38efec3b 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -805,12 +805,14 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest, int32 // request->templateId = (ACameraDevice_request_template)m_params.requestTemplate; uint8_t captureIntent = isPreviewRequest ? ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW : GetCaptureIntent((ACameraDevice_request_template)m_params.requestTemplate); - if (!isPreviewRequest && sensitivity >= 200 && sensitivity <= 300 && (m_params.burstRawCapture == 2 || m_params.burstRawCapture == 3)) + bool forceToPreview = false; + if (!isPreviewRequest && sensitivity >= 200 && sensitivity <= 400 && (m_params.burstRawCapture == 2 || m_params.burstRawCapture == 3)) { if (request->templateId == TEMPLATE_STILL_CAPTURE) { request->templateId = TEMPLATE_PREVIEW; captureIntent = ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW; + forceToPreview = true; } } @@ -1002,7 +1004,7 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest, int32 // status = ACaptureSessionOutput_create(request->imageWindow, &request->sessionOutput); // status = ACaptureSessionOutputContainer_add(capture_session_output_container, request->sessionOutput); - if (!isPreviewRequest) + if (!isPreviewRequest && !forceToPreview) { #if 0 uint8_t colorMode = ACAMERA_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX; @@ -1861,10 +1863,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque capture_session_capture_cb.onCaptureSequenceAborted = onCaptureSequenceAborted; capture_session_capture_cb.onCaptureBufferLost = 0; - status = ACameraCaptureSession_stopRepeating(capture_session); - std::this_thread::sleep_for(std::chrono::milliseconds(50)); - - int numberOfRequests = requests.size(); + int numberOfRequests = requests.size(); status = ACameraCaptureSession_capture(capture_session, &capture_session_capture_cb, numberOfRequests, &requests[0], &sequenceId); AASSERT(status == ACAMERA_OK, "Failed to call ACameraCaptureSession_capture, status=%d", status); @@ -2486,7 +2485,7 @@ void NdkCamera::SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* req ALOGI("MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES: 0x%x\n", entry.data.i32[i]); } } -#endif + ACameraMetadata_const_entry entry = { 0 }; status = ACameraMetadata_getConstEntry(characteristics, MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES, &entry); if (status == ACAMERA_OK) @@ -2496,20 +2495,14 @@ void NdkCamera::SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* req ALOGI("MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES: 0x%x\n", entry.data.i32[i]); } } - - uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_HIGH_QUALITY; - status = ACaptureRequest_setEntry_u8(request, ACAMERA_NOISE_REDUCTION_MODE, 1, &nrMode); - if (status != ACAMERA_OK) - { - ALOGE("Failed to set ACAMERA_NOISE_REDUCTION_MODE, status: %d", status); - } +#endif // 2. 设置 MediaTek 特定的 MFNR 参数 // 使用 vendor tag 描述符 // int32_t mfbMode = MTK_MFNR_FEATURE_MFB_AUTO; // 1 Enable MFNR int32_t mfbMode = ais ? 2 : 1; // 1 Enable MFNR uint8_t aeMode = MTK_CONTROL_AE_MODE_ON; - status = ACaptureRequest_setEntry_u8(request, MTK_CONTROL_AE_MODE, 1, &aeMode); + // status = ACaptureRequest_setEntry_u8(request, MTK_CONTROL_AE_MODE, 1, &aeMode); // int32_t mfbMode = ais ? 2 : 1; // 1 Enable MFNR status = ACaptureRequest_setEntry_i32(request, MTK_MFNR_FEATURE_MFB_MODE, 1, &mfbMode); @@ -2518,10 +2511,10 @@ void NdkCamera::SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* req ALOGE("Failed to set MTK_MFNR_FEATURE_MFB_MODE, status: %d", status); } - int32_t ispTuning = (mfbMode != 0) ? MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING_MFNR : MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING_DEFAULT_NONE; - status = ACaptureRequest_setEntry_i32(request, MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING, 1, &ispTuning); + // int32_t ispTuning = (mfbMode != 0) ? MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING_MFNR : MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING_DEFAULT_NONE; + // status = ACaptureRequest_setEntry_i32(request, MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING, 1, &ispTuning); - uint8_t reqRemosaicEnable = (mfbMode != 0) ? 1 : 0; + uint8_t reqRemosaicEnable = 1; status = ACaptureRequest_setEntry_u8(request, MTK_HAL_REQUEST_REMOSAIC_ENABLE, 1, &reqRemosaicEnable); if (status != ACAMERA_OK) {