[TI TDA4 J721E]TIOVX 单屏显示多路摄像头数据(Mosaic节点使用)

news/2025/2/19 9:14:56/

          首先感谢阅读,如果您也对TDA4相关的开发感兴趣,我们这边有个学习交流微信群,可以入群和大家一起交流学习。

资历较浅,水平有限,如遇错误,请大家多指正!

保持开源精神,共同分享、进步!

博主WX : AIR_12  我会拉你入群。

链接:TDA4 相关专栏        链接:TDA4  Demo  Gitee开源库

欢迎大家加入,一起维护这个开源库,给更多的朋友提供帮助。


很久没有更新博客了,最近测试了一个比较使用的Node,在这里和大家分享一下。


在工程项目上,有时会使用到一个屏幕需要显示多路摄像头数据的需求。在浏览TI官方提供的SDK开发包,发现一个比较简单的Demo。

我使用的是ti-processor-sdk-rtos-j721e-evm-08_00_00_12,大家可以自行在TI官网上下载这个开发包,这里不做赘述,如果有疑问的小伙伴,查看以下这个博客,步骤比较详细。

[TI TDA4]PROCESSOR-SDK-J721E RTOS Linux 开发环境搭建 基于 ubuntu 18.04_AIRKernel的博客-CSDN博客

先给大家看下效果图(我这里只有一路摄像头,所以把一路摄像头得到YUV数据,复制了4份进行显示):

为了简单说明Mosaic节点的功能,我这里以原有的Demo为例,Demo位置如下:

ti-processor-sdk-rtos-j721e-evm-08_00_00_12/vision_apps/apps/basic_demos/app_linux_arm_opengl_mosaic/

Demo功能:

Demo内提供的图片应该是对方的一名工程师,看着比较面善,哈哈,致敬以下作者,如有侵权,请联系删除。

1、从系统文件内,读取bin文件数据

2、创建了一个RGBA格式的out    image

3、创建了4个NV12格式的input    image

4、将图像加载到Mosaic节点内,然后执行Graph。

具体流程如下:


Mosaic节点的移植

基于作者提供的线索,我对这个Demo进行了移植,将从文件获取,改为从USB获取YUV图像。

首先你需要一个另外的工程,我使用的是自己删除干净的只有DISP节点的工程,这个我会抽时间放到下载内,链接如下:

(暂缺,上传后修改以下)

1、concerto.mak内容移植,添加以下内容,到目标工程内。

ifeq ($(TARGET_OS),LINUX)
CFLAGS += -DEGL_NO_X11
SYS_SHARED_LIBS += gbm
endifSYS_SHARED_LIBS += EGL
SYS_SHARED_LIBS += GLESv2IDIRS += $(VISION_APPS_SRV_IDIRS)STATIC_LIBS += $(VISION_APPS_SRV_LIBS)

2、头文件需要都包含进来

#include <VX/vx.h>
#include <TI/tivx.h>
#include <TI/tivx_sample.h>
#include <tivx_sample_kernels_priv.h>
#ifdef J7
#include <app_init.h>
#endif
#include <tivx_utils_file_rd_wr.h>
#include <TI/tivx_task.h>

3、添加以下全局变量,用于mosaic节点的创建核使用

    vx_graph mosaicGraph;vx_node mosaicNode;vx_object_array in_obj_array;vx_image input[4], mosaicOutput;vx_user_data_object mosaicParam_obj;tivx_opengl_mosaic_params_t mosaicParams;

4、初始化刚刚创建的全局变量,在app_init 内进行初始化

创建4个NV12格式的image,将4个NV12打包创建生成一个array,然后创建一个RGBX的输出图像,使用mosaicParams参数创建一个参数对象mosaicParam_obj,用于创建节点用。

5、 创建Graph,将此处代码放在app_create_graph(AppObj *obj)内

    //创建一个几点,用于将图像合并成一个RGB的图像,等待显示if(status == VX_SUCCESS){obj->mosaicNode = tivxOpenglMosaicNode(obj->mosaicGraph, obj->mosaicParam_obj, obj->in_obj_array, obj->mosaicOutput);}if (status == VX_SUCCESS){status = vxSetNodeTarget(obj->mosaicNode, VX_TARGET_STRING, TIVX_TARGET_A72_0);}

6、verify graph在app_verify_graph(AppObj *obj)内

    if (status == VX_SUCCESS){status = vxVerifyGraph(obj->mosaicGraph);}

 7、将USB获取到的YUV数据,拷贝到4个input中。这里需要拷贝四次,所以放到了一个for循环内。

(usb提供的图像指针是pmap,这里USB获取图像数据,我会单独写一个博客,链接如下:)

