当前位置: 首页 > news >正文

关于庐山派多视频层(layer)和bind_layer的应用

嘉立创分了适配层和OSD(我称它为图片层)顾名思义,一个是能显示视频流到LCD屏幕,一个是只能显示照片,也就是你可以对不同层进行操作而不影响其他层,解决的场景就是用于你画了一个正方形在照片上,你现在不想要了,你删去那个正方形会导致你的拍摄图片缺了一块成为白色,这是因为你山区的就是那个像素点,你没有记录之前的像素点那就恢复不回去了,所以图像多层可以解决因为他两层之间毫不相关,你删去一层里的东西 不会影响其他层,其实若果你的图像实时更新的也可以覆盖的层删正方形的缺口,但是不是很保险,所以有了多层显示

这时候又出现一个bind_layer函数 
目前这个函数好像只能绑定视频流,图片不能绑定但能show_images到指定层

Display.bind_layer(**sensor_bind_info, layer = Display.LAYER_VIDEO1)

详细文章:
嘉立创庐山派K230程序加速,解决卡顿思想总结-CSDN博客

他的作用是:可以让我正在死循环中或者延时里都能持续显示图像,相当于多了一个线程
bind_layer函数通过硬件 DMA 或操作系统任务调度实现了视频的异步显示,使主线程能够在死循环或延时中继续执行其他任务,而视频显示不受影响。这是嵌入式系统中处理实时性任务(如视频、音频)的常见设计模式,本质上是利用硬件或系统的并行能力,而非真正的多线程。理解这一机制有助于优化系统资源,避免因主线程阻塞导致的显示卡顿。

所以如果你绑定视频流到lcd display,那以后你除非想要拥有拍摄的照片用来做某些分析操作的时候才需要调用sensor.snapshot 你显示函数也是只需要你想把你操作完的结果显示在lcd上时才调用show_image 其他情况下你都可以不用用它两就能实时显示图像到lcd了且不惧怕任何中断延时死循环还节省软件资源因为用了dma完全由硬件接管


实际案例:
1.将图像通道零的视频流绑定到lcd的display去
他这个绑定好象只能绑定小于RGB888大小的eg:RGB565 YUV420不然会报错太大



创建OSD图像:

然后在while中snapshot拍摄摄像头图像(也就是提取绑定好的视频流中的一帧)去完成一些视觉检测山的算法

最后将结果保留在IMAGE OSD照片上最后将照片显示在OSD层盖住绑定视频流显示在LCD上


这样你对照片的操作就不会影响到视频的显示而且完全不怕延时死循环
详细解释:

一、绑定视频流与 DMA 硬件接管的核心机制
当通过bind_layer将视频流绑定到 LCD 显示时,系统会利用DMA(直接内存访问)机制建立硬件级的数据传输通道,实现以下效果:

数据传输与显示的硬件化:
摄像头采集的视频数据通过 DMA 直接从传感器缓冲区传输到 LCD 显存,无需 CPU 干预。
显示控制器(如 LCD 驱动 IC)周期性读取显存数据并刷新屏幕,形成持续的视频流显示。
与sensor.snapshot()和show_image()的本质区别:
snapshot():主动捕获一帧图像(软件触发),需 CPU 参与数据读取。
show_image():将处理后的图像数据写入显存(软件控制),需 CPU 占用时间。
绑定 + DMA 模式:数据传输由硬件自动循环执行,CPU 仅需在初始化时配置参数,后续完全脱离显示流程。


二、为何无需调用snapshot和show_image即可实时显示?
传统显示流程的局限性:
plaintext
软件调用snapshot() → CPU读取图像数据 → 软件处理图像 → 调用show_image() → CPU写入显存 → 显示刷新  

每帧显示都需 CPU 全程参与,若 CPU 陷入死循环或延时,显示会卡顿。
DMA 绑定后的流程优化:
plaintext
初始化bind_layer() → DMA自动建立「摄像头缓冲区→LCD显存」传输通道 → 显示控制器周期性刷新显存  

