高通camera学习笔记二

高通camera daemon进程

1.概述
高通在Android的camera架构中,依旧沿用了其传统的方式,将其自身的一些处理放在一个daemon进程中。这部分内容出于应用于driver之间,是为了保护自身及硬件厂商的利益而专门弄出来的一个东东。其它各家平台也采用类似的方式将这部分的处理放在HAL层处理。

2.进程的入口
    做为一个单独的进程,那肯定是有其main函数入口的。在vendor\qcom\proprietary\mm-camera\mm-camera2\server-imaging\server.c文件中可以看到这个main函数。在这个函数中主要做了以下几件事情。
    1.找到服务节点的名字并打开此节点
        get_server_node_name(serv_hal_node_name)
        ......
        hal_fd->fd[0] = open(dev_name, O_RDWR | O_NONBLOCK); //这里dev_name为节点名如"/dev/serv_hal_node_name"
    2.初始化模块。目前有sensor、iface、isp、stats、pproc及imglib六个模块(见笔记一)
        server_process_module_init();
    3.进入主循环来处理来自HAL及MCT的事件及消息,处理完之后的结果反馈给kernel(msm.c)
        RD_FD_HAL
            ----> server_process_hal_event(&event)。此函数如果返回真,表示事件消息已经传给了MCT,这时不需要发送CMD ACK给kernel,因为MCT处理结束后会发出通知。如果返回假,表示没有传到MCT,此时需要立即发送CMD ACK到kernel,以便HAL发送此消息的线程阻塞住。
        RD_DS_FD_HAL —— 通过domain socket传自HAL的消息
            ----> server_process_hal_ds_packet(fd_info->fd
        RD_PIPE_FD_MCT —— 来自media controller的消息

时间: 2024-08-04 23:12:02

高通camera学习笔记二的相关文章

高通camera学习笔记三

media controller线程 1.概述    MCT线程是camera新架构的引擎部分,负责对管道的监控,由此来完成一个camera设备的控制运转.它运行在daemon进程空间,由MSM_CAMERA_NEW_SESSION事件来开启,具体开启函数为mct_controller_new(). 2.mct_controller_new()函数    此函数创建一个新的MCT引擎,这将对应一个事务的pipeline.我们知道上层可以创建多个事务,每个对应一个camera,也对应自己的MCT及

高通camera学习笔记(一)

高通新的camera驱动架构设计发生了一些变化,借用互联网上常用的一种结构,大致的原理如此:将camera的所有功能划分为不同的模块,让模块自己来决定自己的事情(高内聚,低耦合),模块需要有统一的接口和格式.模块中有端口,通过端口把模块连接起来,又把模块挂在总线上.每一个端口的连接就是一个流,把这些流用pipeline来管理.每次启动一个camera就创建一个会话,由这个会话来管理此camera的一切事物.对于每一个会话,模块是共享的,它可以是camera的硬件资源也可以是其它资源(如一些软件算

高通camera学习笔记五(actuator驱动参数解析)

1.概述 actuator驱动信息文件是指vendor目录下的$ActuatorName_actuator.h文件(如gigaset_actuator.h).此信息文件就是一个actuator_driver_ctrl_t结构体.包括actuator_params与actuator_tuned_params两部分,即driver与tunning两部分.文档以目前最主流的VCM为例进行参数的介绍. 2.driver部分信息——actuator_params act_type: actuator类型,

高通camera学习笔记四

sensor模块 1.概述 sensor模块是众多模块中的一个,主要是由模组的各个硬件模块组成,包括sensor.Flash.Af.EEprom.OIS.CSI等.这个模块主要描述了模组硬件的一些工作原理及部分驱动相关部分. 2.module_sensor_init()函数 在前面讲到的server process中提到,服务进程开始后会初始化各个模块,其中就包括sensor模块,sensor初始化入口函数即为module_sensor_init(...).这个函数将创建sensor模块并返回其

马哥学习笔记二十二——高可用集群原理

HA Resource:资源 FailOver:故障转移 FailBack:故障转回 资源粘性:资源是否倾向于留在当前节点 Messaging Layer:集群服务信息层,基于UDP互相传递心跳信息,集群事务信息等 heartbeat(v1,v2,v3) heartbeat v3:heartbeat,pacemaker,cluster-glue corosync cman keepalived ultramonkey CRM:(cluster resource manager)集群资源管理器,统

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来

Python学习笔记<二>:列表、元组、字典

1 列表和元组 可以将列表和元组当成普通的"数组",它能保存任意数量任意类型的Python 对象.和数组一样,通过从0 开始的数字索引访问元素,但是列表和元组可以存储不同类型的对象. 列表和元组有几处重要的区别.列表元素用中括号( [ ])包裹,元素的个数及元素的值可以改变.元组元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以).元组可以看成是只读的列表.通过切片运算( [ ] 和 [ : ] )可以得到子集,这一点与字符串的使用方法一样. 举例如下: >>>