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;
    }
}
相关推荐
c枫_撸码的日子5 天前
CamX-骁龙相机修改
camera
Godspeed Zhao10 天前
自动驾驶中的传感器技术17——Camera(8)
人工智能·机器学习·自动驾驶·camera·cis
Godspeed Zhao11 天前
自动驾驶中的传感器技术24——Camera(15)
人工智能·机器学习·自动驾驶·camera·摄像头
Godspeed Zhao14 天前
自动驾驶中的传感器技术13——Camera(4)
人工智能·机器学习·自动驾驶·camera·摄像头
c枫_撸码的日子14 天前
Camx-查看sensor mode 和效果参数
camera
Godspeed Zhao15 天前
自动驾驶中的传感器技术14——Camera(5)
人工智能·机器学习·自动驾驶·camera·摄像头
干一行,爱一行19 天前
如何在android framewrok dump camera data
android·camera
点云兔子20 天前
激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定
camera·lidar·calib·fisheye
Logcater23 天前
Linux和Windows基于V4L2和TCP的QT监控
linux·c++·qt·嵌入式·camera·v4l2