|
|
@ -135,6 +135,8 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
|
|
|
|
capture_session_output = 0;
|
|
|
|
capture_session_output = 0;
|
|
|
|
capture_session = 0;
|
|
|
|
capture_session = 0;
|
|
|
|
captureSequenceId = 0;
|
|
|
|
captureSequenceId = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mResult = { 0 };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NdkCamera::~NdkCamera()
|
|
|
|
NdkCamera::~NdkCamera()
|
|
|
@ -446,6 +448,17 @@ int NdkCamera::open(const std::string& cameraId) {
|
|
|
|
|
|
|
|
|
|
|
|
m_imagesCaptured = 0;
|
|
|
|
m_imagesCaptured = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// capture request
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ACameraDevice_request_template templateId = ((afSupported && m_params.autoFocus) ||
|
|
|
|
|
|
|
|
m_params.autoExposure) ? TEMPLATE_PREVIEW
|
|
|
|
|
|
|
|
: TEMPLATE_STILL_CAPTURE;
|
|
|
|
|
|
|
|
status = ACameraDevice_createCaptureRequest(camera_device, templateId, &capture_request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int32_t fpsRange[2] = {1,1};
|
|
|
|
|
|
|
|
status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
@ -470,14 +483,9 @@ 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
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ACameraDevice_request_template templateId = ((afSupported && m_params.autoFocus) || m_params.autoExposure) ? TEMPLATE_PREVIEW : TEMPLATE_STILL_CAPTURE;
|
|
|
|
|
|
|
|
status = ACameraDevice_createCaptureRequest(camera_device, templateId, &capture_request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int32_t fpsRange[2] = {1,1};
|
|
|
|
|
|
|
|
status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
if (m_params.autoExposure) {
|
|
|
|
if (m_params.autoExposure) {
|
|
|
|
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON;
|
|
|
|
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON;
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
|
|
|
@ -511,15 +519,19 @@ int NdkCamera::open(const std::string& cameraId) {
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t aeLockOff = ACAMERA_CONTROL_AE_LOCK_OFF;
|
|
|
|
uint8_t aeLockOff = ACAMERA_CONTROL_AE_LOCK_OFF;
|
|
|
|
// ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff);
|
|
|
|
// ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff);
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF;
|
|
|
|
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF;
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
|
|
|
|
|
|
|
|
|
|
|
|
if (m_params.sensibility > 0) {
|
|
|
|
if (m_params.sensibility > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
int32_t sensitivity = m_params.sensibility;
|
|
|
|
int32_t sensitivity = m_params.sensibility;
|
|
|
|
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 = ((int64_t)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);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -530,7 +542,8 @@ int NdkCamera::open(const std::string& cameraId) {
|
|
|
|
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
|
|
|
|
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode);
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode);
|
|
|
|
|
|
|
|
|
|
|
|
if (m_params.sceneMode != 0) {
|
|
|
|
if (m_params.sceneMode != 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint8_t sceneMode = m_params.sceneMode;
|
|
|
|
uint8_t sceneMode = m_params.sceneMode;
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode);
|
|
|
|
status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -992,14 +1005,15 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
|
|
|
|
|
|
|
|
|
|
|
|
if (afSupported && (m_params.autoFocus != 0))
|
|
|
|
if (afSupported && (m_params.autoFocus != 0))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED || mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_UNFOCUSED)
|
|
|
|
// if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED || mResult.afState == ACAMERA_CONTROL_AF_STATE_PASSIVE_UNFOCUSED)
|
|
|
|
|
|
|
|
if (mResult.afState == ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
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_INFO, "onCaptureCompleted New Focus Trigger AFS=%u AES=%u Time=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState);
|
|
|
|
// XYLOG(XYLOG_SEVERITY_INFO, "onCaptureCompleted New Focus Trigger AFS=%u AES=%u Time=%u", (unsigned int)mResult.afState, (unsigned int)mResult.aeState);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1077,6 +1091,10 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
|
|
|
|
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_MODE, &val);
|
|
|
|
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_MODE, &val);
|
|
|
|
mResult.autoFocus = *(val.data.u8);
|
|
|
|
mResult.autoFocus = *(val.data.u8);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val = {0};
|
|
|
|
|
|
|
|
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, &val);
|
|
|
|
|
|
|
|
mResult.compensation = *(val.data.i32);
|
|
|
|
|
|
|
|
|
|
|
|
ALOGD("onCaptureCompleted EXPO=%lld, FD=%f camera id=%s, AE=%s AFS=%u AES=%u", exTime, focusDistance, mCameraId.c_str(), ((aeMode == 1) ? "ON" : "OFF"), mResult.afState, mResult.aeState);
|
|
|
|
ALOGD("onCaptureCompleted EXPO=%lld, FD=%f camera id=%s, AE=%s AFS=%u AES=%u", exTime, focusDistance, mCameraId.c_str(), ((aeMode == 1) ? "ON" : "OFF"), mResult.afState, mResult.aeState);
|
|
|
|
|
|
|
|
|
|
|
|
// __android_log_print(ANDROID_LOG_WARN, "NdkCamera", "onCaptureCompleted %p %p %p", session, request, result);
|
|
|
|
// __android_log_print(ANDROID_LOG_WARN, "NdkCamera", "onCaptureCompleted %p %p %p", session, request, result);
|
|
|
|