Camx-常用接口

otp

vendor/qcom/proprietary/camx/src/core/camxeepromdata.cpp

复制代码
EEPROMData::EEPROMData(
    EEPROMDriverData*       pEEPROMDriverData,
    HwSensorInfo*           pSensorInfoTable,
    const HwDeviceTypeInfo* pDeviceInfo,
    CSLHandle               hCSL)
{
            LoadEEPROMLibrary();

            // @todo (CAMX-1996) - Implement library mechanism for OTP data parsing/formating.
            FormatModuleAndBarData();
            FormatAFData();
            FormatWBData();
            FormatLSCData();
            FormatSPCData();
            FormatOISData();
            FormatDualCameraData();
            FormatPDAFDCCData();
            FormatPDAF2DData();
            FormatLensData();
}

查询flash设备能力接口

CSLQueryDeviceCapabilitiesHW

CSLHwInternalFlashUMDQueryCapability

查看camera枚举了哪些设备

adb shell setprop persist.vendor.camera.logVerboseMask 0x30404

adb shell setprop persist.vendor.camera.logInfoMask 0x30404

复制代码
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/video0 (Type:CSLHwRequestManager, FD:9, Index:-1)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/video0 (Type:CSLHwRequestManager, FD:9, Index:-1)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/video0 (Type:CSLHwRequestManager, FD:9, Index:-1)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev0 (Type:CSLHwCPAS_TOP, FD:12, Index:-1)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev1 (Type:CSLHwTFE, FD:14, Index:0)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev2 (Type:CSLHwCSIPHY, FD:13, Index:1)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev3 (Type:CSLHwCSIPHY, FD:15, Index:2)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev4 (Type:CSLHwLensActuator, FD:16, Index:3)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev5 (Type:CSLHwLensActuator, FD:17, Index:4)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev6 (Type:CSLHwImageSensor, FD:18, Index:0)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev7 (Type:CSLHwImageSensor, FD:19, Index:1)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev8 (Type:CSLHwEEPROM, FD:20, Index:5)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev9 (Type:CSLHwEEPROM, FD:21, Index:6)
camxcslhwinternal.cpp:3203 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev10 (Type:CSLHwOPE, FD:22, Index:7)

查看sensor加载的子设备

  • CreateSensorSubModules
  • adb指令
    adb shell setprop persist.vendor.camera.logVerboseMask 0x2
    adb shell setprop persist.vendor.camera.logInfoMask 0x2
c 复制代码
camximagesensormoduledata.cpp:812 CreateSensorSubModules() Actuator device found on camera 0, name:xtc_gt9778
camximagesensormoduledata.cpp:853 CreateSensorSubModules() OIS driver data not found, skip OIS setup camera 0
camximagesensormoduledata.cpp:881 CreateSensorSubModules() Flash driver data not found, sensor 0 have no flash support
camximagesensormoduledata.cpp:828 CreateSensorSubModules() Actuator driver data not found, skip Actuator setup camera 1
camximagesensormoduledata.cpp:853 CreateSensorSubModules() OIS driver data not found, skip OIS setup camera 1
camximagesensormoduledata.cpp:881 CreateSensorSubModules() Flash driver data not found, sensor 1 have no flash support

查看AF OTP数据

CalibrateActuatorDriverData

c 复制代码
camxactuatordata.cpp:113 CalibrateActuatorDriverData() Infinity:439, Macro: 687: WithMargin: 
Infinity:353, Macro: 724, InfinityMargin:-0.350000, MacroMargin: 0.150000

camxactuatordata.cpp:127 CalibrateActuatorDriverData() pRegionParams[0].codePerStep: 0.782178

camxactuatordata.cpp:131 CalibrateActuatorDriverData() stepTableSize: 202: codePerStep: 0.782178, 
DACRange: 158, macroDAC: 511, infinityDAC: 353

1.加载SO库

camximagesensordata.cpp

  • CamxResult ImageSensorData::LoadSensorLibrary()

