mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-04 01:32:42 +00:00
loadsave: fix requestpad handling and serialisation order.
Support request pads when loading. Reverse pad serialisation order to preserve it when recreating the pipeline.
This commit is contained in:
parent
fca63abbe7
commit
b47f425069
3 changed files with 11 additions and 6 deletions
|
@ -3611,12 +3611,12 @@ gst_bin_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||||
GST_CAT_INFO (GST_CAT_XML, "[%s]: saving %d children",
|
GST_CAT_INFO (GST_CAT_XML, "[%s]: saving %d children",
|
||||||
GST_ELEMENT_NAME (bin), bin->numchildren);
|
GST_ELEMENT_NAME (bin), bin->numchildren);
|
||||||
|
|
||||||
children = bin->children;
|
children = g_list_last (bin->children);
|
||||||
while (children) {
|
while (children) {
|
||||||
child = GST_ELEMENT (children->data);
|
child = GST_ELEMENT (children->data);
|
||||||
elementnode = xmlNewChild (childlist, NULL, (xmlChar *) "element", NULL);
|
elementnode = xmlNewChild (childlist, NULL, (xmlChar *) "element", NULL);
|
||||||
gst_object_save_thyself (GST_OBJECT (child), elementnode);
|
gst_object_save_thyself (GST_OBJECT (child), elementnode);
|
||||||
children = g_list_next (children);
|
children = g_list_previous (children);
|
||||||
}
|
}
|
||||||
return childlist;
|
return childlist;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2886,7 +2886,7 @@ gst_element_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||||
|
|
||||||
g_free (specs);
|
g_free (specs);
|
||||||
|
|
||||||
pads = GST_ELEMENT_PADS (element);
|
pads = g_list_last (GST_ELEMENT_PADS (element));
|
||||||
|
|
||||||
while (pads) {
|
while (pads) {
|
||||||
GstPad *pad = GST_PAD_CAST (pads->data);
|
GstPad *pad = GST_PAD_CAST (pads->data);
|
||||||
|
@ -2897,7 +2897,7 @@ gst_element_save_thyself (GstObject * object, xmlNodePtr parent)
|
||||||
|
|
||||||
gst_object_save_thyself (GST_OBJECT_CAST (pad), padtag);
|
gst_object_save_thyself (GST_OBJECT_CAST (pad), padtag);
|
||||||
}
|
}
|
||||||
pads = g_list_next (pads);
|
pads = g_list_previous (pads);
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent;
|
return parent;
|
||||||
|
|
|
@ -3645,6 +3645,7 @@ gst_pad_load_and_link (xmlNodePtr self, GstObject * parent)
|
||||||
{
|
{
|
||||||
xmlNodePtr field = self->xmlChildrenNode;
|
xmlNodePtr field = self->xmlChildrenNode;
|
||||||
GstPad *pad = NULL, *targetpad;
|
GstPad *pad = NULL, *targetpad;
|
||||||
|
GstPadTemplate *tmpl;
|
||||||
gchar *peer = NULL;
|
gchar *peer = NULL;
|
||||||
gchar **split;
|
gchar **split;
|
||||||
GstElement *target;
|
GstElement *target;
|
||||||
|
@ -3655,7 +3656,8 @@ gst_pad_load_and_link (xmlNodePtr self, GstObject * parent)
|
||||||
if (!strcmp ((char *) field->name, "name")) {
|
if (!strcmp ((char *) field->name, "name")) {
|
||||||
name = (gchar *) xmlNodeGetContent (field);
|
name = (gchar *) xmlNodeGetContent (field);
|
||||||
pad = gst_element_get_static_pad (GST_ELEMENT (parent), name);
|
pad = gst_element_get_static_pad (GST_ELEMENT (parent), name);
|
||||||
if (!pad)
|
if ((!pad) || ((tmpl = gst_pad_get_pad_template (pad))
|
||||||
|
&& (GST_PAD_REQUEST == GST_PAD_TEMPLATE_PRESENCE (tmpl))))
|
||||||
pad = gst_element_get_request_pad (GST_ELEMENT (parent), name);
|
pad = gst_element_get_request_pad (GST_ELEMENT (parent), name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
} else if (!strcmp ((char *) field->name, "peer")) {
|
} else if (!strcmp ((char *) field->name, "peer")) {
|
||||||
|
@ -3699,7 +3701,10 @@ gst_pad_load_and_link (xmlNodePtr self, GstObject * parent)
|
||||||
if (targetpad == NULL)
|
if (targetpad == NULL)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (gst_pad_get_direction (pad) == GST_PAD_SRC)
|
||||||
gst_pad_link (pad, targetpad);
|
gst_pad_link (pad, targetpad);
|
||||||
|
else
|
||||||
|
gst_pad_link (targetpad, pad);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
g_strfreev (split);
|
g_strfreev (split);
|
||||||
|
|
Loading…
Reference in a new issue