完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前 言本文主要介绍AM570x基于GStreamer的视频采集、编解码、算法处理、显示以及存储案例。
本次案例测试板卡为创龙科技TL5728F-EVM开发板,它是一款基于ti Sitara系列AM5728(双核ARM Cortex-A15 +浮点双核DSP C66x) + xilinx Artix-7 FPGA处理器设计的高端异构多核评估板。 案例使用到的ARM端为Cortex-A15核心,DSP端为C66x核心。开发案例位于产品资料“4-软件资料Demo l-video-demos”目录下,分别为tl-gst-v4l2-vpe-iva-udp、tl-gst-mjpeg-dec-edge、tl-gst-rtsp-dec-edge。开发案例中的bin目录存放可执行程序,src目录存放源码。 关键代码说明 初始化GStreamer,创建Pipeline。 图 30 创建Pipeline组件并初始化。 图 31 检查组件初始化情况。 图 32 配置各组件参数。 图 33 图 34 链接组件到Pipeline。 图 35 图 36 图 37 使能Pipeline。 图 38 停止Pipeline,并释放GStreamer。 图 39 计时线程。 图 40 案例编译 将该案例的src目录拷贝到Ubuntu工作目录,进入src源码目录执行如下命令加载Linux Processor SDK环境变量。 Host# source /home/tronlong/AM57x/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/environment-setup 图 41 执行make命令进行案例编译,编译完成后,将在当前目录生成可执行文件tl-gst-v4l2-vpe-iva-udp。 Host# make 图 42 tl-gst-mjpeg-dec-edge案例 案例说明 本案例使用GStreamer API通过ARM端从USB摄像头获取MJPEG格式视频流,并调用IVA-HD将视频硬件解码为NV12格式,然后通过OpenCL调用DSP端对NV12格式图像进行Sobel(边缘检测)算法处理,再将经过处理的图像在显示屏中实时显示,同时每隔1s将最新的原始图像以及经过处理的图像保存到本地存储文件中。 备注:由于CMEM共享内存地址空间已超过512MByte,故该案例仅支持DDR3不小于1GByte的评估板。 程序工作流程框图如下: 图 43 案例测试 评估板断电,将OV5640 USB摄像头接到评估板USB1 HOST接口,并将LCD或HDMI显示屏接到评估板对应接口,硬件连接如下图所示。 图 44 进入评估板文件系统,执行如下命令查看摄像头设备节点,本次测试的设备节点为video1。 Target# ls -l /sys/class/video4linux/video* 图 45 请将该案例bin目录下的tl-v4l2-capture、tl-gst-mjpeg-dec-edge文件拷贝到评估板文件系统中。在tl-v4l2-capture文件所在目录下执行如下命令查询摄像头的分辨率、帧率、图像格式等参数。 Target# ./tl-v4l2-capture -m list -d /dev/video1 -t usb 图 46 在tl-gst-mjpeg-dec-edge文件所在目录下,执行如下命令查询tl-gst-mjpeg-dec-edge程序参数说明,具体如下表。 Target# ./tl-gst-mjpeg-dec-edge -h 图 47 表 9 文件保存路径设置 执行如下命令采集视频流进行Sobel(边缘检测)算法处理,再将经过处理的图像在显示屏中实时显示,并将图像保存至eMMC的rootfs分区的“/home/root/”目录,并将test作为前缀生成test-raw.yuv图像源文件以及经过处理的图像文件test-sobel.yuv。保存路径可根据实际情况修改。 Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面 Target# /etc/init.d/weston stop //关闭Weston窗口系统 Target# ./tl-gst-mjpeg-dec-edge -d /dev/video1 -i 1920*1080 -r 15 -f /run/media/mmcblk1p2/home/root/test 图 48 从上图可看到图像处理平均耗时约为28.8ms,图像采集帧率为15fps,图像处理帧率为12fps。Sobel(边缘检测)算法处理效果图如下所示。 图 49 保存的两个文件可在Windows下使用bin目录下的YUV Player工具进行查看,请按照如下图示进行操作。 图 50 图 51 图 52 图 53 图 54 图 55 时延测试 时延测试方法:使用评估板的外接摄像头采集PC机显示屏的在线秒表图像,经过AM570x处理后再将图像进行显示。PC机显示画面与评估板显示画面的时间差,即为时延。进行多次测试,时延结果取其平均值。 表 10 案例解析 GStreamer管道示意图 图 56 管道命令示例如下。如下命令仅作示例,不能在终端直接运行。 Appsink: gst-launch-1.0 v4l2src device=/dev/video1 ! 'image/jpeg, width=1920, height=1080, framerate = 30/1' ! ducatijpegdec ! appsink emit-signals=true, sync=false Appsrc: gst-launch-1.0 appsrc ! 'video/x-raw, format=YV12, width=1920, height=1080, framerate=30/1' ! stream-type=0, format=time ! videoconvert ! kmssink sync=false, scale=false 关键代码说明 初始化GStreamer,创建Pipeline。 图 57 创建GStreamer组件并初始化,再检查组件初始化情况。 图 58 配置各组件参数。 图 59 链接组件到Pipeline。 图 60 创建Pipeline状态检测函数,改变Pipeline状态为playing。 图 61 停止Pipeline,并释放GStreamer。 图 62 当appsink Pipeline获取一帧图像后,将触发cb_new_appsink_sample回调函数。回调函数获取从编解码器得到的数据,如果有数据正在进行算法处理,则这部分数据不进行处理,否则交由DSP核进行算法处理。 图 63 图像处理线程(ocl_thread)中,通过OpenCL将Sobel(边缘检测)算法加载至DSP核中,并将经过处理的图像数据发送至appsrc pipeline。 图 64 时间线程(timing_thread)中,以秒为单位,统计程序运行时间,设置保存标志位,使ocl_thread保存图像数据,输出图像处理平均耗时、图像采集与处理帧率。 图 65 案例编译 将该案例的src目录拷贝到Ubuntu工作目录,进入src源码目录执行如下命令加载Linux Processor SDK环境变量。 Host# source /home/tronlong/AM57x/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/environment-setup 图 66 执行make命令进行编译。 Host# make 图 67 编译完成后,将在当前目录生成可执行文件tl-gst-mjpeg-dec-edge。 图 68 |
|
相关推荐
|
|
飞凌嵌入式ElfBoard ELF 1板卡-git管理源码之git安装和使用
607 浏览 0 评论
迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统
635 浏览 0 评论
迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-配置创建私有配置文件
1429 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之Makefile修改
1582 浏览 0 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件知识分享之Debug
1152 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-16 05:27 , Processed in 0.445425 second(s), Total 31, Slave 25 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号