camxhwenvironment.cpp

  • HwEnvironment::CreateTuningDataManager

2.模式

chxutils.cpp

  • VOID ChxUtils::FillTuningModeData

camxopenode.cpp

  • CamxResult OPENode::ExecuteProcessRequest()

3.camxoverridesettings

camxoverridesettingsfile.cpp

430 Initialize()

4.HAL数据流关键文件

camxsession.cpp

对应关系

c 复制代码
Preview      HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED
SnapShot     HAL_PIXEL_FORMAT_BLOB
CallBack     HAL_PIXEL_FORMAT_YCbCr_420_888

5.查看usercase

  • AdvancedCameraUsecase::Initialize

6. Jpg编码关键日志

c 复制代码
	Line 173641: 06-28 18:25:23.204   565   752 D CamX    : [DEBUG][JPEG   ] camxjpegswencnode.cpp:750 ExecuteProcessRequest() [KPI_Perf]: Jpegsw seq 0 reqid 35
	Line 173641: 06-28 18:25:23.204   565   752 D CamX    : [DEBUG][JPEG   ] camxjpegswencnode.cpp:750 ExecuteProcessRequest() [KPI_Perf]: Jpegsw seq 0 reqid 35
	Line 173655: 06-28 18:25:23.555   565   750 D CamX    : [DEBUG][JPEG   ] camxjpegswencnode.cpp:750 ExecuteProcessRequest() [KPI_Perf]: Jpegsw seq 1 reqid 35
	Line 173655: 06-28 18:25:23.555   565   750 D CamX    : [DEBUG][JPEG   ] camxjpegswencnode.cpp:750 ExecuteProcessRequest() [KPI_Perf]: Jpegsw seq 1 reqid 35
	Line 173656: 06-28 18:25:23.556   565   750 D CamX    : [DEBUG][JPEG   ] camxjpegswencnode.cpp:1626 StartJpegEncoding() [KPI_Perf]: use_dsp: 0, max_no_of_cores: 4, Rotation: 270, quality: 100
	Line 173657: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Source (WxH) = 2592 x 1944 
	Line 173658: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Source Rotation = 270 
	Line 173659: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Scale En = 0 
	Line 173660: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Stride En = 1 
	Line 173661: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Stride in Y = 2688 
	Line 173662: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Stride in UV = 2688 
	Line 173663: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Stride out Y = 0 
	Line 173664: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_start : Stride out UV = 0 
	Line 173665: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_configure : Slice Num = 0, Slice Height = 656 
	Line 173666: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_configure : Slice Num = 1, Slice Height = 656 
	Line 173667: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_configure : Slice Num = 2, Slice Height = 640 
	Line 173668: 06-28 18:25:23.557   565   750 E JPEG_SW_LIB: jpege_engine_hybrid_configure : Slice Num = 3, Slice Height = 640 
	Line 173685: 06-28 18:25:23.654   565  4042 E JPEG_SW_LIB:  
	Line 173686: 06-28 18:25:23.654   565  4042 E JPEG_SW_LIB:  Encoding Completed 
	Line 173687: 06-28 18:25:23.654   565  4042 D CamX    : [DEBUG][JPEG   ] camxjpegswencnode.cpp:1626 StartJpegEncoding() [KPI_Perf]: use_dsp: 0, max_no_of_cores: 4, Rotation: 0, quality: 80

gyro数据相关

Dear Customer:

For AF/AE/Fd modules, data is got in by function like CAFIOUtil::PopulateGyroData(), then filled to below param, which will be used for AF algorithm.

m_AFOutputGyroValue.pAngularVelocityX[index] = pGyroData->x;

m_AFOutputGyroValue.pAngularVelocityY[index] = pGyroData->y;

m_AFOutputGyroValue.pAngularVelocityZ[index] = pGyroData->z;

m_AFOutputGyroValue.timeStamp[index] = pGyroData->timestamp;

For EIS, data is got from following data

ChiNodeWrapper::FNGetData

