From 410ded43f1753d791d44b3d84c02f200ef08f4ba Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 6 Apr 2025 17:04:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89HDR=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=94=B9=E4=B8=BA=E6=89=8B=E5=8A=A8=E9=95=BF=E6=9B=9D?= =?UTF-8?q?=E5=85=89=E5=A2=9E=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/camera2/ndkcamera.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index a2967768..d0fac699 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -1810,7 +1810,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque requests.push_back(request->request); } - if (m_params.customHdr) + if (m_params.customHdr && burstCaptures > 1) { int32_t hdrStep = m_params.hdrStep; if (hdrStep == 0) @@ -1824,19 +1824,29 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque val = {0}; status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val); - int sensitivity = (status == ACAMERA_OK) ? *(val.data.i32) : 0; + int32_t sensitivity = (status == ACAMERA_OK) ? *(val.data.i32) : 0; XYLOG(XYLOG_SEVERITY_INFO, "HDR: Base Exp=%lld ISO=%d", exTime / 1000, sensitivity); if (exTime != -1 && sensitivity > 0) { uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF; - for (int idx = 0; idx < burstCaptures; idx++) + // for (int idx = 0; idx < burstCaptures; idx++) { - ACaptureRequest_setEntry_u8(requests[idx], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff); - int64_t expt = (idx == 0) ? exTime : (exTime * (hdrStep + idx)); - ACaptureRequest_setEntry_i64(requests[idx], ACAMERA_SENSOR_EXPOSURE_TIME, 1, &expt); - ACaptureRequest_setEntry_i32(requests[idx], ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); - sensitivity = sensitivityRange.min_; + ACaptureRequest_setEntry_u8(requests[burstCaptures - 1], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff); + // int64_t expt = (idx == 0) ? exTime : (exTime * (hdrStep + idx)); + int64_t expt = exTime + ((exTime * hdrStep) >> 1); + ACaptureRequest_setEntry_i64(requests[burstCaptures - 1], ACAMERA_SENSOR_EXPOSURE_TIME, 1, &expt); + + int32_t newSensitivity = sensitivity - ((sensitivity * hdrStep) >> 2); + if (m_params.sensitivity != 0) + { + newSensitivity = m_params.sensitivity; + } + if (newSensitivity < sensitivityRange.min_) + { + newSensitivity = sensitivityRange.min_; + } + ACaptureRequest_setEntry_i32(requests[burstCaptures - 1], ACAMERA_SENSOR_SENSITIVITY, 1, &newSensitivity); } } }