"); //-->
1.底层 buffer 状态机

系统通过五个状态队列实现帧缓冲区的全生命周期管理,各状态定义及转换逻辑如下:
1.FREE(空闲态)
功能描述 :管理初始可用缓冲区
初始化操作 :
场景运行时预分配所有 frame buffer 数组至该队列
记录 buffer 的内核虚拟地址及物理地址信息
数据结构 :frame buffer 结构体存储地址映射关系
2.REQUEST(请求态)
状态转换触发 :用户层调用 qbuf 接口
处理逻辑 :
解析用户传入的 frame buffer index 参数
校验目标 frame buffer 状态有效性
更新 buffer 元数据并置为 REQUEST 状态
将 buffer 移入 REQUEST 队列
3.PROCESS(处理态)
状态转换触发 :Frame Start 硬件中断
处理逻辑 :
从 REQUEST 队列提取首帧 buffer
置为 PROCESS 状态并压入处理队列
启动硬件模块数据处理
4.COMPLETE(完成态)
状态转换触发 :Frame End 硬件中断
处理逻辑 :
从 PROCESS 队列提取完成帧
置为 COMPLETE 状态并移入完成队列
生成帧元数据(时间戳、帧 ID 等)
5.USED(用户态)
状态转换触发 :用户调用 dqbuf 接口
处理逻辑 :
检测 COMPLETE 队列非空时触发状态转换
返回 frame buffer index 至用户空间
将 buffer 置为 USED 状态并移入用户队列
2.HAL 层交互

初始化阶段
| HAL 层 | 申请用户态 buffer 空间 |
| 驱动层 | 分配内核态 frame buffer |
| 协同操作 | 建立双向地址映射关系 |
帧获取阶段:

用户调用 hb_vio_get_data 接口,HAL 通过 dqbuf 操作从驱动层获取包含帧识别信息,帧识别信息包含 frame index,timestamp,frame id 等帧信息,通过 frame index,找到数组中的 image 结构体,并把相关的帧识别信息赋值到 image 结构体中,最后 memcpy 给用户;
帧释放阶段:

用户调用 hb_vio_free_xxxbuf 接口(每个模块都有对应的释放接口)传入需要释放的 image 信息,HAL 通过获取 image 信息中的 frame index 识别标志,通过 ioctl 接口通知驱动层对应 frame index 的 buffer 使用完毕;
3.调试举例
常见调用获取帧失败,可通过 logcat 查看对应的 buffer 状态,并通过分析对应的 buffer 状态信息,可以定位问题的出错点:
E/ ( 2087): [4770.375488][vpf_ioctl.c]:[vio_dev_node_dqbuf_poll][1012]dev poll Timeout(4000): 0, Success
I/ ( 2087): [4770.375488][vpf_ioctl.c]:[vio_dbg_log_show][964]
I/ ( 2087): [S9] vin4_C2*-m2m-(dma)pym1_C6*(dma)
I/ ( 2087): gtask-vin4: res 1 rcnt 0 [vin4:0]
I/ ( 2087): gtask-pym1: res 0 rcnt 0 [pym1:0]
I/ ( 2087): [4770.375488][vpf_ioctl.c]:[vio_dbg_log_show][964]
I/ ( 2087): ----------------------------------------------------------
I/ ( 2087): flowid module cid chn FREE REQ PRO COM USED
I/ ( 2087): ----------------------------------------------------------
I/ ( 2087): 9 vin4 2 0 16 0 0 0 0
I/ ( 2087): 9 vin4 2 8 0 6 0 0 0
I/ ( 2087):
I/ ( 2087): 9 pym1 6 0 10 0 0 0 6
I/ ( 2087): 9 pym1 6 8 0 0 0 0 5
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
曲面显示屏取代传统汽车挡风玻璃
地平线征程 6 系列集成 Cadence Tensilica Vision DSP,实现规模化量产,合作加速智能驾驶解决方案部署
加密算法之MD5算法
实时训练驾驶人工智能
目标跟踪算法在红外热成像跟踪技术上的应用
数字PID控制算法之一
特斯拉监督版FSD加入中国市场
自动驾驶正推动汽车行业加速布局人形机器人
基于LPC2138的血压测量算法开发平台电路图
CRC算法原理及C语言实现
自动驾驶的现状与未来(节选)
数字PID控制及其改进算法的应用
计算机科学与技术反思录(2)
高阶智驾要落地,线控底盘为什么必须执行得准
ADI:传感技术助力未来自动驾驶的发展
掘金自动驾驶,不要把大坑当机会
简单实用的单片机CRC 快速算法
2035年自动驾驶出租车市场规模将达1680亿美元
无线传感器网络低功耗分簇路由算法设计
加快实现自动驾驶(完整小组讨论)
PID算法
采用Mean-Shift和Camshift算法相结合的火焰视频图像跟踪设计
[转帖]us/os就绪表的维护算法分析
求FSK信号的解调算法,主要是铁路上的移频信号!
有关指纹算法
Ouster推出 Rev8 OS 激光雷达系列 原生彩色激光雷达正式落地
面向算法硬件加速的FPGA实现方法
vxwokrs下静态图像压缩算法(上)
76-81GHz自动驾驶CMOS RADAR
携手ADI赢得未来