参考文档:80-NK872-13 QUALCOMM SPECTRA CAMERA ISP TUNING GUIDE

sensor 匹配
vendor/qcom/proprietary/chi-cdk/core/chiframework/chxsensorselectmode.cpp
c
ChiSensorModeInfo* ChxSensorModeSelect::FindBestSensorMode(
UINT32 cameraId,
const DesiredSensorMode* pDesiredSensorMode)
{
pSelectedMode = &pAllModes[pSelectedMode->modeIndex]; //update pSelectedMode
CHX_LOG_DEBUG("Selected Usecase: %d,app_out(%d,%d), sensor_out(%d,%d), SelectedMode FPS:%d,"
" modeIndex:%d, out_info_array.size:%d",
useCase,
pDesiredSensorMode->optimalWidth,
pDesiredSensorMode->optimalHeight,
pSelectedMode->frameDimension.width,
pSelectedMode->frameDimension.height,
pSelectedMode->frameRate,
pSelectedMode->modeIndex,modeCount);
}
效果参数匹配
ps:修改 chxutils.cpp -- 编译com.qti.chi.override
FillTuningModeData
\HLOS\vendor\qcom\proprietary\chi-cdk\core\chiutils\chxutils.cpp
效果参数调用的地方,还有别的文件也有这个函数,有时候调用不一样
c
VOID ChxUtils::FillTuningModeData(
ChiMetadata* pMetaData,
ChiModeUsecaseSubModeType usecaseMode,
UINT32 sensorModeIndex,
UINT32* pEffectModeValue,
UINT32* pSceneModeValue,
UINT32* pFeature1Value,
UINT32* pFeature2Value)
{
ChiTuningModeParameter chiTuningModeParameter = { 0 };
chiTuningModeParameter.noOfSelectionParameter = MaxTuningMode;
chiTuningModeParameter.TuningMode[0].mode = ChiModeType::Default;
chiTuningModeParameter.TuningMode[0].subMode.value = 0;
chiTuningModeParameter.TuningMode[1].mode = ChiModeType::Sensor;
chiTuningModeParameter.TuningMode[1].subMode.value = sensorModeIndex;
chiTuningModeParameter.TuningMode[2].mode = ChiModeType::Usecase;
chiTuningModeParameter.TuningMode[2].subMode.usecase = usecaseMode;
chiTuningModeParameter.TuningMode[3].mode = ChiModeType::Feature1;
chiTuningModeParameter.TuningMode[3].subMode.feature1 = GetFeature1Mode(pMetaData, pFeature1Value);
chiTuningModeParameter.TuningMode[4].mode = ChiModeType::Feature2;
chiTuningModeParameter.TuningMode[4].subMode.feature2 = GetFeature2Mode(pFeature2Value);
chiTuningModeParameter.TuningMode[5].mode = ChiModeType::Scene;
chiTuningModeParameter.TuningMode[5].subMode.scene = GetSceneMode(pMetaData, pSceneModeValue);
chiTuningModeParameter.TuningMode[6].mode = ChiModeType::Effect;
chiTuningModeParameter.TuningMode[6].subMode.effect = GetEffectMode(pMetaData, pEffectModeValue);
ChxUtils::SetVendorTagValue(pMetaData, VendorTag::TuningMode, sizeof(ChiTuningModeParameter), &chiTuningModeParameter);
CHX_LOG_VERBOSE("m_cameraId %d SensorMode %d UC %u feature %u %d scene %d effect %d",
m_cameraId,
sensorModeIndex,
chiTuningModeParameter.TuningMode[2].subMode.usecase,
chiTuningModeParameter.TuningMode[3].subMode.feature1,
chiTuningModeParameter.TuningMode[4].subMode.feature2,
chiTuningModeParameter.TuningMode[5].subMode.scene,
chiTuningModeParameter.TuningMode[6].subMode.effect);
}
}
log:
c
I CHIUSECASE: [VERBOSE] chxutils.cpp:1916 FillTuningModeData() SensorMode 0 UC 0 feature 0 0 scene 0 effect 0
**关键词2:PopulateGeneralTuningMetadata
这里是dump 效果参数
log:
c
V CamX : [ VERB][PPROC ] camxopenode.cpp:7353 PopulateGeneralTuningMetadata() TuningMode: ReqID: 12: Default 0, Sensor 0 usecase 0 feature1 0 feature2 0 secne 0 effect 0
vendor/qcom/proprietary/camx/src/hwl/ope/camxopenode.cpp

adb
实际生效
c
adb root
adb shell setprop persist.vendor.camera.debugdata.enable3A TRUE
adb shell setprop persist.vendor.camera.debugdata.enableTuningMetadata TRUE
开启metadata信息,需要杀进程才能生效

相关定义
vendor/qcom/proprietary/chi-cdk/api/common/chituningmodeparam.h
c
#ifndef CHITUNINGMODEPARAM_H
#define CHITUNINGMODEPARAM_H
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
static const UINT32 MaxTuningMode = 7;
enum class ChiModeType
{
Default = 0,
Sensor = 1,
Usecase = 2,
Feature1 = 3,
Feature2 = 4,
Scene = 5,
Effect = 6
};
enum class ChiModeUsecaseSubModeType
{
Preview = 0,
Snapshot = 1,
Video = 2,
ZSL = 3,
Liveshot = 4
};
enum class ChiModeFeature1SubModeType
{
None = 0,
ISPHDR = 1,
ADRC = 2,
InSensorHDR3Exp = 3
};
enum class ChiModeFeature2SubModeType
{
None = 0,
OISCapture = 1,
HLG = 2,
HDR10 = 3,
MFNRBlend = 4,
MFNRPostFilter = 5,
AIDenoiserMFNRBlend = 6,
AIDenoiserMFNRPostFilter = 7,
MFSRBlend = 8,
MFSRPostFilter = 9,
OfflineNoiseReprocess = 10
};
enum class ChiModeSceneSubModeType
{
None = 0,
Landscape = 1,
Snow = 2,
Beach = 3,
Sunset = 4,
Night = 5,
Portrait = 6,
BackLight = 7,
Sports = 8,
AntiShake = 9,
Flowers = 10,
CandleLight = 11,
Fireworks = 12,
Party = 13,
NightPortrait = 14,
Theater = 15,
Action = 16,
AR = 17,
FacePriority = 18,
Barcode = 19,
BestShot = 20
};
enum class ChiModeEffectSubModeType
{
None = 0,
Mono = 1,
Sepia = 2,
Negative = 3,
Solarize = 4,
Posterize = 5,
Aqua = 6,
Emboss = 7,
Sketch = 8,
Neon = 9,
Blackboard= 10,
Whiteboard= 11
};
union ChiModeSubModeType
{
UINT16 value;
ChiModeUsecaseSubModeType usecase;
/// feature1
ChiModeFeature1SubModeType feature1;
/// feature2
ChiModeFeature2SubModeType feature2;
/// scene
ChiModeSceneSubModeType scene;
/// effect
ChiModeEffectSubModeType effect;
};
struct ChiTuningMode
{
ChiModeType mode;
ChiModeSubModeType subMode;
};
struct ChiTuningModeParameter
{
UINT32 noOfSelectionParameter;
ChiTuningMode TuningMode[MaxTuningMode];
};
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // CHITUNINGMODEPARAM_H