From: Andy W. <wi...@us...> - 2002-08-28 18:45:22
|
CVS Root: /cvsroot/gstreamer Module: gst-editor Changes by: wingo Date: Wed Aug 28 2002 11:45:21 PDT Log message: fix handling of pad/template mismatches Modified files: libs/gst/editor : gsteditorbin.c gsteditorconnection.c gsteditorelement.c gsteditorpad.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditorbin.c.diff?r1=1.27&r2=1.28 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditorconnection.c.diff?r1=1.13&r2=1.14 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditorelement.c.diff?r1=1.32&r2=1.33 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditorpad.c.diff?r1=1.18&r2=1.19 ====Begin Diffs==== Index: gsteditorbin.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditorbin.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- gsteditorbin.c 23 Aug 2002 05:03:36 -0000 1.27 +++ gsteditorbin.c 28 Aug 2002 18:45:09 -0000 1.28 @@ -248,6 +248,8 @@ GnomeCanvasItem *childitem; gdouble x, y, width, height; + g_print ("object added in bin %s\n", GST_OBJECT_NAME (bin)); + if (gst_editor_item_get (child)) { g_message ("child %s already rendered, ignoring", GST_OBJECT_NAME (child)); return; Index: gsteditorconnection.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditorconnection.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- gsteditorconnection.c 23 Aug 2002 05:03:36 -0000 1.13 +++ gsteditorconnection.c 28 Aug 2002 18:45:09 -0000 1.14 @@ -329,7 +329,8 @@ { GstEditorBin *srcbin, *sinkbin; - g_message ("disconnect %s:%s from %s:%s", GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer)); + g_message ("disconnect pad signal (%s:%s from %s:%s)", + GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer)); g_signal_handlers_disconnect_by_func (connection->srcpad, on_editor_pad_position_changed, connection); @@ -366,8 +367,6 @@ GObject *src, *sink; GstPad *srcpad, *sinkpad; - g_message ("connection_connect"); - g_return_val_if_fail (GST_IS_EDITOR_CONNECTION (connection), FALSE); if (!connection->srcpad || !connection->sinkpad) @@ -376,8 +375,6 @@ src = (GObject*) GST_EDITOR_ITEM (connection->srcpad)->object; sink = (GObject*) GST_EDITOR_ITEM (connection->sinkpad)->object; - g_message ("connecting %s to %s", GST_OBJECT_NAME (src), GST_OBJECT_NAME (sink)); - if (GST_IS_EDITOR_PAD_ALWAYS (connection->srcpad)) { if (GST_IS_EDITOR_PAD_ALWAYS (connection->sinkpad)) { if (GST_PAD_PEER (src) || GST_PAD_PEER (sink)) { @@ -462,7 +459,6 @@ if (sinkbin != srcbin) srcbin->connections = g_list_prepend (srcbin->connections, connection); - g_message ("connection successful"); return TRUE; } } Index: gsteditorelement.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditorelement.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- gsteditorelement.c 23 Aug 2002 05:03:36 -0000 1.32 +++ gsteditorelement.c 28 Aug 2002 18:45:09 -0000 1.33 @@ -646,6 +646,8 @@ static void on_new_pad (GstElement *element, GstPad *pad, GstEditorElement *editor_element) { + g_print ("new pad in element %s\n", GST_OBJECT_NAME (element)); + gst_editor_element_add_pad (editor_element, pad); gst_editor_item_resize (GST_EDITOR_ITEM (editor_element)); } @@ -654,10 +656,13 @@ on_state_change (GstElement *element, GstElementState old, GstElementState state, GstEditorElement *editor_element) { + g_print ("state change in element %s\n", GST_OBJECT_NAME (element)); + if (state == GST_STATE_PLAYING && GST_IS_BIN (element) && GST_FLAG_IS_SET (element, GST_BIN_FLAG_MANAGER) && !GST_FLAG_IS_SET (element, GST_BIN_SELF_SCHEDULABLE)) { + g_message ("adding iterator"); if (!editor_element->source) editor_element->source = g_idle_add ((GSourceFunc)gst_bin_iterate, element); } else if (editor_element->source) { @@ -665,7 +670,7 @@ editor_element->source = 0; } - gst_editor_element_sync_state (editor_element); + g_idle_add ((GSourceFunc)gst_editor_element_sync_state, editor_element); } static void @@ -673,6 +678,8 @@ { GstEditorBin *editor_bin; + g_print ("parent unset in element %s\n", GST_OBJECT_NAME (element)); + editor_bin = GST_EDITOR_BIN (gst_editor_item_get (GST_OBJECT (parent))); /* unreffing groups does nothing to the children right now. grrrrr. just hide @@ -723,8 +730,7 @@ pads = g_list_copy (gst_element_get_pad_list (e)); pad_templates = g_list_copy (gst_element_get_pad_template_list (e)); - l = pads; - while (l) { + for (l = pads; l; l=l->next) { pad = (GstPad*)l->data; pad_template = gst_element_get_pad_template (e, GST_OBJECT_NAME (pad)); if (pad_template) { @@ -739,12 +745,9 @@ } gst_editor_element_add_pad (element, pad); - - l = g_list_next (l); } - l = pad_templates; - while (l) { + for (l = pad_templates; l; l=l->next) { pad_template = (GstPadTemplate*)l->data; switch (pad_template->presence) { @@ -755,7 +758,8 @@ type = gst_editor_pad_request_get_type (); break; default: - g_warning ("bad mojo with pad template %s", GST_OBJECT_NAME (pad_template)); + g_warning ("Error in element %s: ALWAYS pad template '%s', but no pad provided", + g_type_name (G_OBJECT_TYPE (e)), GST_OBJECT_NAME (pad_template)); continue; } @@ -771,8 +775,6 @@ element->srcpads = g_list_prepend (element->srcpads, editor_pad); element->srcs++; } - - l = g_list_next (l); } /* the caller must repack the element */ Index: gsteditorpad.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditorpad.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- gsteditorpad.c 23 Aug 2002 05:03:36 -0000 1.18 +++ gsteditorpad.c 28 Aug 2002 18:45:09 -0000 1.19 @@ -326,8 +326,6 @@ g_return_if_fail (item->object != NULL); - g_print ("realizing pad %p\n", citem); - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->realize) GNOME_CANVAS_ITEM_CLASS (parent_class)->realize (citem); @@ -368,8 +366,6 @@ gnome_canvas_item_set (connection, "sink-pad", pad, "src-pad", peer, NULL); gst_editor_connection_connect (GST_EDITOR_CONNECTION (connection)); - } else { - g_message ("peer pad not yet realized, postponing connection"); } } } @@ -458,7 +454,6 @@ case GDK_BUTTON_RELEASE: if (event->button.button == 1) { if (pad->connecting) { - g_message ("there's a connection, ungrabbing..."); gnome_canvas_item_ungrab (citem, event->button.time); connection = pad->connection; if (!gst_editor_connection_connect (connection)) { |