diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 9b62eb8b..2dc682df 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -1208,8 +1208,8 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat) unsigned int extime = (captureResult.exposureTime >= 1000000) ? ((unsigned int)(captureResult.exposureTime / 1000000)) : ((unsigned int)(captureResult.exposureTime / 1000)); strcpy(extimeunit, (captureResult.exposureTime >= 1000000) ? "ms" : "ns"); char str[128] = { 0 }; - snprintf(str, sizeof(str), "AE=%u EXPS=%u%s ISO=%d AF=%u LDR=%d AFS=%u AES=%u SCENE=%d AWB=%u %0.1fx", captureResult.autoExposure, - extime, extimeunit, + snprintf(str, sizeof(str), "AE=%u EXPS=%u%s(%d) ISO=%d AF=%u LDR=%d AFS=%u AES=%u SCENE=%d AWB=%u %0.1fx", captureResult.autoExposure, + extime, extimeunit, captureResult.compensation, captureResult.sensitibity, captureResult.autoFocus, // isnan(captureResult.FocusDistance) ? 0 : captureResult.FocusDistance, diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 5436b9e3..5952383e 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -135,6 +135,8 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA capture_session_output = 0; capture_session = 0; captureSequenceId = 0; + + mResult = { 0 }; } NdkCamera::~NdkCamera() @@ -446,6 +448,17 @@ int NdkCamera::open(const std::string& cameraId) { 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) { // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO; 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)); - // 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) { uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON; 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; // ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff); - } else { + } + else + { uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF; 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; 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; 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; 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; 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 (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; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); + // uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL; + // status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; - 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); + // aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; + // 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); return; } @@ -1077,6 +1091,10 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_MODE, &val); 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); // __android_log_print(ANDROID_LOG_WARN, "NdkCamera", "onCaptureCompleted %p %p %p", session, request, result); diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index 0e89b4f8..246287b7 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -95,7 +95,6 @@ public: int32_t compensation; uint8_t sceneMode; float zoomRatio; - }; NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params);