高通相机系统-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,然后根据流配置进行裁剪。

猜你喜欢

转载自blog.csdn.net/hongyeying/article/details/128286901
今日推荐