调整对焦的实现

serial
BlueMatthew 1 year ago
parent d2261ddb45
commit f838cdc8d7

@ -68,6 +68,7 @@ static void onSessionActive(void* context, ACameraCaptureSession *session)
static void onSessionReady(void* context, ACameraCaptureSession *session) static void onSessionReady(void* context, ACameraCaptureSession *session)
{ {
ALOGW("onSessionReady %p", session); ALOGW("onSessionReady %p", session);
((NdkCamera*)context)->onSessionReady(session);
} }
static void onSessionClosed(void* context, ACameraCaptureSession *session) static void onSessionClosed(void* context, ACameraCaptureSession *session)
@ -97,11 +98,14 @@ void onCaptureProgressed(void* context, ACameraCaptureSession* session, ACapture
val = { 0 }; val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
uint8_t afState = *(val.data.u8); if (status == ACAMERA_OK)
{
uint8_t afState = *(val.data.u8);
ALOGW("onCaptureProgressed AF_STATE=%u", (unsigned int)afState); ALOGW("onCaptureProgressed AF_STATE=%u", (unsigned int)afState);
// ((NdkCamera*)context)->onCaptureProgressed(session, request, result); // ((NdkCamera*)context)->onCaptureProgressed(session, request, result);
}
} }
void onCaptureCompleted(void* context, ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result) void onCaptureCompleted(void* context, ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result)
@ -413,10 +417,10 @@ int NdkCamera::open(const std::string& cameraId) {
// std::this_thread::sleep_for(std::chrono::milliseconds(128)); // std::this_thread::sleep_for(std::chrono::milliseconds(128));
// capture request // capture request
{ {
// res = ACameraDevice_createCaptureRequest(camera_device, TEMPLATE_PREVIEW, &capture_request); ACameraDevice_request_template templateId = (afSupported && m_params.autoFocus) ? TEMPLATE_PREVIEW : TEMPLATE_STILL_CAPTURE;
status = ACameraDevice_createCaptureRequest(camera_device, TEMPLATE_STILL_CAPTURE, &capture_request); status = ACameraDevice_createCaptureRequest(camera_device, templateId, &capture_request);
int32_t fpsRange[2] = {10,30}; int32_t fpsRange[2] = {1,1};
status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange); status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange);
if (m_params.autoExposure) { if (m_params.autoExposure) {
@ -435,15 +439,15 @@ int NdkCamera::open(const std::string& cameraId) {
status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity);
} }
if (m_params.exposureTime > 0) { if (m_params.exposureTime > 0) {
int64_t exposureTime = m_params.exposureTime * 1000000; int64_t exposureTime = ((int64_t)m_params.exposureTime) * 1000000;
status = ACaptureRequest_setEntry_i64(capture_request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime); status = ACaptureRequest_setEntry_i64(capture_request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime);
} }
} }
if (afSupported && m_params.autoFocus) { if (afSupported && m_params.autoFocus) {
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO; // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO;
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE; uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE;
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_START; uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_START;
@ -453,13 +457,13 @@ int NdkCamera::open(const std::string& cameraId) {
else else
{ {
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;
} }
// TODO: // TODO:
m_imagesCaptured = 0; // m_imagesCaptured = 0;
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO; uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
// res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode); // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode);
@ -489,7 +493,7 @@ int NdkCamera::open(const std::string& cameraId) {
ACameraCaptureSession_stateCallbacks camera_capture_session_state_callbacks; ACameraCaptureSession_stateCallbacks camera_capture_session_state_callbacks;
camera_capture_session_state_callbacks.context = this; camera_capture_session_state_callbacks.context = this;
camera_capture_session_state_callbacks.onActive = onSessionActive; camera_capture_session_state_callbacks.onActive = onSessionActive;
camera_capture_session_state_callbacks.onReady = onSessionReady; camera_capture_session_state_callbacks.onReady = ::onSessionReady;
camera_capture_session_state_callbacks.onClosed = onSessionClosed; camera_capture_session_state_callbacks.onClosed = onSessionClosed;
status = ACaptureSessionOutputContainer_create(&capture_session_output_container); status = ACaptureSessionOutputContainer_create(&capture_session_output_container);
@ -612,7 +616,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
if (m_imagesCaptured == ~0 || m_imagesCaptured >= 1) if (m_imagesCaptured == ~0 || m_imagesCaptured >= 1)
{ {
XYLOG(XYLOG_SEVERITY_ERROR, "m_imagesCaptured=%u wait for next image", m_imagesCaptured); // XYLOG(XYLOG_SEVERITY_DEBUG, "m_imagesCaptured=%u wait for next image", m_imagesCaptured);
// Not Ready Or Taken // Not Ready Or Taken
AImage_delete(image); AImage_delete(image);
return; return;
@ -801,6 +805,32 @@ void NdkCamera::on_image(const unsigned char* nv21, int nv21_width, int nv21_hei
on_image(rgb); on_image(rgb);
} }
void NdkCamera::onSessionReady(ACameraCaptureSession *session)
{
return;
camera_status_t status = ACAMERA_OK;
ACameraCaptureSession_captureCallbacks camera_capture_session_capture_callbacks;
camera_capture_session_capture_callbacks.context = this;
camera_capture_session_capture_callbacks.onCaptureStarted = 0;
camera_capture_session_capture_callbacks.onCaptureProgressed = ::onCaptureProgressed;
camera_capture_session_capture_callbacks.onCaptureCompleted = ::onCaptureCompleted;
camera_capture_session_capture_callbacks.onCaptureFailed = onCaptureFailed;
camera_capture_session_capture_callbacks.onCaptureSequenceCompleted = onCaptureSequenceCompleted;
camera_capture_session_capture_callbacks.onCaptureSequenceAborted = onCaptureSequenceAborted;
camera_capture_session_capture_callbacks.onCaptureBufferLost = 0;
if (m_imagesCaptured != 0)
{
status = ACameraCaptureSession_setRepeatingRequest(capture_session, &camera_capture_session_capture_callbacks, 1, &capture_request, &captureSequenceId);
}
else
{
status = ACameraCaptureSession_capture(capture_session, &camera_capture_session_capture_callbacks, 1, &capture_request, &captureSequenceId);
}
}
void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result) void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result)
{ {
// CALL_REQUEST(setEntry_i64(requests_[PREVIEW_REQUEST_IDX].request_, // CALL_REQUEST(setEntry_i64(requests_[PREVIEW_REQUEST_IDX].request_,
@ -818,6 +848,7 @@ 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);
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)
{ {
@ -862,7 +893,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("onCaptureProgressed AF_STATE=%u", (unsigned int)afState); ALOGW("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);

@ -106,6 +106,7 @@ public:
virtual void on_image(const unsigned char* nv21, int nv21_width, int nv21_height); virtual void on_image(const unsigned char* nv21, int nv21_width, int nv21_height);
void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result); void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result);
void onSessionReady(ACameraCaptureSession *session);
const CAPTURE_RESULT& getCaptureResult() const const CAPTURE_RESULT& getCaptureResult() const
{ {

Loading…
Cancel
Save