本文主要介绍AM5728基于GStreamer的视频采集、编解码、算法处理、显示以及存储案例,其中包含tl-gst-v4l2-vpe-iva-udp案例、tl-gst-mjpeg-dec-edge案例、.tl-gst-rtsp-dec-edge案例与H.264视频流MP4格式转码方法等。
本次案例测试板卡为创龙科技TL5728F-EVM开发板,它是一款基于TI Sitara系列AM5728(双核ARM Cortex-A15 +浮点双核DSP C66x) + Xilinx Artix-7 FPGA处理器设计的高端异构多核评估板。

其中使用到AM5728开发板的ARM端为Cortex-A15_0核心,DSP端为DSP1核心,开发案例位于产品资料“4-软件资料\Demo\tl-video-demos\”目录下。开发案例中的bin目录存放可执行程序,src目录存放源码。
TL7611P模块(HDMI视频采集)
准备一台拥有VGA和HDMI接口的PC机(例如笔记本),并将VGA接口连接VGA显示屏。VGA显示屏作为主显示器用作测试工作使用。通过HMDI数据线将PC机HDMI接口连接模块HDMI接口,PC机HDMI接口用作HDMI信号输出。
在PC机的显卡设备中设置HDMI作为次显示屏,选择多屏显示栏目下的扩展桌面选项,并设置分辨率为1920 x 1080、刷新率为60pHz。

图 66

图 67

图 68
请按照上图进行硬件连接,评估板上电进入文件系统,依次执行如下命令加载模块动态设备树。
Target# mkdir /configfs //创建configfs文件夹,如已存在,则无需重复创建
Target# mount -t configfs configfs /configfs
Target# mkdir /configfs/device-tree/overlays/full //创建full目录,根据实际情况修改
Target# echo -n "tl5728-evm-vip-adv7611-overlay.dtbo" > /configfs/device-tree/overlays/full/path

图 69
执行如下脚本设置输出分辨率。
Target# ./adv7611.sh 4 //参数4指定驱动层面的I2C4,对应硬件为I2C5

图 70
display功能模式测试
执行如下命令采集视频流,并在显示屏中显示。可按“Ctrl+C”可终止程序运行。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面
Target# /etc/init.d/weston stop //关闭Weston窗口系统
Target# ./tl-gst-v4l2-vpe-iva-udp -m display -d /dev/video1 -i 1920*1080 -o 1920*1080

图 71

图 72
save功能模式测试
执行如下命令采集视频流,并将ducatih264enc插件编码生成的H.264视频流保存在当前目录下。
Target# ./tl-gst-v4l2-vpe-iva-udp -m save -d /dev/video1 -i 1920*1080 -o 1920*1080 -f test.264

图 73
由于ducatih264enc插件编码生成的H.264视频流只包含图像数据,但不包含时间戳,因此不能使用常用的视频*放播**器进行*放播**。可通过第三方工具FFmpeg将其转码为MP4格式,再使用常用视频*放播**器进行*放播**。具体方法请参考本文档H.264视频流MP4格式转码方法章节。
dis-save功能模式测试
执行如下命令采集视频流并在显示屏中显示,同时将ducatih264enc插件编码生成的H.264视频流保存在当前目录下。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面
Target# /etc/init.d/weston stop //关闭Weston窗口系统
Target# ./tl-gst-v4l2-vpe-iva-udp -m dis-save -d /dev/video1 -i 1920*1080 -o 1920*1080 -f test.264

图 74

图 75
udp功能模式测试
使用udp功能模式时,测试方法有如下三种。
表 9
|
测试设备 |
发送端 |
接收端 |
硬件连接 |
|
一块评估板 |
评估板A |
评估板A |
使用网线将评估板网口RGMII0 ETH连接到路由器,进行本地网络回环测试 |
|
两块评估板 |
评估板A |
评估板B |
使用网线将两块评估板网口RGMII0 ETH连接到同一个路由器 |
|
评估板+上位机(Ubuntu) |
评估板A |
上位机(Ubuntu) |
使用网线将评估板网口RGMII0 ETH、上位机网口连接到同一个路由器 |
发送端
请在发送端执行如下命令采集视频,同时进行H.264编码并通过UDP网络将视频流传输到接收端。192.168.0.99为接收端IP地址,8080为端口号,请根据实际情况修改。
Target# ./tl-gst-v4l2-vpe-iva-udp -m udp -d /dev/video1 -i 1920*1080 -o 1920*1080 -a 192.168.0.99:8080

