Toybrick

标题: v4l2调用摄像头 + opengles + drm显示(已解决) [打印本页]

作者: shopping    时间: 2019-11-4 16:21
标题: v4l2调用摄像头 + opengles + drm显示(已解决)
本帖最后由 shopping 于 2019-12-2 14:41 编辑

按照论坛里的建议,用 opengles + drm 做显示,因为用OpenGLes ,还要引进 EGL  GBM库,太复杂,为了减少工作量,先用 DRM 把摄像头读取的数据显示出来。github地址:https://github.com/shopping-tang/v4l2_drm
更新:摄像头数据已初步显示在屏幕上,第一阶段有突破!代码在上面,有需要自取。
我Q : 1094504629 ,回复 DRM 加我,一起看DRM,这个库太烦了,后期恐怕还要引入 gbm ,egl 库,opengles 暂时没需求,看领导怎么说了。
作者: shopping    时间: 2019-11-8 14:36
本帖最后由 shopping 于 2019-11-8 16:40 编辑

四处看代码+自己疯狂尝试,受了点启发,成功跑通代码,显示成功!下阶段需解决问题:
1.将显示屏放至我想要的位置,及随意控制显示窗口大小;
2.双摄像头双屏同显;
3.多线程;
4.停止播放后,屏幕会黑屏,要重启才能重新点亮。


作者: shopping    时间: 2019-11-9 16:25
更新,今天又试了一下,解决了问题 1 、 2  、 3,问题4无相关资料,暂无头绪。
作者: hjf515    时间: 2019-11-11 11:00
多谢楼主,先收藏了。。
作者: shopping    时间: 2019-11-13 16:28
本帖最后由 shopping 于 2019-11-13 16:37 编辑

对问题4无头绪,为此咨询了 jefferyzhang 老哥,他说:“需要保存之前状态,关闭后还原状态” 。一开始没什么灵感,今天突然发现 https://github.com/Jerzha/samples-rklinux-opengl 里的 main_gbm.cpp 有关于保存之前状态的代码,参考了一下,成功排除 问题 4 !!!

作者: gaozhenyan    时间: 2019-11-13 21:41
之前整理的egl/gbm/drm相关的应用,可能会有帮助,代码参考的是mpv播放器
https://download.csdn.net/download/goazhenyan/10791652
作者: shopping    时间: 2019-11-14 08:27
gaozhenyan 发表于 2019-11-13 21:41
之前整理的egl/gbm/drm相关的应用,可能会有帮助,代码参考的是mpv播放器
https://download.csdn.net/downl ...

谢谢,我看一下。
作者: shopping    时间: 2019-11-29 09:20
本帖最后由 shopping 于 2019-11-29 09:30 编辑

经过努力,初步将 opengles 结合 drm 显示画面成功。遗憾的是,画面割裂严重,找原因。。。。。。此外,特意用了 cat  /sys/devices/platform/ff9a0000.gpu/utilisation 这个命令看下 gpu 占有量,用量数据在 10 - 90 之间波动。

作者: shopping    时间: 2019-11-29 09:57
本帖最后由 shopping 于 2019-11-29 10:01 编辑

想了一下,注释了几行代码,消除了一个多余的画面。目前思考的问题是:为什么画面里有白色区域?

作者: shopping    时间: 2019-11-29 10:19
把 glViewport(0, 0, kms->mode.vdisplay, kms->mode.hdisplay); 给注释了,白色区域少了点。

作者: jefferyzhang    时间: 2019-11-29 10:56
明显是gl代码写的有问题,渲染的纹理没贴对
作者: shopping    时间: 2019-11-29 11:05
jefferyzhang 发表于 2019-11-29 10:56
明显是gl代码写的有问题,渲染的纹理没贴对

谢谢大佬指点,我再好好看一下源码。
作者: shopping    时间: 2019-11-29 11:23
经过上面老哥的指点,消除了花屏。不过空白区域还是没能解决。

作者: shopping    时间: 2019-11-29 15:55
本帖最后由 shopping 于 2019-11-29 15:58 编辑

jefferyzhang 老哥与其他群友的帮助下,opengles + drm 显示初步完成。前前后后加起来搞了一个月,有几次被bug卡的怀疑智商,好几次想放弃,作为菜鸟做什么都要吃苦头,坚持就是胜利吧,后面优化还需要时间精力,有同样意向的朋友可以一起来。
github:https://github.com/shopping-tang/opengles_drm

作者: jefferyzhang    时间: 2019-11-29 16:38
优秀
作者: shopping    时间: 2019-11-29 19:02
jefferyzhang 发表于 2019-11-29 16:38
优秀

过奖,后面优化又是一滩烂事。
作者: jefferyzhang    时间: 2019-11-29 20:55
我看你是有桌面系统的,其实你可以不用自己走drm,可以通过linux的opengl编程来绘制窗口程序。。。
当然自己写drm效率可能会更高
作者: shopping    时间: 6 天前
本帖最后由 shopping 于 2019-12-3 09:49 编辑

此贴应该是我最后一次更新了。添加了多线程绑定CPU、双摄、双显版本,demo中 crtc_index 与 plane_index 的值不一定与我一样,各位不要闷着头瞎抄。如果想知道自己的值是哪个?打印出 crtc_count 与 plane_count 的值,然后挨个试。特意用 cat  /sys/devices/platform/ff9a0000.gpu/utilisation 看了一下 GPU 占有量,基本在50以上。




欢迎光临 Toybrick (http://t.rock-chips.com/) Powered by Discuz! X3.3