带有 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 (将#修改为@)