图 76
接收端
使用一块评估板或两块评估板方时,请在接收端执行如下命令通过UDP网络接收视频流,同时进行解码与显示。显示分辨率可根据实际情况修改,注意端口号需与发送端保持一致。
使用一块评估板方式时,需先运行接收进程,再运行发送进程。可在命令后添加&符号使进程在后台运行,或通过OpenSSH等方式启用第二个命令行终端运行进程。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面
Target# /etc/init.d/weston stop //关闭Weston窗口系统
Target# gst-launch-1.0 -v udpsrc port=8080 ! 'application/x-rtp,media=(string)video,payload=(int)96' ! rtph264depay ! h264parse ! ducatih264dec ! vpe ! 'video/x-raw,format=(string)NV12, width=1920,height=1080,framerate=30/1' ! kmssink sync=false

图 77

图 78
使用评估板+上位机(Ubuntu)方式时,请在接收端执行如下命令通过UDP网络接收视频流,同时进行解码与显示。注意端口号需与发送端保持一致。
Host# gst-launch-1.0 -v udpsrc port=8080 ! 'application/x-rtp,media=(string)video,payload=(int)96' ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! ximagesink sync=false

图 79

图 80
TL-VPortP模块(CMOS摄像头)

图 81
请按照上图进行硬件连接,评估板上电进入文件系统,依次执行如下命令。
Target# devmem2 0x4A003698 w 0x0001000E //配置xref_clk1复用为GPIO6_18
Target# echo 178 > /sys/class/gpio/export //通过导出GPIO6_18设备节点目录
Target# echo out > /sys/class/gpio/gpio178/direction //配置GPIO6_18为输出
Target# echo 0 > /sys/class/gpio/gpio178/value //配置GPIO6_18输出低电平

图 82
依次执行如下命令加载模块动态设备树。
Target# mkdir /configfs //创建configfs文件夹,如已存在,则无需重复创建
Target# mount -t configfs configfs /configfs
Target# mkdir /configfs/device-tree/overlays/full //创建full目录,根据实际情况修改
Target# echo -n "tl5728-evm-vip-ov5640-overlay.dtbo" > /configfs/device-tree/overlays/full/path

图 83
display功能模式测试
执行如下命令采集视频流,并在显示屏中显示。可按“Ctrl + C”可终止程序运行。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面
Target# /etc/init.d/weston stop //关闭Weston窗口系统
Target# ./tl-gst-v4l2-vpe-iva-udp -m display -d /dev/video1 -i 1920*1080 -o 1920*1080

图 84

图 85
save功能模式测试
执行如下命令采集视频流,并将ducatih264enc插件编码生成的H.264视频流保存在当前目录下。
Target# ./tl-gst-v4l2-vpe-iva-udp -m save -d /dev/video1 -i 1920*1080 -o 1920*1080 -f test.264

图 86
由于ducatih264enc插件编码生成的H.264视频流只包含图像数据,但不包含时间戳,因此不能使用常用的视频*放播**器进行*放播**。可通过第三方工具FFmpeg将其转码为MP4格式,再使用常用视频*放播**器进行*放播**。具体方法请参考本文档H.264视频流MP4格式转码方法章节。
dis-save功能模式测试
执行如下命令采集视频流并在显示屏中显示,同时将ducatih264enc插件编码生成的H.264视频流保存在当前目录下。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面
Target# /etc/init.d/weston stop //关闭Weston窗口系统
Target# ./tl-gst-v4l2-vpe-iva-udp -m dis-save -d /dev/video1 -i 1920*1080 -o 1920*1080 -f test.264

图 87

