omx - in error state at end of video (before EOS)

Enrique Ocaña González eocanha at igalia.com
Fri Dec 9 12:25:46 UTC 2016


El viernes, 9 de diciembre de 2016 11:41:00 (CET) Stuart Axon escribió:

> > [...] The summary: double check that your sink honors the flush-start 
> > event and that it doesn't hold or leak any egl buffer after flush-starts.
>
> Interesting...  I'm using a pi3 with python with this pipeline:
>      filesrc->decodebin->glimagesink.
> 
> I use set_window_handle from python and am also seeking within my videos.
> the only event I handle is "prepare_window_handle", maybe I need to handle
> some more to clean things up ? Alternately maybe the double free is in
> glimagesink ?

Which version of glimagesink are you using, the one from gst-plugins-gl or the 
one from gst-plugins-bad?

There's a redisplay_texture field in glimagesink which seems to hold the last 
texture received by the sink. In the gst-plugins-gl version, it's only cleared 
[1] on PAUSED --> READY state changes, but not on PAUSED --> PAUSED changes. 
Also there's no code to explicitly handle FLUSH_START events in that gst-
plugins-gl version, so I guess that's done in some base class and nobody 
releases the texture in those cases.

On the other hand, in the gst-plugins-bad version, there's additional support 
for the DRAIN query [2] but still no FLUSH_START management. I'm not fully 
acquainted with the code, but at first sight looks to me that the egl buffer 
which the omxdecoder wants to release so badly is held in redisplay_texture by 
gstglimakesink without permission during flushes, breaking the OMX buffer 
release behaviour.

Cheers.

[1] https://cgit.freedesktop.org/gstreamer/attic/gst-plugins-gl/tree/gst/gl/
gstglimagesink.c#n567
[2] https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/ext/gl/
gstglimagesink.c?id=1.10.2#n1123

-- 
Enrique Ocaña González


More information about the gstreamer-devel mailing list