diff --git a/app/build.gradle b/app/build.gradle index 3733fc49..41c4f067 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 3 -def AppBuildNumber = 112 +def AppBuildNumber = 113 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 855f3d95..aaa4bb1d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,7 @@ - + diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index d0fac699..517c7687 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -29,6 +29,60 @@ #include #include "DngCreator.h" +#define MTK_MFBMODE_TAG "com.mediatek.mfbmode" +#define MTK_MFNR_ENABLE_TAG "com.mediatek.3afeature.mfnrenable" + +#define MTK_VENDOR_TAG_SECTION 0x8000 +#define MTK_MFNR_FEATURE 4 +#define MTK_MFNR_FEATURE_START ((MTK_MFNR_FEATURE + MTK_VENDOR_TAG_SECTION) << 16) +#define MTK_MFNR_FEATURE_MFB_MODE MTK_MFNR_FEATURE_START +#define MTK_MFNR_FEATURE_MFB_RESULT (MTK_MFNR_FEATURE_START + 1) +#define MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES (MTK_MFNR_FEATURE_START + 2) + +#define MTK_MFNR_FEATURE_MFB_AUTO 0xFF + +// #define MTK_3A_MFNR_ENABLE "com.mediatek.3afeature.mfnrenable" +#define MTK_3A_MFNR_INTENSITY_TAG "com.mediatek.3afeature.mfnrintensity" + +void SetupMFNR(ACameraMetadata* characteristics, ACaptureRequest* request) { + // 1. 设置基础的相机参数 + // ACaptureRequest_setEntry_i32(request, ACAMERA_CONTROL_MODE, 1, ACAMERA_CONTROL_MODE_AUTO); + camera_status_t status; + +#if 0 + int32_t tagCount = 0; + const uint32_t* tags = nullptr; + ACameraMetadata_getAllTags(characteristics, &tagCount, &tags); + for (int32_t i = 0; i < tagCount; i++) { + if (MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES == tags[i]) + { + ALOGI("MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES Tag ID: 0x%x\n", tags[i]); + } + } + + ACameraMetadata_const_entry entry; + status = ACameraMetadata_getConstEntry(characteristics, MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES, &entry); + if (status == ACAMERA_OK) + { + for (int i = 0; i < entry.count; i++) + { + ALOGI("MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES: 0x%x\n", entry.data.i32[i]); + } + } +#endif + + uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_HIGH_QUALITY; + status = ACaptureRequest_setEntry_u8(request, ACAMERA_NOISE_REDUCTION_MODE, 1, &nrMode); + + // 2. 设置 MediaTek 特定的 MFNR 参数 + // 使用 vendor tag 描述符 + int32_t mfbMode = MTK_MFNR_FEATURE_MFB_AUTO; // 1 Enable MFNR + status = ACaptureRequest_setEntry_i32(request, MTK_MFNR_FEATURE_MFB_MODE, 1, &mfbMode); + if (status == ACAMERA_OK) + { + + } +} void saveYuvToFile(AImage* image, const std::string& filePath) { @@ -1805,11 +1859,16 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque for (int idx = 0; idx < burstCaptures; idx++) { CaptureRequest* request = CreateRequest(false); + if (m_params.burstRawCapture == 0 && m_params.customHdr != 0) + { + SetupMFNR(mCharacteristics.get(), request->request); + } mCaptureRequests.push_back(request); // CopyPreviewRequest(mCaptureRequests[idx]->request, result); requests.push_back(request->request); } +#if 0 if (m_params.customHdr && burstCaptures > 1) { int32_t hdrStep = m_params.hdrStep; @@ -1850,6 +1909,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque } } } +#endif // ALOGW("Will Stop Repeating Request"); // status = ACameraCaptureSession_stopRepeating(capture_session);