图 88
udp功能模式测试
使用udp功能模式时,测试方法有如下三种。
表 10
|
测试设备 |
发送端 |
接收端 |
硬件连接 |
|
一块评估板 |
评估板A |
评估板A |
使用网线将评估板网口RGMII0 ETH连接到路由器,进行本地网络回环测试 |
|
两块评估板 |
评估板A |
评估板B |
使用网线将两块评估板网口RGMII0 ETH连接到同一个路由器 |
|
评估板+上位机(Ubuntu) |
评估板A |
上位机(Ubuntu) |
使用网线将评估板网口RGMII0 ETH、上位机网口连接到同一个路由器 |
发送端
请在发送端执行如下命令采集视频,同时进行H.264编码并通过UDP网络将视频流传输到接收端。192.168.0.99为接收端IP地址,8080为端口号,请根据实际情况修改。
Target# ./tl-gst-v4l2-vpe-iva-udp -m udp -d /dev/video1 -i 1920*1080 -o 1920*1080 -a 192.168.0.99:8080

图 89
接收端
使用一块评估板或两块评估板方时,请在接收端执行如下命令通过UDP网络接收视频流,同时进行解码与显示。显示分辨率可根据实际情况修改,注意端口号需与发送端保持一致。
使用一块评估板方式时,需先运行接收进程,再运行发送进程。可在命令后添加&符号使进程在后台运行,或通过OpenSSH等方式启用第二个命令行终端运行进程。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面
Target# /etc/init.d/weston stop //关闭Weston窗口系统
Target# gst-launch-1.0 -v udpsrc port=8080 ! 'application/x-rtp,media=(string)video,payload=(int)96' ! rtph264depay ! h264parse ! ducatih264dec ! vpe ! 'video/x-raw,format=(string)NV12, width=1920,height=1080,framerate=30/1' ! kmssink sync=false

图 90

图 91
使用评估板+上位机(Ubuntu)方式时,请在接收端执行如下命令通过UDP网络接收视频流,同时进行解码与显示。注意端口号需与发送端保持一致。
Host# gst-launch-1.0 -v udpsrc port=8080 ! 'application/x-rtp,media=(string)video,payload=(int)96' ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! ximagesink sync=false

图 92