关键变化:CPU 仅在初始化时配置 DMA 参数(如源地址、目标地址、传输大小),后续每帧数据的传输和显示由硬件自动完成,与 CPU 状态无关(即使 CPU 进入死循环,DMA 仍持续工作)。


三、DMA 接管的优势与适用场景
资源节省与实时性提升:
CPU 占用率降低:传统方案中 CPU 需处理每帧图像的读取和写入,而 DMA 模式下 CPU 可专注于其他任务(如算法处理、通信控制)。
抗干扰能力强:中断、延时、死循环等软件层面的阻塞不会影响 DMA 传输,确保显示流畅(例如,在处理传感器数据的同时,LCD 仍实时显示视频)。
适用场景:
实时监控系统:需持续显示摄像头画面,同时 CPU 处理报警逻辑、数据上传等任务。
资源受限的嵌入式设备:如单片机(STM32、ESP32),需在有限 RAM 和 CPU 算力下实现视频显示。
低功耗应用:DMA 传输功耗远低于 CPU 参与的数据搬运,适合电池供电设备。


四、何时仍需调用snapshot和show_image?
需要处理单帧图像时:
例如,抓拍照片用于 AI 分析(如人脸识别、物体检测),此时需用snapshot()获取特定时刻的图像数据。
显示非实时内容时:
如显示 UI 界面、处理后的图像(如添加文字标注、滤镜效果),需用show_image()将软件处理后的结果写入显存。
多图层混合显示:
若需在视频流上叠加菜单、数据图表等 UI 元素,通常需要:
视频流通过 DMA 绑定到底层显示层(如 LAYER_VIDEO)。
UI 元素通过show_image()绘制到顶层显示层(如 LAYER_UI),实现图层叠加。
五、总结:DMA 绑定的技术本质
通过bind_layer实现的实时显示,本质是将「软件驱动显示」转换为「硬件驱动显示」:

传统方案:软件是显示的 “主动执行者”(调用函数控制每一步)。
DMA 方案:软件仅作为 “配置者”(初始化绑定参数),硬件成为显示的 “主动执行者”(DMA + 显示控制器自动循环)。

这种模式充分利用了硬件并行处理能力,在嵌入式系统中是平衡性能、功耗和开发效率的优选方案。

http://www.lryc.cn/news/576280.html

相关文章:

  • 【SpringSecurity鉴权】
  • ChatboxAI 搭载 GPT 与 DeepSeek,引领科研与知识库管理变革
  • 视觉的基石:卷积神经网络与LeNet的破晓之光
  • 从【人工智能】到【计算机视觉】。深度学习引领的未来科技创新与变革
  • Note2.2 机器学习训练技巧:Batch and Momentum(Machine Learning by Hung-yi Lee)
  • Note2.1 处理critical point(Machine Learning by Hung-yi Lee)
  • 安卓中静态和动态添加子 View 到容器
  • 【C/C++】单元测试实战:Stub与Mock框架解析
  • 【RAG面试题】LLMs已经具备了较强能力,存在哪些不足点?
  • Windows11系统上安装WM虚拟机及Ubuntu 22.04系统
  • clion与keil分别配置项目宏定义
  • Day44 预训练模型
  • FLUX.1 Kontext(Dev 版)训练lora基础教程
  • Python基础知识之文件
  • 什么是故障注入测试
  • SCSAI万物对象模型和五维市场交易平台原型
  • mongodb生产备份工具PBM
  • Selenium基本用法
  • 深入剖析 CVE-2021-3560 与 CVE-2021-4034:原理、区别与联系
  • 智能助手(利用GPT搭建智能系统)
  • Vivado 五种仿真类型的区别
  • Javaweb - 6 BOM 编程 和 DOM 编程
  • python打卡day56
  • VUE使用过程中的碰到问题记录
  • 【深度学习新浪潮】MoE技术入门(简要版)
  • Linux基本指令篇 —— tac指令
  • Apache Kafka 面试应答指南
  • 黑马JVM解析笔记(五):深入理解Java字节码执行机制
  • python训练day43 复习日
  • 10【认识文件系统】