summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Isorce <julien.isorce@gmail.com>2010-05-05 11:21:31 +0200
committerJulien Isorce <julien.isorce@gmail.com>2010-05-05 11:21:31 +0200
commitb7180ebaf6856d96643dd3a94153e9db637ba06e (patch)
treeb16e24d121ce14939bea64241f29ea0420eb2249
parentabb711ae06a24cfd8f7cc2ebfae6c2854aebf5b4 (diff)
glfilter/glmixer/gltestsrc/glupload: throw an element error if no parent bin
Fixes bug #602153
-rw-r--r--gst-libs/gst/gl/gstglfilter.c17
-rw-r--r--gst-libs/gst/gl/gstglmixer.c21
-rw-r--r--gst/gl/gstgltestsrc.c31
-rw-r--r--gst/gl/gstglupload.c17
4 files changed, 64 insertions, 22 deletions
diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c
index 2f0e6ec..bec8cbc 100644
--- a/gst-libs/gst/gl/gstglfilter.c
+++ b/gst-libs/gst/gl/gstglfilter.c
@@ -238,11 +238,20 @@ gst_gl_filter_start (GstBaseTransform * bt)
GstGLFilter *filter = GST_GL_FILTER (bt);
GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
GstElement *parent = GST_ELEMENT (gst_element_get_parent (filter));
- GstStructure *structure =
- gst_structure_new (gst_element_get_name (filter), NULL);
- GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
+ GstStructure *structure = NULL;
+ GstQuery *query = NULL;
+ gboolean isPerformed = FALSE;
- gboolean isPerformed = gst_element_query (parent, query);
+ if (!parent) {
+ GST_ELEMENT_ERROR (filter, CORE, STATE_CHANGE, (NULL),
+ ("A parent bin is required"));
+ return FALSE;
+ }
+
+ structure = gst_structure_new (gst_element_get_name (filter), NULL);
+ query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
+
+ isPerformed = gst_element_query (parent, query);
if (isPerformed) {
const GValue *id_value =
diff --git a/gst-libs/gst/gl/gstglmixer.c b/gst-libs/gst/gl/gstglmixer.c
index 4c60083..476a02f 100644
--- a/gst-libs/gst/gl/gstglmixer.c
+++ b/gst-libs/gst/gl/gstglmixer.c
@@ -609,10 +609,10 @@ gst_gl_mixer_query (GstPad * pad, GstQuery * query)
/* id_value is set by upstream element of itself when going
* to paused state */
const GValue *id_value =
- gst_structure_get_value (structure, "gstgldisplay");
+ gst_structure_get_value (structure, "gstgldisplay");
foreign_display = GST_GL_DISPLAY (g_value_get_pointer (id_value));
}
-
+
foreign_gl_context =
gst_gl_display_get_internal_gl_context (foreign_display);
@@ -1243,12 +1243,21 @@ gst_gl_mixer_change_state (GstElement * element, GstStateChange transition)
gint i = 0;
GstElement *parent = GST_ELEMENT (gst_element_get_parent (mix));
- GstStructure *structure =
- gst_structure_new (gst_element_get_name (mix), NULL);
- GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
+ GstStructure *structure = NULL;
+ GstQuery *query = NULL;
+ gboolean isPerformed = FALSE;
+
+ if (!parent) {
+ GST_ELEMENT_ERROR (mix, CORE, STATE_CHANGE, (NULL),
+ ("A parent bin is required"));
+ return FALSE;
+ }
+
+ structure = gst_structure_new (gst_element_get_name (mix), NULL);
+ query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
/* retrieve the gldisplay that is owned by gl elements after the gl mixer */
- gboolean isPerformed = gst_element_query (parent, query);
+ isPerformed = gst_element_query (parent, query);
if (isPerformed) {
const GValue *id_value =
diff --git a/gst/gl/gstgltestsrc.c b/gst/gl/gstgltestsrc.c
index eb5b383..ec17ff6 100644
--- a/gst/gl/gstgltestsrc.c
+++ b/gst/gl/gstgltestsrc.c
@@ -1,4 +1,4 @@
-/*
+/*
* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
* Copyright (C) 2002,2007 David A. Schleef <ds@schleef.org>
@@ -188,7 +188,7 @@ gst_gl_test_src_init (GstGLTestSrc * src, GstGLTestSrcClass * g_class)
/* we operate in time */
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
gst_base_src_set_live (GST_BASE_SRC (src), FALSE);
-
+
gst_pad_set_query_function (pad,
GST_DEBUG_FUNCPTR (gst_gl_test_src_src_query));
}
@@ -312,7 +312,9 @@ gst_gl_test_src_src_query (GstPad * pad, GstQuery * query)
case GST_QUERY_CUSTOM:
{
GstStructure *structure = gst_query_get_structure (query);
- res = g_strcmp0 (gst_element_get_name (parent), gst_structure_get_name (structure)) == 0;
+ res =
+ g_strcmp0 (gst_element_get_name (parent),
+ gst_structure_get_name (structure)) == 0;
break;
}
default:
@@ -383,6 +385,7 @@ gst_gl_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
gltestsrc->width, gltestsrc->height,
gltestsrc->rate_numerator, gltestsrc->rate_denominator);
+
gst_gl_display_gen_fbo (gltestsrc->display, gltestsrc->width,
gltestsrc->height, &gltestsrc->fbo, &gltestsrc->depthbuffer);
}
@@ -614,16 +617,28 @@ gst_gl_test_src_start (GstBaseSrc * basesrc)
{
GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc);
GstElement *parent = GST_ELEMENT (gst_element_get_parent (src));
- GstStructure *structure = gst_structure_new (gst_element_get_name (src), NULL);
- GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
+ GstStructure *structure = NULL;
+ GstQuery *query = NULL;
+ gboolean isPerformed = FALSE;
+
+ if (!parent) {
+ GST_ELEMENT_ERROR (src, CORE, STATE_CHANGE, (NULL),
+ ("A parent bin is required"));
+ return FALSE;
+ }
+
+ structure = gst_structure_new (gst_element_get_name (src), NULL);
+ query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
- gboolean isPerformed = gst_element_query (parent, query);
+ isPerformed = gst_element_query (parent, query);
if (isPerformed) {
- const GValue *id_value = gst_structure_get_value (structure, "gstgldisplay");
+ const GValue *id_value =
+ gst_structure_get_value (structure, "gstgldisplay");
if (G_VALUE_HOLDS_POINTER (id_value))
/* at least one gl element is before in our gl chain */
- src->display = g_object_ref (GST_GL_DISPLAY (g_value_get_pointer (id_value)));
+ src->display =
+ g_object_ref (GST_GL_DISPLAY (g_value_get_pointer (id_value)));
else {
/* this gl filter is a sink in terms of the gl chain */
src->display = gst_gl_display_new ();
diff --git a/gst/gl/gstglupload.c b/gst/gl/gstglupload.c
index 818ef73..4c9badc 100644
--- a/gst/gl/gstglupload.c
+++ b/gst/gl/gstglupload.c
@@ -273,11 +273,20 @@ gst_gl_upload_start (GstBaseTransform * bt)
{
GstGLUpload *upload = GST_GL_UPLOAD (bt);
GstElement *parent = GST_ELEMENT (gst_element_get_parent (upload));
- GstStructure *structure =
- gst_structure_new (gst_element_get_name (upload), NULL);
- GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
+ GstStructure *structure = NULL;
+ GstQuery *query = NULL;
+ gboolean isPerformed = FALSE;
+
+ if (!parent) {
+ GST_ELEMENT_ERROR (upload, CORE, STATE_CHANGE, (NULL),
+ ("A parent bin is required"));
+ return FALSE;
+ }
+
+ structure = gst_structure_new (gst_element_get_name (upload), NULL);
+ query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
- gboolean isPerformed = gst_element_query (parent, query);
+ isPerformed = gst_element_query (parent, query);
if (isPerformed) {
const GValue *id_value =