mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
debugutils: improve dot file flow layout
Iterate source- and sink-pads separately to ensure that the graph reflects the upstream/downstream order. Fixes #643269
This commit is contained in:
parent
1090f00ee2
commit
3029a222e8
1 changed files with 41 additions and 23 deletions
|
@ -459,6 +459,39 @@ debug_dump_element_pad_link (GstPad * pad, GstElement * element,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* New function
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
debug_dump_element_pads (GstIterator * pad_iter, GstPad * pad,
|
||||||
|
GstElement * element, GstDebugGraphDetails details, FILE * out,
|
||||||
|
const gint indent, guint * src_pads, guint * sink_pads)
|
||||||
|
{
|
||||||
|
gboolean pads_done;
|
||||||
|
GstPadDirection dir;
|
||||||
|
|
||||||
|
pads_done = FALSE;
|
||||||
|
while (!pads_done) {
|
||||||
|
switch (gst_iterator_next (pad_iter, (gpointer) & pad)) {
|
||||||
|
case GST_ITERATOR_OK:
|
||||||
|
debug_dump_element_pad (pad, element, details, out, indent);
|
||||||
|
dir = gst_pad_get_direction (pad);
|
||||||
|
if (dir == GST_PAD_SRC)
|
||||||
|
(*src_pads)++;
|
||||||
|
else if (dir == GST_PAD_SINK)
|
||||||
|
(*sink_pads)++;
|
||||||
|
gst_object_unref (pad);
|
||||||
|
break;
|
||||||
|
case GST_ITERATOR_RESYNC:
|
||||||
|
gst_iterator_resync (pad_iter);
|
||||||
|
break;
|
||||||
|
case GST_ITERATOR_ERROR:
|
||||||
|
case GST_ITERATOR_DONE:
|
||||||
|
pads_done = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* debug_dump_element:
|
* debug_dump_element:
|
||||||
* @bin: the bin that should be analyzed
|
* @bin: the bin that should be analyzed
|
||||||
|
@ -475,7 +508,6 @@ debug_dump_element (GstBin * bin, GstDebugGraphDetails details, FILE * out,
|
||||||
gboolean elements_done, pads_done;
|
gboolean elements_done, pads_done;
|
||||||
GstElement *element;
|
GstElement *element;
|
||||||
GstPad *pad;
|
GstPad *pad;
|
||||||
GstPadDirection dir;
|
|
||||||
guint src_pads, sink_pads;
|
guint src_pads, sink_pads;
|
||||||
gchar *element_name;
|
gchar *element_name;
|
||||||
gchar *state_name = NULL;
|
gchar *state_name = NULL;
|
||||||
|
@ -516,28 +548,14 @@ debug_dump_element (GstBin * bin, GstDebugGraphDetails details, FILE * out,
|
||||||
g_free (element_name);
|
g_free (element_name);
|
||||||
|
|
||||||
src_pads = sink_pads = 0;
|
src_pads = sink_pads = 0;
|
||||||
if ((pad_iter = gst_element_iterate_pads (element))) {
|
if ((pad_iter = gst_element_iterate_sink_pads (element))) {
|
||||||
pads_done = FALSE;
|
debug_dump_element_pads (pad_iter, pad, element, details, out, indent,
|
||||||
while (!pads_done) {
|
&src_pads, &sink_pads);
|
||||||
switch (gst_iterator_next (pad_iter, (gpointer) & pad)) {
|
gst_iterator_free (pad_iter);
|
||||||
case GST_ITERATOR_OK:
|
}
|
||||||
debug_dump_element_pad (pad, element, details, out, indent);
|
if ((pad_iter = gst_element_iterate_src_pads (element))) {
|
||||||
dir = gst_pad_get_direction (pad);
|
debug_dump_element_pads (pad_iter, pad, element, details, out, indent,
|
||||||
if (dir == GST_PAD_SRC)
|
&src_pads, &sink_pads);
|
||||||
src_pads++;
|
|
||||||
else if (dir == GST_PAD_SINK)
|
|
||||||
sink_pads++;
|
|
||||||
gst_object_unref (pad);
|
|
||||||
break;
|
|
||||||
case GST_ITERATOR_RESYNC:
|
|
||||||
gst_iterator_resync (pad_iter);
|
|
||||||
break;
|
|
||||||
case GST_ITERATOR_ERROR:
|
|
||||||
case GST_ITERATOR_DONE:
|
|
||||||
pads_done = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gst_iterator_free (pad_iter);
|
gst_iterator_free (pad_iter);
|
||||||
}
|
}
|
||||||
if (GST_IS_BIN (element)) {
|
if (GST_IS_BIN (element)) {
|
||||||
|
|
Loading…
Reference in a new issue