图 93
时延测试
时延测试方法:使用模块采集PC机显示屏的在线秒表图像,经过AM5728处理后再将图像进行显示。PC机显示画面与评估板显示画面的时间差,即为时延。进行多次测试,时延结果取其平均值。
ZH5640-MIC-001(USB CMOS摄像头)
表 11 display功能模式测试结果
|
序号 |
评估板显示画面 |
PC机显示画面 |
时延(ms) |
|
1 |
00:01:02.629 |
00:01:02.844 |
215 |
|
2 |
00:02:02.823 |
00:02:03.038 |
215 |
|
3 |
00:03:05.404 |
00:03:05.706 |
302 |
|
4 |
00:04:07.984 |
00:04:08.113 |
129 |
|
5 |
00:05:08.177 |
00:05:08.392 |
215 |
|
平均值 |
/ |
/ |
222 |
表 12 dis-save功能模式测试结果
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:07.487 |
00:01:07.745 |
258 |
|
2 |
00:02:09.632 |
00:02:09.939 |
307 |
|
3 |
00:03:02.089 |
00:03:02.347 |
258 |
|
4 |
00:04:07.421 |
00:04:07.636 |
215 |
|
5 |
00:05:04.001 |
00:05:04.173 |
172 |
|
平均值 |
/ |
/ |
248 |
表 13 udp功能模式测试结果(接收端:评估板)
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:02.163 |
00:01:02.765 |
602 |
|
2 |
00:02:04.579 |
00:02:05.087 |
508 |
|
3 |
00:03:07.832 |
00:03:08.441 |
609 |
|
4 |
00:04:08.904 |
00:04:09.505 |
601 |
|
5 |
00:05:01.924 |
00:05:02.526 |
602 |
|
平均值 |
/ |
/ |
585 |
表 14 udp功能模式测试结果(接收端:上位机)
|
序号 |
上位机显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:03.655 |
00:01:04.300 |
645 |
|
2 |
00:02:08.819 |
00:02:09.503 |
684 |
|
3 |
00:03:01.052 |
00:03:01.569 |
517 |
|
4 |
00:04:02.953 |
00:04:03.592 |
639 |
|
5 |
00:05:04.707 |
00:05:05.395 |
688 |
|
平均值 |
/ |
/ |
635 |
TL5158P模块(4路D1视频采集)
表 15 display功能模式测试结果
|
序号 |
评估板显示画面 |
PC机显示画面 |
时延(ms) |
|
1 |
00:01:07.368 |
00:01:07.496 |
128 |
|
2 |
00:02:02.528 |
00:02:03.574 |
46 |
|
3 |
00:03:04.688 |
00:03:04.807 |
119 |
|
4 |
00:04:07.567 |
00:04:08.658 |
91 |
|
5 |
00:05:08.626 |
00:05:08.714 |
88 |
|
平均值 |
/ |
/ |
95 |
表 16 dis-save功能模式测试结果
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:08.024 |
00:01:08.167 |
143 |
|
2 |
00:02:00.660 |
00:02:00.746 |
86 |
|
3 |
00:03:03.073 |
00:03:03.197 |
124 |
|
4 |
00:04:05.661 |
00:04:05.734 |
73 |
|
5 |
00:05:04.035 |
00:05:04.120 |
85 |
|
平均值 |
/ |
/ |
103 |
表 17 udp功能模式测试结果(接收端:评估板)
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:08.189 |
00:01:08.576 |
387 |
|
2 |
00:02:03.071 |
00:02:03.459 |
388 |
|
3 |
00:03:09.374 |
00:03:09.804 |
430 |
|
4 |
00:04:04.428 |
00:04:04.859 |
431 |
|
5 |
00:05:05.142 |
00:05:05.528 |
386 |
|
平均值 |
/ |
/ |
405 |
表 18 udp功能模式测试结果(接收端:上位机)
|
序号 |
上位机显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:06.288 |
00:01:05.987 |
301 |
|
2 |
00:02:02.955 |
00:02:02.653 |
302 |
|
3 |
00:03:08.587 |
00:03:08.285 |
302 |
|
4 |
00:04:02.757 |
00:04:02.457 |
300 |
|
5 |
00:05:08.090 |
00:05:07.789 |
301 |
|
平均值 |
/ |
/ |
301 |
TL7002P模块(VGA视频采集)
表 19 display功能模式测试结果
|
序号 |
评估板显示画面 |
PC机显示画面 |
时延(ms) |
|
1 |
00:01:04.252 |
00:01:04.295 |
43 |
|
2 |
00:02:06.143 |
00:02:06.186 |
43 |
|
3 |
00:03:07.906 |
00:03:07.949 |
43 |
|
4 |
00:04:09.755 |
00:04:09.798 |
43 |
|
5 |
00:05:09.559 |
00:05:09.602 |
43 |
|
平均值 |
/ |
/ |
43 |
表 20 dis-save功能模式测试结果
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:03.707 |
00:01:03.750 |
43 |
|
2 |
00:02:06.201 |
00:02:06.244 |
43 |
|
3 |
00:03:08.437 |
00:03:08.480 |
43 |
|
4 |
00:04:00.888 |
00:04:00.931 |
43 |
|
5 |
00:05:05.681 |
00:05:05.724 |
43 |
|
平均值 |
/ |
/ |
43 |
表 21 udp功能模式测试结果(接收端:评估板)
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:03.798 |
00:01:04.144 |
346 |
|
2 |
00:02:09.327 |
00:02:09.629 |
302 |
|
3 |
00:03:06.190 |
00:03:06.490 |
300 |
|
4 |
00:04:01.373 |
00:04:01.716 |
343 |
|
5 |
00:05:06.042 |
00:05:06.385 |
343 |
|
平均值 |
/ |
/ |
327 |
表 22 udp功能模式测试结果(接收端:上位机)
|
序号 |
上位机显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:07.913 |
00:01:08.042 |
129 |
|
2 |
00:02:00.235 |
00:02:00.364 |
129 |
|
3 |
00:03:02.558 |
00:03:02.686 |
128 |
|
4 |
00:04:04.363 |
00:04:04.492 |
129 |
|
5 |
00:05:06.385 |
00:05:06.557 |
172 |
|
平均值 |
/ |
/ |
138 |
TL7601P模块(HD-SDI视频采集)
表 23 display功能模式测试结果
|
序号 |
评估板显示画面 |
PC机显示画面 |
时延(ms) |
|
1 |
00:01:04.093 |
00:01:04.179 |
86 |
|
2 |
00:02:06.870 |
00:02:06.912 |
42 |
|
3 |
00:03:04.719 |
00:03:04.805 |
86 |
|
4 |
00:04:02.870 |
00:04:02.912 |
42 |
|
5 |
00:05:09.774 |
00:05:09.816 |
42 |
|
平均值 |
/ |
/ |
60 |
表 24 dis-save功能模式测试结果
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:05.693 |
00:01:05.736 |
43 |
|
2 |
00:02:01.287 |
00:02:01.373 |
86 |
|
3 |
00:03:05.998 |
00:03:06.042 |
44 |
|
4 |
00:04:02.128 |
00:04:02.215 |
87 |
|
5 |
00:05:08.774 |
00:05:08.817 |
43 |
|
平均值 |
/ |
/ |
61 |
表 25 udp功能模式测试结果(接收端:评估板)
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:02.596 |
00:01:02.985 |
389 |
|
2 |
00:02:06.143 |
00:02:06.533 |
390 |
|
3 |
00:03:01.674 |
00:03:02.061 |
387 |
|
4 |
00:04:07.160 |
00:04:07.545 |
385 |
|
5 |
00:05:02.600 |
00:05:02.988 |
388 |
|
平均值 |
/ |
/ |
388 |
表 26 udp功能模式测试结果(接收端:上位机)
|
序号 |
上位机显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:05.210 |
00:01:05.467 |
257 |
|
2 |
00:02:09.878 |
00:02:00.134 |
256 |
|
3 |
00:03:06.696 |
00:03:06.997 |
301 |
|
4 |
00:04:02.524 |
00:04:02.783 |
259 |
|
5 |
00:05:01.674 |
00:05:01.974 |
300 |
|
平均值 |
/ |
/ |
275 |
TL7611P模块(HDMI视频采集)
表 27 display功能模式测试结果
|
序号 |
评估板显示画面 |
PC机显示画面 |
时延(ms) |
|
1 |
00:01:02.588 |
00:01:02.631 |
43 |
|
2 |
00:02:07.834 |
00:02:07.877 |
43 |
|
3 |
00:03:00.371 |
00:03:00.414 |
43 |
|
4 |
00:04:02.607 |
00:04:02.650 |
43 |
|
5 |
00:05:04.629 |
00:05:04.672 |
43 |
|
平均值 |
/ |
/ |
43 |
表 28 dis-save功能模式测试结果
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:06.281 |
00:01:06.323 |
42 |
|
2 |
00:02:08.689 |
00:02:08.731 |
42 |
|
3 |
00:03:01.225 |
00:03:01.268 |
43 |
|
4 |
00:04:03.720 |
00:04:03.763 |
43 |
|
5 |
00:05:05.741 |
00:05:05.784 |
43 |
|
平均值 |
/ |
/ |
43 |
表 29 udp功能模式测试结果(接收端:评估板)
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:05.070 |
00:01:05.242 |
172 |
|
2 |
00:02:07.263 |
00:02:07.435 |
172 |
|
3 |
00:03:09.542 |
00:03:09.714 |
172 |
|
4 |
00:04:03.713 |
00:04:03.885 |
172 |
|
5 |
00:05:05.949 |
00:05:06.078 |
129 |
|
平均值 |
/ |
/ |
164 |
表 30 udp功能模式测试结果(接收端:上位机)
|
序号 |
上位机显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:01.611 |
00:01:01.998 |
387 |
|
2 |
00:02:07.716 |
00:02:08.017 |
301 |
|
3 |
00:03:00.511 |
00:03:00.855 |
344 |
|
4 |
00:04:08.640 |
00:04:08.941 |
301 |
|
5 |
00:05:01.392 |
00:05:01.693 |
301 |
|
平均值 |
/ |
/ |
327 |
TL-VPortP模块(CMOS摄像头)
表 31 display功能模式测试结果
|
序号 |
评估板显示画面 |
PC机显示画面 |
时延(ms) |
|
1 |
00:01:09.375 |
00:01:09.550 |
175 |
|
2 |
00:02:04.879 |
00:02:05.093 |
214 |
|
3 |
00:03:07.414 |
00:03:07.55 |
141 |
|
4 |
00:04:09.564 |
00:04:09.778 |
214 |
|
5 |
00:05:01.844 |
00:05:02.069 |
225 |
|
平均值 |
/ |
/ |
193 |
表 32 dis-save功能模式测试结果
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:06.562 |
00:01:06.693 |
131 |
|
2 |
00:02:09.357 |
00:02:09.620 |
263 |
|
3 |
00:03:02.195 |
00:03:02.327 |
132 |
|
4 |
00:04:05.334 |
00:04:05.555 |
224 |
|
5 |
00:05:07.191 |
00:05:07.403 |
212 |
|
平均值 |
/ |
/ |
191 |
表 33 udp功能模式测试结果(接收端:评估板)
|
序号 |
评估板显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:00.956 |
00:01:01.300 |
344 |
|
2 |
00:02:06.398 |
00:02:06.742 |
344 |
|
3 |
00:03:01.580 |
00:03:02.061 |
481 |
|
4 |
00:04:07.804 |
00:04:08.236 |
432 |
|
5 |
00:05:09.636 |
00:05:10.021 |
385 |
|
平均值 |
/ |
/ |
398 |
表 34 udp功能模式测试结果(接收端:上位机)
|
序号 |
上位机显示界面 |
PC机显示界面 |
时延(ms) |
|
1 |
00:01:00.667 |
00:01:01.013 |
346 |
|
2 |
00:02:02.946 |
00:02:03.293 |
347 |
|
3 |
00:03:05.062 |
00:03:05.398 |
336 |
|
4 |
00:04:07.375 |
00:04:07.769 |
394 |
|
5 |
00:05:09.655 |
00:05:00.084 |
429 |
|
平均值 |
/ |
/ |
370 |
案例解析
GStreamer管道示意图

