mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 04:52:28 +00:00
[456/906] glfilter/glmixer/gltestsrc/glupload: throw an element error if no parent bin
Fixes bug #602153
This commit is contained in:
parent
2b46c87bd0
commit
2c43a348fa
4 changed files with 64 additions and 22 deletions
|
@ -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 =
|
||||
|
|
|
@ -609,7 +609,7 @@ 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));
|
||||
}
|
||||
|
||||
|
@ -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 =
|
||||
|
|
|
@ -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;
|
||||
|
||||
gboolean isPerformed = gst_element_query (parent, query);
|
||||
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);
|
||||
|
||||
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 ();
|
||||
|
|
|
@ -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;
|
||||
|
||||
gboolean isPerformed = gst_element_query (parent, query);
|
||||
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);
|
||||
|
||||
isPerformed = gst_element_query (parent, query);
|
||||
|
||||
if (isPerformed) {
|
||||
const GValue *id_value =
|
||||
|
|
Loading…
Reference in a new issue