Camx关键流程和log

一、重要log关键字:
cameraservice::conn   //查看api和camera id

camxpipeline.cpp
"Topology: Creating Pipeline %s, numNodes %d isSensorInput %d isRealTime %d",    //查看pipeline和node数
"Topology::%s Node::%s Type %d numInputPorts %d numOutputPorts %d",
"Topology: Pipeline[%s] Link: Node::%s(outPort %d) --> (inPort %d) Node::%s using format %d"  //查看所有pipeline和link node


chxsensorselectmode.cpp
"cameraId:%d, Selected Usecase: %d, SelectedMode W=%d, H=%d, FPS:%d, NumBatchedFrames:%d, modeIndex:%d"   //查看最终选择的usecase(见底部SensorModeSelectUseCase)和sensormode以及modeIndex

CHX_LOG_CONFIG("Session_parameters FPS range %d:%d, previewFPS %d, videoFPS %d "
                       "BatchSize: %u HALOutputBufferCombined %d FPS: %u SkipPattern: %u, "
                       "cameraId = %d selected use case = %d",
                       minSessionFps,
                       maxSessionFps,
                       m_previewFPS,
                       m_videoFPS,
                       m_usecaseNumBatchedFrames,
                       m_HALOutputBufferCombined,
                       m_usecaseMaxFPS,
                       *m_pStatsSkipPattern,
                       logicalCameraId,
                       selectedUsecaseId);

CHX_LOG_CONFIG("MultiCamera usecase selected");
CHX_LOG_CONFIG("ZSL usecase selected");
CHX_LOG_CONFIG("Raw + JPEG usecase selected");
CHX_LOG_CONFIG("Default usecase selected");

CHX_LOG_INFO("usecase ID:%d",usecaseId);  //最终选择的usecaseId

CHX_LOG("Selected EISv3 usecase");
CHX_LOG("Selected EISv2 usecase");
CHX_LOG_INFO("usecase %s, pipelineName %s",        //最终选择的usecase
            pSelectedUsecase->pUsecaseName, pSelectedUsecase->pPipelineTargetCreateDesc->pPipelineName);

二、usecaseId和usecase关键流程:
CDKResult ExtensionModule::InitializeOverrideSession(
    uint32_t                        logicalCameraId,
    const camera3_device_t*         pCamera3Device,
    const chi_hal_ops_t*            chiHalOps,
    camera3_stream_configuration_t* pStreamConfig,
    int*                            pIsOverrideEnabled,
    VOID**                          pPrivate)
{
   selectedUsecaseId = m_pUsecaseSelector->GetMatchingUsecase(...)   //选择的usecaseId
   CHX_LOG_CONFIG("Session_parameters FPS range %d:%d, previewFPS %d, videoFPS %d "
                       "BatchSize: %u HALOutputBufferCombined %d FPS: %u SkipPattern: %u, "
                       "cameraId = %d selected use case = %d",
                       minSessionFps,
                       maxSessionFps,
                       m_previewFPS,
                       m_videoFPS,
                       m_usecaseNumBatchedFrames,
                       m_HALOutputBufferCombined,
                       m_usecaseMaxFPS,
                       *m_pStatsSkipPattern,
                       logicalCameraId,
                       selectedUsecaseId);

   m_pSelectedUsecase[logicalCameraId] = m_pUsecaseFactory->CreateUsecaseObject(...)  //根据usecaseId,创建usecase
}


chxusecaseutils.cpp
UsecaseId UsecaseSelector::GetMatchingUsecase(
    const LogicalCameraInfo*        pCamInfo,
    camera3_stream_configuration_t* pStreamConfig,
    cam_app_type appType)
{
CHX_LOG_CONFIG("MultiCamera usecase selected");
CHX_LOG_CONFIG("ZSL usecase selected");
CHX_LOG_CONFIG("Raw + JPEG usecase selected");
CHX_LOG_CONFIG("Default usecase selected");

CHX_LOG_INFO("usecase ID:%d",usecaseId);  //最终选择的usecaseId
}

chxusecaseutils.cpp
ChiUsecase* UsecaseSelector::DefaultMatchingUsecase(
    camera3_stream_configuration_t* pStreamConfig)
{
    CHX_LOG_INFO("Adding prune setting #%u - %s = %s", pruneSettings.numSettings, pGroup, pType);
    CHX_LOG("Only selecting GPU usecases");
    CHX_LOG("UsecaseVideoHFRNo3A is selected for HFR");
    CHX_LOG("Selected EISv3 usecase");
    CHX_LOG("Selected EISv2 usecase");
    CHX_LOG_INFO("usecase %s, pipelineName %s",        //最终选择的usecase
            pSelectedUsecase->pUsecaseName, pSelectedUsecase->pPipelineTargetCreateDesc->pPipelineName);
}


