|
|
|
@ -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);
|
|
|
|
|