[gtk: 1/2] gtkgstsink: Sync texture before handing it to GDK
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk: 1/2] gtkgstsink: Sync texture before handing it to GDK
- Date: Fri, 29 Jan 2021 19:06:04 +0000 (UTC)
commit 4644dab0813d5b6b3d5ffd4187cc6bf41e3cc61e
Author: Jan Alexander Steffens (heftig) <jan steffens gmail com>
Date: Mon Jan 25 22:43:11 2021 +0100
gtkgstsink: Sync texture before handing it to GDK
We need to synchronize when moving the texture between contexts, or we
get glitches with VA-API decoding.
modules/media/gtkgstsink.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
---
diff --git a/modules/media/gtkgstsink.c b/modules/media/gtkgstsink.c
index c546ec7ff6..8a0a124e3b 100644
--- a/modules/media/gtkgstsink.c
+++ b/modules/media/gtkgstsink.c
@@ -35,6 +35,8 @@
#include <gst/gl/wayland/gstgldisplay_wayland.h>
#endif
+#include <gst/gl/gstglfuncs.h>
+
enum {
PROP_0,
PROP_PAINTABLE,
@@ -204,6 +206,7 @@ gtk_gst_sink_propose_allocation (GstBaseSink *bsink,
config = gst_buffer_pool_get_config (pool);
gst_buffer_pool_config_set_params (config, caps, size, 0, 0);
+ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_GL_SYNC_META);
if (!gst_buffer_pool_set_config (pool, config))
{
@@ -221,6 +224,9 @@ gtk_gst_sink_propose_allocation (GstBaseSink *bsink,
/* we also support various metadata */
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, 0);
+ if (self->gst_context->gl_vtable->FenceSync)
+ gst_query_add_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, 0);
+
return TRUE;
}
@@ -265,6 +271,14 @@ gtk_gst_sink_texture_from_buffer (GtkGstSink *self,
if (self->gdk_context &&
gst_video_frame_map (frame, &self->v_info, buffer, GST_MAP_READ | GST_MAP_GL))
{
+ GstGLSyncMeta *sync_meta;
+
+ sync_meta = gst_buffer_get_gl_sync_meta (buffer);
+ if (sync_meta) {
+ gst_gl_sync_meta_set_sync_point (sync_meta, self->gst_context);
+ gst_gl_sync_meta_wait (sync_meta, self->gst_context);
+ }
+
texture = gdk_gl_texture_new (self->gdk_context,
*(guint *) frame->data[0],
frame->info.width,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]