等待锁定分开控制

hdrplus
Matthew 11 months ago
parent 1a4c6ace04
commit e6280af46b

@ -125,6 +125,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
sceneModeSupported = false; sceneModeSupported = false;
numberOfPrecaptures = 0; numberOfPrecaptures = 0;
m_precaptureStartTime = 0;
activeArraySize[0] = 0; activeArraySize[0] = 0;
activeArraySize[1] = 0; activeArraySize[1] = 0;
@ -623,11 +624,11 @@ int NdkCamera::open(const std::string& cameraId) {
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO; // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_MODE, 1, &afMode); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_MODE, 1, &afMode);
uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL; // uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL;
// status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
trig = ACAMERA_CONTROL_AF_TRIGGER_START; // trig = ACAMERA_CONTROL_AF_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
} }
if (status == ACAMERA_OK) if (status == ACAMERA_OK)
{ {
@ -704,6 +705,7 @@ int NdkCamera::open(const std::string& cameraId) {
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d", (int)status); XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d", (int)status);
m_precaptureStartTime = m_startTime;
if (status == ACAMERA_OK) if (status == ACAMERA_OK)
{ {
m_imagesCaptured = ~0; m_imagesCaptured = ~0;
@ -806,6 +808,8 @@ int NdkCamera::open(const std::string& cameraId) {
} }
m_startTime = GetMicroTimeStamp(); m_startTime = GetMicroTimeStamp();
m_precaptureStartTime = m_startTime;
} }
return status == ACAMERA_OK ? 0 : 1; return status == ACAMERA_OK ? 0 : 1;
@ -1242,6 +1246,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AWB_MODE, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AWB_MODE, &val);
mResult.awbMode = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AWB_MODE_OFF; mResult.awbMode = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AWB_MODE_OFF;
unsigned long long ts = GetMicroTimeStamp();
XYLOG(XYLOG_SEVERITY_DEBUG, "3ASTATE: AES=%u AWBS=%u AFS=%u", (uint32_t)mResult.aeState, (uint32_t)mResult.awbState, (uint32_t)mResult.afState); XYLOG(XYLOG_SEVERITY_DEBUG, "3ASTATE: AES=%u AWBS=%u AFS=%u", (uint32_t)mResult.aeState, (uint32_t)mResult.awbState, (uint32_t)mResult.afState);
if (m_params.autoExposure != 0) if (m_params.autoExposure != 0)
@ -1249,7 +1254,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_SEARCHING) if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_SEARCHING)
{ {
numberOfPrecaptures ++; numberOfPrecaptures ++;
if (numberOfPrecaptures > 50) if (numberOfPrecaptures > 8 && ((ts - m_precaptureStartTime) > 2000))
{ {
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL; uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
@ -1259,11 +1264,13 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
XYLOG(XYLOG_SEVERITY_WARNING, "Retrigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState); XYLOG(XYLOG_SEVERITY_WARNING, "Retrigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState);
numberOfPrecaptures = 0; numberOfPrecaptures = 0;
m_precaptureStartTime = ts;
} }
} }
else else
{ {
numberOfPrecaptures = 0; numberOfPrecaptures = 0;
m_precaptureStartTime = ts;
} }
if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_PRECAPTURE) if (mResult.aeState == ACAMERA_CONTROL_AE_STATE_PRECAPTURE)
{ {
@ -1273,6 +1280,9 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState); XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState);
numberOfPrecaptures = 0;
m_precaptureStartTime = ts;
} }
} }
@ -1297,7 +1307,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
if (m_imagesCaptured == ~0) if (m_imagesCaptured == ~0)
{ {
unsigned long long ts = GetMicroTimeStamp();
if (ts - m_startTime >= m_params.focusTimeout * 2) if (ts - m_startTime >= m_params.focusTimeout * 2)
{ {
XYLOG(XYLOG_SEVERITY_WARNING, "Prepare Capture Timeout for 3A And will Capture AFS=%u AES=%u AWBS=%u Time=%u", XYLOG(XYLOG_SEVERITY_WARNING, "Prepare Capture Timeout for 3A And will Capture AFS=%u AES=%u AWBS=%u Time=%u",
@ -1308,7 +1318,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
{ {
if (awbMode == ACAMERA_CONTROL_AWB_MODE_AUTO) if (awbMode == ACAMERA_CONTROL_AWB_MODE_AUTO)
{ {
if (awbLockAvailable && m_params.wait3ALocked) if (awbLockAvailable && (m_params.wait3ALocked & WAIT_AWB_LOCKED))
{ {
if (mResult.awbState != ACAMERA_CONTROL_AWB_STATE_LOCKED) if (mResult.awbState != ACAMERA_CONTROL_AWB_STATE_LOCKED)
{ {
@ -1334,7 +1344,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
if (m_params.autoExposure != 0) if (m_params.autoExposure != 0)
{ {
if (aeLockAvailable && m_params.wait3ALocked) if (aeLockAvailable && (m_params.wait3ALocked & WAIT_AE_LOCKED))
{ {
if (mResult.aeState != ACAMERA_CONTROL_AE_STATE_LOCKED) if (mResult.aeState != ACAMERA_CONTROL_AE_STATE_LOCKED)
{ {

@ -73,17 +73,16 @@ public:
unsigned int autoFocus : 1; unsigned int autoFocus : 1;
unsigned int autoExposure : 1; unsigned int autoExposure : 1;
unsigned int orientation:3; unsigned int orientation:3;
unsigned int focusTimeout : 14; // milli-seconds 65535 / 4
unsigned int zoom : 1; unsigned int zoom : 1;
unsigned int wait3ALocked : 1; unsigned int wait3ALocked : 3;
unsigned int reserved : 6; unsigned int reserved : 18;
int64_t exposureTime; int64_t exposureTime;
unsigned int sensitivity; unsigned int sensitivity;
int compensation; int compensation;
float zoomRatio; float zoomRatio;
uint8_t requestTemplate; uint8_t requestTemplate;
uint8_t awbMode; uint8_t awbMode;
unsigned short focusTimeout; // milli-seconds 65535
}; };
struct CAPTURE_RESULT struct CAPTURE_RESULT
@ -156,6 +155,7 @@ protected:
bool awbLockAvailable; bool awbLockAvailable;
uint64_t numberOfPrecaptures; uint64_t numberOfPrecaptures;
unsigned long long m_precaptureStartTime;
bool lightDetected; bool lightDetected;
// int64_t exposureTime_; // int64_t exposureTime_;

Loading…
Cancel
Save