我是靠谱客的博主 狂野铃铛,最近开发中收集的这篇文章主要介绍高通相机系统-usecase配置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

高通相机系统用usecase描述一个相机的使用场景。相机场景配置以序列化的形式保存在g_sm8350_usecase.xml。工程构建阶段配置转换脚本usecaseconverter.pl解析这些usecase配置,以数据结构的形式组织管理,最终以so的形式提供一组访问这些usecase配置的接口。

1.usecase配置转换

 2.usecase配置操作接口的加载

 3.加载usecase配置

ExtensionModule加载动态链接库中实现的usecase配置操作接口后,首先需要将usecase配置数据导入,后续才能通过usecase操作接口获取配置。

通过PopulatePipelineData(),ExtensionModule将sm8350 usecase配置数据导入。

//chi-cdk/core/chiframework/chxextensionmodule.cpp
ExtensionModule::ExtensionModule()
    :...
{
    //1.加载usecase selector实现
    const CHAR* pChiusecaseSelector = "/vendor/lib/com.qti.chiusecaseselector.so";
    m_chiUsecaseHandle = ChxUtils::LibMap(pChiusecaseSelector);
    //2.获取usecase selector导出配置函数
    ChiPopulatePipelineData pFuncPopulatePipelineData = 
        reinterpret_cast<ChiPopulatePipelineData>(
        	ChxUtils::LibGetAddr(m_chiUsecaseHandle, "PopulatePipelineData"));
    //3.导出usecase配置
    pFuncPopulatePipelineData(m_platformID);
    ...
}

 4.操作usecase配置

usecase配置数据导入后,就可以通过UsecaseSelector提供的操作接口操作usecase配置了。

usecase配置操作接口有:

//chi-cdk/oem/qcom/chiusecase/common/chxusecaseselector.cpp
//1.导入配置
extern "C" CAMX_VISIBILITY_PUBLIC  VOID PopulatePipelineData(
    INT32 socId)extern "C" CAMX_VISIBILITY_PUBLIC  VOID PopulatePipelineData(
    INT32 socId)
//获取匹配的usecase选择器
extern "C" CAMX_VISIBILITY_PUBLIC ChiUsecase* UsecaseSelector::DefaultMatchingUsecaseSelection(
    camera3_stream_configuration_t* pStreamConfig,
    UINT32                          bpp)
//获取默认匹配的usecase
extern "C" CAMX_VISIBILITY_PUBLIC ChiUsecase* GetDefaultMatchingUsecase(
    camera3_stream_configuration_t* pStreamConfig,
    UINT32                          bpp)
//根据streamConfigure裁剪usecase
extern "C" CAMX_VISIBILITY_PUBLIC  CDKResult PruneUsecaseByStreamConfig(
    const camera3_stream_configuration* pStreamConfig,
    const ChiUsecase*                   pUsecaseInputDescriptor,
    ChiUsecase**                        ppUsecaseOutputDescriptor)

//获取配置中enumName-enumValue映射表
extern "C" CAMX_VISIBILITY_PUBLIC VOID* GetMapFromLibEnum()
//获取配置中usecaseName-usecaseInstance映射表
extern "C" CAMX_VISIBILITY_PUBLIC VOID* GetMapFromLibpChiUsecase()
//获取配置中usecaseCollectionName-usecaseCollection映射表
extern "C" CAMX_VISIBILITY_PUBLIC VOID* GetMapFromLibpChiTargetUsecases()
//
extern "C" CAMX_VISIBILITY_PUBLIC VOID*  GetMapFromLibStringArray()

usecase配置管理模块根据taget个数将usecase进行分组。一个分组中的usecase拥有相同个数的target,构成一个collection(用ChiTargetUsecase数据结构表示)。usecase分组中的一个usecase是一个实例,用ChiUsecase数据结构表示。

5.使用实例 

以轻颜后置预览为例,对configure_streams阶段创建advancedCameraUsecase过程中usecase配置操作进行说明。

 advanced usecase实例的构建可以分为两个阶段:clone 默认的usecase,然后根据流配置进行裁剪。

最后

以上就是狂野铃铛为你收集整理的高通相机系统-usecase配置的全部内容,希望文章能够帮你解决高通相机系统-usecase配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部