对焦超时的实现

serial
BlueMatthew 1 year ago
parent fb27eccec2
commit 43f99366eb

@ -62,12 +62,12 @@ static void onImageAvailable(void* context, AImageReader* reader)
static void onSessionActive(void* context, ACameraCaptureSession *session) static void onSessionActive(void* context, ACameraCaptureSession *session)
{ {
ALOGW("onSessionActive %p", session); ALOGD("onSessionActive %p", session);
} }
static void onSessionReady(void* context, ACameraCaptureSession *session) static void onSessionReady(void* context, ACameraCaptureSession *session)
{ {
ALOGW("onSessionReady %p", session); ALOGD("onSessionReady %p", session);
((NdkCamera*)context)->onSessionReady(session); ((NdkCamera*)context)->onSessionReady(session);
} }
@ -83,12 +83,12 @@ void onCaptureFailed(void* context, ACameraCaptureSession* session, ACaptureRequ
void onCaptureSequenceCompleted(void* context, ACameraCaptureSession* session, int sequenceId, int64_t frameNumber) void onCaptureSequenceCompleted(void* context, ACameraCaptureSession* session, int sequenceId, int64_t frameNumber)
{ {
ALOGW("onCaptureSequenceCompleted %p %d %ld", session, sequenceId, frameNumber); ALOGD("onCaptureSequenceCompleted %p %d %ld", session, sequenceId, frameNumber);
} }
void onCaptureSequenceAborted(void* context, ACameraCaptureSession* session, int sequenceId) void onCaptureSequenceAborted(void* context, ACameraCaptureSession* session, int sequenceId)
{ {
ALOGW("onCaptureSequenceAborted %p %d", session, sequenceId); ALOGD("onCaptureSequenceAborted %p %d", session, sequenceId);
} }
void onCaptureProgressed(void* context, ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result) void onCaptureProgressed(void* context, ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result)
@ -102,7 +102,7 @@ void onCaptureProgressed(void* context, ACameraCaptureSession* session, ACapture
{ {
uint8_t afState = *(val.data.u8); uint8_t afState = *(val.data.u8);
ALOGW("onCaptureProgressed AF_STATE=%u", (unsigned int)afState); ALOGD("onCaptureProgressed AF_STATE=%u", (unsigned int)afState);
// ((NdkCamera*)context)->onCaptureProgressed(session, request, result); // ((NdkCamera*)context)->onCaptureProgressed(session, request, result);
} }
@ -400,7 +400,7 @@ int NdkCamera::open(const std::string& cameraId) {
// setup imagereader and its surface // setup imagereader and its surface
{ {
media_status_t mstatus = AImageReader_new(foundRes.width(), foundRes.height(), AIMAGE_FORMAT_YUV_420_888, /*maxImages*/1, &image_reader); media_status_t mstatus = AImageReader_new(foundRes.width(), foundRes.height(), AIMAGE_FORMAT_YUV_420_888, /*maxImages*/2, &image_reader);
if (mstatus == AMEDIA_OK) if (mstatus == AMEDIA_OK)
{ {
@ -451,7 +451,7 @@ int NdkCamera::open(const std::string& cameraId) {
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_START; uint8_t 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);
m_imagesCaptured = (status == ACAMERA_OK) ? ~0 : 0; m_imagesCaptured = (status == ACAMERA_OK) ? ~0 : 0;
} }
else else
@ -522,6 +522,8 @@ int NdkCamera::open(const std::string& cameraId) {
{ {
status = ACameraCaptureSession_capture(capture_session, &camera_capture_session_capture_callbacks, 1, &capture_request, &captureSequenceId); status = ACameraCaptureSession_capture(capture_session, &camera_capture_session_capture_callbacks, 1, &capture_request, &captureSequenceId);
} }
m_startTime = GetMicroTimeStamp();
} }
return status == ACAMERA_OK ? 0 : 1; return status == ACAMERA_OK ? 0 : 1;
@ -602,7 +604,7 @@ void NdkCamera::close()
void NdkCamera::onImageAvailable(AImageReader* reader) void NdkCamera::onImageAvailable(AImageReader* reader)
{ {
ALOGW("onImageAvailable %p", reader); ALOGD("onImageAvailable %p", reader);
AImage* image = 0; AImage* image = 0;
media_status_t status = AImageReader_acquireLatestImage(reader, &image); media_status_t status = AImageReader_acquireLatestImage(reader, &image);
@ -848,12 +850,21 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
val = { 0 }; val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
afState = *(val.data.u8); afState = *(val.data.u8);
ALOGW("onCaptureCompleted AF_STATE=%u", (unsigned int)afState); 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_PASSIVE_FOCUSED || afState == ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED)
// if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE) // if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE)
{ {
m_imagesCaptured = 0; m_imagesCaptured = 0;
} }
else
{
unsigned long long ts = GetMicroTimeStamp();
if (ts - m_startTime >= 1000)
{
ALOGD("onCaptureCompleted Timeout for AutoFocus And will Capture AF_STATE=%u", (unsigned int)afState);
m_imagesCaptured = 0;
}
}
} }
else else
{ {
@ -893,7 +904,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);
ALOGW("onCaptureCompleted AF_STATE=%u", (unsigned int)afState); ALOGD("onCaptureCompleted AF_STATE=%u", (unsigned int)afState);
val = {0}; val = {0};
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val);

@ -142,6 +142,7 @@ protected:
unsigned int m_imagesCaptured; unsigned int m_imagesCaptured;
CAPTURE_RESULT mResult; CAPTURE_RESULT mResult;
unsigned long long m_startTime;
protected: protected:

Loading…
Cancel
Save