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);
|
GstGLFilter *filter = GST_GL_FILTER (bt);
|
||||||
GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
|
GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
|
||||||
GstElement *parent = GST_ELEMENT (gst_element_get_parent (filter));
|
GstElement *parent = GST_ELEMENT (gst_element_get_parent (filter));
|
||||||
GstStructure *structure =
|
GstStructure *structure = NULL;
|
||||||
gst_structure_new (gst_element_get_name (filter), NULL);
|
GstQuery *query = NULL;
|
||||||
GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
|
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) {
|
if (isPerformed) {
|
||||||
const GValue *id_value =
|
const GValue *id_value =
|
||||||
|
|
|
@ -1243,12 +1243,21 @@ gst_gl_mixer_change_state (GstElement * element, GstStateChange transition)
|
||||||
gint i = 0;
|
gint i = 0;
|
||||||
|
|
||||||
GstElement *parent = GST_ELEMENT (gst_element_get_parent (mix));
|
GstElement *parent = GST_ELEMENT (gst_element_get_parent (mix));
|
||||||
GstStructure *structure =
|
GstStructure *structure = NULL;
|
||||||
gst_structure_new (gst_element_get_name (mix), NULL);
|
GstQuery *query = NULL;
|
||||||
GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
|
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 */
|
/* 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) {
|
if (isPerformed) {
|
||||||
const GValue *id_value =
|
const GValue *id_value =
|
||||||
|
|
|
@ -312,7 +312,9 @@ gst_gl_test_src_src_query (GstPad * pad, GstQuery * query)
|
||||||
case GST_QUERY_CUSTOM:
|
case GST_QUERY_CUSTOM:
|
||||||
{
|
{
|
||||||
GstStructure *structure = gst_query_get_structure (query);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -383,6 +385,7 @@ gst_gl_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
|
||||||
gltestsrc->width, gltestsrc->height,
|
gltestsrc->width, gltestsrc->height,
|
||||||
gltestsrc->rate_numerator, gltestsrc->rate_denominator);
|
gltestsrc->rate_numerator, gltestsrc->rate_denominator);
|
||||||
|
|
||||||
|
|
||||||
gst_gl_display_gen_fbo (gltestsrc->display, gltestsrc->width,
|
gst_gl_display_gen_fbo (gltestsrc->display, gltestsrc->width,
|
||||||
gltestsrc->height, &gltestsrc->fbo, &gltestsrc->depthbuffer);
|
gltestsrc->height, &gltestsrc->fbo, &gltestsrc->depthbuffer);
|
||||||
}
|
}
|
||||||
|
@ -614,16 +617,28 @@ gst_gl_test_src_start (GstBaseSrc * basesrc)
|
||||||
{
|
{
|
||||||
GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc);
|
GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc);
|
||||||
GstElement *parent = GST_ELEMENT (gst_element_get_parent (src));
|
GstElement *parent = GST_ELEMENT (gst_element_get_parent (src));
|
||||||
GstStructure *structure = gst_structure_new (gst_element_get_name (src), NULL);
|
GstStructure *structure = NULL;
|
||||||
GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
|
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) {
|
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))
|
if (G_VALUE_HOLDS_POINTER (id_value))
|
||||||
/* at least one gl element is before in our gl chain */
|
/* 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 {
|
else {
|
||||||
/* this gl filter is a sink in terms of the gl chain */
|
/* this gl filter is a sink in terms of the gl chain */
|
||||||
src->display = gst_gl_display_new ();
|
src->display = gst_gl_display_new ();
|
||||||
|
|
|
@ -273,11 +273,20 @@ gst_gl_upload_start (GstBaseTransform * bt)
|
||||||
{
|
{
|
||||||
GstGLUpload *upload = GST_GL_UPLOAD (bt);
|
GstGLUpload *upload = GST_GL_UPLOAD (bt);
|
||||||
GstElement *parent = GST_ELEMENT (gst_element_get_parent (upload));
|
GstElement *parent = GST_ELEMENT (gst_element_get_parent (upload));
|
||||||
GstStructure *structure =
|
GstStructure *structure = NULL;
|
||||||
gst_structure_new (gst_element_get_name (upload), NULL);
|
GstQuery *query = NULL;
|
||||||
GstQuery *query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
|
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) {
|
if (isPerformed) {
|
||||||
const GValue *id_value =
|
const GValue *id_value =
|
||||||
|
|
Loading…
Reference in a new issue