图 94 display功能模式

图 95 save功能模式

图 96 dis-save功能模式

图 97 udp功能模式
关键代码说明
- 初始化GStreamer,创建Pipeline。

图 98
创建Pipeline组件并初始化。

图 99
检查组件初始化情况。

图 100
配置各组件参数。

图 101

图 102
链接组件到Pipeline。

图 103

图 104

图 105
使能Pipeline。

图 106
停止Pipeline,并释放GStreamer。

图 107
计时线程。

图 108
案例编译
将该案例的src目录拷贝至Ubuntu工作目录,进入src源码目录执行如下命令加载Linux Processor SDK环境变量。
Host# source /home/tronlong/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/environment-setup

图 109
执行make命令进行案例编译。编译完成后,将在当前目录生成可执行文件tl-gst-v4l2-vpe-iva-udp。
Host# make

图 110
tl-gst-mjpeg-dec-edge案例
案例说明
本案例使用GStreamer API通过ARM端从USB摄像头获取MJPEG格式视频流,并调用IVA-HD将视频硬件解码为NV12格式,然后通过OpenCL调用DSP端对NV12格式图像进行Sobel(边缘检测)算法处理,再将经过处理的图像在显示屏中实时显示,同时每隔1s将最新的原始图像以及经过处理的图像保存到本地存储文件中。
程序工作流程框图如下所示:

图 111
案例测试

图 112
请按照上图进行硬件连接,评估板上电进入文件系统,执行如下命令可查看摄像头设备节点为video1。
Target# ls -l /sys/class/video4linux/video*

图 113
请将该案例bin目录下的tl-v4l2-capture、tl-gst-mjpeg-dec-edge文件拷贝至评估板文件系统中。在tl-v4l2-capture文件所在目录下执行如下命令查询摄像头的分辨率、帧率、图像格式等参数。
Target# ./tl-v4l2-capture -m list -d /dev/video1 -t usb

图 114
在tl-gst-mjpeg-dec-edge文件所在目录下,执行如下命令查询tl-gst-mjpeg-dec-edge程序参数说明,具体如下表。
Target# ./tl-gst-mjpeg-dec-edge -h

图 115
表 35
|
参数 |
解析 |
|
-d |
视频设备节点 |
|
-i |
输入视频分辨率 |
|
-r |
输入视频帧率 |
|
-f |
文件保存路径设置 |
执行如下命令采集视频流进行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

图 116
从上图可看到图像处理平均耗时约为12.01ms,图像采集帧率为15fps,图像处理帧率为15fps。Sobel(边缘检测)算法处理效果图如下所示。

图 117
保存的两个文件可在Windows下使用bin目录下的YUV Player工具进行查看,请按照如下图示进行操作。