[TI TDA4]TIOVX USB摄像头获取YUV数据并显示Demo的实现_AIRKernel的博客-CSDN博客

会使用到vxMapImagePatch 、 vxCopyImagePatch等等,对应不同的图像,方法是不一样的。

8、 执行第7步以后,就可以执行graph了,运行

            if (status == VX_SUCCESS){if (status == VX_SUCCESS){status = vxScheduleGraph(obj->mosaicGraph);}if (status == VX_SUCCESS){status = vxWaitGraph(obj->mosaicGraph);}}

9、执行成功后,会将输出的图像,RGBX拷贝到disp_image内进行显示。

特别说明:向内核创建的image内拷贝数据,需要执行一系列的操作,这个也会单独写一个博客(链接如下:)

需要注意的是RGBX转为RGB的方法,可以自行百度以下。我这里暂时没有做转换,只是将RGBX的前3个字节,拷贝出来,进行显示了。

 10、执行disp_graph,即可看到,编译后,正常运行即可。

整体工程,我会打包放到资料库,这里好像放不了。

因能力有限,有很多地方讲的不够清楚,有疑问的小伙伴,欢迎私信交流。


【声明】
【欢迎转载转发,请注明出处。原创比较辛苦,请尊重原创,祝大家学习愉快!】
【博主专注嵌入式开发,具有多年嵌入式软、硬件开发经验,欢迎大家学习交流!】
【如有嵌入式相关项目需求,欢迎私信】


http://www.ppmy.cn/news/628166.html

相关文章

Valens VS2000 系列HDBaseT2.0延长芯片

Valens Colligo VS2000 IC系列通过单个标准类别电缆汇聚和扩展A/V信号。Colligo芯片组支持扩展未压缩HDMI 1.4(4K604:2:0&#xff09;、高保真音频、100Mbps以太网、USB2.0、控制和电源&#xff0c;通过CAT电缆传输长达100米&#xff08;328英尺&#xff09;&#xff0c;无延迟…

KTM5000 KTM5010 KTM5020 KTM5030 MST扩展坞 多屏幕显示 多屏异显

支持多屏幕显示&#xff0c;支持单显8K&#xff0c;支持多屏异显 • USB Type-C DisplayPort Alt-mode de-mux  Simultaneous USB3.2 Gen2 and 2 lanes DP1.4a input OR 4 lanes DP1.4a input  Flip option for connector plug orientation  DP lane swap and polarity …

【01Studio MaixPy AI K210】7.IIC+OLED

目录 硬件准备&#xff1a; 引脚图&#xff1a; 01Studio K210核心板引脚 OLED引脚 电路连接 烧录驱动文件&#xff1a; 驱动文件 导包&#xff1a; I2C库 OLED库 配置I2C&#xff1a; 配置OLED&#xff1a; 例程&#xff1a; &#xff08;以下内容均为个人所学总结&am…

Markdown 入门基础

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

基于matlab使用校准相机测量平面物体(附源码)

一、前言 此示例演示如何使用单个校准相机以世界单位测量硬币的直径。 此示例演示如何校准相机&#xff0c;然后使用它来测量平面对象&#xff08;如硬币&#xff09;的大小。这种方法的一个示例应用是测量传送带上的零件以进行质量控制。 二、校准相机 相机校准是估计镜头…

dll修复工具哪个好?靠谱dll修复助手

关于dll文件的丢失&#xff0c;其实在使用电脑的时候&#xff0c;这是经常发生的&#xff0c;经常就是提示什么什么dll文件丢失了&#xff0c;无法启动一些相关程序&#xff0c;遇到这种情况&#xff0c;大家请不需要担心&#xff0c;还是很容易解决的&#xff0c;下载一个dll修…

最新下载《英雄联盟》LOL会提示分卷文件损坏——修复办法

最近安装英雄联盟&#xff0c;好多人都出现这个情况&#xff0c;安装的时候会有分卷文件损坏的提示导致无法安装。我也是在wegame下载的&#xff0c;也出现了这个情况。 百度上好多答案都不太好解决。分卷文件损坏当然是要修复啦。 打开LOL的下载所在位置是会有这几个文件的&a…

英雄联盟 连接服务器失败 请检查您的网络 是否启用修复程序进行修复,英雄联盟玩不了,提示未知的directx错误...

英雄联盟玩不了,提示"未知的directx错误" *提示&#xff1a;如果您在使用修复工具修复失败时&#xff0c;请参考方案三 |主要症状&#xff1a; 进入英雄联盟时出现如下图弹窗“发生了未知的directX错误,请确保你的显卡更新了新的显卡驱动” |可能原因&#xff1a; 显…