调整对焦的实现

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)
{
ALOGW("onSessionReady %p", session);
((NdkCamera*)context)->onSessionReady(session);
}
static void onSessionClosed(void* context, ACameraCaptureSession *session)
@ -97,11 +98,14 @@ void onCaptureProgressed(void* context, ACameraCaptureSession* session, ACapture
val = { 0 };
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)
@ -413,10 +417,10 @@ int NdkCamera::open(const std::string& cameraId) {
// std::this_thread::sleep_for(std::chrono::milliseconds(128));
// capture request
{
// res = ACameraDevice_createCaptureRequest(camera_device, TEMPLATE_PREVIEW, &capture_request);
status = ACameraDevice_createCaptureRequest(camera_device, TEMPLATE_STILL_CAPTURE, &capture_request);
ACameraDevice_request_template templateId = (afSupported && m_params.autoFocus) ? TEMPLATE_PREVIEW : TEMPLATE_STILL_CAPTURE;
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);
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);
}
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);
}
}
if (afSupported && m_params.autoFocus) {
// 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_AUTO;
uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE;
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_MODE, 1, &afMode);
uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_START;
@ -453,13 +457,13 @@ int NdkCamera::open(const std::string& cameraId) {
else
{
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;
}
// TODO:
m_imagesCaptured = 0;
// m_imagesCaptured = 0;
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
// 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;
camera_capture_session_state_callbacks.context = this;
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;
status = ACaptureSessionOutputContainer_create(&capture_session_output_container);
@ -612,7 +616,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
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
AImage_delete(image);
return;
@ -801,6 +805,32 @@ void NdkCamera::on_image(const unsigned char* nv21, int nv21_width, int nv21_hei
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)
{
// CALL_REQUEST(setEntry_i64(requests_[PREVIEW_REQUEST_IDX].request_,
@ -818,6 +848,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
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_INACTIVE)
{
@ -862,7 +893,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
mResult.afState = *(val.data.u8);
ALOGW("onCaptureProgressed AF_STATE=%u", (unsigned int)afState);
ALOGW("onCaptureCompleted AF_STATE=%u", (unsigned int)afState);
val = {0};
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);
void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result);
void onSessionReady(ACameraCaptureSession *session);
const CAPTURE_RESULT& getCaptureResult() const
{

Loading…
Cancel
Save