diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 649701e8..9d5a9b40 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -1149,6 +1149,7 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< params.autoExposure = mPhotoInfo.autoExposure; params.focusTimeout = mPhotoInfo.focusTimeout * 1000; params.exposureTime = mPhotoInfo.exposureTime; + params.expsTimeUs = mPhotoInfo.expsTimeUs; params.sensitivity = mPhotoInfo.sensitivity; params.compensation = mPhotoInfo.compensation; params.orientation = mPhotoInfo.orientation; @@ -1161,6 +1162,7 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector< { params.autoExposure = 0; params.exposureTime = 1200; + params.expsTimeUs = 0; params.sensitivity = 1200; } } @@ -1513,7 +1515,7 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat) char extimeunit[4] = { 0 }; unsigned int extime = (captureResult.exposureTime >= 1000000) ? ((unsigned int)(captureResult.exposureTime / 1000000)) : ((unsigned int)(captureResult.exposureTime / 1000)); - strcpy(extimeunit, (captureResult.exposureTime >= 1000000) ? "ms" : "ns"); + strcpy(extimeunit, (captureResult.exposureTime >= 1000000) ? "ms" : "μs"); char str[128] = { 0 }; snprintf(str, sizeof(str), "AE=%u EXPS=%u%s(%d) ISO=%d AF=%u LDR=%d(%u) AFS=%u AES=%u SCENE=%d AWB=%u %0.1fx", captureResult.autoExposure, extime, extimeunit, captureResult.compensation, diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index a5a2c1f5..2e1cd4cf 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -559,8 +559,13 @@ int NdkCamera::open(const std::string& cameraId) { status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange); } - if (afSupported && m_params.autoFocus) { + uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_FAST; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_NOISE_REDUCTION_MODE, 1, &nrMode); + + uint8_t edgeMode = ACAMERA_EDGE_MODE_FAST; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_EDGE_MODE, 1, &edgeMode); + if (afSupported && m_params.autoFocus) { if (!m_params.zoom) { @@ -573,7 +578,7 @@ int NdkCamera::open(const std::string& cameraId) { int32_t sizeY = activeArraySize[1] >> 4; int32_t afRegions[] = {centerX - sizeX, centerY - sizeY, centerX + sizeX, centerY + sizeY, 1000}; - status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AF_REGIONS, 5, afRegions); + // status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AF_REGIONS, 5, afRegions); if (status == ACAMERA_OK) { // m_imagesCaptured = ~0; @@ -672,9 +677,10 @@ int NdkCamera::open(const std::string& cameraId) { int32_t sensitivity = m_params.sensitivity; status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); } - if (m_params.exposureTime > 0) + if (m_params.exposureTime > 0 || m_params.expsTimeUs > 0) { int64_t exposureTime = ((int64_t)m_params.exposureTime) * 1000000; + exposureTime += ((int64_t)m_params.expsTimeUs) * 1000; status = ACaptureRequest_setEntry_i64(capture_request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime); } } diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index 4f06f7d5..955c6d31 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -77,6 +77,7 @@ public: unsigned int zoom; unsigned int reserved : 7; unsigned int exposureTime; // ms + unsigned short expsTimeUs; // μs unsigned int sensitivity; int compensation; float zoomRatio;