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

serial
BlueMatthew 1 year ago
parent 8aadbefdf1
commit c845360485

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

Loading…
Cancel
Save