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); } } }