优化自动对焦和自动曝光的处理逻辑

serial
BlueMatthew 1 year ago
parent 8aadbefdf1
commit c845360485

@ -871,47 +871,52 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
// ACameraMetadata_getConstEntry(result, )
ACameraMetadata_const_entry val = { 0 };
camera_status_t status = ACAMERA_ERROR_BASE;
uint8_t afState = 0;
mResult.afState = ACAMERA_CONTROL_AF_STATE_INACTIVE;
val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_STATE, &val);
mResult.aeState = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AE_STATE_INACTIVE;
if (afSupported && (m_params.autoFocus != 0))
{
val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
mResult.afState = *(val.data.u8);
}
if (m_imagesCaptured == ~0)
{
if (m_params.autoExposure != 0)
unsigned long long ts = GetMicroTimeStamp();
if (ts - m_startTime >= m_params.focusTimeout)
{
val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_STATE, &val);
mResult.aeState = (status == ACAMERA_OK) ? val.data.u8[0] : ACAMERA_CONTROL_AE_STATE_INACTIVE;
if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_PRECAPTURE)
{
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
return;
}
ALOGD("onCaptureCompleted Timeout for AF/AE And will Capture AFS=%u AES=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState);
m_imagesCaptured = 0;
}
if (afSupported && (m_params.autoFocus != 0))
else
{
val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
afState = *(val.data.u8);
ALOGD("onCaptureCompleted AF_STATE=%u", (unsigned int)afState);
if (afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_FOCUSED || afState == ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED)
// if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE)
if (m_params.autoExposure != 0)
{
m_imagesCaptured = 0;
if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_SEARCHING || mResult.aeState == ACAMERA_CONTROL_AE_STATE_PRECAPTURE)
{
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
return;
}
}
else
if (afSupported && (m_params.autoFocus != 0))
{
unsigned long long ts = GetMicroTimeStamp();
if (ts - m_startTime >= m_params.focusTimeout)
ALOGD("onCaptureCompleted AF_STATE=%u", (unsigned int)mResult.afState);
if (mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_FOCUSED || mResult.afState == ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED)
// if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE)
{
ALOGD("onCaptureCompleted Timeout for AutoFocus And will Capture AF_STATE=%u", (unsigned int)afState);
m_imagesCaptured = 0;
}
}
}
else
{
m_imagesCaptured = 0;
else
{
m_imagesCaptured = 0;
}
}
}
@ -920,8 +925,6 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
return;
}
val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_EXPOSURE_TIME, &val);
int64_t exTime = (status == ACAMERA_OK) ? val.data.i64[0] : -1;
@ -949,7 +952,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
mResult.afState = *(val.data.u8);
ALOGD("onCaptureCompleted AF_STATE=%u", (unsigned int)afState);
ALOGD("onCaptureCompleted AFS=%u", (unsigned int)mResult.afState);
val = {0};
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val);

Loading…
Cancel
Save