积分305 / 贡献0

提问7答案被采纳4文章45

[经验分享] OpenHarmony Camera-hcs_deal.cpp文件解析 原创

润开鸿_闻飞 显示全部楼层 发表于 2024-9-11 15:38:34

代码基于OpenHarmony-v3.2.2-Release的基线

hcs_deal.cpp文件解析:drivers/peripheral/camera/hal/hdi_impl/src/camera_host/hcs_deal.cpp

1、Init()方法

        ---> DeviceResourceGetIfaceInstance(HDF_CONFIG_SOURCE); --- drivers/hdf_core/framework/utils/src/hcs_parser/device_resource_if.c

            功能介绍:调用hcb解析工具,关于hcb的文件介绍参见:https://gitee.com/personal-summa ... ule/HCB_Analysis.md


        ---> DealHcsData();


2、DealHcsData()方法

        功能介绍:遍历hcb中camera_host_config节点下所有的node节点然后调用DealCameraAbility()处理


3、DealCameraAbility()方法

        ---> pDevResIns->GetString(&node, "logicCameraId", &cameraId, nullptr);

                功能介绍:设置cameraId = "lcam001"

        ---> DealPhysicsCameraId(node, phyCameraIds);

                功能介绍:设置phyCameraIds变量的值

        ---> cameraIdMap_.insert(std::make_pair(std::string(cameraId), phyCameraIds));

                功能介绍:将cameraId和phyCameraIds进行配对保存

        ---> DealMetadata(cameraId, *metadataNode);

                功能介绍:处理metadata的node数据


4、DealPhysicsCameraId()方法

        功能介绍:设置cameraIds = ["CAMERA_FIRST"]


5、DealMetadata()方法

        功能介绍:理metadata的数据

        CameraMetadata介绍参见:drivers/peripheral/camera/interfaces/metadata/src/camera_metadata_info.cpp


6、GetMetadata()方法

        功能介绍:获取metadataMap


7、GetCameraId()方法

        功能介绍:获取cameraIdMap


8、DealAvaliableBasicConfigurations方法

        功能介绍:
                        1.
                         解析camera_host_config.hcs中的条目
                         basicAvailableConfigurations = [1, 640, 480, 4, 1280, 960];
                         其中1和4对应的是formatArray的0和3位置的值放入到basicConfigAvaliableInt32s
                         其他数据直接放入到basicConfigAvaliableInt32s中
                         std::vector<camera_format_t> formatArray = {
                              OHOS_CAMERA_FORMAT_RGBA_8888,
                                 OHOS_CAMERA_FORMAT_YCBCR_420_888,
                             OHOS_CAMERA_FORMAT_YCRCB_420_SP,
                                 OHOS_CAMERA_FORMAT_JPEG
                         };
                         解析完了之后basicConfigAvaliableInt32s的值为
                         basicConfigAvaliableInt32s = [
                              OHOS_CAMERA_FORMAT_RGBA_8888,
                             640, 480,
                             OHOS_CAMERA_FORMAT_JPEG,
                             1280, 960
                         ]
                        2.
                         调用metadata->addEntry()方法将basicConfigAvaliableInt32s值关联给
                         OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS
                        3.
                         该数据其中之一的解析地方:foundation/multimedia/camera_framework/frameworks/native/camera/src/input/camera_manager.cpp +789
                         其中之二的解析地方:foundation/multimedia/camera_framework/services/camera_service/src/camera_util.cpp +166

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部