From ad0252fc049ea7e75e07fb5a98e92ec238422b30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 18 Sep 2013 22:36:51 +0200 Subject: [PATCH] eglglessink: Update for new GstContext API --- ext/eglgles/gstegladaptation.c | 3 +- ext/eglgles/gstegladaptation_egl.c | 32 ++---------- ext/eglgles/gsteglglessink.c | 82 +++++------------------------- 3 files changed, 21 insertions(+), 96 deletions(-) diff --git a/ext/eglgles/gstegladaptation.c b/ext/eglgles/gstegladaptation.c index 0731cbddae..830789a066 100644 --- a/ext/eglgles/gstegladaptation.c +++ b/ext/eglgles/gstegladaptation.c @@ -202,7 +202,8 @@ static const char *frag_NV12_NV21_prog = { void gst_egl_adaption_init (void) { - GST_DEBUG_CATEGORY_INIT (egladaption_debug, "egladaption", 0, "EGL adaption layer"); + GST_DEBUG_CATEGORY_INIT (egladaption_debug, "egladaption", 0, + "EGL adaption layer"); } static GstCaps * diff --git a/ext/eglgles/gstegladaptation_egl.c b/ext/eglgles/gstegladaptation_egl.c index 82958d0cd3..5f52442311 100644 --- a/ext/eglgles/gstegladaptation_egl.c +++ b/ext/eglgles/gstegladaptation_egl.c @@ -133,24 +133,13 @@ gst_egl_adaptation_init_egl_display (GstEglAdaptationContext * ctx) goto HANDLE_ERROR; } - msg = gst_message_new_need_context (GST_OBJECT_CAST (ctx->element)); - gst_message_add_context_type (msg, GST_EGL_DISPLAY_CONTEXT_TYPE); + msg = + gst_message_new_need_context (GST_OBJECT_CAST (ctx->element), + GST_EGL_DISPLAY_CONTEXT_TYPE); gst_element_post_message (GST_ELEMENT_CAST (ctx->element), msg); GST_OBJECT_LOCK (ctx->element); - if (ctx->set_display) { - GstContext *context; - - ctx->display = gst_egl_display_ref (ctx->set_display); - GST_OBJECT_UNLOCK (ctx->element); - context = gst_element_get_context (GST_ELEMENT_CAST (ctx->element)); - if (!context) - context = gst_context_new (); - context = gst_context_make_writable (context); - gst_context_set_egl_display (context, ctx->display); - gst_element_set_context (GST_ELEMENT_CAST (ctx->element), context); - gst_context_unref (context); - } else { + if (!ctx->set_display) { GstContext *context; GST_OBJECT_UNLOCK (ctx->element); @@ -162,20 +151,9 @@ gst_egl_adaptation_init_egl_display (GstEglAdaptationContext * ctx) } ctx->display = gst_egl_display_new (display, (GDestroyNotify) eglTerminate); - context = gst_context_new (); - gst_context_set_egl_display (context, ctx->display); - + context = gst_context_new_egl_display (ctx->display, FALSE); msg = gst_message_new_have_context (GST_OBJECT (ctx->element), context); gst_element_post_message (GST_ELEMENT_CAST (ctx->element), msg); - context = NULL; - - context = gst_element_get_context (GST_ELEMENT_CAST (ctx->element)); - if (!context) - context = gst_context_new (); - context = gst_context_make_writable (context); - gst_context_set_egl_display (context, ctx->display); - gst_element_set_context (GST_ELEMENT_CAST (ctx->element), context); - gst_context_unref (context); } if (!eglInitialize (gst_egl_display_get (ctx->display), diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c index a277fa1b11..e0d81b4bf3 100644 --- a/ext/eglgles/gsteglglessink.c +++ b/ext/eglgles/gsteglglessink.c @@ -188,7 +188,6 @@ static GstCaps *gst_eglglessink_getcaps (GstBaseSink * bsink, GstCaps * filter); static gboolean gst_eglglessink_propose_allocation (GstBaseSink * bsink, GstQuery * query); static gboolean gst_eglglessink_query (GstBaseSink * bsink, GstQuery * query); -static gboolean gst_eglglessink_event (GstBaseSink * bsink, GstEvent * event); /* VideoOverlay interface cruft */ static void gst_eglglessink_videooverlay_init (GstVideoOverlayInterface * @@ -1886,41 +1885,6 @@ gst_eglglessink_getcaps (GstBaseSink * bsink, GstCaps * filter) return ret; } -static gboolean -gst_eglglessink_event (GstBaseSink * bsink, GstEvent * event) -{ - GstEglGlesSink *eglglessink; - - eglglessink = GST_EGLGLESSINK (bsink); - - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_CONTEXT:{ - GstContext *context; - GstEGLDisplay *display; - - gst_event_parse_context (event, &context); - - if (gst_context_get_egl_display (context, &display)) { - GST_OBJECT_LOCK (eglglessink); - if (eglglessink->egl_context->set_display) - gst_egl_display_unref (eglglessink->egl_context->set_display); - eglglessink->egl_context->set_display = display; - GST_OBJECT_UNLOCK (eglglessink); - } - - gst_context_unref (context); - - return GST_BASE_SINK_CLASS (gst_eglglessink_parent_class)->event (bsink, - event); - break; - } - default: - return GST_BASE_SINK_CLASS (gst_eglglessink_parent_class)->event (bsink, - event); - break; - } -} - static gboolean gst_eglglessink_query (GstBaseSink * bsink, GstQuery * query) { @@ -1930,33 +1894,24 @@ gst_eglglessink_query (GstBaseSink * bsink, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CONTEXT:{ - guint i, n; + const gchar *context_type; - GST_BASE_SINK_CLASS (gst_eglglessink_parent_class)->query (bsink, query); + if (gst_query_parse_context_type (query, &context_type) && + strcmp (context_type, GST_EGL_DISPLAY_CONTEXT_TYPE) && + eglglessink->egl_context->display) { + GstContext *context; - n = gst_query_get_n_context_types (query); - for (i = 0; i < n; i++) { - const gchar *context_type = NULL; + context = + gst_context_new_egl_display (eglglessink->egl_context->display, + FALSE); + gst_query_set_context (query, context); + gst_context_unref (context); - gst_query_parse_nth_context_type (query, i, &context_type); - if (g_strcmp0 (context_type, GST_EGL_DISPLAY_CONTEXT_TYPE) == 0) { - GstContext *context, *old_context; - - gst_query_parse_context (query, &old_context); - if (old_context) - context = gst_context_copy (old_context); - else - context = gst_context_new (); - - gst_context_set_egl_display (context, - eglglessink->egl_context->display); - gst_query_set_context (query, context); - gst_context_unref (context); - break; - } + return TRUE; + } else { + return GST_BASE_SINK_CLASS (gst_eglglessink_parent_class)->query (bsink, + query); } - - return TRUE; break; } default: @@ -1981,14 +1936,6 @@ gst_eglglessink_set_context (GstElement * element, GstContext * context) eglglessink->egl_context->set_display = display; GST_OBJECT_UNLOCK (eglglessink); } - - GST_OBJECT_LOCK (eglglessink); - context = gst_context_copy (context); - gst_context_set_egl_display (context, eglglessink->egl_context->display); - GST_OBJECT_UNLOCK (eglglessink); - - GST_ELEMENT_CLASS (parent_class)->set_context (element, context); - gst_context_unref (context); } static gboolean @@ -2407,7 +2354,6 @@ gst_eglglessink_class_init (GstEglGlesSinkClass * klass) GST_DEBUG_FUNCPTR (gst_eglglessink_propose_allocation); gstbasesink_class->prepare = GST_DEBUG_FUNCPTR (gst_eglglessink_prepare); gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_eglglessink_query); - gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_eglglessink_event); gstvideosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_eglglessink_show_frame);