- 博客(39)
- 收藏
- 关注
原创 【Camera KMD ISP SubSystem笔记】Request 流转与Bubble机制
/把出现bubble request开始到last appiled之间的request都标为CRM_SLOT_STATUS_REQ_ADDED,__cam_req_mgr_apply_on_bubble(link, err_info);
2024-04-27 16:54:40 750
原创 【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ③
如何填写fence dependency(chi node),主要为chinodewarpper调用chinode。如何填写chi fence dependency图,同样主要为chinodewarpper调用chinode。如何填写fence dependency(camxnode),以IPE NODE为例。Chi Fence(non-buffer) Create举例(EISV2)Chi Fence(non-buffer) Signal举例(EISV2)如何填写dependency。
2024-04-25 20:54:02 423
原创 【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ②
每个Node需要填写自己处理一个request需要的dependency(chifence, fence, metadata/property),只有所有的dependency都满足后,DRQ才会调度线程池去安排node处理request。所有的Dependency会先加入到m_deferredNodes 链表中,当所有的Dependency满足时会添加到m_readyNodes链表中。Dependency:(node填充完Dependency后会送到DRQ,这个是转换为属于DRQ的Dependency)
2024-04-25 13:15:15 1002
原创 【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ①
2. 当上层下request 经过TFE后,TFE为输出port创建一个fence id(通过CSL、syncManager、cam_sync driver创建一个sync object row,返回fence id)3. TFE 拿到 fence id后,同时将fence id和buffer送给ISP驱动,ISP填充buffer后,通知row已经完成,这时 cam_sync driver上层一个event给syncManager,4. OPE 同样为输出port创建一个fence id、同3。
2024-04-25 02:05:11 328
原创 【Camera KMD ISP SubSystem笔记】CRM V4L2驱动模型
2. cpas为子设备 /dev/v4l2-subdev0,先创建 v4l2_subdev,v4l2_subdev的list指向v4l2_device的subdevs(链表节点)v4l2_subdev的v4l2_dev指向v4l2_device,v4l2_subdev的entity链接到media_device的entities上(链表节点)v4l2_device的mdev指向media_device,v4l2_device的entity链接到media_device的entities上(链表节点)
2024-04-23 23:47:44 325 2
原创 【Qcom Camera】DumpDebugInfo分析
/request 1238 Report Bubble,recovery done //ISP apply request 1241失败在它之后,并且没有为request 1241生成buffer,所以UMD不能获取request 1241的 IFE fence callbacks。--> Check 相应request的DRQ dump看它未满足的prop,确定这些prop由哪个node publish --> 继续追踪相应request 会publish prop的DRQ dump -->...
2024-04-22 22:41:30 777
原创 【Camera Sensor Driver笔记】七、点亮指南之Flash
registerAddr 0x2 flashhigh setting寄存器地址。echo 1 >` led\:flash_0/brightness //开启flash,高亮几秒后熄灭。echo 1 >` led\:torch_0/brightness //开启手电筒,闪光灯常亮。echo 0 >` led\:flash_0/brightness //关闭flash。echo 0 >` led\:torch_0/brightness //关闭手电筒。
2024-04-22 22:35:23 353
原创 【Camera Sensor Driver笔记】六、点亮指南之PDAF
> ① 图像数据 -> PD Pixel correction 进行坏点矫正(将PD点还原为正常的像素点) -> ISP -> ② PD Buffer相位计算 -> ISP。PDStride 1984 pd stats 行buffer大小(一个pixel占两个字节,sensor中pd的width * 2)PDPixelCount 32 一个block里pd点数量,包括左右pd。PDYCoordinate 0 y坐标。
2024-04-22 12:53:57 444
原创 【Camera Sensor Driver笔记】五、点亮指南之Actuator配置
dampingStep 0x3FF dac最大值,未使用。dampingStep 0x3FF dac最大值,未使用。<registerConfig> DAC register 配置信息。registerAddr 0xED IC寄存器地址。registerData 0xAB IC寄存器值。registerAddr 0x03 寄存器地址。registerData 0 dac值,未使用。
2024-04-22 00:10:56 383
原创 【Camera Sensor Driver笔记】四、点亮指南之EEPROM配置
lensSagCalMac DEFAULT/DEG0_OTP/DEG180_OTP 近焦姿势差补偿。lensSagCalInf DEFAULT/DEG0_OTP/DEG180_OTP 远焦姿势差补偿。illuminantType D65/TL84/A/D50/H 色温。configValue 0 电压/电平/时钟状态。configValue 0 电压/电平/时钟状态。
2024-04-22 00:08:00 931
原创 【Camera Sensor Driver笔记】三、点亮指南之Sensor DTS
== camera sensor 接口配置xxsensor.cpp -> xxxsensor.soCalculateExposure 函数 pCalculateExposure函数 (平台)输入参数: pCalculateExposureData realgain :total gain,ae算法传过来的值或者手动曝光的值 linecount:经过平台已经转换过的曝光时间 middlerealg
2024-04-19 12:24:18 459
原创 【Camera Sensor Driver笔记】二、点亮指南之Sensor Module XML
registerAddr 0x0600 sensor寄存器地址。registerAddr 0x0112 sensor寄存器地址。registerAddr 0x0136 sensor寄存器地址。registerAddr 0x0100 sensor寄存器地址。registerAddr 0x0104 sensor寄存器地址。registerAddr 0x0104 sensor寄存器地址。
2024-04-18 23:07:04 657
原创 【Camera Sensor Driver笔记】一、Sensor基本概念
lineLengthPixelClock(hts):对应sensor实际寄存器值, width + HBlank。frameLengthLines(vts):对应sensor实际寄存器值,height + VBlank。2. OutputPixelClock:给mipi传输使用的,影响sensor传输的速率。LineReadoutTime:sensor是行曝光,即一行数据读完的时间。1. VTPixelClock:会影响sensor内部的帧率、曝光。== Sensor 帧率。== Sensor 曝光。
2024-04-17 23:17:57 280
原创 【Camera Framework笔记】五、流程梳理 - 抢占逻辑
2. 根据当前想打开的camera信息创建一个clientdescriptor,调用cameraclientmanager的wouldEvict方法拿到需要Evicted的列表。冲突的定义:(curkey 当前打开的client A camera 0,key 想打开的client B camera 0)当前打开的client A camera 0 == 想打开的client B camera 0 ||当前打开的client A 冲突列表中包含想打开的client B camera 0 ||
2024-04-17 00:58:59 303
原创 【Camera Framework笔记】四、流程梳理 - getCharacteristics&openCamera
score 打开当前Camera的客户端进程oom_adj score,这个值越大越容易被LMK干掉,前台进程这个值为0。score 打开当前Camera的客户端进程oom_adj score,这个值越大越容易被LMK干掉,前台进程这个值为0。state 打开当前Camera的客户端进程的状态,值越小优先级越高。state 打开当前Camera的客户端进程的状态,值越小优先级越高。权限检查、输入参数检查->camera抢占逻辑->client初始化->device初始化。
2024-04-15 13:12:41 322
原创 【Camera Framework笔记】三、Camera Native Framework架构②
FrameProcessorBase拿到Result Metadata后会回调给CameraDeviceClient,CameraDeviceClient再通过onResultReceived接口回调给上层。camera3device根据配置信息决定创建 camera3inputstream camera3outputstream camera3sharedstream。CameraDeviceClient收到上层的调用后,会对应调用到Camera3Device,进而调用到HAL层的接口。
2024-04-14 18:09:18 314
原创 【Camera Framework笔记】二、Camera Native Framework架构①
上层调用到 cameraservice后,cameraservice 调用cameraprovidermanager, cameraprovidermanager 通过 providerinfo对象 调用到 providerinfo类,providerinfo 中通过遍历 device调用到 deviceinfo -> deviceinfo3 -> aidlDeviceinfo3/hidlDeviceinfo3 类中。basicClient又可以调用到 cameraservice。
2024-04-14 18:07:00 353
原创 【Camera 性能笔记】六、Perfetto分析及SQL
uninterruptible sleep NON IO 不可中断的休眠,非IO 在等内核锁,通常是低内存导致等待。mem.locked VmLck VmLck代表进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘。mem.rss VmRSS RSS值,这里的值是RssAnon、RssFile和RssShmem的和。oom_score_adj oom_score_adj 当前该进程的OOM Score ADJ值。
2024-04-13 00:23:21 284
原创 【Camera Framework笔记】一、Cameraserver简介及启动、实例化流程
并将以上两个参数add到 servicemanager,这时cameraservice就已经成功注册到servicemanager中了,查看命令:service list | grep -i “media.camera”此时new出来的 cameraservice 会赋值给sp(调用完cameraservice构造函数后,继续调用CameraService::onfirstRef)tcp通信中,比如 a与b通信,如果b关闭了通信,系统会发出一个sigpipe信号给a,告诉a连接已经断开。
2024-04-10 23:41:45 263
原创 【Camera 性能笔记】五、启动、切换、拍照性能分析
initializeimpl、cameradeviceclient::initializeimpl、camera2clientbase::initializeimpl、camera3device的initializeimpl、camerahal::opensession。cameraserver:createstream-> cameraserver:endConfigure的结束点。调用camera3device的createstream、new camera3outputstream。
2024-04-09 13:22:58 381
原创 【Camera 性能笔记】四、帧率之预览、录像trace分析
EmulateSensor中有threadlloop和processresult,鼠标全选整个周期,用selected range / (result的occurrences / 2) ,除以2是因为result中同时包含meta和buffer,我们只需要buffer。从app角度做第一手分析,看是hal送的帧率问题,还是app处理buffer导致的问题。如果deepth是8个,fw下8个pcr,hal处理8个pcr,fw下第9个时会卡住。1.HAL处理慢:cameraserver的pcr时间会很长。
2024-04-07 13:10:09 196
原创 【Camera 性能笔记】三、帧率之预览buffer分析
2.cameraServer会执行bufferqueue的queuebuffer,把buffer还给bufferqueue,再通过binder调用到cameraAPP的queuebuffer。2.cameraServer会执行bufferqueue的queuebuffer,把buffer还给bufferqueue,再通过binder调用到cameraAPP的queuebuffer。surfaceTexture类型 app参与buffer处理。每帧的buffer 都是shutter先返回。
2024-04-03 01:34:55 397
原创 【Camera 性能笔记】二、软件栈
2.still capture结束会有一个 queuebuffer上来,binder transaction调用到app进程imageReader。4.继续 queuebuffer,onframeavailable,binder transaction调用到sufaceFligure。(queuebuffer:送 buffer,dequeuebuffer:取 buffer)3.binder transaction 调用到app进程的binder reply。为1时表示 预览或拍照buffer。
2024-04-01 13:07:08 120
原创 【Camera 性能笔记】一、perfetto关键操作
flow events : 通常用于binder transaction 到 binder reply之间,可以通过[ 和 ] 进行切换。privot table弹出框中点击edit -> select a cloumn 选择name stack -> add、query。perfetto网站 -> support flag -> privot table -> enable。搜索关键词之后,可以点击f 进行快速显示。如何打开privot table。shift m 永久选中区域。
2024-04-01 00:09:35 105
原创 【OHOS】Camera - NAPI 异步编程
目前鸿蒙媒体框架相机部分,常见的异步方式共两种。表现形式:func(): Promise<Object>表现形式:func(callback: AsyncCallback<boolean>): void两者的差异:通过参数中是否传递callback函数进行区分。本文主讲cameraPicker中遇到的Promise异步方式。
2024-03-18 13:19:23 370
原创 【OHOS】相机框架学习大纲
官网参考资料:OpenHarmony: OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。CSDN openharmony社区资料:https://bbs.csdn.net/forums/openharmony?typeId=21526CSDN参考资料:【OpenHarmony】首次开发指南_hdc loader-CSDN博客官网参考资料: m
2024-03-18 13:10:02 937
原创 【Qcom Camera】Camx架构Chi External Node 三部曲之简单集成
2.1 更改文件名称,并在camxchinodememcpy2.cpp中,需要将node的 sectionname更改为com.qti.node.memcpy2.到这里,基本集成流程也差不多了,当然,算法集成不可能一帆风顺,也不会这么简单。这里只介绍大概的流程,仅供了解,有错误的地方欢迎指出。每个node的sectionname需要与mk文件中要生成的so文件名相对应。二、现在已经有了算法库,该如何应用到具体的相机场景中去呢?这里我们不去关注算法本身,只关注集成流程----简单集成。
2023-06-13 22:06:39 733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人