[Bug 776091] omx - in error state at end of video (before EOS)
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Fri Jan 13 12:41:35 UTC 2017
https://bugzilla.gnome.org/show_bug.cgi?id=776091
--- Comment #10 from Stuart Axon <stu.axon at gmail.com> ---
More likely a bug in my understanding of dispmanx + python ctypes or gstreamer
:)
It fixes my issue enough that I can play things gaplessly, but it unfixes
things by seeming to introduce some sort of resource leak [1] (leaking
windows?).
It makes sense to me that gstreamer may destroy windows it creates, but was
surprising that it destroyed one passed in from set_window_handle.
I'd try switching to recreating the window each time, but I'm not sure where to
do this, since prepare-window-handle only seems to fire once.
Currently, I check for a state change from READY to PAUSED and resize my window
there [2].
I tried changing this to create a new window and call set_window_handle, but
that doesn't seem to work.
[1]
First items play fine, but eventually this happens (if testing with a video it
happens much more quickly, after about the 5th):
eglCreateImageKHR: failed to create image for buffer 0x1c target 12465 error
0x300c
0:00:25.641093891 1124 0x977c60 ERROR glbasememory
gstglbasememory.c:94:_mem_create_gl: Failed to create GL buffer: Failed to
create EGLImage
0:00:25.641261963 1124 0x9846f0 ERROR glbasememory
gstglbasememory.c:168:gst_gl_base_memory_init: Could not create GL buffer with
context:0x97c0c8
** (python:1124): CRITICAL **: gst_egl_image_get_image: assertion
'GST_IS_EGL_IMAGE (image)' failed
eglCreateImageKHR: failed to create image for buffer 0x1d target 12465 error
0x300c
0:00:25.642280756 1124 0x977c60 ERROR glbasememory
gstglbasememory.c:94:_mem_create_gl: Failed to create GL buffer: Failed to
create EGLImage
0:00:25.642371745 1124 0x9846f0 ERROR glbasememory
gstglbasememory.c:168:gst_gl_base_memory_init: Could not create GL buffer with
context:0x97c0c8
[2] -
### After gst pipeline has been created, setup state change callback
def on_state_change(bus, msg):
if msg.src != self.sink:
return
old, new, pending = msg.parse_state_changed()
if (old, new) == (Gst.State.READY, Gst.State.PAUSED):
# Code to resize window here
pass
self.bus.connect('message::state-changed', on_state_change)
### later on, when receiving command to play new video/image:
def play_next_location(self, next_location):
self.pipeline.set_state(Gst.State.READY)
self.src.set_property("location", next_location)
self.pipeline.set_state(Gst.State.PLAYING)
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list