首页 > 其他分享 >Provider HAL 和 Device HAL3

Provider HAL 和 Device HAL3

时间:2024-04-17 10:45:42浏览次数:20  
标签:HAL3 HAL 映射 接口 camera Device 设备

2. Camera Provider HAL 和 Camera Device  HAL3

  2.1 谷歌的Framework层定义了四个接口来与Hal3进行交互:ICameraProvider ,   ICameraDevice,   ICameraDeviceSession,   ICameraDeviceCallback

    MTK的Hal3当中定义了四个接口的实例:        CameraProviderImpl,      CameraDevice3Impl,   CameraDeviceSession3Impl,  CameraDeviceManager

    图片如下:

      

    在open流程中这四个接口是如下的关系:

(frameworks\av\services\camera\libcameraservice\device3\Camera3Device.cpp)
    Camera3Device::initialize
(frameworks\av\services\camera\libcameraservice\common\CameraProviderManager.cpp)
        CameraProviderManager->openSession()
            deviceInfo3->cameradevice->open()
(hardware\interfaces\camera\device\3.2\default\CameraDevice.cpp)
                cameraModule->open()
                CameraDeviceSession = createSession(ICameraDeviceCallback)
                    new CameraDeviceSession(ICameraDeviceCallback)
                        QCamera3HardwareInterface::initlize(ICameraDeviceCallback)
                            camera3_callback_ops = ICameraDeviceCallback

   2.2  CameraProvider Hal 与CameraDevice Hal3的组成

      CameraProvider Hal 是ICameraProvider在HAL3中的实例,本质上是包装了CameraDeviceManager 的一个适配器。其作用是让CameraService通过ICameraProvider这个接口来获取ICameraDevice。API:getCameraDeviceInterface()

      CameraDevice Hal3 是ICameraDevice 和ICameraDeviceSession在Hal3中的实例,用于给CameraService来操作每个摄像过头。本质是给予CameraDeviceManager和摄像头设备交互的 一个IVirtualDevice类型的接口。 

      这两个接口的图如下:

       

 

    2.3 CameraService 和 CameraHalService如何通过四个接口进行交互

      

           首先,CameraService通过在Framework层的 ICameraProvider 接口访问到Hal3的CameraProvider实例,而 CameraProvider 只是 ICameraDeviceManager的一层包装,因而继续访问到CameraDeviceManager。

          其次,再通过Manager来枚举设备的映射图(物理设备映射图(Physic Device Map),虚拟设备映射图(Virtual Device Map)),通过虚拟设备映射图找到虚拟设备(Virtual Device),虚拟设备中包含的摄像头设备列表

          也就是在APP获取camera list时得到的摄像头设备列表,这些Virtual Device就变成Camera Service与Hal3交互的接口。

          通过Manager中的open device map 中可以获得所有已经打开的物理设备和虚拟设备的信息。

 

    2.4  Camera Device Manager

      其是ICameraDeviceManager在HAL3的实例,通过枚举设备,打开,关闭设备来管理Camera设备。

      枚举设备会枚举物理设备和虚拟设备,物理设备又包含了(sensor name, device id, facing direction),虚拟设备又包含了(virtual device id, torch mode)。

        打开设备会包含虚拟设备,物理设备,主设备版本,次设备版本。

 

     2.5 Logic Device

      逻辑上的设备包含了ICameraDevice 和 IVirtualDevice接口,前者属于安卓的camera设备的HAL接口(被android camera service调用),以后则属于MTK的虚拟设备HAL接口(被camera device manager调用)。

       

 

       2.6 Logic Device  如何映射到 Physic Device。

        Logic Sensor 与Physic Sensor可以一对多(用一个Logic Sensor来表示双摄就有两个摄像头,就包含了两个Physic Sensor),可以多对一(一个Physic Sensor有不同的运行模式,一个模式代表用一个Logic Sensor来表示)

          映射时采用HalLogicSensorList,LogicSensorStruct来映射。

          具体映射关系看源码:/vendor/mediatek/proprietary/custom/mtk3/hal/inc/camera_custom_logicldevice.h   ( get_LogicDevice_CustomizeData() )

                    /vendor/mediatek/proprietary/hardware/mtkcam/utils/LogicCam/HalLogicDeviceList.cpp (  CreateDeviceDap(),  AddLogicDevice())

        

         映射关系图:

        

    

    2.7  Provider HAL 和 Device  HAL3的初始化

      

      最开始把HAL Service注册到Framework中的ProviderManager中,初始化时Camera Service会在ProviderManager获取HAL Service并通过ICameraProvider接口调用HIDL_FETCH_ICameraProvider来创建一个ICameraProvider的实例,

      再调用getCameraDeviceManager创建一个 Camera Device Manager,并调用其初始化函数来枚举设备,

      在枚举时会做六件事情 1.寻找sensor。2.创建HAL3的模块之IMetadataProvider。3.创建虚拟摄像头设备会创建两个实例(CameraDevice3Impl 和 CameraDevice3SessionImpl)。4.将虚拟设备,物理设备添加到相应的设备映射表中。

      

       

    2.8 Device HAL3 和 Provider HAL的接口

      Provider HAL  API主要是:

            ICameraProvider      API主要是:getCameraDeviceInterface() //通过设备名来获取ICameraDevice接口

      Device HAL3  API主要是:ICameraDevice 和 ICameraDeviceSession 的API

            ICameraDevice         API主要是:open()         //上电,创建管道管理者,APP流管理者,建立摄像头映射

                              setTorchMode()      //打开关闭闪光灯的模式

                              getCameraCharaterisLists()  //得到摄像头设备的属性

            ICameraDeviceSession    API主要是:close()        //去使能captureRequest,关闭管道,下电,删除摄像头映射

                              ConfigStreams()      //camera service通过CameraDeviceSession接口调用下来。建立新的输入输出流到APPStreamManager,并创建管道Pipeline Model。最后通过CameraDeviceSession回调到camera service

                              ProcessCaptureResult()    //camera service通过CameraDeviceSession接口调用下来。把提交请求到APPStreamManager,创建pipeline frame后添加到Pipeline Model。最后通过CameraDeviceSession回调到camera service

     

 

      

      

      

 

        

        

 

