预览request上设置算法

lowmem
Matthew 2 weeks ago
parent b96fe6bbfd
commit 3979e03882

@ -21,7 +21,7 @@ if(ANDROID_ABI STREQUAL "armeabi-v7a")
add_definitions(-DUSING_N938)
elseif(ANDROID_ABI STREQUAL "arm64-v8a")
# add_definitions(-DUSING_N938)
# add_definitions(-DUSING_PTZ)
add_definitions(-DUSING_PTZ)
endif()
# OUTPUT_DBG_INFO:

@ -1012,7 +1012,6 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest, int32
// status = ACaptureSessionOutput_create(request->imageWindow, &request->sessionOutput);
// status = ACaptureSessionOutputContainer_add(capture_session_output_container, request->sessionOutput);
if (!isPreviewRequest/* && !forceToPreview*/)
{
#if 0
uint8_t colorMode = ACAMERA_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX;
@ -2483,6 +2482,51 @@ void NdkCamera::EnumCameraResult(ACameraMetadata* result, CAPTURE_RESULT& captur
val = {0};
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, &val);
captureResult.compensation = (status == ACAMERA_OK) ? *(val.data.i32) : 0;
status = ACameraMetadata_getConstEntry(result, MTK_HDR_FEATURE_HDR_DETECTION_RESULT, &val);
ALOGI("HDR Detection Result: %d", val.data.i32[0]);
val = {0};
status = ACameraMetadata_getConstEntry(result, MTK_HDR_FEATURE_HDR_MODE, &val);
if (status == ACAMERA_OK && val.count > 0) {
int32_t appliedHdrMode = val.data.i32[0];
ALOGI("Applied HDR Mode: %d", appliedHdrMode);
// 判断是否与请求的HDR模式一致
if (appliedHdrMode == MTK_HDR_FEATURE_HDR_MODE_AUTO ||
appliedHdrMode == MTK_HDR_FEATURE_HDR_MODE_ON) {
ALOGI("HDR mode successfully applied");
}
}
// 检查 HDR 是否激活(最重要的指标) dd
// 从结果中获取 MTK_HDR_FEATURE_HDR_HAL_MODE
val = {0};
status = ACameraMetadata_getConstEntry(result, MTK_HDR_FEATURE_HDR_HAL_MODE, &val);
if (status == ACAMERA_OK && val.count > 0) {
int32_t hdrHalMode = val.data.i32[0];
ALOGI("HDR HAL Mode: %d", hdrHalMode);
if (hdrHalMode != MTK_HDR_FEATURE_HDR_HAL_MODE_OFF) {
ALOGI("HDR is actively working on hardware level");
}
}
val = {0};
status = ACameraMetadata_getConstEntry(result, MTK_3A_ISP_FUS_NUM, &val);
if (status == ACAMERA_OK && val.count > 0) {
int32_t fusionFrames = val.data.i32[0];
ALOGI("多帧融合数量: %d", fusionFrames);
if (fusionFrames > 1) {
ALOGI("正在使用多帧融合,这通常表明 HDR 处理正在进行");
}
}
int aa = 0;
}
@ -2627,7 +2671,29 @@ void NdkCamera::SetupHDR(ACameraMetadata* characteristics, ACaptureRequest* requ
// 1. 设置基础的相机参数
camera_status_t status;
__system_property_set("vendor.forceset.hdrmode", "1");
#if 0
#if 1
// 首先检查相机是否支持 HDR
ACameraMetadata_const_entry entry = { 0 };
status = ACameraMetadata_getConstEntry(characteristics, MTK_HDR_FEATURE_AVAILABLE_HDR_MODES_PHOTO, &entry);
if (status == ACAMERA_OK) {
bool hdrSupported = false;
for (int i = 0; i < entry.count; i++) {
ALOGI("支持的 HDR 模式: 0x%x", entry.data.i32[i]);
if (entry.data.i32[i] == MTK_HDR_FEATURE_HDR_MODE_AUTO ||
entry.data.i32[i] == MTK_HDR_FEATURE_HDR_MODE_ON) {
hdrSupported = true;
}
}
if (!hdrSupported) {
ALOGI("警告: 相机不支持 AUTO 或 ON 模式的 HDR");
return;
}
} else {
ALOGI("警告: 无法获取支持的 HDR 模式列表");
}
int32_t tagCount = 0;
const uint32_t* tags = nullptr;
ACameraMetadata_getAllTags(characteristics, &tagCount, &tags);
@ -2638,7 +2704,7 @@ void NdkCamera::SetupHDR(ACameraMetadata* characteristics, ACaptureRequest* requ
}
}
ACameraMetadata_const_entry entry;
entry = { 0 };
status = ACameraMetadata_getConstEntry(characteristics, MTK_MFNR_FEATURE_AVAILABLE_MFB_MODES, &entry);
if (status == ACAMERA_OK)
{
@ -2651,7 +2717,7 @@ void NdkCamera::SetupHDR(ACameraMetadata* characteristics, ACaptureRequest* requ
#endif
ACameraMetadata_const_entry entry = { 0 };
entry = { 0 };
status = ACameraMetadata_getConstEntry(characteristics, MTK_HDR_FEATURE_AVAILABLE_HDR_MODES_PHOTO, &entry);
if (status == ACAMERA_OK)
{
@ -2663,16 +2729,36 @@ void NdkCamera::SetupHDR(ACameraMetadata* characteristics, ACaptureRequest* requ
// 2. 设置 MediaTek 特定的 HDR 参数
// 使用 vendor tag 描述符
int32_t hdrMode = MTK_HDR_FEATURE_HDR_MODE_AUTO; // 1 Enable MFNR
uint8_t aeMode = MTK_CONTROL_AE_MODE_ON;
status = ACaptureRequest_setEntry_u8(request, MTK_CONTROL_AE_MODE, 1, &aeMode);
uint8_t sceneMode = ACAMERA_CONTROL_SCENE_MODE_HDR;
status = ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode);
if (status == ACAMERA_OK) {
ALOGI("已设置场景模式为 HDR");
// 启用场景模式控制
uint8_t sceneModeControl = ACAMERA_CONTROL_MODE_USE_SCENE_MODE;
ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_MODE, 1, &sceneModeControl);
}
int32_t hdrMode = MTK_HDR_FEATURE_HDR_MODE_ON; // 1 Enable HDR
ALOGI("Try to set MTK_HDR_FEATURE_HDR_MODE = %d", hdrMode);
status = ACaptureRequest_setEntry_i32(request, MTK_HDR_FEATURE_HDR_MODE, 1, &hdrMode);
if (status != ACAMERA_OK)
{
ALOGE("Failed to set MTK_HDR_FEATURE_HDR_MODE, status: %d", status);
}
int32_t halHdrMode = MTK_HDR_FEATURE_HDR_HAL_MODE_MSTREAM_CAPTURE;
status = ACaptureRequest_setEntry_i32(request, MTK_HDR_FEATURE_HDR_HAL_MODE, 1, &halHdrMode);
if (status != ACAMERA_OK)
{
ALOGE("Failed to set MTK_HDR_FEATURE_HDR_HAL_MODE, status: %d", status);
}
// int32_t ispTuning = (mfbMode != 0) ? MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING_MFNR : MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING_DEFAULT_NONE;
// status = ACaptureRequest_setEntry_i32(request, MTK_CONTROL_CAPTURE_HINT_FOR_ISP_TUNING, 1, &ispTuning);
@ -2692,6 +2778,16 @@ void NdkCamera::SetupHDR(ACameraMetadata* characteristics, ACaptureRequest* requ
ALOGE("Failed to set MTK_CONTROL_AE_EXPOSURE_COMPENSATION, status: %d", status);
}
}
// 设置HDR的AE目标模式
int32_t aeTargetMode = MTK_3A_FEATURE_AE_TARGET_MODE_NORMAL;
status = ACaptureRequest_setEntry_i32(request, MTK_3A_FEATURE_AE_TARGET_MODE, 1, &aeTargetMode);
// 设置更高的曝光等级
int32_t exposureLevel = MTK_3A_FEATURE_AE_EXPOSURE_LEVEL_LONG; // 选择长曝光模式
status = ACaptureRequest_setEntry_i32(request, MTK_3A_FEATURE_AE_EXPOSURE_LEVEL, 1, &exposureLevel);
int aa = 0;
}
bool NdkCamera::SetupTonemapCurve(ACameraMetadata* characteristics, ACaptureRequest* request)

Loading…
Cancel
Save