自定义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[idx], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff); ACaptureRequest_setEntry_u8(requests[burstCaptures - 1], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff);
int64_t expt = (idx == 0) ? exTime : (exTime * (hdrStep + idx)); // int64_t expt = (idx == 0) ? exTime : (exTime * (hdrStep + idx));
ACaptureRequest_setEntry_i64(requests[idx], ACAMERA_SENSOR_EXPOSURE_TIME, 1, &expt); int64_t expt = exTime + ((exTime * hdrStep) >> 1);
ACaptureRequest_setEntry_i32(requests[idx], ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); ACaptureRequest_setEntry_i64(requests[burstCaptures - 1], ACAMERA_SENSOR_EXPOSURE_TIME, 1, &expt);
sensitivity = sensitivityRange.min_;
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