测光模式

vendor/qcom/proprietary/camx/src/swl/stats/camxaecengine.cpp

c 复制代码
CamxResult CAECEngine::Initialize() {
m_HALParam.AEMeteringMode = 0;
}

vendor/qcom/proprietary/camx/src/swl/stats/camxcaecstatsprocessor.cpp

c 复制代码
VOID CAECStatsProcessor::ReadInputVendorTag() {
READ("org.codeaurora.qcamera3.exposure_metering", "exposure_metering_mode", pHALParam->AEMeteringMode);
}
CamxResult CAECStatsProcessor::SetBestShotModeSettings() {
      if (NULL != pHALParam)
    {
        bestShotmode = pHALParam->controlSceneMode;
        switch (bestShotmode)
        {
            case ControlSceneModeAction:
            case ControlSceneModeSteadyphoto:
            case ControlSceneModeSports:
                pHALParam->AEMeteringMode                 = AECAlgoMeteringModeCenterWeighted;          // Center_Weighted
}

vendor/qcom/proprietary/chi-cdk/api/stats/chiaecinterface.h

c 复制代码
/// @brief Defines the AEC metering mode
typedef enum
{
    AECAlgoMeteringModeFrameAverage,                    ///< Frame average
    AECAlgoMeteringModeCenterWeighted,                  ///< Center weighted
    AECAlgoMeteringModeSpot,                            ///< Spot metering
    AECAlgoMeteringModeCustom,                          ///< Custom Metering Table
    AECAlgoMeteringModeMax             = 0x7FFFFFFF     ///< Anchor to indicate the last item in the defines
} AECAlgoMeteringModeType;
复制代码
c 复制代码
    private void applyExposureMeteringModes(CaptureRequest.Builder request) {
        String value = mSettingsManager.getValue(SettingsManager.KEY_EXPOSURE_METERING_MODE);
        if (value != null) {
            int intValue = Integer.parseInt(value);
            request.set(CaptureModule.exposure_metering, intValue);
        }
    }

    private void applyCommonSettings(CaptureRequest.Builder builder, int id) {
        builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
        builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode);
        applyAfModes(builder);
        applyFaceDetection(builder);
        applyTouchTrackFocus(builder);
        applyWhiteBalance(builder);
        applyExposure(builder);
        applyIso(builder);
        applyColorEffect(builder);
        applySceneMode(builder);
        applyZoom(builder, id);
        applyInstantAEC(builder);
        applySaturationLevel(builder);
        applyAntiBandingLevel(builder);
        applySharpnessControlModes(builder);
        applyExposureMeteringModes(builder);
        applyHistogram(builder);
        applyAWBCCTAndAgain(builder);
        applyBGStats(builder);
        applyBEStats(builder);
        applyWbColorTemperature(builder);
        applyToneMapping(builder);
    }

touch af

vendor/qcom/proprietary/camx/src/swl/stats/camxcaecstatsprocessor.cpp

c 复制代码
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CAECStatsProcessor::SetTouchROISettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VOID CAECStatsProcessor::SetTouchROISettings(
    AECEngineHALParam* pHALParam,
    WeightedRectangle* pTouchROIInfo
    ) const
{
    // Taking local variable to save multiple derefrence and type cast.
    FLOAT          xMax         = static_cast<FLOAT>(pTouchROIInfo->xMax);
    FLOAT          yMax         = static_cast<FLOAT>(pTouchROIInfo->yMax);
    FLOAT          xMin         = static_cast<FLOAT>(pTouchROIInfo->xMin);
    FLOAT          yMin         = static_cast<FLOAT>(pTouchROIInfo->yMin);
    FLOAT          activeWidth  = static_cast<FLOAT>(m_hardwareInfo.sensorInfo.sensorActiveResWidth);
    FLOAT          activeHeight = static_cast<FLOAT>(m_hardwareInfo.sensorInfo.sensorActiveResHeight);
    FLOAT          resWidth     = static_cast<FLOAT>(m_hardwareInfo.sensorInfo.sensorResWidth);
    FLOAT          resHeight    = static_cast<FLOAT>(m_hardwareInfo.sensorInfo.sensorResHeight);
    StatsRectangle statsROI     = { 0 };
    AECAlgoROI     touchROI;

    if (0 != pTouchROIInfo->weight)
    {
        GetCropWindow(&statsROI);

        CAMX_LOG_VERBOSE(CamxLogGroupAEC, "Input CamId:%d Max(x:%d y:%d) Min(x:%d y%d)",
            m_cameraId,
            pTouchROIInfo->xMax,
            pTouchROIInfo->yMax,
            pTouchROIInfo->xMin,
            pTouchROIInfo->yMin);


        // Convert input AE regions to CAMIF size from Sensor Active pixel size
        touchROI.x  = xMin * resWidth / activeWidth;
        touchROI.y  = yMin * resHeight / activeHeight;
        touchROI.dx = (xMax - xMin) * resWidth / activeWidth;
        touchROI.dy = (yMax - yMin) * resHeight / activeHeight;

        // Input Touch region can be 0 and less then statsROI.left
        // tested using cts.CaptureRequestTest#testDigitalZoom
        // tested using cts.CaptureRequestTest#testZoomRatio
        touchROI.x -= statsROI.left;
        touchROI.x = Utils::MaxFLOAT(touchROI.x,0.0f);

        touchROI.y -= statsROI.top;
        touchROI.y = Utils::MaxFLOAT(touchROI.y,0.0f);
        if (Utils::RoundFLOAT(touchROI.dx + touchROI.x) > static_cast<INT32>(statsROI.width))
        {
            touchROI.dx = statsROI.width - touchROI.x;
        }
        if (Utils::RoundFLOAT(touchROI.dy + touchROI.y) > static_cast<INT32>(statsROI.height))
        {
            touchROI.dy = statsROI.height - touchROI.y;
        }

        // Calculate ratio of AE region to Crop window and send to Algo
        pHALParam->touchROI.x  = touchROI.x / statsROI.width;
        pHALParam->touchROI.y  = touchROI.y / statsROI.height;
        pHALParam->touchROI.dx = touchROI.dx / statsROI.width;
        pHALParam->touchROI.dy = touchROI.dy / statsROI.height;
        pHALParam->touchROI.weight = static_cast<FLOAT>(pTouchROIInfo->weight);

        CAMX_LOG_VERBOSE(CamxLogGroupAEC, "Output x:%f y:%f dx:%f dy %f weight:%f",
            pHALParam->touchROI.x,
            pHALParam->touchROI.y,
            pHALParam->touchROI.dx,
            pHALParam->touchROI.dy,
            pHALParam->touchROI.weight);
    }
    else
    {
        pHALParam->touchROI.weight = 0.0f;
    }
}
相关推荐
爱凤的小光6 天前
ROS之CameraInfo---个人学习篇
camera·ros1
DU_YULIN21 天前
RAW 不同比特位深度对比分析
camera
GDAL2 个月前
viewer.camera.flyTo 全面教程
cesium·camera·flyto
STCNXPARM2 个月前
Linux camera之V4L2子系统详解
android·linux·camera·v4l2架构
STCNXPARM3 个月前
Android camera之硬件架构
android·硬件架构·camera
STCNXPARM3 个月前
Linux camera之Media子系统
linux·camera·v4l2·media子系统
习惯就好zz3 个月前
地图编辑部分教程总结
godot·camera·tilemap·2d·game·tileset
故事不长丨3 个月前
安卓相机开发:Camera、Camera2与CameraX的使用对比及选型指南
android·相机·camera·camerax·camera2·移动设备·相机开发
一口Linux4 个月前
camera|16.一种修改摄像头分辨率的方法
camera·瑞芯微
jamie_chu4 个月前
显微图像采集 - 工业摄像机与图像采集软件介绍
图像处理·数码相机·camera·摄像头·图像测量·jcamerapro