标签:HAL3,HAL,映射,接口,camera,Device,设备
From: https://www.cnblogs.com/zsy12138/p/11387776.html

相关文章

  • HAL3 overview
    总览:在cameraservice中通过四个接口来与HAL交互,CameraServer通过ICameraProvider获得一些其他接口,CameraServer通过ICameraDevice获得HAL层对于摄像头的一个抽象设备,CameraServer通过ICameraDeviceSession来进行会话,IDeviceCallback用于HAL将数据传递回Camera......
  • 【chatgpt】IoCreateDevice和IoCreateSymbolicLink是两个重要的函数
    在Windows设备驱动程序开发中,IoCreateDevice和IoCreateSymbolicLink是两个重要的函数,用于创建设备对象和符号链接,它们的作用如下:IoCreateDevice:作用:创建一个设备对象,驱动程序使用设备对象来与系统和其他驱动程序进行通信。参数:需要提供设备扩展名和设备的类型、特征以及......
  • STM32:HAL多通道ADC数据采集
    1、配置ADC,设置5个通道采集2、使能DMA设置为循环模式 生成工程后编写函数1、校准ADC,开启DMA接收,在main函数初始化部分调用#defineADC_MAX_NUM5#defineBTN_BUFF_LEN100staticuint16_tdma_adc_data[BTN_BUFF_LEN*ADC_MAX_NUM];1/**2*@brief校准adc,开......
  • datawhale-动手学图深度学习task01
    动手学图深度学习task1第一章:介绍充满图的世界图包括人类社会、化学相互作用、知识图谱等,可以分为自然定义的和人造的两种,图有时也称为网络,例如社交网络、经济网络等(这些情况下的网络指的不是深度神经网络)。图的现实世界应用社交网络:有个著名结论是6度分离(两个人之间可以......
  • MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案
    问题背景在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:RuntimeError:UnsupporteddevicetargetGPU.Thisprocessonlysupportsoneofthe['CPU'].PleasecheckwhethertheGPUenvironmentisinstalledandconfiguredcorrectly,andcheckwhethercu......
  • 基于阿里云、七牛云、宝塔面板,从零开始用Halo搭建个人博客网站
    目录目录目录购买服务器环境要求硬件配置CPU内存磁盘网络软件环境JRE(JavaRuntimeEnvironment)MySQL(可选)Web服务器(可选)Wget(可选)VIM(可选)浏览器支持名词解释~(符号)运行包工作目录购买域名服务器安装配置远程连接阿里云网页连接Xshell程序连接博客安装进行Halo的安装准备正式安装Hal......
  • docker 报错:不能选择设备驱动 could not select device driver 的解决方法(实测有效)
    Ubuntu安装完docker引擎后,在创建容器的时候指定 --gpusall,出现报错如下:报错: docker:Errorresponsefromdaemon:couldnotselectdevicedriver""withcapabilities:[[gpu]].解决该问题还需要安装Nvidia-docker,本篇参照Nvidia官网。NVIDIAContainerToolkit在许多......
  • 电脑开机时报错No Bootable Device找不到索引的解决方法
      本文介绍笔记本电脑出现NoBootableDevice错误提示,且无法开机的多种解决办法。1问题产生  最近,笔记本电脑正在正常使用时,突然蓝屏,出现你的设备遇到问题,需要重启。的提示;最下方的终止代码具体是CRITICAL_PROCESS_DIED还是SYSTEM_SERVICE_EXCEPTION有点记不太清楚了,不过这......
  • CH582/CH592_EVT中RF_Device(主机)例程详解_底层自动跳频管理_支持一对七通讯
    目标程序路径: 与RF_Device程序相比,RF_Host主要讲解三个地方,其他接口与RF_Device一致,查看这篇博客:CH582/CH592_EVT中RF_Device(从机)例程详解_底层自动跳频管理_支持一对七通讯1、Host配对绑定逻辑:程序中默认逻辑为上电后前三秒钟允许配对绑定新设备,超过三秒钟则从flash中取出......
  • 读论文-基于序列_会话的推荐_挑战,方法,应用和机遇(Sequential_Session-based Recommend
    前言今天读的论文为一篇于2022年7月7日发表在第45届国际ACM信息检索研究与发展会议论文集(Proceedingsofthe45thInternationalACMSIGIRConferenceonResearchandDevelopmentinInformationRetrieval.)的论文,文章主要讲述了序列推荐系统(SRSs)和基于会话的推荐系统(SBRSs......