微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 xorg7 的 gstreamer gl 显示效果不佳

如何解决带有 xorg7 的 gstreamer gl 显示效果不佳

我的项目在rockchip rk3288 处理器(Tinkerboard)上使用buildroot。我的项目使用 Qt 和 gstreamer。由于 libmali gbm 库为我的 Qt 应用程序提供了 eglfs_kms,我正在从 wayland/weston 移到 x。我之前用过 eglfs,开机速度很快,很简单,而且不像 wayland 那样依赖于 weston。

这是我的旧配置 QT_QPA_PLATFORM=wayland ./MyGUIApplication /usr/lib/libmali.so -> /usr/lib/libmali-wayland.so

这是我的新配置 QT_QPA_PLATFORM=eglfs_kms ./MyGUIApplication /usr/lib/libmali.so -> /usr/lib/libmali-gbm.so

为了获得 gbm 库,我更新了我的 buildroot 配置以删除 wayland 并添加了 xorg7

@@ -69,6 +69,7 @@
 BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC=y
 BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEORATE=y
 BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL=y
+# BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL is not set
 BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA=y
 BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OGG=y
 BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_PANGO=y
@@ -124,13 +125,16 @@
 BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
 BR2_PACKAGE_GLMARK2=y
 BR2_PACKAGE_MESA3D_galLIUM_DRIVER_SWRAST=y
+BR2_PACKAGE_MESA3D_OSMESA=y
 BR2_PACKAGE_PSPLASH=y
 BR2_PACKAGE_SDL2=y
 BR2_PACKAGE_SDL2_KMSDRM=y
+BR2_PACKAGE_SDL2_OPENGL=y
 BR2_PACKAGE_SDL2_OPENGLES=y
 BR2_PACKAGE_SDL2_TTF=y
 BR2_PACKAGE_QT5=y
 BR2_PACKAGE_QT5BASE_sqlITE_SYstem=y
+BR2_PACKAGE_QT5BASE_OPENGL_ES2=y
 BR2_PACKAGE_QT5BASE_LINUXFB=y
 BR2_PACKAGE_QT5BASE_EGLFS=y
 BR2_PACKAGE_QT5BASE_JPEG=y
@@ -142,9 +146,8 @@
 BR2_PACKAGE_QT5TOOLS=y
 BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS=y
 BR2_PACKAGE_QT5VIRTUALKEYBOARD=y
-BR2_PACKAGE_QT5WAYLAND=y
-BR2_PACKAGE_WESTON=y
-BR2_PACKAGE_WESTON_DRM=y
+BR2_PACKAGE_XORG7=y
+BR2_PACKAGE_XKEYBOARD_CONfig=y
 BR2_PACKAGE_AVRDUDE=y
 BR2_PACKAGE_EDID_DECODE=y
 BR2_PACKAGE_EVTEST=y

问题是 gstreamer gl 库不适用于这个新配置。

# gst-launch-1.0 videotestsrc ! glupload ! glfiltercube ! gldownload ! fakesink
Setting pipeline to PAUSED ...
Pipeline is prerollING ...
Got context from element 'gldownloadelement0': gst.gl.GLdisplay=context,gst.gl.GLdisplay=(GstGLdisplay)"\(GstGLdisplayEGL\)\ gldisplayegl0";
ERROR: from element /GstPipeline:pipeline0/GstGLFilterCube:glfiltercube0: Failed to initialize egl: EGL_BAD_disPLAY
Additional debug info:
gstglbasefilter.c(395): gst_gl_base_filter_decide_allocation (): /GstPipeline:pipeline0/GstGLFilterCube:glfiltercube0
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

运行 GST_DEBUG="*:4" 时出现以下特定错误

INFO GST_CONTEXT gstglutils.c:115:pad_query:<glfiltercube0:sink> pad peer query Failed
INFO   glcontext gstglcontext.c:337:gst_gl_context_new: creating a context for display <gldisplayegl0>,user choice:(null)
INFO    glwindow gstglwindow.c:251:gst_gl_window_new: creating a window,user choice:(null)
INFO    glwindow gstglwindow_x11.c:141:gst_gl_window_x11_new: Wrong display type 32 for this window type 1
WARN    glwindow gstglwindow.c:293:gst_gl_window_new: Could not create window. user specified (null),creating dummy window
INFO   glcontext gstglcontext.c:1240:gst_gl_context_create_thread:<glcontextegl0> Attempting to create opengl context. user chosen api(s) (any),compiled api support (gles2) display api (opengl opengl3 gles2)
WARN        glcontext gstglcontext.c:1244:gst_gl_context_create_thread:<glcontextegl0> Failed to create context
INFO        glcontext gstglcontext.c:1046:gst_gl_context_create:<glcontextegl0> gl thread created
WARN     glbasefilter gstglbasefilter.c:395:gst_gl_base_filter_decide_allocation:<glfiltercube0> error: Failed to initialize egl: EGL_BAD_disPLAY
INFO GST_ERROR_SYstem gstelement.c:2145:gst_element_message_full_with_details:<glfiltercube0> posting message: Failed to initialize egl: EGL_BAD_disPLAY
INFO GST_ERROR_SYstem gstelement.c:2172:gst_element_message_full_with_details:<glfiltercube0> posted error message: Failed to initialize egl: EGL_BAD_disPLAY ERROR: from element / GstPipeline:pipeline0/

其他 gstreamer 库工作正常,但我需要 gstopengl 库来进行有效的转换,因此使用几何变换等软件插件是不可接受的。

我不是显示概念的菜鸟,但我不是专家。我是否从 buildroot 中遗漏了 gstgl 需要的某些东西才能正常工作?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。