图 118

图 119

图 120

图 121

图 122

图 123

图 124
时延测试
时延测试方法:使用评估板的外接摄像头采集PC机显示屏的在线秒表图像,经过AM5728处理后再将图像进行显示。PC机显示画面与评估板显示画面的时间差,即为时延。进行多次测试,时延结果取其平均值。
表 36
|
序号 |
评估板画面显示 |
PC机画面显示 |
时延(ms) |
|
1 |
00:01:09.552 |
00:01:09.810 |
258 |
|
2 |
00:02:02.304 |
00:02:02.648 |
344 |
|
3 |
00:03:07.121 |
00:03:07.421 |
300 |
|
4 |
00:04:09.915 |
00:04:00.173 |
258 |
|
5 |
00:05:02.540 |
00:05:02.841 |
301 |
|
平均值 |
/ |
/ |
348 |
案例解析
GStreamer管道示意图

图 125
管道命令示例如下。如下命令仅作示例,不能在终端直接运行。
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。

图 126
创建GStreamer组件并初始化,再检查组件初始化情况。

图 127
配置各组件参数。

图 128
链接组件到Pipeline。

图 129
创建Pipeline状态检测函数,改变Pipeline状态为playing。

图 130
停止Pipeline,并释放GStreamer。

图 131
当appsink Pipeline获取一帧图像后,将触发cb_new_appsink_sample回调函数。回调函数获取从编解码器得到的数据,如果有数据正在进行算法处理,则这部分数据不进行处理,否则交由DSP端进行算法处理。

图 132
图像处理线程(ocl_thread)中,通过OpenCL将Sobel(边缘检测)算法加载至DSP端中,并将经过处理的图像数据发送至appsrc pipeline。

图 133
时间线程(timing_thread)中,以秒为单位,统计程序运行时间,设置保存标志位,使ocl_thread保存图像数据,输出图像处理平均耗时、图像采集与处理帧率。

图 134
案例编译
将该案例的src目录拷贝至Ubuntu工作目录,进入src源码目录执行如下命令加载Linux Processor SDK环境变量。
Host# source /home/tronlong/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/environment-setup

图 135
执行make命令进行编译。
Host# make

图 136
编译完成后,将在当前目录生成可执行文件tl-gst-mjpeg-dec-edge。

图 137
tl-gst-rtsp-dec-edge案例
案例说明
本案例使用GStreamer API通过ARM端从网络摄像头获取视频流数据,并调用IVA-HD将视频硬件解码为NV12格式,然后通过OpenCL调用DSP端对NV12格式图像进行Sobel(边缘检测)算法处理,再将经过处理的图像在显示屏中实时显示。
程序工作流程框图如下所示:

图 138
由于本篇案例内容篇幅过长,分为三章分享,想要了解更多案例详情,欢迎内容查看更多,或是在下方评论区留言,即可获取更详细内容、案例源码。