From: Sebastian Dröge Date: Mon, 13 Oct 2014 11:25:42 +0000 (+0200) Subject: gltestsrc: Add other-context property X-Git-Tag: 1.16.2~955^2~1254 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c46c642fd30286d8dd82c84cd972bf4f9e1caada;p=platform%2Fupstream%2Fgst-plugins-base.git gltestsrc: Add other-context property --- diff --git a/ext/gl/gstgltestsrc.c b/ext/gl/gstgltestsrc.c index 5abeead..2b73b18 100644 --- a/ext/gl/gstgltestsrc.c +++ b/ext/gl/gstgltestsrc.c @@ -59,6 +59,7 @@ GST_DEBUG_CATEGORY_STATIC (gl_test_src_debug); enum { PROP_0, + PROP_OTHER_CONTEXT, PROP_PATTERN, PROP_TIMESTAMP_OFFSET, PROP_IS_LIVE @@ -89,6 +90,7 @@ static void gst_gl_test_src_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_gl_test_src_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static void gst_gl_test_src_dispose (GObject * object); static gboolean gst_gl_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps); static GstCaps *gst_gl_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps); @@ -161,7 +163,13 @@ gst_gl_test_src_class_init (GstGLTestSrcClass * klass) gobject_class->set_property = gst_gl_test_src_set_property; gobject_class->get_property = gst_gl_test_src_get_property; + gobject_class->dispose = gst_gl_test_src_dispose; + g_object_class_install_property (gobject_class, PROP_OTHER_CONTEXT, + g_param_spec_object ("other-context", + "External OpenGL context", + "Give an external OpenGL context with which to share textures", + GST_GL_TYPE_CONTEXT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN, g_param_spec_enum ("pattern", "Pattern", "Type of test pattern to generate", GST_TYPE_GL_TEST_SRC_PATTERN, @@ -389,12 +397,29 @@ gst_gl_test_src_set_pattern (GstGLTestSrc * gltestsrc, gint pattern_type) } static void +gst_gl_test_src_dispose (GObject * object) +{ + GstGLTestSrc *src = GST_GL_TEST_SRC (object); + + if (src->other_context) + gst_object_unref (src->other_context); + src->other_context = NULL; + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void gst_gl_test_src_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstGLTestSrc *src = GST_GL_TEST_SRC (object); switch (prop_id) { + case PROP_OTHER_CONTEXT: + if (src->other_context) + gst_object_unref (src->other_context); + src->other_context = g_value_dup_object (value); + break; case PROP_PATTERN: gst_gl_test_src_set_pattern (src, g_value_get_enum (value)); break; @@ -416,6 +441,9 @@ gst_gl_test_src_get_property (GObject * object, guint prop_id, GstGLTestSrc *src = GST_GL_TEST_SRC (object); switch (prop_id) { + case PROP_OTHER_CONTEXT: + g_value_set_object (value, src->other_context); + break; case PROP_PATTERN: g_value_set_enum (value, src->pattern_type); break; @@ -784,6 +812,16 @@ gst_gl_test_src_decide_allocation (GstBaseSrc * basesrc, GstQuery * query) } } + if (src->other_context) { + if (!other_context) { + other_context = src->other_context; + } else { + GST_ELEMENT_WARNING (src, LIBRARY, SETTINGS, + ("%s", "Cannot share with more than one GL context"), + ("%s", "Cannot share with more than one GL context")); + } + } + if (!src->context) { src->context = gst_gl_context_new (src->display); if (!gst_gl_context_create (src->context, other_context, &error)) diff --git a/ext/gl/gstgltestsrc.h b/ext/gl/gstgltestsrc.h index 0e7d71b..2c60b25 100644 --- a/ext/gl/gstgltestsrc.h +++ b/ext/gl/gstgltestsrc.h @@ -108,7 +108,7 @@ struct _GstGLTestSrc { GstGLDownload *download; GstGLDisplay *display; - GstGLContext *context; + GstGLContext *context, *other_context; gint64 timestamp_offset; /* base offset */ GstClockTime running_time; /* total running time */ gint64 n_frames; /* total frames sent */