自定义HDR实现改为手动长曝光增亮

onereq
Matthew 2 months ago
parent 1d92d624f8
commit 410ded43f1

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

Loading…
Cancel
Save