|
|
|
@ -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)
|
|
|
|
|