GLX context creation in qmlglsink

Dmitry Lavnikevich planar.engineer at gmail.com
Wed Mar 22 06:09:35 UTC 2017


Hi, everyone!

I am currently trying to run qmlglsink on my x86 Yocto platform. I use 
the simpliest qmlsink example from the the gst-plugins-bad sources. It 
runs ok under X11 on my desktop machine. But on the Yocto build I see 
that the GLX context cannot be wrapped because
glXGetCurrentContext()
returns NULL at every call.

Thus the question, what exactly should create this context and make it 
current. What may I be missing from dependencies? I have built:
* qt 5.7 with -opengl desktop
* gst-plugins-bad with --enable-opengl --enable-glx

What am I missing? Where to look further? Any additional information I 
should provide?

...
INFO               GST_EVENT 
gstpad.c:5655:gst_pad_send_event_unchecked:<gluploadelement0:src> 
Received event on flushing pad. Discarding
DEBUG                GST_BUS gstbus.c:317:gst_bus_post:<bus0> [msg 
0x7b1c90] posting on bus structure-change message: 0x7b1c90, time 
99:99:99.999999999, seq-num 5, element
'sink', GstMessageStructureChange, 
type=(GstStructureChangeType)GST_STRUCTURE_CHANGE_TYPE_PAD_LINK, 
owner=(GstElement)"\(GstGLUploadElement\)\ gluploadelement0", 
busy=(boolean)false;
DEBUG                    bin 
gstbin.c:3728:gst_bin_handle_message_func:<pipeline0> [msg 0x7b1c90] 
handling child sink message of type structure-change
DEBUG                    bin 
gstbin.c:988:bin_remove_messages:<qtsink0:sink> deleting message 
0x7b1c10 of type structure-change (types 0x00001000)
DEBUG                GST_BUS gstbus.c:352:gst_bus_post:<bus0> [msg 
0x7b1c90] dropped
DEBUG       GST_ELEMENT_PADS gstutils.c:1763:gst_element_link_pads_full: 
linked pad gluploadelement0:src to pad qtsink0:sink
INFO             qtglutility gstqtglutility.cc:65:gst_qt_get_gl_display: 
QGuiApplication::instance()->platformName() xcb
DEBUG             GST_MEMORY gstallocator.c:210:gst_allocator_register: 
registering allocator 0xaee0d0 with name "GLBuffer"
DEBUG             GST_MEMORY gstallocator.c:210:gst_allocator_register: 
registering allocator 0xaee1e0 with name "GLMemory"
DEBUG             GST_MEMORY gstallocator.c:210:gst_allocator_register: 
registering allocator 0xaef020 with name "GLMemoryPBO"
DEBUG             GST_MEMORY gstallocator.c:210:gst_allocator_register: 
registering allocator 0xaee2f0 with name "GLRenderbuffer"
DEBUG             qtglwidget qtitem.cc:132:QtGLVideoItem: 0x9d4770 init 
Qt Video Item
DEBUG             qtglwidget qtitem.cc:263:onSceneGraphInitialized: 
scene graph initialization with Qt GL context 0x992f80
** (my-qt-test:715): CRITICAL **: gst_gl_context_get_gl_api: assertion 
'GST_IS_GL_CONTEXT (context)' failed
WARN               glcontext 
gstglcontext.c:506:gst_gl_context_get_current_gl_context: Could not 
retrieve current context
WARN             qtglutility 
gstqtglutility.cc:158:gst_qt_get_gl_wrapcontext: About to check 
HANDLE=0x00000000
ERROR            qtglutility 
gstqtglutility.cc:173:gst_qt_get_gl_wrapcontext: cannot wrap qt OpenGL 
context
** (my-qt-test:715): CRITICAL **: gst_gl_context_get_gl_api: assertion 
'GST_IS_GL_CONTEXT (context)' failed
DEBUG             qtglwidget qtitem.cc:284:onSceneGraphInitialized: 
0x9d4770 created wrapped GL context (NULL)
DEBUG             GST_STATES 
gstelement.c:2570:gst_element_set_state_func:<pipeline0> set_state to 
PLAYING
DEBUG             GST_STATES 
gstelement.c:2595:gst_element_set_state_func:<pipeline0> setting target 
state to PLAYING
DEBUG             GST_STATES 
gstelement.c:2608:gst_element_set_state_func:<pipeline0> current NULL, 
old_pending VOID_PENDING, next VOID_PENDING, old return SUCCESS
DEBUG             GST_STATES 
gstelement.c:2642:gst_element_set_state_func:<pipeline0> intermediate: 
setting state from NULL to READY
DEBUG                GST_BUS gstbus.c:471:gst_bus_set_flushing:<bus1> 
unset bus flushing
DEBUG             GST_STATES 
gstbin.c:2863:gst_bin_change_state_func:<pipeline0> changing state of 
children from NULL to READY
DEBUG                    bin 
gstbin.c:2900:gst_bin_change_state_func:<pipeline0> clearing all cached 
messages
DEBUG                    bin 
gstbin.c:2708:gst_bin_src_pads_activate:<pipeline0> deactivate pads
DEBUG                    bin 
gstbin.c:2716:gst_bin_src_pads_activate:<pipeline0> pad deactivation 
successful
DEBUG                    bin 
gstbin.c:2394:gst_bin_sort_iterator_resync:<pipeline0> resync
DEBUG                    bin gstbin.c:2180:add_to_queue:<pipeline0> 
adding 'qtsink0' to queue
DEBUG                    bin gstbin.c:912:find_message:<pipeline0> no 
message found matching types 00001000
DEBUG                    bin gstbin.c:919:find_message:<pipeline0>   
structure-change
DEBUG                    bin gstbin.c:2297:update_degree:<pipeline0> 
change element gluploadelement0, degree 0->1, linked to qtsink0
DEBUG                    bin gstbin.c:912:find_message:<pipeline0> no 
message found matching types 00001000
DEBUG                    bin gstbin.c:919:find_message:<pipeline0>   
structure-change
DEBUG                    bin gstbin.c:2297:update_degree:<pipeline0> 
change element videotestsrc0, degree 0->1, linked to gluploadelement0
DEBUG                    bin gstbin.c:2320:update_degree:<pipeline0> 
element videotestsrc0 not linked on any sinkpads
DEBUG                    bin 
gstbin.c:2381:gst_bin_sort_iterator_next:<pipeline0> queue head gives 
qtsink0
DEBUG                    bin gstbin.c:912:find_message:<pipeline0> no 
message found matching types 00001000
DEBUG                    bin gstbin.c:919:find_message:<pipeline0>   
structure-change
DEBUG                    bin gstbin.c:2297:update_degree:<pipeline0> 
change element gluploadelement0, degree 1->0, linked to qtsink0
DEBUG                    bin gstbin.c:2180:add_to_queue:<pipeline0> 
adding 'gluploadelement0' to queue
INFO              GST_STATES 
gstbin.c:2515:gst_bin_element_set_state:<qtsink0> current NULL pending 
VOID_PENDING, desired next READY
DEBUG                    bin gstbin.c:912:find_message:<pipeline0> no 
message found matching types 00100000
DEBUG                    bin gstbin.c:919:find_message:<pipeline0>   
async-start
DEBUG                    bin 
gstbin.c:2610:gst_bin_element_set_state:<pipeline0> setting element 
qtsink0 to READY, base_time 0:00:00.000000000
DEBUG             GST_STATES 
gstelement.c:2570:gst_element_set_state_func:<qtsink0> set_state to READY
DEBUG             GST_STATES 
gstelement.c:2595:gst_element_set_state_func:<qtsink0> setting target 
state to READY
DEBUG             GST_STATES 
gstelement.c:2608:gst_element_set_state_func:<qtsink0> current NULL, 
old_pending VOID_PENDING, next VOID_PENDING, old return SUCCESS
DEBUG             GST_STATES 
gstelement.c:2642:gst_element_set_state_func:<qtsink0> final: setting 
state from NULL to READY
DEBUG                 qtsink gstqtsink.cc:303:gst_qt_sink_change_state: 
changing state: NULL => READY
ERROR             qtglwidget qtitem.cc:340:qt_item_init_winsys: 0x9d4770 
failed to retrieve wrapped context (NULL)
WARN                  qtsink 
gstqtsink.cc:325:gst_qt_sink_change_state:<qtsink0> error: Could not 
initialize window system



More information about the gstreamer-devel mailing list