mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +00:00
wpevideosrc: Fix frame stuttering in GL rendering path
Make sure the EGLImage we're rendering to the GL memory stays alive long enough, until the the GL memory has been destroyed. This change fixes tearing and black flashes artefacts that were happening because the EGLImage was sometimes destroyed before the sink actually rendered the associated texture. Fixes #889 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1354>
This commit is contained in:
parent
053dd564a1
commit
a6fd767025
1 changed files with 15 additions and 0 deletions
|
@ -215,6 +215,16 @@ gst_wpe_video_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static GQuark
|
||||
_egl_image_quark (void)
|
||||
{
|
||||
static GQuark quark = 0;
|
||||
|
||||
if (!quark)
|
||||
quark = g_quark_from_static_string ("GstWPEEGLImage");
|
||||
return quark;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_wpe_video_src_fill_memory (GstGLBaseSrc * bsrc, GstGLMemory * memory)
|
||||
{
|
||||
|
@ -240,6 +250,11 @@ gst_wpe_video_src_fill_memory (GstGLBaseSrc * bsrc, GstGLMemory * memory)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// The EGLImage is implicitely associated with the memory we're filling, so we
|
||||
// need to ensure their life cycles are tied.
|
||||
gst_mini_object_set_qdata (GST_MINI_OBJECT_CAST (memory), _egl_image_quark (),
|
||||
gst_egl_image_ref (locked_image), (GDestroyNotify) gst_egl_image_unref);
|
||||
|
||||
gl->ActiveTexture (GL_TEXTURE0 + memory->plane);
|
||||
gl->BindTexture (GL_TEXTURE_2D, tex_id);
|
||||
gl->EGLImageTargetTexture2D (GL_TEXTURE_2D,
|
||||
|
|
Loading…
Reference in a new issue