高通camera学习笔记三

media controller线程

1.概述
    MCT线程是camera新架构的引擎部分,负责对管道的监控,由此来完成一个camera设备的控制运转。它运行在daemon进程空间,由MSM_CAMERA_NEW_SESSION事件来开启,具体开启函数为mct_controller_new()。

2.mct_controller_new()函数
    此函数创建一个新的MCT引擎,这将对应一个事务的pipeline。我们知道上层可以创建多个事务,每个对应一个camera,也对应自己的MCT及pipeline等。因此这个函数的主要完成以下几件事情:
    1.mct_pipeline_new()
        ---->创建一个Pipeline及其bus,并完成pipeline函数的映射。
    2.mct_pipeline_start_session()
        ---->开启camera的所有模块并查询其能力
    3.pthread_create(..., mct_controller_thread_run, ...)
        ---->创建mct线程并开始执行
    4.pthread_create(..., mct_bus_handler_thread_run, ...)
        ---->创建bus处理线程

3.mct_list_traverse()函数
    此函数在整个mct线程中大量使用,主要用来遍历所有模块并执行一些处理工作。结合前面所讲,camera各模块都具有统一的接口,通过流来连接,模块中又包含模块,根据这种特性高通使用链表结构来保存这些模块并设计了此函数用来完成遍历操作。
    1.先来看看此链表的节点结构。链表的节点其实也是一个链表,整个链表就好像是一串串同级的节点搭建而成,整个数据结构组成一颗树结构。
        struct _mct_list {

void             *data;  // 节点数据

mct_list_t    *prev;  // 上一个节点地址

mct_list_t    **next; // 下一个节点节点元素数组首地址

uint32_t       next_num; // 下一个节点节点元素数,大部分情况下为1
        }mct_list_t;

2.通过递归的深度优先算法来遍历整棵树。

时间: 2024-10-20 06:35:17

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

高通camera学习笔记二

高通camera daemon进程 1.概述 高通在Android的camera架构中,依旧沿用了其传统的方式,将其自身的一些处理放在一个daemon进程中.这部分内容出于应用于driver之间,是为了保护自身及硬件厂商的利益而专门弄出来的一个东东.其它各家平台也采用类似的方式将这部分的处理放在HAL层处理. 2.进程的入口    做为一个单独的进程,那肯定是有其main函数入口的.在vendor\qcom\proprietary\mm-camera\mm-camera2\server-imag

高通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学习笔记(一)

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

高通camera学习笔记四

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

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

加壳学习笔记(三)-简单的脱壳思路&调试思路

首先一些windows的常用API: GetWindowTextA:以ASCII的形式的输入框 GetWindowTextW:以Unicaode宽字符的输入框 GetDlgItemTextA:以ASCII的形式的输入框 GetDlgItemTextW:以Unicaode宽字符的输入框 这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目.还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

Silverlight动画学习笔记(三):缓动函数

(一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效果,但可能需要执行大量的工作,并且与使用算术公式相比动画的精确性将降低. (三)实例讲解: 1 <UserControl x:Class="AnimationStudy.EasingFunctionAnimation" 2 xmlns="http://schemas.mic