自定义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); requests.push_back(request->request);
} }
if (m_params.customHdr) if (m_params.customHdr && burstCaptures > 1)
{ {
int32_t hdrStep = m_params.hdrStep; int32_t hdrStep = m_params.hdrStep;
if (hdrStep == 0) if (hdrStep == 0)
@ -1824,19 +1824,29 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
val = {0}; val = {0};
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val); 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); XYLOG(XYLOG_SEVERITY_INFO, "HDR: Base Exp=%lld ISO=%d", exTime / 1000, sensitivity);
if (exTime != -1 && sensitivity > 0) if (exTime != -1 && sensitivity > 0)
{ {
uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF; 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[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)
{ {
ACaptureRequest_setEntry_u8(requests[idx], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff); newSensitivity = m_params.sensitivity;
int64_t expt = (idx == 0) ? exTime : (exTime * (hdrStep + idx)); }
ACaptureRequest_setEntry_i64(requests[idx], ACAMERA_SENSOR_EXPOSURE_TIME, 1, &expt); if (newSensitivity < sensitivityRange.min_)
ACaptureRequest_setEntry_i32(requests[idx], ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); {
sensitivity = sensitivityRange.min_; newSensitivity = sensitivityRange.min_;
}
ACaptureRequest_setEntry_i32(requests[burstCaptures - 1], ACAMERA_SENSOR_SENSITIVITY, 1, &newSensitivity);
} }
} }
} }

Loading…
Cancel
Save