chxusecaseutils.cpp
Usecase* UsecaseFactory::CreateUsecaseObject(
    LogicalCameraInfo*              pLogicalCameraInfo,     ///< camera info
    UsecaseId                       usecaseId,              ///< Usecase Id
    camera3_stream_configuration_t* pStreamConfig)          ///< Stream config
{
    switch (usecaseId)
    {
        case UsecaseId::PreviewZSL:
        case UsecaseId::VideoLiveShot:
            pUsecase = AdvancedCameraUsecase::Create(pLogicalCameraInfo, pStreamConfig, usecaseId);
            break;
        case UsecaseId::MultiCamera:
            ...
            pUsecase = UsecaseDualCamera::Create(pLogicalCameraInfo, pStreamConfig); ...
            pUsecase = UsecaseMultiCamera::Create(pLogicalCameraInfo, pStreamConfig); ....
            break;
        case UsecaseId::Torch:
            pUsecase = UsecaseTorch::Create(pLogicalCameraInfo, pStreamConfig);
            break;
        case UsecaseId::SuperSlowMotionFRC:
            pUsecase = UsecaseSuperSlowMotionFRC::Create(pLogicalCameraInfo, pStreamConfig);
            break;
        ...
    }
}

chxadvancedcamerausecase.cpp
AdvancedCameraUsecase* AdvancedCameraUsecase::Create(
    LogicalCameraInfo*              pCameraInfo,
    camera3_stream_configuration_t* pStreamConfig,
    UsecaseId                       usecaseId)
{
     pAdvancedCameraUsecase->Initialize(pCameraInfo, pStreamConfig, usecaseId);
}


CDKResult AdvancedCameraUsecase::Initialize(
    LogicalCameraInfo*              pCameraInfo,   ///< Camera info
    camera3_stream_configuration_t* pStreamConfig, ///< Stream configuration
    UsecaseId                       usecaseId)     ///< Identifier for the usecase function
{
    FeatureSetup(pStreamConfig);
    SelectUsecaseConfig(pCameraInfo, pStreamConfig);
}

CDKResult AdvancedCameraUsecase::SelectUsecaseConfig(
    LogicalCameraInfo*              pCameraInfo,   ///< Camera info
    camera3_stream_configuration_t* pStreamConfig)  ///< Stream configuration
{
    if ((UsecaseId::PreviewZSL    == m_usecaseId) ||
        (UsecaseId::YUVInBlobOut  == m_usecaseId) ||
        (UsecaseId::VideoLiveShot == m_usecaseId) ||
        (UsecaseId::MultiCamera   == m_usecaseId) ||
        (UsecaseId::QuadCFA       == m_usecaseId) ||
        (UsecaseId::RawJPEG       == m_usecaseId))
    {
        ConfigureStream(pCameraInfo, pStreamConfig);
        BuildUsecase(pCameraInfo, pStreamConfig);
    } else {
        m_pChiUsecase = UsecaseSelector::DefaultMatchingUsecase(pStreamConfig);
    }
}

AdvancedCameraUsecase::ConfigureStream(..)
{
    AdvancedCameraUsecase::ConfigFdStream() //在640x480的基础上进行裁剪,
    // 4:3 -> 640x480
    // 16:9 -> 640x360
    // 1:1 -> 480x480
    // 20:9 -> 640x288  (全屏2400x1080,20:9)
}

/// @brief Usecase identifying enums

enum class UsecaseId
{
    NoMatch             = 0,
    Default             = 1,
    Preview             = 2,
    PreviewZSL          = 3,
    MFNR                = 4,
    MFSR                = 5,
    MultiCamera         = 6,
    QuadCFA             = 7,
    RawJPEG             = 8,
    MultiCameraVR       = 9,
    Torch               = 10,
    YUVInBlobOut        = 11,
    VideoLiveShot       = 12,
    SuperSlowMotionFRC  = 13,
    VivoReprocess       = 14,
    MaxUsecases         = 15,
};

/// @brief This enumerates usecases for sensor select mode
enum SensorModeSelectUseCase
{
    UsecaseFastAEC = 0,     ///< Fast AEC
    UsecaseQuadra,          ///< Quadra
    UsecaseHFR,             ///< High frame rate  //2
    UsecaseIHDR,            ///< Interlaced HDR
    UsecaseRHDR,            ///< RHDR      //4
    UsecaseVHDR,            ///< Video HDR
    UsecaseSnapshot,        ///< Snapshot    //6
    UsecaseVideoPreview,    ///< Video preview   //7
    UsecaseFS,              ///< Fast shutter
    UsecaseRTBO,            ///< RTB     //9
    UsecaseFD,              ///< FD      //10
    UsecaseVideo8K,         ///< Video8K
    UsecaseVideo,           ///< Video
    UsecaseUNBINNING,       ///Remosaic ROI
    UsecaseVideoSurperEis,   ///< VideoSurperEis
    MaxModeSelectUsecase    ///< Max
};

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值