wzyy2 / gstreamer-opencv

opencv + gstreamer simple demo
132 stars 42 forks source link

安装opecv带gstreamer mpp硬解码 #7

Open luqinlive opened 5 years ago

luqinlive commented 5 years ago

大神,自带gstreamer试了可以硬解,效果也不错,但是编译opencv带gstreamer一直有问题,有没有已经编译好的可以用,或者有什么编译教程可以结合起来用,TX2在这块的资料比较多,Rockchip的比较少,感谢!

wzyy2 commented 5 years ago

为什么要编译opencv?

luqinlive commented 5 years ago

为什么要编译opencv?

编译opencv 是因为对gstreamer不太熟悉,看到有tx2上的方案,可以直接在videocapture里输入pipline,出来的直接是cvmat格式的,底层算法刚好也是需要BGR的数据来做人脸跟踪检测,所以一直寻找解决方法,

wzyy2 commented 5 years ago

按这个程序里的, 直接调gstreamer appsink, 出来的buffer自己转cvmat把 还要去编译opencv太浪费时间了

luqinlive commented 5 years ago

编译出现: undefined reference to `gst_dmabuf_memory_get_fd' 基本库都导入了,是gstreamer版本低了吗 firefly最新的ROM gst-launch-1.0 version 1.12.2 GStreamer 1.12.2

luqinlive commented 5 years ago

firefly 发布的系统里带了两个版本的gstreamer, 一个1.8.3,一个1.12.2,手动去掉了低版本的,编译还是找不到gst_dmabuf_memory_get_fd, 把这行暂时去掉了,跑起来打印Unable to set the pipeline to the playing state 出来了gst的一个框,没有显示画面

wzyy2 commented 5 years ago

要不换个rockchip发布的系统?

luqinlive commented 5 years ago

单纯得硬解码播放CPU消耗极低在5%左右,但是转成BGR就变成30%得消耗了对算法会造成影响,我怀疑是rga没有编译进去,现在硬解了rtsp流,用videoconvert还是用CPU去把YUV转BGR,没有达到硬解的极致效果,现在去官网拉了源代码,更新最新的代码编译试试看, 是不是得确认/dev节点下有rga2吗,才能用rgaconvert

luqinlive commented 5 years ago

您那有rock发布的系统吗,我试试看, 昨天编了一个img,发现里面gstreamer还是1.12的版本,我确信我源代码里面编译的是1.14,刷机了后还是没有看到rga2设备,是不是因为用了firefly的rk3399_ubuntu16.04_XFCE 的rootfs镜像打包的原因,因为之前编译的包只有500多MB,加上了他们的手动制定了Ubuntu的路径编译出来的大小和他们的一样大,我需要怎么用自己编译的源代码,再加上ubuntu的界面,谢谢

wzyy2 commented 5 years ago

是, 得有rga节点才行..不过这个是我当初开源搞着玩的 现在rk那边应该不用这个驱动了, 3399默认没开启

你把输出的颜色改成nv12把, 不做convert了

luqinlive commented 5 years ago

但是算法这边是需要bgr的数据,nv12的输出,还是要手动转成bgr才能用,CPU还是下不下来,

wzyy2 commented 5 years ago

可以问问rk现在有没有提供gstreamer转颜色格式的方案

luqinlive commented 5 years ago

可以问问rk现在有没有提供gstreamer转颜色格式的方案

试了arm的neon加速速度还是不行,最后还是想通过rga来转,改了内核,加上了rga选项,可以跑了,但是有个地方不行, (--gst-version:17374): CRITICAL **: 15:39:32.675: gst_dmabuf_memory_get_fd: assertion 'gst_is_dmabuf_memory (mem)' failed

nationalflag commented 4 years ago

用appsink取缓存比只是解码播放要多耗很多cpu资源啊, @luqinlive 请问你最后怎么解决的呢?

zhouxingqun commented 4 years ago

@luqinlive 你好,undefined reference to `gst_dmabuf_memory_get_fd'这个问题我也遇到了,请问您是怎么解决的?还有我尝试videocapture中添加pipeline,cpu占用率和直接用gstreamer差不多,但是imshow的视频很卡您知道是什么原因吗

xfxty commented 4 years ago

@luqinlive 你好,rga如何加到内核中的,麻烦指导。我使用的是nanopiM4,

luqinlive commented 4 years ago

rga好像新的firefly的系统已经有这个设备节点了,如果没有/dev/rga 需要修改内核源代码打开开关编译好后再烧到系统里