From 51cbf22624ec32a672d72f04942fab32bb83cdb9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 29 Jan 2001 00:06:02 +0000 Subject: [PATCH] This is a megapatch with the following changes: Original commit message from CVS: This is a megapatch with the following changes: - moved the gchar *name to GstObject, removed the ones in GstElement and GstPad. - moved the parent handling completely into GstObject. This cause *all* of the plugins to fail (except those that used gst_pad_get_parent) - rearanged the XML save handling. - GstObject now has a class function save/restore_thyself. - GstObject has a generic method gst_object_save_thyself, this makes it possible to fire a signal wehever a new object is loaded. This is needed so we can add XML save hooks. - GstXML API has changed slightly. You now have to create a GstXML object first before you can actually load something. This makes it possible to attach a signal to GstXML whenever an object is loaded. I'm not sure we will keep this interface. - GstObject can now print the path_string without knowing about the GstPad and GstElement types. - Added gst_bin_get_by_name_recurse_up to lookup an element in the current element hierarchy. - added XML namespaces to the saved pipelines the namespace is: http://gstreamer.net/gst-core/1.0/ namespaces are needed to distinguish user generated XML from the core XML. Note that the plugins still contain a macro GST_OBJECT_PARENT that will be replaced with gst_pad_get_parent shortly. --- docs/gst/tmpl/gstelement.sgml | 14 +- docs/gst/tmpl/gstpad.sgml | 12 +- docs/gst/tmpl/gstreamer-unused.sgml | 36 ++++- docs/gst/tmpl/gstxml.sgml | 16 +-- editor/gsteditorpad.c | 7 +- editor/gsteditorproject.c | 3 +- examples/plugins/example.c | 10 +- examples/xml/createxml.c | 2 +- examples/xml/runxml.c | 31 +++-- gst/elements/gstasyncdisksrc.c | 4 +- gst/elements/gstaudiosink.c | 2 +- gst/elements/gstaudiosrc.c | 2 +- gst/elements/gstdisksrc.c | 2 +- gst/elements/gstfakesink.c | 2 +- gst/elements/gstfakesrc.c | 8 +- gst/elements/gstfdsink.c | 2 +- gst/elements/gstfdsrc.c | 2 +- gst/elements/gsthttpsrc.c | 2 +- gst/elements/gstidentity.c | 2 +- gst/elements/gstpipefilter.c | 9 +- gst/elements/gstsinesrc.c | 14 +- gst/elements/gsttee.c | 2 +- gst/gstbin.c | 136 +++++++++++-------- gst/gstbin.h | 2 + gst/gstclock.c | 38 +++--- gst/gstelement.c | 223 ++++++++++++++++++------------- gst/gstelement.h | 19 ++- gst/gstelementfactory.c | 2 +- gst/gstinfo.c | 5 +- gst/gstinfo.h | 6 +- gst/gstobject.c | 251 ++++++++++++++++++++++------------- gst/gstobject.h | 37 ++++-- gst/gstpad.c | 154 ++++++++++----------- gst/gstpad.h | 56 ++++---- gst/gstparse.c | 34 ++--- gst/gstparse.h | 6 +- gst/gstpipeline.c | 50 +++---- gst/gstplugin.c | 102 +++++++------- gst/gstqueue.c | 16 +-- gst/gstscheduler.c | 76 +++++------ gst/gstthread.c | 55 ++++---- gst/gsttypefind.c | 4 +- gst/gstxml.c | 132 +++++++++++++----- gst/gstxml.h | 27 ++-- gstplay/gstmediaplay.c | 24 ++-- plugins/elements/gstasyncdisksrc.c | 4 +- plugins/elements/gstaudiosink.c | 2 +- plugins/elements/gstaudiosrc.c | 2 +- plugins/elements/gstdisksrc.c | 2 +- plugins/elements/gstfakesink.c | 2 +- plugins/elements/gstfakesrc.c | 8 +- plugins/elements/gstfdsink.c | 2 +- plugins/elements/gstfdsrc.c | 2 +- plugins/elements/gsthttpsrc.c | 2 +- plugins/elements/gstidentity.c | 2 +- plugins/elements/gstpipefilter.c | 9 +- plugins/elements/gstqueue.c | 16 +-- plugins/elements/gstsinesrc.c | 14 +- plugins/elements/gsttee.c | 2 +- test/record.c | 3 - tests/old/examples/plugins/example.c | 10 +- tests/old/examples/xml/createxml.c | 2 +- tests/old/examples/xml/runxml.c | 31 +++-- tests/sched/runxml.c | 3 +- tools/gstreamer-inspect.c | 7 +- 65 files changed, 984 insertions(+), 780 deletions(-) diff --git a/docs/gst/tmpl/gstelement.sgml b/docs/gst/tmpl/gstelement.sgml index 02914b9..c1c80b8 100644 --- a/docs/gst/tmpl/gstelement.sgml +++ b/docs/gst/tmpl/gstelement.sgml @@ -405,24 +405,16 @@ circumstances. @element: - - - - - -@element: -@parent: -@Returns: - - +@self: @parent: -@elements: @Returns: + +@elements: diff --git a/docs/gst/tmpl/gstpad.sgml b/docs/gst/tmpl/gstpad.sgml index 7749f92..06601cf 100644 --- a/docs/gst/tmpl/gstpad.sgml +++ b/docs/gst/tmpl/gstpad.sgml @@ -503,22 +503,14 @@ Call the EOS function of the pad @pad: the pad to call the eos function of. - - - - - -@pad: -@parent: -@Returns: - - +@self: @parent: + @element: @elements: diff --git a/docs/gst/tmpl/gstreamer-unused.sgml b/docs/gst/tmpl/gstreamer-unused.sgml index 7e50523..bc84fe3 100644 --- a/docs/gst/tmpl/gstreamer-unused.sgml +++ b/docs/gst/tmpl/gstreamer-unused.sgml @@ -217,19 +217,19 @@ the stream. - + -@Returns: +@obj: - + -@obj: +@Returns: @@ -1613,6 +1613,16 @@ Query the element for the current mime type + + + + + +@buffer: +@size: +@root: +@Returns: + @@ -1916,6 +1926,15 @@ Indicates this pad is active + + + + + +@element: +@parent: +@Returns: + @@ -1993,6 +2012,15 @@ Indicates this pad is active @obj: + + + + + +@pad: +@parent: +@Returns: + diff --git a/docs/gst/tmpl/gstxml.sgml b/docs/gst/tmpl/gstxml.sgml index 7b4c068..b40d98d 100644 --- a/docs/gst/tmpl/gstxml.sgml +++ b/docs/gst/tmpl/gstxml.sgml @@ -21,28 +21,18 @@ All GstElements can be serialized to an XML presentation and subsequently loaded @object: -@elements: @topelements: +@ns: -@fname: -@root: @Returns: - - - - - - - -@buffer: -@size: + +@fname: @root: -@Returns: diff --git a/editor/gsteditorpad.c b/editor/gsteditorpad.c index 0a99d46..43de953 100644 --- a/editor/gsteditorpad.c +++ b/editor/gsteditorpad.c @@ -139,7 +139,7 @@ gst_editor_pad_new(GstEditorElement *parent,GstPad *pad, GstEditorPad *peereditorpad; // FIXME does this need to check for ghost/real? - peerpad = GST_PAD_PEER(pad); + peerpad = gst_pad_get_peer (pad); peereditorpad = GST_EDITOR_GET_OBJECT (peerpad); @@ -152,7 +152,7 @@ gst_editor_pad_new(GstEditorElement *parent,GstPad *pad, } gtk_signal_connect_object (GTK_OBJECT (parent), "position_changed", - gst_editor_pad_position_changed, editorpad); + gst_editor_pad_position_changed, GTK_OBJECT (editorpad)); return editorpad; } @@ -454,10 +454,7 @@ static void gst_editor_pad_position_changed(GstEditorPad *pad, GstEditorElement *element) { - GList *pads; - if (pad->connection) { -// g_print("updating pad's connection\n"); pad->connection->resize = TRUE; gst_editor_connection_resize(pad->connection); } diff --git a/editor/gsteditorproject.c b/editor/gsteditorproject.c index c44523e..867972d 100644 --- a/editor/gsteditorproject.c +++ b/editor/gsteditorproject.c @@ -128,7 +128,8 @@ gst_editor_project_new_from_file (const guchar *fname) editorproject = gst_editor_project_new(); - xml = gst_xml_new (fname, NULL); + xml = gst_xml_new (); + gst_xml_parse_file (xml, fname, NULL); elements = gst_xml_get_topelements(xml); diff --git a/examples/plugins/example.c b/examples/plugins/example.c index c3f534e..7a4a7d0 100644 --- a/examples/plugins/example.c +++ b/examples/plugins/example.c @@ -76,7 +76,7 @@ static void gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id); GstPadTemplate *src_template, *sink_template; static GstElementClass *parent_class = NULL; -static guint gst_example_signals[LAST_SIGNAL] = { 0 }; +//static guint gst_example_signals[LAST_SIGNAL] = { 0 }; GtkType gst_example_get_type(void) @@ -134,15 +134,13 @@ static void gst_example_chain (GstPad *pad, GstBuffer *buf) { GstExample *example; - guchar *data; - gint i; g_return_if_fail(pad != NULL); g_return_if_fail(GST_IS_PAD(pad)); g_return_if_fail(buf != NULL); //g_return_if_fail(GST_IS_BUFFER(buf)); - example = GST_EXAMPLE(pad->parent); + example = GST_EXAMPLE(gst_pad_get_parent (pad)); g_return_if_fail(example != NULL); g_return_if_fail(GST_IS_EXAMPLE(example)); @@ -199,10 +197,10 @@ plugin_init (GModule *module) GstElementFactory *factory; plugin = gst_plugin_new("example"); - g_return_if_fail(plugin != NULL); + g_return_val_if_fail(plugin != NULL, NULL); factory = gst_elementfactory_new("example", GST_TYPE_EXAMPLE, &example_details); - g_return_if_fail(factory != NULL); + g_return_val_if_fail(factory != NULL, NULL); sink_template = gst_padtemplate_new (&sink_factory); gst_elementfactory_add_padtemplate (factory, sink_template); diff --git a/examples/xml/createxml.c b/examples/xml/createxml.c index 9f99c77..873a3e1 100644 --- a/examples/xml/createxml.c +++ b/examples/xml/createxml.c @@ -52,7 +52,7 @@ int main(int argc,char *argv[]) gst_bin_add(GST_BIN(thread), queue2); gst_bin_add(GST_BIN(thread2), audiosink); - + gst_pad_connect(gst_element_get_pad(disksrc,"src"), gst_element_get_pad(queue,"sink")); diff --git a/examples/xml/runxml.c b/examples/xml/runxml.c index 025508f..9bc756f 100644 --- a/examples/xml/runxml.c +++ b/examples/xml/runxml.c @@ -3,33 +3,40 @@ gboolean playing; -/* eos will be called when the src element has an end of stream */ -void eos(GstElement *element, gpointer data) +static void +xml_loaded (GstXML *xml, GstObject *object, gpointer data) { - g_print("have eos, quitting\n"); - - playing = FALSE; + if (GST_IS_PAD (object)) { + g_print ("pad loaded '%s'\n", gst_pad_get_name (GST_PAD (object))); + } + else if (GST_IS_ELEMENT (object)) { + g_print ("element loaded '%s'\n", gst_element_get_name (GST_ELEMENT (object))); + } } -int main(int argc,char *argv[]) +int main(int argc,char *argv[]) { GstXML *xml; GstElement *bin; - GstElement *disk; + gboolean ret; gst_init(&argc,&argv); - xml = gst_xml_new("xmlTest.gst", NULL); + xml = gst_xml_new (); + + gtk_signal_connect (GTK_OBJECT (xml), "object_loaded", xml_loaded, NULL); + + ret = gst_xml_parse_file(xml, "xmlTest.gst", NULL); + g_assert (ret == TRUE); bin = gst_xml_get_element(xml, "bin"); - + g_assert (bin != NULL); + gst_element_set_state(bin, GST_STATE_PLAYING); playing = TRUE; - while (playing) { - gst_bin_iterate(GST_BIN(bin)); - } + while (gst_bin_iterate(GST_BIN(bin))); gst_element_set_state(bin, GST_STATE_NULL); diff --git a/gst/elements/gstasyncdisksrc.c b/gst/elements/gstasyncdisksrc.c index 333a73b..f02071d 100644 --- a/gst/elements/gstasyncdisksrc.c +++ b/gst/elements/gstasyncdisksrc.c @@ -218,7 +218,7 @@ gst_asyncdisksrc_get (GstPad *pad) GstBuffer *buf; g_return_val_if_fail (pad != NULL, NULL); - src = GST_ASYNCDISKSRC (gst_pad_get_parent(pad)); + src = GST_ASYNCDISKSRC (gst_pad_get_parent (pad)); g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_ASYNCDISKSRC_OPEN), NULL); /* deal with EOF state */ @@ -276,7 +276,7 @@ gst_asyncdisksrc_get_region (GstPad *pad, gulong offset, gulong size) g_return_val_if_fail (pad != NULL, NULL); - src = GST_ASYNCDISKSRC (gst_pad_get_parent(pad)); + src = GST_ASYNCDISKSRC (gst_pad_get_parent (pad)); g_return_val_if_fail (GST_IS_ASYNCDISKSRC (src), NULL); g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_ASYNCDISKSRC_OPEN), NULL); diff --git a/gst/elements/gstaudiosink.c b/gst/elements/gstaudiosink.c index f50d704..1027729 100644 --- a/gst/elements/gstaudiosink.c +++ b/gst/elements/gstaudiosink.c @@ -244,7 +244,7 @@ gst_audiosink_chain (GstPad *pad, GstBuffer *buf) /* this has to be an audio buffer */ // g_return_if_fail(((GstMeta *)buf->meta)->type != //gst_audiosink_type_audio); - audiosink = GST_AUDIOSINK (pad->parent); + audiosink = GST_AUDIOSINK (gst_pad_get_parent (pad)); // g_return_if_fail(GST_FLAG_IS_SET(audiosink,GST_STATE_RUNNING)); if ((in_flush = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLUSH))) { diff --git a/gst/elements/gstaudiosrc.c b/gst/elements/gstaudiosrc.c index d12bb79..b4645fd 100644 --- a/gst/elements/gstaudiosrc.c +++ b/gst/elements/gstaudiosrc.c @@ -149,7 +149,7 @@ gst_audiosrc_get (GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_AUDIOSRC(gst_pad_get_parent(pad)); + src = GST_AUDIOSRC(gst_pad_get_parent (pad)); // g_print("attempting to read something from soundcard\n"); diff --git a/gst/elements/gstdisksrc.c b/gst/elements/gstdisksrc.c index ae40a6e..5333122 100644 --- a/gst/elements/gstdisksrc.c +++ b/gst/elements/gstdisksrc.c @@ -208,7 +208,7 @@ gst_disksrc_get (GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_DISKSRC(gst_pad_get_parent(pad)); + src = GST_DISKSRC(gst_pad_get_parent (pad)); g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_DISKSRC_OPEN), NULL); g_return_val_if_fail (GST_STATE (src) >= GST_STATE_READY, NULL); diff --git a/gst/elements/gstfakesink.c b/gst/elements/gstfakesink.c index 1db7b2e..81709b7 100644 --- a/gst/elements/gstfakesink.c +++ b/gst/elements/gstfakesink.c @@ -180,7 +180,7 @@ gst_fakesink_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - fakesink = GST_FAKESINK (pad->parent); + fakesink = GST_FAKESINK (gst_pad_get_parent (pad)); g_print("fakesink: ******* (%s:%s)< \n",GST_DEBUG_PAD_NAME(pad)); gst_buffer_unref (buf); diff --git a/gst/elements/gstfakesrc.c b/gst/elements/gstfakesrc.c index 3d24cb1..56bc217 100644 --- a/gst/elements/gstfakesrc.c +++ b/gst/elements/gstfakesrc.c @@ -269,9 +269,11 @@ gst_fakesrc_get(GstPad *pad) GstFakeSrc *src; GstBuffer *buf; - g_return_val_if_fail(pad != NULL, NULL); - src = GST_FAKESRC(gst_pad_get_parent(pad)); - g_return_val_if_fail(GST_IS_FAKESRC(src), NULL); + g_return_val_if_fail (pad != NULL, NULL); + + src = GST_FAKESRC (gst_pad_get_parent (pad)); + + g_return_val_if_fail (GST_IS_FAKESRC (src), NULL); if (src->num_buffers == 0) { gst_pad_set_eos (pad); diff --git a/gst/elements/gstfdsink.c b/gst/elements/gstfdsink.c index e521791..1b6fed7b 100644 --- a/gst/elements/gstfdsink.c +++ b/gst/elements/gstfdsink.c @@ -113,7 +113,7 @@ gst_fdsink_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - fdsink = GST_FDSINK (pad->parent); + fdsink = GST_FDSINK (gst_pad_get_parent (pad)); g_return_if_fail (fdsink->fd >= 0); diff --git a/gst/elements/gstfdsrc.c b/gst/elements/gstfdsrc.c index a5dfa0c..b256890 100644 --- a/gst/elements/gstfdsrc.c +++ b/gst/elements/gstfdsrc.c @@ -184,7 +184,7 @@ gst_fdsrc_get(GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_FDSRC(gst_pad_get_parent(pad)); + src = GST_FDSRC(gst_pad_get_parent (pad)); /* create the buffer */ // FIXME: should eventually use a bufferpool for this diff --git a/gst/elements/gsthttpsrc.c b/gst/elements/gsthttpsrc.c index 0516ae2..68c51b7 100644 --- a/gst/elements/gsthttpsrc.c +++ b/gst/elements/gsthttpsrc.c @@ -131,7 +131,7 @@ gst_httpsrc_get(GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_HTTPSRC(gst_pad_get_parent(pad)); + src = GST_HTTPSRC(gst_pad_get_parent (pad)); buf = gst_buffer_new(); GST_BUFFER_DATA(buf) = (gpointer)malloc(src->bytes_per_read); diff --git a/gst/elements/gstidentity.c b/gst/elements/gstidentity.c index 361e75b..4e209a1 100644 --- a/gst/elements/gstidentity.c +++ b/gst/elements/gstidentity.c @@ -120,7 +120,7 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - identity = GST_IDENTITY (pad->parent); + identity = GST_IDENTITY (gst_pad_get_parent (pad)); g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad)); gst_pad_push (identity->srcpad, buf); diff --git a/gst/elements/gstpipefilter.c b/gst/elements/gstpipefilter.c index da6b603..432a762 100644 --- a/gst/elements/gstpipefilter.c +++ b/gst/elements/gstpipefilter.c @@ -118,13 +118,6 @@ static void gst_pipefilter_init(GstPipefilter *pipefilter) { pipefilter->seq = 0; } -GstElement *gst_pipefilter_new(gchar *name) { - GstElement *pipefilter = GST_ELEMENT(gtk_type_new(GST_TYPE_PIPEFILTER)); - gst_element_set_name(GST_ELEMENT(pipefilter),name); - return pipefilter; -} - - static gboolean gst_pipefilter_read_and_push(GstPipefilter *pipefilter) { GstBuffer *newbuf; glong readbytes; @@ -179,7 +172,7 @@ void gst_pipefilter_chain(GstPad *pad,GstBuffer *buf) { g_return_if_fail(GST_IS_PAD(pad)); g_return_if_fail(buf != NULL); - pipefilter = GST_PIPEFILTER(pad->parent); + pipefilter = GST_PIPEFILTER (gst_pad_get_parent (pad)); while (gst_pipefilter_read_and_push(pipefilter)); diff --git a/gst/elements/gstsinesrc.c b/gst/elements/gstsinesrc.c index 8d7e255..5e47d27 100644 --- a/gst/elements/gstsinesrc.c +++ b/gst/elements/gstsinesrc.c @@ -132,18 +132,6 @@ static void gst_sinesrc_init(GstSineSrc *sinesrc) { sinesrc->sentmeta = FALSE; } -GstElement *gst_sinesrc_new(gchar *name) { - GstElement *sinesrc = GST_ELEMENT(gtk_type_new(GST_TYPE_SINESRC)); - gst_element_set_name(GST_ELEMENT(sinesrc),name); - return sinesrc; -} - -GstElement *gst_sinesrc_new_with_fd(gchar *name,gchar *filename) { - GstElement *sinesrc = gst_sinesrc_new(name); - gtk_object_set(GTK_OBJECT(sinesrc),"location",filename,NULL); - return sinesrc; -} - static GstBuffer * gst_sinesrc_get(GstPad *pad) { @@ -155,7 +143,7 @@ gst_sinesrc_get(GstPad *pad) gdouble val; g_return_val_if_fail (pad != NULL, NULL); - src = GST_SINESRC(gst_pad_get_parent(pad)); + src = GST_SINESRC(gst_pad_get_parent (pad)); buf = gst_buffer_new(); g_return_val_if_fail (buf, NULL); diff --git a/gst/elements/gsttee.c b/gst/elements/gsttee.c index ffb0ed0..d444217 100644 --- a/gst/elements/gsttee.c +++ b/gst/elements/gsttee.c @@ -181,7 +181,7 @@ gst_tee_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - tee = GST_TEE (pad->parent); + tee = GST_TEE (gst_pad_get_parent (pad)); gst_trace_add_entry (NULL, 0, buf, "tee buffer"); for (i=0; inumsrcpads-1; i++) diff --git a/gst/gstbin.c b/gst/gstbin.c index 367a8c9..fa3a858 100644 --- a/gst/gstbin.c +++ b/gst/gstbin.c @@ -28,8 +28,6 @@ #include "gstscheduler.h" - - GstElementDetails gst_bin_details = { "Generic bin", "Bin", @@ -51,9 +49,8 @@ static gboolean gst_bin_change_state_type (GstBin *bin, static void gst_bin_create_plan_func (GstBin *bin); static gboolean gst_bin_iterate_func (GstBin *bin); -static xmlNodePtr gst_bin_save_thyself (GstElement *element, xmlNodePtr parent); -static void gst_bin_restore_thyself (GstElement *element, xmlNodePtr parent, - GHashTable *elements); +static xmlNodePtr gst_bin_save_thyself (GstObject *object, xmlNodePtr parent); +static void gst_bin_restore_thyself (GstObject *object, xmlNodePtr self); /* Bin signals and args */ enum { @@ -99,9 +96,11 @@ static void gst_bin_class_init (GstBinClass *klass) { GtkObjectClass *gtkobject_class; + GstObjectClass *gstobject_class; GstElementClass *gstelement_class; gtkobject_class = (GtkObjectClass*)klass; + gstobject_class = (GstObjectClass*)klass; gstelement_class = (GstElementClass*)klass; parent_class = gtk_type_class (GST_TYPE_ELEMENT); @@ -118,9 +117,10 @@ gst_bin_class_init (GstBinClass *klass) klass->schedule = gst_bin_schedule_func; klass->iterate = gst_bin_iterate_func; + gstobject_class->save_thyself = gst_bin_save_thyself; + gstobject_class->restore_thyself = gst_bin_restore_thyself; + gstelement_class->change_state = gst_bin_change_state; - gstelement_class->save_thyself = gst_bin_save_thyself; - gstelement_class->restore_thyself = gst_bin_restore_thyself; gtkobject_class->destroy = gst_bin_real_destroy; } @@ -180,7 +180,7 @@ gst_bin_add (GstBin *bin, bin->numchildren++; gst_object_set_parent (GST_OBJECT (element), GST_OBJECT (bin)); - GST_INFO_ELEMENT (GST_CAT_PARENTAGE, bin, "added child %s", gst_element_get_name(element)); + GST_INFO_ELEMENT (GST_CAT_PARENTAGE, bin, "added child %s", GST_ELEMENT_NAME (element)); /* we know we have at least one child, we just added one... */ // if (GST_STATE(element) < GST_STATE_READY) @@ -220,7 +220,7 @@ gst_bin_remove (GstBin *bin, bin->children = g_list_remove (bin->children, element); bin->numchildren--; - GST_INFO_ELEMENT (GST_CAT_PARENTAGE, bin, "removed child %s", gst_element_get_name(element)); + GST_INFO_ELEMENT (GST_CAT_PARENTAGE, bin, "removed child %s", GST_ELEMENT_NAME (element)); /* if we're down to zero children, force state to NULL */ if (bin->numchildren == 0) @@ -235,7 +235,7 @@ gst_bin_change_state (GstElement *element) GList *children; GstElement *child; - GST_DEBUG_ENTER("(\"%s\")",gst_element_get_name (element)); + GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME (element)); g_return_val_if_fail (GST_IS_BIN (element), GST_STATE_FAILURE); @@ -271,16 +271,16 @@ gst_bin_change_state (GstElement *element) children = bin->children; while (children) { child = GST_ELEMENT (children->data); - GST_DEBUG (0,"setting state on '%s'\n",gst_element_get_name (child)); + GST_DEBUG (0,"setting state on '%s'\n",GST_ELEMENT_NAME (child)); switch (gst_element_set_state (child, GST_STATE_PENDING (element))) { case GST_STATE_FAILURE: GST_STATE_PENDING (element) = GST_STATE_NONE_PENDING; - GST_DEBUG (0,"child '%s' failed to go to state %d(%s)\n", gst_element_get_name (child), + GST_DEBUG (0,"child '%s' failed to go to state %d(%s)\n", GST_ELEMENT_NAME (child), GST_STATE_PENDING (element), _gst_print_statename (GST_STATE_PENDING (element))); return GST_STATE_FAILURE; break; case GST_STATE_ASYNC: - GST_DEBUG (0,"child '%s' is changing state asynchronously\n", gst_element_get_name (child)); + GST_DEBUG (0,"child '%s' is changing state asynchronously\n", GST_ELEMENT_NAME (child)); break; } // g_print("\n"); @@ -355,7 +355,7 @@ gst_bin_set_state_type (GstBin *bin, GstBinClass *oclass; GST_DEBUG (0,"gst_bin_set_state_type(\"%s\",%d,%d)\n", - gst_element_get_name (GST_ELEMENT (bin)), state,type); + GST_ELEMENT_NAME (bin), state,type); g_return_val_if_fail (bin != NULL, FALSE); g_return_val_if_fail (GST_IS_BIN (bin), FALSE); @@ -411,7 +411,7 @@ gst_bin_get_by_name (GstBin *bin, children = bin->children; while (children) { child = GST_ELEMENT (children->data); - if (!strcmp (child->name,name)) + if (!strcmp (gst_object_get_name (GST_OBJECT (child)),name)) return child; if (GST_IS_BIN (child)) { GstElement *res = gst_bin_get_by_name (GST_BIN (child), name); @@ -425,6 +425,41 @@ gst_bin_get_by_name (GstBin *bin, } /** + * gst_bin_get_by_name_recurse_up: + * @bin: #Gstbin to search + * @name: the element name to search for + * + * Get the element with the given name from this bin. If the + * element is not found, a recursion is performed on the parent bin. + * + * Returns: the element with the given name + */ +GstElement* +gst_bin_get_by_name_recurse_up (GstBin *bin, + const gchar *name) +{ + GstElement *result = NULL; + GstObject *parent; + + g_return_val_if_fail (bin != NULL, NULL); + g_return_val_if_fail (GST_IS_BIN (bin), NULL); + g_return_val_if_fail (name != NULL, NULL); + + result = gst_bin_get_by_name (bin, name); + + if (result) + return result; + + parent = gst_object_get_parent (GST_OBJECT (bin)); + + if (parent && GST_IS_BIN (parent)) { + result = gst_bin_get_by_name_recurse_up (GST_BIN (parent), name); + } + + return result; +} + +/** * gst_bin_get_list: * @bin: #Gstbin to get the list from * @@ -442,48 +477,46 @@ gst_bin_get_list (GstBin *bin) } static xmlNodePtr -gst_bin_save_thyself (GstElement *element, +gst_bin_save_thyself (GstObject *object, xmlNodePtr parent) { - GstBin *bin = GST_BIN (element); - xmlNodePtr childlist; + GstBin *bin = GST_BIN (object); + xmlNodePtr childlist, elementnode; GList *children; GstElement *child; - if (GST_ELEMENT_CLASS (parent_class)->save_thyself) - GST_ELEMENT_CLASS (parent_class)->save_thyself (GST_ELEMENT (bin), parent); + if (GST_OBJECT_CLASS (parent_class)->save_thyself) + GST_OBJECT_CLASS (parent_class)->save_thyself (GST_OBJECT (bin), parent); - childlist = xmlNewChild (parent,NULL,"children",NULL); + childlist = xmlNewChild (parent, NULL, "children", NULL); GST_INFO_ELEMENT (GST_CAT_XML, bin, "saving %d children", bin->numchildren); children = bin->children; while (children) { child = GST_ELEMENT (children->data); - gst_element_save_thyself (child, childlist); + elementnode = xmlNewChild (childlist, NULL, "element", NULL); + gst_object_save_thyself (GST_OBJECT (child), elementnode); children = g_list_next (children); } return childlist; } static void -gst_bin_restore_thyself (GstElement *element, - xmlNodePtr parent, - GHashTable *elements) +gst_bin_restore_thyself (GstObject *object, + xmlNodePtr self) { - GstBin *bin = GST_BIN (element); - xmlNodePtr field = parent->xmlChildrenNode; + GstBin *bin = GST_BIN (object); + xmlNodePtr field = self->xmlChildrenNode; xmlNodePtr childlist; -// g_print("gstbin: restore \"%s\"\n", gst_element_get_name (element)); - while (field) { if (!strcmp (field->name, "children")) { - GST_INFO_ELEMENT (GST_CAT_XML, element, "loading children"); + GST_INFO_ELEMENT (GST_CAT_XML, GST_ELEMENT (object), "loading children"); childlist = field->xmlChildrenNode; while (childlist) { if (!strcmp (childlist->name, "element")) { - GstElement *element = gst_element_load_thyself (childlist, elements); + GstElement *element = gst_element_load_thyself (childlist, GST_OBJECT (bin)); gst_bin_add (bin, element); } @@ -493,7 +526,6 @@ gst_bin_restore_thyself (GstElement *element, field = field->next; } - } void @@ -520,14 +552,14 @@ gst_bin_iterate (GstBin *bin) GstBinClass *oclass; gboolean eos = TRUE; - GST_DEBUG_ENTER("(\"%s\")",gst_element_get_name(GST_ELEMENT(bin))); + GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME (bin)); oclass = GST_BIN_CLASS (GTK_OBJECT (bin)->klass); if (oclass->iterate) eos = (oclass->iterate) (bin); - GST_DEBUG_LEAVE("(\"%s\")",gst_element_get_name(GST_ELEMENT(bin))); + GST_DEBUG_LEAVE("(\"%s\")",GST_ELEMENT_NAME (bin)); return eos; } @@ -553,7 +585,7 @@ gst_bin_create_plan (GstBin *bin) static void gst_bin_received_eos (GstElement *element, GstBin *bin) { - GST_INFO_ELEMENT (GST_CAT_PLANNING, bin, "child %s fired eos, pending %d\n", gst_element_get_name (element), + GST_INFO_ELEMENT (GST_CAT_PLANNING, bin, "child %s fired eos, pending %d\n", GST_ELEMENT_NAME (element), bin->num_eos_providers); GST_LOCK (bin); @@ -599,7 +631,7 @@ gst_bin_create_plan_func (GstBin *bin) GSList *pending = NULL; GstBin *pending_bin; - GST_DEBUG_ENTER("(\"%s\")",gst_element_get_name (GST_ELEMENT (bin))); + GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME (bin)); GST_INFO_ELEMENT (GST_CAT_PLANNING, bin, "creating plan"); @@ -612,11 +644,11 @@ gst_bin_create_plan_func (GstBin *bin) } else { manager = gst_element_get_manager (GST_ELEMENT (bin)); if (!manager) { - GST_DEBUG (0,"manager not set for element \"%s\" assuming manager is self\n", gst_element_get_name (GST_ELEMENT (bin))); + GST_DEBUG (0,"manager not set for element \"%s\" assuming manager is self\n", GST_ELEMENT_NAME (bin)); manager = GST_ELEMENT (bin); GST_FLAG_SET (bin, GST_BIN_FLAG_MANAGER); } - GST_DEBUG (0,"setting manager to \"%s\"\n", gst_element_get_name (manager)); + GST_DEBUG (0,"setting manager to \"%s\"\n", GST_ELEMENT_NAME (manager)); } gst_element_set_manager (GST_ELEMENT (bin), manager); @@ -633,22 +665,22 @@ gst_bin_create_plan_func (GstBin *bin) element = GST_ELEMENT (elements->data); elements = g_list_next (elements); #ifdef GST_DEBUG_ENABLED - elementname = gst_element_get_name (element); + elementname = GST_ELEMENT_NAME (element); #endif GST_DEBUG (0,"have element \"%s\"\n",elementname); // first set their manager - GST_DEBUG (0,"setting manager of \"%s\" to \"%s\"\n",elementname,gst_element_get_name(manager)); + GST_DEBUG (0,"setting manager of \"%s\" to \"%s\"\n",elementname,GST_ELEMENT_NAME (manager)); gst_element_set_manager (element, manager); // we do recursion and such for Bins if (GST_IS_BIN (element)) { // recurse into the child Bin GST_DEBUG (0,"recursing into child Bin \"%s\" with manager \"%s\"\n",elementname, - gst_element_get_name(element->manager)); + GST_ELEMENT_NAME (element->manager)); gst_bin_create_plan (GST_BIN (element)); GST_DEBUG (0,"after recurse got manager \"%s\"\n", - gst_element_get_name(element->manager)); + GST_ELEMENT_NAME (element->manager)); // check to see if it needs cothreads and isn't self-managing if (((GST_BIN (element))->need_cothreads) && !GST_FLAG_IS_SET(element,GST_BIN_FLAG_MANAGER)) { GST_DEBUG (0,"requiring cothreads because child bin \"%s\" does\n",elementname); @@ -677,7 +709,7 @@ gst_bin_create_plan_func (GstBin *bin) // if we're not a manager thread, we're done. if (!GST_FLAG_IS_SET (bin, GST_BIN_FLAG_MANAGER)) { - GST_DEBUG_LEAVE("(\"%s\")",gst_element_get_name(GST_ELEMENT(bin))); + GST_DEBUG_LEAVE("(\"%s\")",GST_ELEMENT_NAME (bin)); return; } @@ -697,13 +729,13 @@ gst_bin_create_plan_func (GstBin *bin) // walk the list of elements, find bins, and do stuff GST_DEBUG (0,"checking Bin \"%s\" for managed elements\n", - gst_element_get_name (GST_ELEMENT (pending_bin))); + GST_ELEMENT_NAME (pending_bin)); elements = pending_bin->children; while (elements) { element = GST_ELEMENT (elements->data); elements = g_list_next (elements); #ifdef GST_DEBUG_ENABLED - elementname = gst_element_get_name (element); + elementname = GST_ELEMENT_NAME (element); #endif // if it's ours, add it to the list @@ -734,10 +766,10 @@ gst_bin_create_plan_func (GstBin *bin) gst_bin_schedule(bin); g_print ("gstbin \"%s\", eos providers:%d\n", - gst_element_get_name (GST_ELEMENT (bin)), + GST_ELEMENT_NAME (bin), bin->num_eos_providers); - GST_DEBUG_LEAVE("(\"%s\")",gst_element_get_name(GST_ELEMENT(bin))); + GST_DEBUG_LEAVE("(\"%s\")",GST_ELEMENT_NAME (bin)); } static gboolean @@ -753,7 +785,7 @@ gst_bin_iterate_func (GstBin *bin) gint num_scheduled = 0; gboolean eos = FALSE; - GST_DEBUG_ENTER("(\"%s\")", gst_element_get_name (GST_ELEMENT (bin))); + GST_DEBUG_ENTER("(\"%s\")", GST_ELEMENT_NAME (bin)); g_return_val_if_fail (bin != NULL, TRUE); g_return_val_if_fail (GST_IS_BIN (bin), TRUE); @@ -775,7 +807,7 @@ gst_bin_iterate_func (GstBin *bin) entry = GST_ELEMENT (chain->elements->data); GST_FLAG_SET (entry, GST_ELEMENT_COTHREAD_STOPPING); GST_DEBUG (0,"set COTHREAD_STOPPING flag on \"%s\"(@%p)\n", - gst_element_get_name(entry),entry); + GST_ELEMENT_NAME (entry),entry); cothread_switch (entry->threadstate); } else { @@ -789,7 +821,7 @@ gst_bin_iterate_func (GstBin *bin) entry = GST_ELEMENT (entries->data); entries = g_list_next (entries); - GST_DEBUG (0,"have entry \"%s\"\n",gst_element_get_name(entry)); + GST_DEBUG (0,"have entry \"%s\"\n",GST_ELEMENT_NAME (entry)); if (GST_IS_BIN (entry)) { gst_bin_iterate (GST_BIN (entry)); @@ -800,7 +832,7 @@ gst_bin_iterate_func (GstBin *bin) if (GST_RPAD_DIRECTION(pad) == GST_PAD_SRC) { GST_DEBUG (0,"calling getfunc of %s:%s\n",GST_DEBUG_PAD_NAME(pad)); if (GST_REAL_PAD(pad)->getfunc == NULL) - fprintf(stderr, "error, no getfunc in \"%s\"\n", gst_element_get_name (entry)); + fprintf(stderr, "error, no getfunc in \"%s\"\n", GST_ELEMENT_NAME (entry)); else buf = (GST_REAL_PAD(pad)->getfunc)(pad); if (buf) gst_pad_push(pad,buf); @@ -829,7 +861,7 @@ gst_bin_iterate_func (GstBin *bin) } } - GST_DEBUG_LEAVE("(%s)", gst_element_get_name (GST_ELEMENT (bin))); + GST_DEBUG_LEAVE("(%s)", GST_ELEMENT_NAME (bin)); return !eos; } diff --git a/gst/gstbin.h b/gst/gstbin.h index 6068088..23b826f 100644 --- a/gst/gstbin.h +++ b/gst/gstbin.h @@ -125,6 +125,8 @@ void gst_bin_remove (GstBin *bin, /* retrieve a single element or the list of children */ GstElement* gst_bin_get_by_name (GstBin *bin, const gchar *name); +GstElement* gst_bin_get_by_name_recurse_up (GstBin *bin, + const gchar *name); GList* gst_bin_get_list (GstBin *bin); void gst_bin_create_plan (GstBin *bin); diff --git a/gst/gstclock.c b/gst/gstclock.c index 508fd54..8040baf 100644 --- a/gst/gstclock.c +++ b/gst/gstclock.c @@ -40,25 +40,25 @@ static GstClock *the_system_clock = NULL; * Returns: the new clock element */ GstClock* -gst_clock_new (gchar *name) +gst_clock_new (gchar *name) { GstClock *clock = (GstClock *) g_malloc(sizeof(GstClock)); - + clock->name = g_strdup (name); clock->sinkobjects = NULL; clock->sinkmutex = g_mutex_new (); clock->lock = g_mutex_new (); g_mutex_lock (clock->sinkmutex); - + clock->num = 0; clock->num_locked = 0; clock->locking = FALSE; - + return clock; } GstClock* -gst_clock_get_system(void) +gst_clock_get_system(void) { if (the_system_clock == NULL) { the_system_clock = gst_clock_new ("system_clock"); @@ -67,8 +67,8 @@ gst_clock_get_system(void) return the_system_clock; } -void -gst_clock_register (GstClock *clock, GstObject *obj) +void +gst_clock_register (GstClock *clock, GstObject *obj) { if ((GST_ELEMENT(obj))->numsrcpads == 0) { GST_DEBUG (0,"gst_clock: setting registered sink object 0x%p\n", obj); @@ -77,8 +77,8 @@ gst_clock_register (GstClock *clock, GstObject *obj) } } -void -gst_clock_set (GstClock *clock, GstClockTime time) +void +gst_clock_set (GstClock *clock, GstClockTime time) { struct timeval tfnow; GstClockTime now; @@ -91,7 +91,7 @@ gst_clock_set (GstClock *clock, GstClockTime time) GST_DEBUG (0,"gst_clock: setting clock to %llu %llu %llu\n", time, now, clock->start_time); } -GstClockTimeDiff +GstClockTimeDiff gst_clock_current_diff (GstClock *clock, GstClockTime time) { struct timeval tfnow; @@ -99,14 +99,14 @@ gst_clock_current_diff (GstClock *clock, GstClockTime time) gettimeofday (&tfnow, (struct timezone *)NULL); g_mutex_lock (clock->lock); - now = ((guint64)tfnow.tv_sec*1000000LL+tfnow.tv_usec) - (guint64)clock->start_time; + now = ((guint64)tfnow.tv_sec*1000000LL+tfnow.tv_usec) - (guint64)clock->start_time; g_mutex_unlock (clock->lock); return GST_CLOCK_DIFF (time, now); } -void -gst_clock_reset (GstClock *clock) +void +gst_clock_reset (GstClock *clock) { struct timeval tfnow; @@ -119,8 +119,8 @@ gst_clock_reset (GstClock *clock) g_mutex_unlock (clock->lock); } -void -gst_clock_wait (GstClock *clock, GstClockTime time, GstObject *obj) +void +gst_clock_wait (GstClock *clock, GstClockTime time, GstObject *obj) { struct timeval tfnow; GstClockTime now; @@ -133,8 +133,8 @@ gst_clock_wait (GstClock *clock, GstClockTime time, GstObject *obj) diff = GST_CLOCK_DIFF (time, now); // if we are not behind wait a bit - GST_DEBUG (0,"gst_clock: %s waiting for time %08llu %08llu %08lld\n", gst_element_get_name(GST_ELEMENT(obj)), time, now, diff); - + GST_DEBUG (0,"gst_clock: %s waiting for time %08llu %08llu %08lld\n", GST_OBJECT_NAME (obj), time, now, diff); + g_mutex_unlock (clock->lock); if (diff > 10000 ) { tfnow.tv_usec = (diff % 1000000); @@ -143,8 +143,8 @@ gst_clock_wait (GstClock *clock, GstClockTime time, GstObject *obj) if (!tfnow.tv_sec) { select(0, NULL, NULL, NULL, &tfnow); } - else GST_DEBUG (0,"gst_clock: %s waiting %u %llu %llu %llu seconds\n", gst_element_get_name(GST_ELEMENT(obj)), + else GST_DEBUG (0,"gst_clock: %s waiting %u %llu %llu %llu seconds\n", GST_OBJECT_NAME (obj), (int)tfnow.tv_sec, now, diff, time); } - GST_DEBUG (0,"gst_clock: %s waiting for time %08llu %08llu %08lld done \n", gst_element_get_name(GST_ELEMENT(obj)), time, now, diff); + GST_DEBUG (0,"gst_clock: %s waiting for time %08llu %08llu %08lld done \n", GST_OBJECT_NAME (obj), time, now, diff); } diff --git a/gst/gstelement.c b/gst/gstelement.c index d2abe9b..f008801 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -44,12 +44,14 @@ enum { }; -static void gst_element_class_init (GstElementClass *klass); -static void gst_element_init (GstElement *element); +static void gst_element_class_init (GstElementClass *klass); +static void gst_element_init (GstElement *element); -static void gst_element_real_destroy (GtkObject *object); +static void gst_element_real_destroy (GtkObject *object); -static GstElementStateReturn gst_element_change_state(GstElement *element); +static GstElementStateReturn gst_element_change_state (GstElement *element); + +static xmlNodePtr gst_element_save_thyself (GstObject *object, xmlNodePtr parent); static GstObjectClass *parent_class = NULL; static guint gst_element_signals[LAST_SIGNAL] = { 0 }; @@ -77,8 +79,10 @@ static void gst_element_class_init (GstElementClass *klass) { GtkObjectClass *gtkobject_class; + GstObjectClass *gstobject_class; - gtkobject_class = (GtkObjectClass*)klass; + gtkobject_class = (GtkObjectClass*) klass; + gstobject_class = (GstObjectClass*) klass; parent_class = gtk_type_class(GST_TYPE_OBJECT); @@ -110,10 +114,12 @@ gst_element_class_init (GstElementClass *klass) gtk_object_class_add_signals (gtkobject_class, gst_element_signals, LAST_SIGNAL); + gtkobject_class->destroy = gst_element_real_destroy; + + gstobject_class->save_thyself = gst_element_save_thyself; + klass->change_state = gst_element_change_state; klass->elementfactory = NULL; - - gtkobject_class->destroy = gst_element_real_destroy; } static void @@ -143,6 +149,78 @@ gst_element_new(void) } /** + * gst_element_set_name: + * @element: GstElement to set name of + * @name: new name of element + * + * Set the name of the element, getting rid of the old name if there was + * one. + */ +void +gst_element_set_name (GstElement *element, const gchar *name) +{ + g_return_if_fail (element != NULL); + g_return_if_fail (GST_IS_ELEMENT (element)); + g_return_if_fail (name != NULL); + + gst_object_set_name (GST_OBJECT (element), name); +} + +/** + * gst_element_get_name: + * @element: GstElement to get name of + * + * Get the name of the element. + * + * Returns: name of the element + */ +const gchar* +gst_element_get_name (GstElement *element) +{ + g_return_val_if_fail (element != NULL, NULL); + g_return_val_if_fail (GST_IS_ELEMENT (element), NULL); + + return GST_OBJECT_NAME (element); +} + +/** + * gst_element_set_parent: + * @element: GstElement to set parent of + * @name: new parent of the object + * + * Set the parent of the element. + */ +void +gst_element_set_parent (GstElement *element, GstObject *parent) +{ + g_return_if_fail (element != NULL); + g_return_if_fail (GST_IS_ELEMENT (element)); + g_return_if_fail (GST_OBJECT_PARENT (element) == NULL); + g_return_if_fail (parent != NULL); + g_return_if_fail (GTK_IS_OBJECT (parent)); + g_return_if_fail ((gpointer)element != (gpointer)parent); + + gst_object_set_parent (GST_OBJECT (element), parent); +} + +/** + * gst_element_get_parent: + * @element: GstElement to get the parent of + * + * Get the parent of the element. + * + * Returns: parent of the element + */ +GstObject* +gst_element_get_parent (GstElement *element) +{ + g_return_val_if_fail (element != NULL, NULL); + g_return_val_if_fail (GST_IS_ELEMENT (element), NULL); + + return GST_OBJECT_PARENT (element); +} + +/** * gst_element_add_pad: * @element: element to add pad to * @pad: pad to add @@ -160,8 +238,8 @@ gst_element_add_pad (GstElement *element, GstPad *pad) /* set the pad's parent */ GST_DEBUG (0,"setting parent of pad '%s'(%p) to '%s'(%p)\n", - gst_pad_get_name(pad),pad,gst_element_get_name(element),element); - gst_pad_set_parent (pad,GST_OBJECT (element)); + GST_PAD_NAME (pad), pad, GST_ELEMENT_NAME (element), element); + gst_object_set_parent (GST_OBJECT (pad), GST_OBJECT (element)); /* add it to the list */ element->pads = g_list_append (element->pads, pad); @@ -198,11 +276,11 @@ gst_element_add_ghost_pad (GstElement *element, GstPad *pad, gchar *name) ghostpad = gst_ghost_pad_new (name, pad); /* add it to the list */ - GST_DEBUG(0,"adding ghost pad %s to element %s\n",name,gst_element_get_name(element)); + GST_DEBUG(0,"adding ghost pad %s to element %s\n", name, GST_ELEMENT_NAME (element)); element->pads = g_list_append (element->pads, ghostpad); element->numpads++; // set the parent of the ghostpad - gst_pad_set_parent(ghostpad, GST_OBJECT (element)); + gst_object_set_parent (GST_OBJECT (ghostpad), GST_OBJECT (element)); GST_DEBUG(0,"added ghostpad %s:%s\n",GST_DEBUG_PAD_NAME(ghostpad)); @@ -253,14 +331,15 @@ gst_element_get_pad (GstElement *element, const gchar *name) return NULL; GST_DEBUG(GST_CAT_ELEMENT_PADS,"searching for pad '%s' in element %s\n", - name,gst_element_get_name(element)); + name, GST_ELEMENT_NAME (element)); // look through the list, matching by name walk = element->pads; while (walk) { - if (!strcmp ((GST_PAD(walk->data))->name, name)) { + GstPad *pad = GST_PAD(walk->data); + if (!strcmp (gst_object_get_name (GST_OBJECT(pad)), name)) { GST_DEBUG(GST_CAT_ELEMENT_PADS,"found pad '%s'\n",name); - return GST_PAD(walk->data); + return pad; } walk = g_list_next (walk); } @@ -521,7 +600,7 @@ gst_element_connect (GstElement *src, const gchar *srcpadname, /* if (srcparent != destparent) { GST_ERROR_OBJECT(srcparent,destparent,"%s and %s have different parents", - gst_element_get_name(src),gst_element_get_name(dest)); + GST_ELEMENT_NAME (src),GST_ELEMENT_NAME (dest)); return; } */ @@ -579,7 +658,7 @@ gst_element_disconnect (GstElement *src, const gchar *srcpadname, void gst_element_error (GstElement *element, const gchar *error) { - g_error("GstElement: error in element '%s': %s\n", element->name, error); + g_error("GstElement: error in element '%s': %s\n", gst_object_get_name (GST_OBJECT (element)), error); /* FIXME: this is not finished!!! */ @@ -631,7 +710,7 @@ gst_element_set_state (GstElement *element, GstElementState state) /* if that outright didn't work, we need to bail right away */ /* NOTE: this will bail on ASYNC as well! */ if (return_val == GST_STATE_FAILURE) { -// GST_DEBUG (0,"have async return from '%s'\n",gst_element_get_name(element)); +// GST_DEBUG (0,"have async return from '%s'\n",GST_ELEMENT_NAME (element)); return return_val; } } @@ -688,44 +767,6 @@ gst_element_change_state (GstElement *element) return TRUE; } -/** - * gst_element_set_name: - * @element: GstElement to set name of - * @name: new name of element - * - * Set the name of the element, getting rid of the old name if there was - * one. - */ -void -gst_element_set_name (GstElement *element, const gchar *name) -{ - g_return_if_fail (element != NULL); - g_return_if_fail (GST_IS_ELEMENT (element)); - g_return_if_fail (name != NULL); - - if (element->name != NULL) - g_free(element->name); - - element->name = g_strdup (name); -} - -/** - * gst_element_get_name: - * @element: GstElement to get name of - * - * Get the name of the element. - * - * Returns: name of the element - */ -const gchar* -gst_element_get_name (GstElement *element) -{ - g_return_val_if_fail (element != NULL, NULL); - g_return_val_if_fail (GST_IS_ELEMENT (element), NULL); - - return element->name; -} - static void gst_element_real_destroy (GtkObject *object) { @@ -735,9 +776,6 @@ gst_element_real_destroy (GtkObject *object) // g_print("in gst_element_real_destroy()\n"); - if (element->name) - g_free (element->name); - pads = element->pads; while (pads) { pad = GST_PAD (pads->data); @@ -774,25 +812,30 @@ static gchar *_gst_element_type_names[] = { * * Returns: the new xml node */ -xmlNodePtr -gst_element_save_thyself (GstElement *element, +static xmlNodePtr +gst_element_save_thyself (GstObject *object, xmlNodePtr parent) { - xmlNodePtr self; GList *pads; - GstPad *pad; GstElementClass *oclass; - GstElementFactory *factory; GtkType type; + GstElement *element; + + g_return_val_if_fail (object != NULL, parent); + g_return_val_if_fail (GST_IS_ELEMENT (object), parent); + g_return_val_if_fail (parent != NULL, parent); + + element = GST_ELEMENT (object); oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass); - self = xmlNewChild (parent, NULL, "element", NULL); - xmlNewChild(self, NULL, "name", element->name); + xmlNewChild(parent, NULL, "name", gst_object_get_name (GST_OBJECT (element))); + if (oclass->elementfactory != NULL) { - factory = (GstElementFactory *)oclass->elementfactory; - xmlNewChild (self, NULL, "type", factory->name); - xmlNewChild (self, NULL, "version", factory->details->version); + GstElementFactory *factory = (GstElementFactory *)oclass->elementfactory; + + xmlNewChild (parent, NULL, "type", factory->name); + xmlNewChild (parent, NULL, "version", factory->details->version); } // output all args to the element @@ -806,11 +849,10 @@ gst_element_save_thyself (GstElement *element, for (i=0; i GTK_TYPE_NONE) && - //(args[i].type <= GTK_TYPE_STRING) && (flags[i] & GTK_ARG_READABLE)) { xmlNodePtr arg; gtk_object_getv (GTK_OBJECT (element), 1, &args[i]); - arg = xmlNewChild (self, NULL, "arg", NULL); + arg = xmlNewChild (parent, NULL, "arg", NULL); xmlNewChild (arg, NULL, "name", args[i].name); switch (args[i].type) { case GTK_TYPE_CHAR: @@ -861,24 +903,20 @@ gst_element_save_thyself (GstElement *element, pads = element->pads; while (pads) { - xmlNodePtr padtag = xmlNewChild (self, NULL, "pad", NULL); - pad = GST_PAD (pads->data); + GstPad *pad = GST_PAD (pads->data); + xmlNodePtr padtag = xmlNewChild (parent, NULL, "pad", NULL); // figure out if it's a direct pad or a ghostpad - if (GST_ELEMENT (pad->parent) == element) - gst_pad_save_thyself (pad, padtag); + if (GST_ELEMENT (GST_OBJECT_PARENT (pad)) == element) + gst_object_save_thyself (GST_OBJECT (pad), padtag); pads = g_list_next (pads); } - - if (oclass->save_thyself) - (oclass->save_thyself)(element, self); - - return self; + return parent; } /** * gst_element_load_thyself: - * @parent: the xml parent node + * @self: the xml node * @elements: a hashtable to store the elements in. This is used * to resolve inter element dependecies during the loading. * @@ -887,12 +925,11 @@ gst_element_save_thyself (GstElement *element, * Returns: the new element */ GstElement* -gst_element_load_thyself (xmlNodePtr parent, - GHashTable *elements) +gst_element_load_thyself (xmlNodePtr self, GstObject *parent) { - xmlNodePtr children = parent->xmlChildrenNode; + xmlNodePtr children = self->xmlChildrenNode; GstElement *element; - GstElementClass *oclass; + GstObjectClass *oclass; guchar *name = NULL; guchar *value = NULL; guchar *type = NULL; @@ -915,10 +952,13 @@ gst_element_load_thyself (xmlNodePtr parent, g_return_val_if_fail (element != NULL, NULL); - g_hash_table_insert (elements, g_strdup (gst_element_get_name (element)), element); + // ne need to set the parent on this object bacause the pads + // will go through the hierarchy to connect to thier peers + if (parent) + gst_object_set_parent (GST_OBJECT (element), parent); // we have the element now, set the arguments - children = parent->xmlChildrenNode; + children = self->xmlChildrenNode; while (children) { if (!strcmp (children->name, "arg")) { @@ -1009,18 +1049,21 @@ gst_element_load_thyself (xmlNodePtr parent, children = children->next; } // we have the element now, set the pads - children = parent->xmlChildrenNode; + children = self->xmlChildrenNode; while (children) { if (!strcmp (children->name, "pad")) { - gst_pad_load_and_connect (children, GST_OBJECT(element), elements); + gst_pad_load_and_connect (children, GST_OBJECT (element)); } children = children->next; } - oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass); + oclass = GST_OBJECT_CLASS (GTK_OBJECT (element)->klass); if (oclass->restore_thyself) - (oclass->restore_thyself) (element, parent, elements); + (oclass->restore_thyself) (GST_OBJECT (element), self); + + if (parent) + gst_object_unparent (GST_OBJECT (element)); return element; } diff --git a/gst/gstelement.h b/gst/gstelement.h index aba31cb..15f01e8 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -37,7 +37,6 @@ #include #include - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -121,6 +120,8 @@ typedef enum { #define GST_ELEMENT_IS_COTHREAD_STOPPING(obj) (GST_FLAG_IS_SET(obj,GST_ELEMENT_COTHREAD_STOPPING)) #define GST_ELEMENT_IS_EOS(obj) (GST_FLAG_IS_SET(obj,GST_ELEMENT_EOS)) +#define GST_ELEMENT_NAME(obj) (GST_OBJECT_NAME(obj)) +#define GST_ELEMENT_PARENT(obj) (GST_OBJECT_PARENT(obj)) typedef struct _GstElement GstElement; typedef struct _GstElementClass GstElementClass; @@ -132,8 +133,6 @@ typedef void (*GstElementLoopFunction) (GstElement *element); struct _GstElement { GstObject object; - gchar *name; - guint8 current_state; guint8 pending_state; @@ -165,10 +164,6 @@ struct _GstElementClass { GstElementStateReturn (*change_state) (GstElement *element); /* request a new pad */ GstPad* (*request_new_pad) (GstElement *element, GstPadTemplate *templ); - - /* create or read XML representation of self */ - xmlNodePtr (*save_thyself) (GstElement *element, xmlNodePtr parent); - void (*restore_thyself) (GstElement *element, xmlNodePtr self, GHashTable *elements); }; struct _GstElementDetails { @@ -197,8 +192,11 @@ GstElement* gst_element_new (void); void gst_element_set_loop_function (GstElement *element, GstElementLoopFunction loop); -void gst_element_set_name (GstElement *element, const gchar *name); -const gchar* gst_element_get_name (GstElement *element); +void gst_element_set_name (GstElement *element, const gchar *name); +const gchar* gst_element_get_name (GstElement *element); + +void gst_element_set_parent (GstElement *element, GstObject *parent); +GstObject* gst_element_get_parent (GstElement *element); void gst_element_set_manager (GstElement *element, GstElement *manager); GstElement* gst_element_get_manager (GstElement *element); @@ -230,8 +228,7 @@ void gst_element_error (GstElement *element, const gchar *error); GstElementFactory* gst_element_get_factory (GstElement *element); /* XML write and read */ -xmlNodePtr gst_element_save_thyself (GstElement *element, xmlNodePtr parent); -GstElement* gst_element_load_thyself (xmlNodePtr parent, GHashTable *elements); +GstElement* gst_element_load_thyself (xmlNodePtr self, GstObject *parent); /* diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c index 96de934..6e31a0d 100644 --- a/gst/gstelementfactory.c +++ b/gst/gstelementfactory.c @@ -167,7 +167,7 @@ gst_elementfactory_create (GstElementFactory *factory, oclass->elementfactory = factory; } - gst_element_set_name(GST_ELEMENT(element),name); + gst_object_set_name (GST_OBJECT (element),name); return element; } diff --git a/gst/gstinfo.c b/gst/gstinfo.c index 44c5f38..3e2994a 100644 --- a/gst/gstinfo.c +++ b/gst/gstinfo.c @@ -21,7 +21,8 @@ */ #include "gst_private.h" -#include "gst.h" +#include "gstelement.h" +#include "gstpad.h" extern gchar *_gst_progname; @@ -91,7 +92,7 @@ gst_default_info_handler (gint category, gchar *file, gchar *function, if (category != GST_CAT_GST_INIT) location = g_strdup_printf("%s:%d%s:",function,line,debug_string); if (element && GST_IS_ELEMENT (element)) - elementname = g_strdup_printf (" [%s]",gst_element_get_name (element)); + elementname = g_strdup_printf (" [%s]", GST_OBJECT_NAME (element)); fprintf(stderr,"INFO:%s%s %s\n",location,elementname,string); diff --git a/gst/gstinfo.h b/gst/gstinfo.h index 3318b1a..69abbe3 100644 --- a/gst/gstinfo.h +++ b/gst/gstinfo.h @@ -110,9 +110,9 @@ G_GNUC_UNUSED static gchar *_debug_string = NULL; /********** some convenience macros for debugging **********/ #define GST_DEBUG_PAD_NAME(pad) \ - (GST_PAD_PARENT(pad) != NULL) ? \ - gst_element_get_name(GST_ELEMENT(GST_PAD_PARENT(pad))) : \ - "''", gst_pad_get_name((GstPad*)pad) + (GST_OBJECT_PARENT(pad) != NULL) ? \ + GST_OBJECT_NAME (GST_OBJECT_PARENT(pad)) : \ + "''", GST_OBJECT_NAME (pad) diff --git a/gst/gstobject.c b/gst/gstobject.c index d9aaff4..b1c522b 100644 --- a/gst/gstobject.c +++ b/gst/gstobject.c @@ -23,8 +23,6 @@ #include "gst_private.h" #include "gstobject.h" -#include "gstpad.h" -#include "gstelement.h" /* Object signals and args */ enum { @@ -38,14 +36,15 @@ enum { }; -static void gst_object_class_init(GstObjectClass *klass); -static void gst_object_init(GstObject *object); - +static void gst_object_class_init (GstObjectClass *klass); +static void gst_object_init (GstObject *object); static GtkObjectClass *parent_class = NULL; static guint gst_object_signals[LAST_SIGNAL] = { 0 }; -GtkType gst_object_get_type(void) { +GtkType +gst_object_get_type (void) +{ static GtkType object_type = 0; if (!object_type) { @@ -64,22 +63,28 @@ GtkType gst_object_get_type(void) { return object_type; } -static void gst_object_class_init(GstObjectClass *klass) { +static void +gst_object_class_init (GstObjectClass *klass) +{ GtkObjectClass *gtkobject_class; - gtkobject_class = (GtkObjectClass*)klass; + gtkobject_class = (GtkObjectClass*) klass; - parent_class = gtk_type_class(gtk_object_get_type()); + parent_class = gtk_type_class (gtk_object_get_type ()); gst_object_signals[PARENT_SET] = - gtk_signal_new("parent_set",GTK_RUN_LAST,gtkobject_class->type, - GTK_SIGNAL_OFFSET(GstObjectClass,parent_set), - gtk_marshal_NONE__POINTER,GTK_TYPE_NONE,1, - GST_TYPE_OBJECT); - gtk_object_class_add_signals(gtkobject_class,gst_object_signals,LAST_SIGNAL); + gtk_signal_new ("parent_set", GTK_RUN_LAST, gtkobject_class->type, + GTK_SIGNAL_OFFSET (GstObjectClass, parent_set), + gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, + GST_TYPE_OBJECT); + gtk_object_class_add_signals (gtkobject_class, gst_object_signals, LAST_SIGNAL); + + klass->path_string_separator = "/"; } -static void gst_object_init(GstObject *object) { +static void +gst_object_init (GstObject *object) +{ object->lock = g_mutex_new(); #ifdef HAVE_ATOMIC_H atomic_set(&(object->refcount),1); @@ -96,8 +101,47 @@ static void gst_object_init(GstObject *object) { * * Returns: new object */ -GstObject *gst_object_new() { - return GST_OBJECT(gtk_type_new(gst_object_get_type())); +GstObject* +gst_object_new (void) +{ + return GST_OBJECT (gtk_type_new (gst_object_get_type ())); +} + +/** + * gst_object_set_name: + * @object: GstObject to set the name of + * @name: new name of object + * + * Set the name of the object. + */ +void +gst_object_set_name (GstObject *object, const gchar *name) +{ + g_return_if_fail (object != NULL); + g_return_if_fail (GST_IS_OBJECT (object)); + g_return_if_fail (name != NULL); + + if (object->name != NULL) + g_free (object->name); + + object->name = g_strdup (name); +} + +/** + * gst_object_get_name: + * @object: GstObject to get the name of + * + * Get the name of the object. + * + * Returns: name of the object + */ +const gchar* +gst_object_get_name (GstObject *object) +{ + g_return_val_if_fail (object != NULL, NULL); + g_return_val_if_fail (GST_IS_OBJECT (object), NULL); + + return object->name; } /** @@ -109,23 +153,25 @@ GstObject *gst_object_new() { * incremented. * signals the parent-set signal */ -void gst_object_set_parent(GstObject *object,GstObject *parent) { - g_return_if_fail(object != NULL); - g_return_if_fail(GST_IS_OBJECT(object)); - g_return_if_fail(parent != NULL); - g_return_if_fail(GST_IS_OBJECT(parent)); - g_return_if_fail(object != parent); +void +gst_object_set_parent (GstObject *object, GstObject *parent) +{ + g_return_if_fail (object != NULL); + g_return_if_fail (GST_IS_OBJECT (object)); + g_return_if_fail (parent != NULL); + g_return_if_fail (GST_IS_OBJECT (parent)); + g_return_if_fail (object != parent); if (object->parent != NULL) { - GST_ERROR_OBJECT(object,object->parent,"object's parent is already set, must unparent first"); + GST_ERROR_OBJECT (object,object->parent, "object's parent is already set, must unparent first"); return; } - gst_object_ref(object); - gst_object_sink(object); + gst_object_ref (object); + gst_object_sink (object); object->parent = parent; - gtk_signal_emit(GTK_OBJECT(object),gst_object_signals[PARENT_SET],parent); + gtk_signal_emit (GTK_OBJECT (object), gst_object_signals[PARENT_SET], parent); } /** @@ -136,9 +182,11 @@ void gst_object_set_parent(GstObject *object,GstObject *parent) { * * Returns: parent of the object */ -GstObject *gst_object_get_parent(GstObject *object) { - g_return_val_if_fail(object != NULL, NULL); - g_return_val_if_fail(GST_IS_OBJECT(object), NULL); +GstObject* +gst_object_get_parent (GstObject *object) +{ + g_return_val_if_fail (object != NULL, NULL); + g_return_val_if_fail (GST_IS_OBJECT (object), NULL); return object->parent; } @@ -149,14 +197,16 @@ GstObject *gst_object_get_parent(GstObject *object) { * * Clear the parent of the object, removing the associated reference. */ -void gst_object_unparent(GstObject *object) { - g_return_if_fail(object != NULL); - g_return_if_fail(GST_IS_OBJECT(object)); +void +gst_object_unparent (GstObject *object) +{ + g_return_if_fail (object != NULL); + g_return_if_fail (GST_IS_OBJECT(object)); if (object->parent == NULL) return; object->parent = NULL; - gst_object_unref(object); + gst_object_unref (object); } /** @@ -166,18 +216,20 @@ void gst_object_unparent(GstObject *object) { * Increments the refence count on the object. */ #ifndef gst_object_ref -void gst_object_ref (GstObject *object) { - g_return_if_fail(object != NULL); - g_return_if_fail(GST_IS_OBJECT(object)); +void +gst_object_ref (GstObject *object) +{ + g_return_if_fail (object != NULL); + g_return_if_fail (GST_IS_OBJECT (object)); #ifdef HAVE_ATOMIC_H - g_return_if_fail(atomic_read(&(object->refcount)) > 0); - atomic_inc(&(object->refcount)) + g_return_if_fail (atomic_read (&(object->refcount)) > 0); + atomic_inc (&(object->refcount)) #else - g_return_if_fail(object->refcount > 0); - GST_LOCK(object); + g_return_if_fail (object->refcount > 0); + GST_LOCK (object); object->refcount++; - GST_UNLOCK(object); + GST_UNLOCK (object); #endif } #endif /* gst_object_ref */ @@ -190,36 +242,38 @@ void gst_object_ref (GstObject *object) { * zero, destroy the object. */ #ifndef gst_object_unref -void gst_object_unref (GstObject *object) { +void +gst_object_unref (GstObject *object) +{ int reftest; - g_return_if_fail(object != NULL); - g_return_if_fail(GST_IS_OBJECT(object)); + g_return_if_fail (object != NULL); + g_return_if_fail (GST_IS_OBJECT (object)); #ifdef HAVE_ATOMIC_H - g_return_if_fail(atomic_read(&(object->refcount)) > 0); - reftest = atomic_dec_and_test(&(object->refcount)) + g_return_if_fail (atomic_read (&(object->refcount)) > 0); + reftest = atomic_dec_and_test (&(object->refcount)) #else - g_return_if_fail(object->refcount > 0); - GST_LOCK(object); + g_return_if_fail (object->refcount > 0); + GST_LOCK (object); object->refcount--; reftest = (object->refcount == 0); - GST_UNLOCK(object); + GST_UNLOCK (object); #endif /* if we ended up with the refcount at zero */ if (reftest) { /* get the count to 1 for gtk_object_destroy() */ #ifdef HAVE_ATOMIC_H - atomic_set(&(object->refcount),1); + atomic_set (&(object->refcount),1); #else object->refcount = 1; #endif /* destroy it */ - gtk_object_destroy(GTK_OBJECT(object)); + gtk_object_destroy (GTK_OBJECT (object)); /* drop the refcount back to zero */ #ifdef HAVE_ATOMIC_H - atomic_set(&(object->refcount),0); + atomic_set (&(object->refcount),0); #else object->refcount = 0; #endif @@ -240,17 +294,41 @@ void gst_object_unref (GstObject *object) { * creating a new object to symbolically 'take ownership of' the object. */ #ifndef gst_object_sink -void gst_object_sink(GstObject *object) { - g_return_if_fail(object != NULL); - g_return_if_fail(GST_IS_OBJECT(object)); +void +gst_object_sink (GstObject *object) +{ + g_return_if_fail (object != NULL); + g_return_if_fail (GST_IS_OBJECT (object)); - if (GTK_OBJECT_FLOATING(object)) { - GTK_OBJECT_UNSET_FLAGS(object, GTK_FLOATING); - gst_object_unref(object); + if (GTK_OBJECT_FLOATING (object)) { + GTK_OBJECT_UNSET_FLAGS (object, GTK_FLOATING); + gst_object_unref (object); } } #endif /* gst_object_sink */ +xmlNodePtr +gst_object_save_thyself (GstObject *object, xmlNodePtr parent) +{ + GstObjectClass *oclass; + + g_return_val_if_fail (object != NULL, parent); + g_return_val_if_fail (GST_IS_OBJECT (object), parent); + g_return_val_if_fail (parent != NULL, parent); + + oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass); + + if (oclass->save_thyself) + oclass->save_thyself (object, parent); + + return parent; +} + +void +gst_object_load_thyself (xmlNodePtr self, GstObject *parent) +{ + g_print ("gstobject: load thyself\n"); +} /** * gst_object_get_path_string: @@ -258,79 +336,64 @@ void gst_object_sink(GstObject *object) { * * Generates a string describing the path of the object in * the object hierarchy. Usefull for debugging - * + * * Returns: a string describing the path of the object */ gchar* -gst_object_get_path_string(GstObject *object) +gst_object_get_path_string (GstObject *object) { GSList *parentage = NULL; GSList *parents; void *parent; - gchar *prevpath, *path = ""; + gchar *prevpath, *path = ""; const char *component; gchar *separator = ""; gboolean free_component; parentage = g_slist_prepend (NULL, object); - + // first walk the object hierarchy to build a list of the parents do { - if (GST_IS_OBJECT(object)) { - if (GST_IS_PAD(object)) { - parent = GST_PAD(object)->parent; -// } else if (GST_IS_ELEMENT(object)) { -// parent = gst_element_get_parent(GST_ELEMENT(object)); - } else { - parent = gst_object_get_parent (object); - } + if (GST_IS_OBJECT (object)) { + parent = gst_object_get_parent (object); } else { parentage = g_slist_prepend (parentage, NULL); parent = NULL; } - if (parent != NULL) { + if (parent != NULL) { parentage = g_slist_prepend (parentage, parent); } - + object = parent; } while (object != NULL); // then walk the parent list and print them out parents = parentage; while (parents) { - if (GST_IS_OBJECT(parents->data)) { - if (GST_IS_PAD(parents->data)) { - component = gst_pad_get_name(GST_PAD(parents->data)); - separator = "."; - free_component = FALSE; - } else if (GST_IS_ELEMENT(parents->data)) { - component = gst_element_get_name(GST_ELEMENT(parents->data)); - separator = "/"; - free_component = FALSE; - } else { -// component = g_strdup_printf("a %s",gtk_type_name(gtk_identifier_get_type(parents->data))); - component = g_strdup_printf("unknown%p",parents->data); - separator = "/"; - free_component = TRUE; - } + if (GST_IS_OBJECT (parents->data)) { + GstObjectClass *oclass = GST_OBJECT_CLASS (GTK_OBJECT (parents->data)); + + component = GST_OBJECT_NAME (parents->data); + separator = oclass->path_string_separator; + free_component = FALSE; } else { - component = g_strdup_printf("%p",parents->data); + component = g_strdup_printf("%p",parents->data); separator = "/"; free_component = TRUE; } - + prevpath = path; - path = g_strjoin(separator,prevpath,component,NULL); + path = g_strjoin (separator, prevpath, component, NULL); g_free(prevpath); if (free_component) g_free((gchar *)component); parents = g_slist_next(parents); } - - g_slist_free(parentage); - + + g_slist_free (parentage); + return path; } diff --git a/gst/gstobject.h b/gst/gstobject.h index d8524f7..80a9631 100644 --- a/gst/gstobject.h +++ b/gst/gstobject.h @@ -26,6 +26,7 @@ #include #include +#include #ifdef HAVE_CONFIG_H #include "config.h" @@ -62,6 +63,7 @@ typedef struct _GstObjectClass GstObjectClass; struct _GstObject { GtkObject object; + gchar *name; /* have to have a refcount for the object */ #ifdef HAVE_ATOMIC_H atomic_t refcount; @@ -79,39 +81,54 @@ struct _GstObject { struct _GstObjectClass { GtkObjectClass parent_class; + gchar *path_string_separator; + /* signals */ - void (*parent_set) (GstObject *object,GstObject *parent); + void (*parent_set) (GstObject *object, GstObject *parent); /* functions go here */ + xmlNodePtr (*save_thyself) (GstObject *object, xmlNodePtr parent); + void (*restore_thyself) (GstObject *object, xmlNodePtr self); }; +#define GST_OBJECT_NAME(obj) (const gchar*)(((GstObject *)(obj))->name) +#define GST_OBJECT_PARENT(obj) (((GstObject *)(obj))->parent) + #define GST_FLAGS(obj) GTK_OBJECT_FLAGS(obj) #define GST_FLAG_IS_SET(obj,flag) (GST_FLAGS (obj) & (1<<(flag))) #define GST_FLAG_SET(obj,flag) G_STMT_START{ (GST_FLAGS (obj) |= (1<<(flag))); }G_STMT_END #define GST_FLAG_UNSET(obj,flag) G_STMT_START{ (GST_FLAGS (obj) &= ~(1<<(flag))); }G_STMT_END +/* object locking */ #define GST_LOCK(obj) (g_mutex_lock(GST_OBJECT(obj)->lock)) #define GST_TRYLOCK(obj) (g_mutex_trylock(GST_OBJECT(obj)->lock)) #define GST_UNLOCK(obj) (g_mutex_unlock(GST_OBJECT(obj)->lock)) +#define GST_GET_LOCK(obj) (GST_OBJECT(obj)->lock) /* normal GtkObject stuff */ -GtkType gst_object_get_type (void); -GstObject* gst_object_new (void); +GtkType gst_object_get_type (void); +GstObject* gst_object_new (void); + +/* name routines */ +void gst_object_set_name (GstObject *object, const gchar *name); +const gchar* gst_object_get_name (GstObject *object); /* parentage routines */ -void gst_object_set_parent (GstObject *object,GstObject *parent); +void gst_object_set_parent (GstObject *object,GstObject *parent); GstObject* gst_object_get_parent (GstObject *object); -void gst_object_unparent (GstObject *object); +void gst_object_unparent (GstObject *object); + +xmlNodePtr gst_object_save_thyself (GstObject *object, xmlNodePtr parent); /* refcounting */ -#define gst_object_ref(object) gtk_object_ref(GTK_OBJECT(object)); -#define gst_object_unref(object) gtk_object_unref(GTK_OBJECT(object)); -#define gst_object_sink(object) gtk_object_sink(GTK_OBJECT(object)); +#define gst_object_ref(object) gtk_object_ref(GTK_OBJECT(object)); +#define gst_object_unref(object) gtk_object_unref(GTK_OBJECT(object)); +#define gst_object_sink(object) gtk_object_sink(GTK_OBJECT(object)); /* destroying an object */ -#define gst_object_destroy(object) gtk_object_destroy(GTK_OBJECT(object)) +#define gst_object_destroy(object) gtk_object_destroy(GTK_OBJECT(object)) /* printing out the 'path' of the object */ gchar * gst_object_get_path_string (GstObject *object); @@ -122,5 +139,5 @@ gchar * gst_object_get_path_string (GstObject *object); #endif /* __cplusplus */ -#endif /* __GST_OBJECT_H__ */ +#endif /* __GST_OBJECT_H__ */ diff --git a/gst/gstpad.c b/gst/gstpad.c index 6adcff6..4bd07bd 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -26,11 +26,15 @@ #include "gstpad.h" #include "gstelement.h" #include "gsttype.h" +#include "gstbin.h" /***** Start with the base GstPad class *****/ -static void gst_pad_class_init (GstPadClass *klass); -static void gst_pad_init (GstPad *pad); +static void gst_pad_class_init (GstPadClass *klass); +static void gst_pad_init (GstPad *pad); + +static xmlNodePtr gst_pad_save_thyself (GstObject *object, xmlNodePtr parent); + static GstObject *pad_parent_class = NULL; @@ -63,9 +67,7 @@ gst_pad_class_init (GstPadClass *klass) static void gst_pad_init (GstPad *pad) { - pad->name = NULL; pad->element_private = NULL; - pad->parent = NULL; pad->padtemplate = NULL; } @@ -87,16 +89,16 @@ enum { /* FILL ME */ }; -static void gst_real_pad_class_init (GstRealPadClass *klass); -static void gst_real_pad_init (GstRealPad *pad); +static void gst_real_pad_class_init (GstRealPadClass *klass); +static void gst_real_pad_init (GstRealPad *pad); -static void gst_real_pad_set_arg (GtkObject *object,GtkArg *arg,guint id); -static void gst_real_pad_get_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_real_pad_set_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_real_pad_get_arg (GtkObject *object,GtkArg *arg,guint id); -static void gst_real_pad_destroy (GtkObject *object); +static void gst_real_pad_destroy (GtkObject *object); -static void gst_pad_push_func (GstPad *pad, GstBuffer *buf); -static gboolean gst_pad_eos_func (GstPad *pad); +static void gst_pad_push_func (GstPad *pad, GstBuffer *buf); +static gboolean gst_pad_eos_func (GstPad *pad); static GstPad *real_pad_parent_class = NULL; @@ -126,8 +128,10 @@ static void gst_real_pad_class_init (GstRealPadClass *klass) { GtkObjectClass *gtkobject_class; + GstObjectClass *gstobject_class; gtkobject_class = (GtkObjectClass*)klass; + gstobject_class = (GstObjectClass*)klass; real_pad_parent_class = gtk_type_class(GST_TYPE_PAD); @@ -149,6 +153,9 @@ gst_real_pad_class_init (GstRealPadClass *klass) gtkobject_class->destroy = gst_real_pad_destroy; gtkobject_class->set_arg = gst_real_pad_set_arg; gtkobject_class->get_arg = gst_real_pad_get_arg; + + gstobject_class->save_thyself = gst_pad_save_thyself; + gstobject_class->path_string_separator = "."; } static void @@ -228,7 +235,7 @@ gst_pad_new (gchar *name, g_return_val_if_fail (direction != GST_PAD_UNKNOWN, NULL); pad = gtk_type_new (gst_real_pad_get_type ()); - GST_PAD_NAME(pad) = g_strdup (name); + gst_object_set_name (GST_OBJECT (pad), name); GST_RPAD_DIRECTION(pad) = direction; return GST_PAD(pad); @@ -290,10 +297,7 @@ gst_pad_set_name (GstPad *pad, g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_PAD (pad)); - if (pad->name != NULL) - g_free (pad->name); - - pad->name = g_strdup (name); + gst_object_set_name (GST_OBJECT (pad), name); } /** @@ -310,7 +314,7 @@ gst_pad_get_name (GstPad *pad) g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL); - return GST_PAD_NAME(pad); + return GST_OBJECT_NAME (pad); } /** @@ -436,7 +440,7 @@ gst_pad_handle_qos(GstPad *pad, GList *pads; GstPad *target_pad; - GST_DEBUG (0,"gst_pad_handle_qos(\"%s\",%08ld)\n", GST_ELEMENT(pad->parent)->name,qos_message); + GST_DEBUG (0,"gst_pad_handle_qos(\"%s\",%08ld)\n", GST_OBJECT_NAME (GST_PAD_PARENT (pad)),qos_message); if (GST_RPAD_QOSFUNC(pad)) { (GST_RPAD_QOSFUNC(pad)) (pad,qos_message); @@ -444,7 +448,7 @@ gst_pad_handle_qos(GstPad *pad, element = GST_ELEMENT (GST_PAD_PARENT(GST_RPAD_PEER(pad))); pads = element->pads; - GST_DEBUG (0,"gst_pad_handle_qos recurse(\"%s\",%08ld)\n", element->name, qos_message); + GST_DEBUG (0,"gst_pad_handle_qos recurse(\"%s\",%08ld)\n", GST_ELEMENT_NAME (element), qos_message); while (pads) { target_pad = GST_PAD (pads->data); if (GST_RPAD_DIRECTION(target_pad) == GST_PAD_SINK) { @@ -560,18 +564,33 @@ gst_pad_connect (GstPad *srcpad, */ void gst_pad_set_parent (GstPad *pad, - GstObject *parent) + GstObject *parent) { g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_PAD (pad)); - g_return_if_fail (pad->parent == NULL); + g_return_if_fail (GST_PAD_PARENT (pad) == NULL); g_return_if_fail (parent != NULL); g_return_if_fail (GTK_IS_OBJECT (parent)); g_return_if_fail ((gpointer)pad != (gpointer)parent); - //g_print("set parent %s\n", gst_element_get_name(parent)); + gst_object_set_parent (GST_OBJECT (pad), parent); +} + +/** + * gst_pad_get_parent: + * @pad: the pad to get the parent from + * + * Get the parent object of this pad. + * + * Returns: the parent object + */ +GstObject* +gst_pad_get_parent (GstPad *pad) +{ + g_return_val_if_fail (pad != NULL, NULL); + g_return_val_if_fail (GST_IS_PAD (pad), NULL); - GST_PAD_PARENT(pad) = parent; + return GST_OBJECT_PARENT (pad); } /** @@ -622,23 +641,6 @@ gst_pad_remove_ghost_pad (GstPad *pad, } /** - * gst_pad_get_parent: - * @pad: the pad to get the parent from - * - * Get the parent object of this pad. - * - * Returns: the parent object - */ -GstObject* -gst_pad_get_parent (GstPad *pad) -{ - g_return_val_if_fail (pad != NULL, NULL); - g_return_val_if_fail (GST_IS_PAD (pad), NULL); - - return GST_PAD_PARENT(pad); -} - -/** * gst_pad_get_ghost_pad_list: * @pad: the pad to get the ghost parents from * @@ -783,62 +785,65 @@ gst_real_pad_destroy (GtkObject *object) // g_print("in gst_pad_real_destroy()\n"); - if (pad->name) - g_free (pad->name); g_list_free (GST_REAL_PAD(pad)->ghostpads); } /** * gst_pad_load_and_connect: - * @parent: the parent XML node to read the description from - * @element: the element that has the source pad - * @elements: a hashtable with elements + * @self: the XML node to read the description from + * @parent: the element that has the pad * * Read the pad definition from the XML node and connect the given pad - * in element to a pad of an element in the hashtable. + * in element to a pad of an element up in the hierarchy. */ void -gst_pad_load_and_connect (xmlNodePtr parent, - GstObject *element, - GHashTable *elements) +gst_pad_load_and_connect (xmlNodePtr self, + GstObject *parent) { - xmlNodePtr field = parent->childs; + xmlNodePtr field = self->childs; GstPad *pad = NULL, *targetpad; guchar *peer = NULL; gchar **split; GstElement *target; + GstObject *grandparent; while (field) { - if (!strcmp(field->name, "name")) { - pad = gst_element_get_pad(GST_ELEMENT(element), xmlNodeGetContent(field)); + if (!strcmp (field->name, "name")) { + pad = gst_element_get_pad (GST_ELEMENT (parent), xmlNodeGetContent (field)); } else if (!strcmp(field->name, "peer")) { - peer = g_strdup(xmlNodeGetContent(field)); + peer = g_strdup (xmlNodeGetContent (field)); } field = field->next; } - g_return_if_fail(pad != NULL); + g_return_if_fail (pad != NULL); if (peer == NULL) return; - split = g_strsplit(peer, ".", 2); + split = g_strsplit (peer, ".", 2); - g_return_if_fail(split[0] != NULL); - g_return_if_fail(split[1] != NULL); + g_return_if_fail (split[0] != NULL); + g_return_if_fail (split[1] != NULL); - target = (GstElement *)g_hash_table_lookup(elements, split[0]); + grandparent = gst_object_get_parent (parent); + + if (grandparent && GST_IS_BIN (grandparent)) { + target = gst_bin_get_by_name_recurse_up (GST_BIN (grandparent), split[0]); + } + else + goto cleanup; if (target == NULL) goto cleanup; - targetpad = gst_element_get_pad(target, split[1]); + targetpad = gst_element_get_pad (target, split[1]); if (targetpad == NULL) goto cleanup; - gst_pad_connect(pad, targetpad); + gst_pad_connect (pad, targetpad); cleanup: - g_strfreev(split); + g_strfreev (split); } @@ -851,25 +856,24 @@ cleanup: * * Returns: the xml representation of the pad */ -xmlNodePtr -gst_pad_save_thyself (GstPad *pad, +static xmlNodePtr +gst_pad_save_thyself (GstObject *object, xmlNodePtr parent) { GstRealPad *realpad; GstPad *peer; - g_return_val_if_fail (GST_IS_REAL_PAD (pad), NULL); + g_return_val_if_fail (GST_IS_REAL_PAD (object), NULL); - realpad = GST_REAL_PAD(pad); + realpad = GST_REAL_PAD(object); - xmlNewChild(parent,NULL,"name",pad->name); + xmlNewChild(parent,NULL,"name", GST_PAD_NAME (realpad)); if (GST_RPAD_PEER(realpad) != NULL) { peer = GST_PAD(GST_RPAD_PEER(realpad)); // first check to see if the peer's parent's parent is the same - //if (pad->parent->parent == peer->parent->parent) - // we just save it off - xmlNewChild(parent,NULL,"peer",g_strdup_printf("%s.%s", - GST_ELEMENT(peer->parent)->name,peer->name)); + // we just save it off + xmlNewChild(parent,NULL,"peer",g_strdup_printf("%s.%s", + GST_OBJECT_NAME (GST_PAD_PARENT (peer)), GST_PAD_NAME (peer))); } else xmlNewChild(parent,NULL,"peer",""); @@ -896,8 +900,8 @@ gst_pad_ghost_save_thyself (GstPad *pad, g_return_val_if_fail (GST_IS_GHOST_PAD (pad), NULL); self = xmlNewChild(parent,NULL,"ghostpad",NULL); - xmlNewChild(self,NULL,"name",pad->name); - xmlNewChild(self,NULL,"parent",GST_ELEMENT(pad->parent)->name); + xmlNewChild(self,NULL,"name", GST_PAD_NAME (pad)); + xmlNewChild(self,NULL,"parent", GST_OBJECT_NAME (GST_PAD_PARENT (pad))); // FIXME FIXME FIXME! @@ -1137,7 +1141,7 @@ gst_pad_eos_func(GstPad *pad) GST_INFO (GST_CAT_PADS,"attempting to set EOS on sink pad %s:%s",GST_DEBUG_PAD_NAME(pad)); - element = GST_ELEMENT(gst_pad_get_parent (pad)); + element = GST_ELEMENT (gst_object_get_parent (GST_OBJECT (pad))); // g_return_val_if_fail (element != NULL, FALSE); // g_return_val_if_fail (GST_IS_ELEMENT(element), FALSE); @@ -1184,7 +1188,7 @@ gst_pad_set_eos(GstPad *pad) GST_INFO (GST_CAT_PADS,"set EOS on src pad %s:%s",GST_DEBUG_PAD_NAME(pad)); GST_FLAG_SET (pad, GST_PAD_EOS); - gst_element_signal_eos (GST_ELEMENT (pad->parent)); + gst_element_signal_eos (GST_ELEMENT (GST_PAD_PARENT (pad))); return TRUE; } @@ -1307,7 +1311,7 @@ gst_ghost_pad_new (gchar *name, g_return_val_if_fail (GST_IS_PAD(pad), NULL); ghostpad = gtk_type_new (gst_ghost_pad_get_type ()); - GST_PAD_NAME(ghostpad) = g_strdup (name); + gst_pad_set_name (GST_PAD (ghostpad), name); GST_GPAD_REALPAD(ghostpad) = GST_PAD_REALIZE(pad); // add ourselves to the real pad's list of ghostpads diff --git a/gst/gstpad.h b/gst/gstpad.h index 2b85660..826ea65 100644 --- a/gst/gstpad.h +++ b/gst/gstpad.h @@ -96,9 +96,7 @@ typedef enum { struct _GstPad { GstObject object; - gchar *name; gpointer element_private; - GstObject *parent; GstPadTemplate *padtemplate; /* the template for this pad */ }; @@ -154,9 +152,9 @@ struct _GstGhostPadClass { /***** helper macros *****/ /* GstPad */ -#define GST_PAD_NAME(pad) (((GstPad *)(pad))->name) +#define GST_PAD_NAME(pad) (GST_OBJECT_NAME(pad)) +#define GST_PAD_PARENT(pad) (GST_OBJECT_PARENT(pad)) #define GST_PAD_ELEMENT_PRIVATE(pad) (((GstPad *)(pad))->element_private) -#define GST_PAD_PARENT(pad) (((GstPad *)(pad))->parent) #define GST_PAD_PADTEMPLATE(pad) (((GstPad *)(pad))->padtemplate) /* GstRealPad */ @@ -236,41 +234,42 @@ GtkType gst_real_pad_get_type (void); GtkType gst_ghost_pad_get_type (void); GstPad* gst_pad_new (gchar *name, GstPadDirection direction); -#define gst_pad_destroy(pad) gst_object_destroy (GST_OBJECT (pad)) +#define gst_pad_destroy(pad) gst_object_destroy (GST_OBJECT (pad)) GstPad* gst_pad_new_from_template (GstPadTemplate *templ, gchar *name); -GstPadDirection gst_pad_get_direction (GstPad *pad); +GstPadDirection gst_pad_get_direction (GstPad *pad); -void gst_pad_set_chain_function (GstPad *pad, GstPadChainFunction chain); -void gst_pad_set_get_function (GstPad *pad, GstPadGetFunction get); +void gst_pad_set_chain_function (GstPad *pad, GstPadChainFunction chain); +void gst_pad_set_get_function (GstPad *pad, GstPadGetFunction get); void gst_pad_set_getregion_function (GstPad *pad, GstPadGetRegionFunction getregion); -void gst_pad_set_qos_function (GstPad *pad, GstPadQoSFunction qos); +void gst_pad_set_qos_function (GstPad *pad, GstPadQoSFunction qos); void gst_pad_set_eos_function (GstPad *pad, GstPadEOSFunction eos); -void gst_pad_set_caps_list (GstPad *pad, GList *caps); -GList* gst_pad_get_caps_list (GstPad *pad); -GstCaps* gst_pad_get_caps_by_name (GstPad *pad, gchar *name); -gboolean gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad); - -void gst_pad_set_name (GstPad *pad, const gchar *name); -const gchar* gst_pad_get_name (GstPad *pad); +void gst_pad_set_caps_list (GstPad *pad, GList *caps); +GList* gst_pad_get_caps_list (GstPad *pad); +GstCaps* gst_pad_get_caps_by_name (GstPad *pad, gchar *name); +gboolean gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad); void gst_pad_set_element_private (GstPad *pad, gpointer priv); gpointer gst_pad_get_element_private (GstPad *pad); -void gst_pad_set_parent (GstPad *pad, GstObject *parent); +void gst_pad_set_name (GstPad *pad, const gchar *name); +const gchar* gst_pad_get_name (GstPad *pad); + +void gst_pad_set_parent (GstPad *pad, GstObject *parent); GstObject* gst_pad_get_parent (GstPad *pad); -void gst_pad_add_ghost_pad (GstPad *pad, GstPad *ghostpad); -void gst_pad_remove_ghost_pad (GstPad *pad, GstPad *ghostpad); + +void gst_pad_add_ghost_pad (GstPad *pad, GstPad *ghostpad); +void gst_pad_remove_ghost_pad (GstPad *pad, GstPad *ghostpad); GList* gst_pad_get_ghost_pad_list (GstPad *pad); GstPad* gst_pad_get_peer (GstPad *pad); -void gst_pad_connect (GstPad *srcpad, GstPad *sinkpad); -void gst_pad_disconnect (GstPad *srcpad, GstPad *sinkpad); +void gst_pad_connect (GstPad *srcpad, GstPad *sinkpad); +void gst_pad_disconnect (GstPad *srcpad, GstPad *sinkpad); #if 1 -void gst_pad_push (GstPad *pad, GstBuffer *buffer); +void gst_pad_push (GstPad *pad, GstBuffer *buffer); #else #define gst_pad_push(pad,buf) G_STMT_START{ \ if ((pad)->peer->pushfunc) ((pad)->peer->pushfunc)((pad)->peer,(buf)); \ @@ -291,10 +290,9 @@ GstPad * gst_pad_select (GstPad *nextpad, ...); #define gst_pad_eos(pad) (GST_RPAD_EOSFUNC(GST_RPAD_PEER(pad))(GST_PAD(GST_RPAD_PEER(pad)))) gboolean gst_pad_set_eos (GstPad *pad); -void gst_pad_handle_qos (GstPad *pad, glong qos_message); +void gst_pad_handle_qos (GstPad *pad, glong qos_message); -xmlNodePtr gst_pad_save_thyself (GstPad *pad, xmlNodePtr parent); -void gst_pad_load_and_connect (xmlNodePtr parent, GstObject *element, GHashTable *elements); +void gst_pad_load_and_connect (xmlNodePtr self, GstObject *parent); /* ghostpads */ @@ -303,14 +301,14 @@ GstPad * gst_ghost_pad_new (gchar *name,GstPad *pad); /* templates and factories */ -GtkType gst_padtemplate_get_type (void); +GtkType gst_padtemplate_get_type (void); GstPadTemplate* gst_padtemplate_new (GstPadFactory *factory); -GstPadTemplate* gst_padtemplate_create (gchar *name_template, +GstPadTemplate* gst_padtemplate_create (gchar *name_template, GstPadDirection direction, GstPadPresence presence, GList *caps); -xmlNodePtr gst_padtemplate_save_thyself (GstPadTemplate *templ, xmlNodePtr parent); +xmlNodePtr gst_padtemplate_save_thyself (GstPadTemplate *templ, xmlNodePtr parent); GstPadTemplate* gst_padtemplate_load_thyself (xmlNodePtr parent); #ifdef __cplusplus @@ -318,5 +316,5 @@ GstPadTemplate* gst_padtemplate_load_thyself (xmlNodePtr parent); #endif /* __cplusplus */ -#endif /* __GST_PAD_H__ */ +#endif /* __GST_PAD_H__ */ diff --git a/gst/gstparse.c b/gst/gstparse.c index 2b7f028..11c51a2 100644 --- a/gst/gstparse.c +++ b/gst/gstparse.c @@ -28,6 +28,8 @@ #include "gst_private.h" #include "gstparse.h" +#include "gstpipeline.h" +#include "gstthread.h" typedef struct _gst_parse_priv gst_parse_priv; struct _gst_parse_priv { @@ -51,10 +53,10 @@ gst_parse_newpad(GstElement *element,GstPad *pad,launch_delayed_pad *peer) { gst_info("have NEW_PAD signal\n"); // if it matches, connect it - if (!strcmp(gst_pad_get_name(pad),peer->name)) { + if (!strcmp(GST_PAD_NAME(pad),peer->name)) { gst_pad_connect(pad,peer->peer); gst_info("delayed connect of '%s' to '%s'\n", - gst_pad_get_name(pad),gst_pad_get_name(peer->peer)); + GST_PAD_NAME(pad),GST_PAD_NAME(peer->peer)); } } */ @@ -93,7 +95,7 @@ gst_parse_launch_cmdline(int argc,char *argv[],GstBin *parent,gst_parse_priv *pr if (GST_IS_PIPELINE(parent)) { closingchar = '\0';DEBUG("in pipeline "); } else if (GST_IS_THREAD(parent)) { closingchar = '}';DEBUG("in thread "); } else { closingchar = ')';DEBUG("in bin "); } - DEBUG_NOPREFIX("%s\n",gst_element_get_name (GST_ELEMENT (parent))); + DEBUG_NOPREFIX("%s\n",GST_ELEMENT_NAME (GST_ELEMENT (parent))); while (i < argc) { arg = argv[i]; @@ -112,7 +114,7 @@ gst_parse_launch_cmdline(int argc,char *argv[],GstBin *parent,gst_parse_priv *pr // end of the container } else if (arg[0] == closingchar) { // time to finish off this bin - DEBUG("exiting container %s\n",gst_element_get_name (GST_ELEMENT (parent))); + DEBUG("exiting container %s\n",GST_ELEMENT_NAME (GST_ELEMENT (parent))); retval = i+1; break; @@ -146,12 +148,12 @@ gst_parse_launch_cmdline(int argc,char *argv[],GstBin *parent,gst_parse_priv *pr if (srcpadname != NULL) { srcpad = gst_element_get_pad(previous,srcpadname); if (!srcpad) - GST_DEBUG(0,"NO SUCH pad %s in element %s\n",srcpadname,gst_element_get_name(previous)); + GST_DEBUG(0,"NO SUCH pad %s in element %s\n",srcpadname,GST_ELEMENT_NAME(previous)); } if (srcpad == NULL) { // check through the list to find the first sink pad - GST_DEBUG(0,"CHECKING through element %s for pad named %s\n",gst_element_get_name(previous),srcpadname); + GST_DEBUG(0,"CHECKING through element %s for pad named %s\n",GST_ELEMENT_NAME(previous),srcpadname); pads = gst_element_get_pad_list(previous); while (pads) { srcpad = GST_PAD(pads->data); @@ -177,7 +179,7 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n"); pos[0] = '\0'; argval = pos+1; DEBUG("attempting to set argument '%s' to '%s' on element '%s'\n", - argname,argval,gst_element_get_name(previous)); + argname,argval,GST_ELEMENT_NAME(previous)); gtk_object_set(GTK_OBJECT(previous),argname,argval,NULL); g_free(argname); @@ -193,7 +195,7 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n"); fprintf(stderr,"Couldn't create a bin!\n"); // exit(-1); } - GST_DEBUG(0,"CREATED bin %s\n",gst_element_get_name(element)); + GST_DEBUG(0,"CREATED bin %s\n",GST_ELEMENT_NAME(element)); } else if (arg[0] == '{') { // create a thread and add it to the current parent element = gst_thread_new(g_strdup_printf("thread%d",priv->threadcount++)); @@ -201,7 +203,7 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n"); fprintf(stderr,"Couldn't create a thread!\n"); // exit(-1); } - GST_DEBUG(0,"CREATED thread %s\n",gst_element_get_name(element)); + GST_DEBUG(0,"CREATED thread %s\n",GST_ELEMENT_NAME(element)); } i += gst_parse_launch_cmdline(argc - i, argv + i + 1, GST_BIN (element), priv); @@ -216,7 +218,7 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n"); fprintf(stderr,"Couldn't create a '%s', no such element or need to run gstraemer-register?\n",arg); // exit(-1); } - GST_DEBUG(0,"CREATED element %s\n",gst_element_get_name(element)); + GST_DEBUG(0,"CREATED element %s\n",GST_ELEMENT_NAME(element)); } gst_bin_add (GST_BIN (parent), element); @@ -254,7 +256,7 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n"); // if we're the first element, ghost all the sinkpads if (elementcount == 1) { DEBUG("first element, ghosting all of %s's sink pads to parent %s\n", - gst_element_get_name(element),gst_element_get_name(GST_ELEMENT(parent))); + GST_ELEMENT_NAME(element),GST_ELEMENT_NAME(GST_ELEMENT(parent))); pads = gst_element_get_pad_list (element); while (pads) { sinkpad = GST_PAD (pads->data); @@ -262,9 +264,9 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n"); if (!sinkpad) DEBUG("much oddness, pad doesn't seem to exist\n"); else if (gst_pad_get_direction (sinkpad) == GST_PAD_SINK) { gst_element_add_ghost_pad (GST_ELEMENT (parent), sinkpad, -g_strdup_printf("%s-ghost",gst_pad_get_name(sinkpad))); +g_strdup_printf("%s-ghost",GST_PAD_NAME(sinkpad))); GST_DEBUG(0,"GHOSTED %s:%s to %s as %s-ghost\n", - GST_DEBUG_PAD_NAME(sinkpad),gst_element_get_name(GST_ELEMENT(parent)),gst_pad_get_name(sinkpad)); + GST_DEBUG_PAD_NAME(sinkpad),GST_ELEMENT_NAME(GST_ELEMENT(parent)),GST_PAD_NAME(sinkpad)); } } } @@ -279,7 +281,7 @@ g_strdup_printf("%s-ghost",gst_pad_get_name(sinkpad))); // ghost all the src pads of the bin if (prevelement != NULL) { DEBUG("last element, ghosting all of %s's src pads to parent %s\n", - gst_element_get_name(prevelement),gst_element_get_name(GST_ELEMENT(parent))); + GST_ELEMENT_NAME(prevelement),GST_ELEMENT_NAME(GST_ELEMENT(parent))); pads = gst_element_get_pad_list (prevelement); while (pads) { srcpad = GST_PAD (pads->data); @@ -287,9 +289,9 @@ g_strdup_printf("%s-ghost",gst_pad_get_name(sinkpad))); if (!srcpad) DEBUG("much oddness, pad doesn't seem to exist\n"); else if (gst_pad_get_direction (srcpad) == GST_PAD_SRC) { gst_element_add_ghost_pad (GST_ELEMENT (parent), srcpad, -g_strdup_printf("%s-ghost",gst_pad_get_name(srcpad))); +g_strdup_printf("%s-ghost",GST_PAD_NAME(srcpad))); GST_DEBUG(0,"GHOSTED %s:%s to %s as %s-ghost\n", -GST_DEBUG_PAD_NAME(srcpad),gst_element_get_name(GST_ELEMENT(parent)),gst_pad_get_name(srcpad)); +GST_DEBUG_PAD_NAME(srcpad),GST_ELEMENT_NAME (parent),GST_PAD_NAME(srcpad)); } } } diff --git a/gst/gstparse.h b/gst/gstparse.h index 5e09f6d..ff77704 100644 --- a/gst/gstparse.h +++ b/gst/gstparse.h @@ -23,8 +23,8 @@ #ifndef __GST_PARSE_H__ #define __GST_PARSE_H__ -#include "gst.h" +#include -gint gst_parse_launch(const gchar *cmdline,GstBin *parent); +gint gst_parse_launch (const gchar *cmdline, GstBin *parent); -#endif __GST_PARSE_H__ +#endif /* __GST_PARSE_H__ */ diff --git a/gst/gstpipeline.c b/gst/gstpipeline.c index 213e706..139db8a 100644 --- a/gst/gstpipeline.c +++ b/gst/gstpipeline.c @@ -125,7 +125,7 @@ static void gst_pipeline_prepare (GstPipeline *pipeline) { GST_DEBUG (0,"GstPipeline: preparing pipeline \"%s\" for playing\n", - gst_element_get_name(GST_ELEMENT(pipeline))); + GST_ELEMENT_NAME(GST_ELEMENT(pipeline))); } static void @@ -144,7 +144,7 @@ gst_pipeline_typefind (GstPipeline *pipeline, GstElement *element) GstCaps *caps = NULL; GST_DEBUG (0,"GstPipeline: typefind for element \"%s\" %p\n", - gst_element_get_name(element), &found); + GST_ELEMENT_NAME(element), &found); typefind = gst_elementfactory_make ("typefind", "typefind"); g_return_val_if_fail (typefind != NULL, FALSE); @@ -189,27 +189,27 @@ gst_pipeline_pads_autoplug_func (GstElement *src, GstPad *pad, GstElement *sink) gboolean connected = FALSE; GST_DEBUG (0,"gstpipeline: autoplug pad connect function for \"%s\" to \"%s\"\n", - gst_element_get_name(src), gst_element_get_name(sink)); + GST_ELEMENT_NAME(src), GST_ELEMENT_NAME(sink)); sinkpads = gst_element_get_pad_list(sink); while (sinkpads) { GstPad *sinkpad = (GstPad *)sinkpads->data; // if we have a match, connect the pads - if (gst_pad_get_direction(sinkpad) == GST_PAD_SINK && - !GST_PAD_CONNECTED(sinkpad)) + if (gst_pad_get_direction(sinkpad) == GST_PAD_SINK && + !GST_PAD_CONNECTED(sinkpad)) { if (gst_caps_list_check_compatibility (gst_pad_get_caps_list(pad), gst_pad_get_caps_list(sinkpad))) { gst_pad_connect(pad, sinkpad); - GST_DEBUG (0,"gstpipeline: autoconnect pad \"%s\" in element %s <-> ", pad->name, - gst_element_get_name(src)); - GST_DEBUG (0,"pad \"%s\" in element %s\n", sinkpad->name, - gst_element_get_name(sink)); + GST_DEBUG (0,"gstpipeline: autoconnect pad \"%s\" in element %s <-> ", GST_PAD_NAME (pad), + GST_ELEMENT_NAME(src)); + GST_DEBUG (0,"pad \"%s\" in element %s\n", GST_PAD_NAME (sinkpad), + GST_ELEMENT_NAME(sink)); connected = TRUE; break; } else { - GST_DEBUG (0,"pads incompatible %s, %s\n", gst_pad_get_name (pad), gst_pad_get_name (sinkpad)); + GST_DEBUG (0,"pads incompatible %s, %s\n", GST_PAD_NAME (pad), GST_PAD_NAME (sinkpad)); } } sinkpads = g_list_next(sinkpads); @@ -240,7 +240,7 @@ gst_pipeline_pads_autoplug (GstElement *src, GstElement *sink) if (!connected) { GST_DEBUG (0,"gstpipeline: delaying pad connections for \"%s\" to \"%s\"\n", - gst_element_get_name(src), gst_element_get_name(sink)); + GST_ELEMENT_NAME(src), GST_ELEMENT_NAME(sink)); gtk_signal_connect(GTK_OBJECT(src),"new_pad", GTK_SIGNAL_FUNC(gst_pipeline_pads_autoplug_func), sink); } @@ -266,7 +266,7 @@ gst_pipeline_add_src (GstPipeline *pipeline, GstElement *src) if (pipeline->src) { printf("gstpipeline: *WARNING* removing previously added element \"%s\"\n", - gst_element_get_name(pipeline->src)); + GST_ELEMENT_NAME(pipeline->src)); gst_bin_remove(GST_BIN(pipeline), pipeline->src); } pipeline->src = src; @@ -319,27 +319,27 @@ gst_pipeline_autoplug (GstPipeline *pipeline) g_return_val_if_fail(GST_IS_PIPELINE(pipeline), FALSE); GST_DEBUG (0,"GstPipeline: autopluging pipeline \"%s\"\n", - gst_element_get_name(GST_ELEMENT(pipeline))); + GST_ELEMENT_NAME(GST_ELEMENT(pipeline))); // fase 1, run typedetect on the source if needed... if (!pipeline->src) { GST_DEBUG (0,"GstPipeline: no source detected, can't autoplug pipeline \"%s\"\n", - gst_element_get_name(GST_ELEMENT(pipeline))); + GST_ELEMENT_NAME(GST_ELEMENT(pipeline))); return FALSE; } GST_DEBUG (0,"GstPipeline: source \"%s\" has no MIME type, running typefind...\n", - gst_element_get_name(pipeline->src)); + GST_ELEMENT_NAME(pipeline->src)); src_caps = gst_pipeline_typefind(pipeline, pipeline->src); if (src_caps) { - GST_DEBUG (0,"GstPipeline: source \"%s\" type found %d\n", gst_element_get_name(pipeline->src), + GST_DEBUG (0,"GstPipeline: source \"%s\" type found %d\n", GST_ELEMENT_NAME(pipeline->src), src_caps->id); } else { - GST_DEBUG (0,"GstPipeline: source \"%s\" has no type\n", gst_element_get_name(pipeline->src)); + GST_DEBUG (0,"GstPipeline: source \"%s\" has no type\n", GST_ELEMENT_NAME(pipeline->src)); return FALSE; } @@ -440,15 +440,15 @@ differ: use_thread = FALSE; - GST_DEBUG (0,"sugest new thread for \"%s\" %08x\n", element->name, GST_FLAGS(element)); + GST_DEBUG (0,"sugest new thread for \"%s\" %08x\n", GST_ELEMENT_NAME (element), GST_FLAGS(element)); // create a new queue and add to the previous bin - queue = gst_elementfactory_make("queue", g_strconcat("queue_", gst_element_get_name(element), NULL)); - GST_DEBUG (0,"adding element \"%s\"\n", element->name); + queue = gst_elementfactory_make("queue", g_strconcat("queue_", GST_ELEMENT_NAME(element), NULL)); + GST_DEBUG (0,"adding element \"%s\"\n", GST_ELEMENT_NAME (element)); gst_bin_add(GST_BIN(thebin), queue); // this will be the new bin for all following elements - thebin = gst_elementfactory_make("thread", g_strconcat("thread_", gst_element_get_name(element), NULL)); + thebin = gst_elementfactory_make("thread", g_strconcat("thread_", GST_ELEMENT_NAME(element), NULL)); srcpad = gst_element_get_pad(queue, "src"); @@ -470,15 +470,15 @@ differ: } gst_pipeline_pads_autoplug(thesrcelement, queue); - GST_DEBUG (0,"adding element %s\n", gst_element_get_name (element)); + GST_DEBUG (0,"adding element %s\n", GST_ELEMENT_NAME (element)); gst_bin_add(GST_BIN(thebin), element); - GST_DEBUG (0,"adding element %s\n", gst_element_get_name (thebin)); + GST_DEBUG (0,"adding element %s\n", GST_ELEMENT_NAME (thebin)); gst_bin_add(GST_BIN(pipeline), thebin); thesrcelement = queue; } // no thread needed, easy case else { - GST_DEBUG (0,"adding element %s\n", gst_element_get_name (element)); + GST_DEBUG (0,"adding element %s\n", GST_ELEMENT_NAME (element)); gst_bin_add(GST_BIN(thebin), element); } gst_pipeline_pads_autoplug(thesrcelement, element); @@ -493,7 +493,7 @@ next: return TRUE; GST_DEBUG (0,"GstPipeline: unable to autoplug pipeline \"%s\"\n", - gst_element_get_name(GST_ELEMENT(pipeline))); + GST_ELEMENT_NAME(GST_ELEMENT(pipeline))); return FALSE; } diff --git a/gst/gstplugin.c b/gst/gstplugin.c index 41c45ad..f6a5d73 100644 --- a/gst/gstplugin.c +++ b/gst/gstplugin.c @@ -54,8 +54,8 @@ gboolean _gst_warn_old_registry = TRUE; static gboolean plugin_times_older_than(time_t regtime); static time_t get_time(const char * path); -void -_gst_plugin_initialize (void) +void +_gst_plugin_initialize (void) { xmlDocPtr doc; _gst_modules = NULL; @@ -123,7 +123,7 @@ plugin_times_older_than_recurse(gchar *path, time_t regtime) path, (long)pathtime, (long)regtime); return FALSE; } - + dir = opendir(path); if (dir) { while ((dirent = readdir(dir))) { @@ -161,8 +161,8 @@ plugin_times_older_than(time_t regtime) return TRUE; } -static gboolean -gst_plugin_load_recurse (gchar *directory, gchar *name) +static gboolean +gst_plugin_load_recurse (gchar *directory, gchar *name) { DIR *dir; struct dirent *dirent; @@ -189,7 +189,7 @@ gst_plugin_load_recurse (gchar *directory, gchar *name) if (strstr(directory,".so")) { gchar *temp; if (name) { - if ((temp = strstr(directory,name)) && + if ((temp = strstr(directory,name)) && (!strcmp(temp,name))) { loaded = gst_plugin_load_absolute(directory); } @@ -207,8 +207,8 @@ gst_plugin_load_recurse (gchar *directory, gchar *name) * * Load all plugins in the path. */ -void -gst_plugin_load_all(void) +void +gst_plugin_load_all(void) { GList *path; @@ -231,8 +231,8 @@ gst_plugin_load_all(void) * * Returns: whether the library was loaded or not */ -gboolean -gst_library_load (const gchar *name) +gboolean +gst_library_load (const gchar *name) { gboolean res; GList *libraries = _gst_libraries; @@ -242,7 +242,7 @@ gst_library_load (const gchar *name) libraries = g_list_next(libraries); } - + // for now this is the same res = gst_plugin_load(name); @@ -253,8 +253,8 @@ gst_library_load (const gchar *name) return res; } -static void -gst_plugin_remove (GstPlugin *plugin) +static void +gst_plugin_remove (GstPlugin *plugin) { GList *factories; @@ -263,7 +263,7 @@ gst_plugin_remove (GstPlugin *plugin) gst_elementfactory_destroy ((GstElementFactory*)(factories->data)); factories = g_list_next(factories); } - + _gst_plugins = g_list_remove(_gst_plugins, plugin); // don't free the stuct because someone can have a handle to it @@ -278,8 +278,8 @@ gst_plugin_remove (GstPlugin *plugin) * * Returns: whether the plugin was loaded or not */ -gboolean -gst_plugin_load (const gchar *name) +gboolean +gst_plugin_load (const gchar *name) { GList *path; gchar *libspath; @@ -327,8 +327,8 @@ gst_plugin_load (const gchar *name) * * Returns: whether or not the plugin loaded */ -gboolean -gst_plugin_load_absolute (const gchar *name) +gboolean +gst_plugin_load_absolute (const gchar *name) { GModule *module; GstPluginInitFunc initfunc; @@ -379,7 +379,7 @@ gst_plugin_load_absolute (const gchar *name) * Returns: new plugin */ GstPlugin* -gst_plugin_new (const gchar *name) +gst_plugin_new (const gchar *name) { GstPlugin *plugin; @@ -441,12 +441,12 @@ gst_plugin_set_name (GstPlugin *plugin, const gchar *name) * * Sets the long name (should be descriptive) of the plugin. */ -void -gst_plugin_set_longname (GstPlugin *plugin, const gchar *longname) +void +gst_plugin_set_longname (GstPlugin *plugin, const gchar *longname) { g_return_if_fail(plugin != NULL); - if (plugin->longname) + if (plugin->longname) g_free(plugin->longname); plugin->longname = g_strdup(longname); @@ -510,7 +510,7 @@ gst_plugin_is_loaded (GstPlugin *plugin) * Returns: pointer to the #GstPlugin if found, NULL otherwise */ GstPlugin* -gst_plugin_find (const gchar *name) +gst_plugin_find (const gchar *name) { GList *plugins = _gst_plugins; @@ -529,7 +529,7 @@ gst_plugin_find (const gchar *name) return NULL; } -/** +/** * gst_plugin_find_elementfactory: * @name: name of elementfactory to find * @@ -538,7 +538,7 @@ gst_plugin_find (const gchar *name) * Returns: @GstElementFactory if found, NULL if not */ GstElementFactory* -gst_plugin_find_elementfactory (const gchar *name) +gst_plugin_find_elementfactory (const gchar *name) { GList *plugins, *factories; GstElementFactory *factory; @@ -560,7 +560,7 @@ gst_plugin_find_elementfactory (const gchar *name) return NULL; } -/** +/** * gst_plugin_load_elementfactory: * @name: name of elementfactory to load * @@ -569,7 +569,7 @@ gst_plugin_find_elementfactory (const gchar *name) * Returns: @GstElementFactory if loaded, NULL if not */ GstElementFactory* -gst_plugin_load_elementfactory (const gchar *name) +gst_plugin_load_elementfactory (const gchar *name) { GList *plugins, *factories; GstElementFactory *factory = NULL; @@ -581,15 +581,15 @@ gst_plugin_load_elementfactory (const gchar *name) while (plugins) { plugin = (GstPlugin *)plugins->data; factories = plugin->elements; - + while (factories) { factory = (GstElementFactory*)(factories->data); - + if (!strcmp(factory->name,name)) { if (!plugin->loaded) { gchar *filename = g_strdup (plugin->filename); gchar *pluginname = g_strdup (plugin->name); - + GST_INFO (GST_CAT_PLUGIN_LOADING,"loaded elementfactory %s from plugin %s",name,plugin->name); gst_plugin_remove(plugin); if (!gst_plugin_load_absolute(filename)) { @@ -609,14 +609,14 @@ gst_plugin_load_elementfactory (const gchar *name) return factory; } -/** +/** * gst_plugin_load_typefactory: * @mime: name of typefactory to load * * Load a registered typefactory by mime type. */ -void -gst_plugin_load_typefactory (const gchar *mime) +void +gst_plugin_load_typefactory (const gchar *mime) { GList *plugins, *factories; GstTypeFactory *factory; @@ -628,15 +628,15 @@ gst_plugin_load_typefactory (const gchar *mime) while (plugins) { plugin = (GstPlugin *)plugins->data; factories = g_list_copy (plugin->types); - + while (factories) { factory = (GstTypeFactory*)(factories->data); - + if (!strcmp(factory->mime,mime)) { if (!plugin->loaded) { gchar *filename = g_strdup (plugin->filename); gchar *pluginname = g_strdup (plugin->name); - + GST_INFO (GST_CAT_PLUGIN_LOADING,"loading type factory for \"%s\" from plugin %s",mime,plugin->name); plugin->loaded = TRUE; gst_plugin_remove(plugin); @@ -666,8 +666,8 @@ gst_plugin_load_typefactory (const gchar *mime) * * Add factory to the list of those provided by the plugin. */ -void -gst_plugin_add_factory (GstPlugin *plugin, GstElementFactory *factory) +void +gst_plugin_add_factory (GstPlugin *plugin, GstElementFactory *factory) { g_return_if_fail (plugin != NULL); g_return_if_fail (factory != NULL); @@ -684,8 +684,8 @@ gst_plugin_add_factory (GstPlugin *plugin, GstElementFactory *factory) * * Add a typefactory to the list of those provided by the plugin. */ -void -gst_plugin_add_type (GstPlugin *plugin, GstTypeFactory *factory) +void +gst_plugin_add_type (GstPlugin *plugin, GstTypeFactory *factory) { g_return_if_fail (plugin != NULL); g_return_if_fail (factory != NULL); @@ -704,7 +704,7 @@ gst_plugin_add_type (GstPlugin *plugin, GstTypeFactory *factory) * Returns; a GList of GstPlugin elements */ GList* -gst_plugin_get_list(void) +gst_plugin_get_list(void) { return _gst_plugins; } @@ -717,8 +717,8 @@ gst_plugin_get_list(void) * * Returns: the new XML node */ -xmlNodePtr -gst_plugin_save_thyself (xmlNodePtr parent) +xmlNodePtr +gst_plugin_save_thyself (xmlNodePtr parent) { xmlNodePtr tree, subtree; GList *plugins = NULL, *elements = NULL, *types = NULL; @@ -733,7 +733,7 @@ gst_plugin_save_thyself (xmlNodePtr parent) types = plugin->types; while (types) { GstTypeFactory *factory = (GstTypeFactory *)types->data; - subtree = xmlNewChild(tree,NULL,"type",NULL); + subtree = xmlNewChild(tree,NULL,"typefactory",NULL); gst_typefactory_save_thyself(factory, subtree); @@ -742,7 +742,7 @@ gst_plugin_save_thyself (xmlNodePtr parent) elements = plugin->elements; while (elements) { GstElementFactory *factory = (GstElementFactory *)elements->data; - subtree = xmlNewChild(tree,NULL,"element",NULL); + subtree = xmlNewChild(tree,NULL,"elementfactory",NULL); gst_elementfactory_save_thyself(factory, subtree); @@ -759,14 +759,14 @@ gst_plugin_save_thyself (xmlNodePtr parent) * * load the plugin from an XML representation */ -void -gst_plugin_load_thyself (xmlNodePtr parent) +void +gst_plugin_load_thyself (xmlNodePtr parent) { - xmlNodePtr kinderen; + xmlNodePtr kinderen; gint elementcount = 0; gint typecount = 0; gchar *pluginname; - + kinderen = parent->xmlChildrenNode; // Dutch invasion :-) while (kinderen) { if (!strcmp(kinderen->name, "plugin")) { @@ -794,12 +794,12 @@ gst_plugin_load_thyself (xmlNodePtr parent) else if (!strcmp(field->name, "filename")) { plugin->filename = xmlNodeGetContent(field); } - else if (!strcmp(field->name, "element")) { + else if (!strcmp(field->name, "elementfactory")) { GstElementFactory *factory = gst_elementfactory_load_thyself(field); gst_plugin_add_factory (plugin, factory); elementcount++; } - else if (!strcmp(field->name, "type")) { + else if (!strcmp(field->name, "typefactory")) { GstTypeFactory *factory = gst_typefactory_load_thyself(field); gst_plugin_add_type (plugin, factory); elementcount++; diff --git a/gst/gstqueue.c b/gst/gstqueue.c index 1d3c4a4..ba91043 100644 --- a/gst/gstqueue.c +++ b/gst/gstqueue.c @@ -153,12 +153,12 @@ gst_queue_handle_eos (GstPad *pad) { GstQueue *queue; - queue = GST_QUEUE(pad->parent); + queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); - GST_DEBUG (0,"queue: %s received eos\n", gst_element_get_name (GST_ELEMENT (queue))); + GST_DEBUG (0,"queue: %s received eos\n", GST_ELEMENT_NAME (queue)); GST_LOCK (queue); - GST_DEBUG (0,"queue: %s has %d buffers left\n", gst_element_get_name (GST_ELEMENT (queue)), + GST_DEBUG (0,"queue: %s has %d buffers left\n", GST_ELEMENT_NAME (queue), queue->level_buffers); GST_FLAG_SET (pad, GST_PAD_EOS); @@ -182,7 +182,7 @@ static void gst_queue_flush (GstQueue *queue) { g_slist_foreach (queue->queue, gst_queue_cleanup_buffers, - (char *)gst_element_get_name (GST_ELEMENT (queue))); + (char *) GST_ELEMENT_NAME (queue)); g_slist_free (queue->queue); queue->queue = NULL; @@ -201,8 +201,8 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - queue = GST_QUEUE (pad->parent); - name = gst_element_get_name (GST_ELEMENT (queue)); + queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); + name = GST_ELEMENT_NAME (queue); /* we have to lock the queue since we span threads */ @@ -251,12 +251,12 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf) static GstBuffer * gst_queue_get (GstPad *pad) { - GstQueue *queue = GST_QUEUE (gst_pad_get_parent(pad)); + GstQueue *queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); GstBuffer *buf = NULL; GSList *front; const guchar *name; - name = gst_element_get_name (GST_ELEMENT (queue)); + name = GST_ELEMENT_NAME (queue); /* have to lock for thread-safety */ GST_DEBUG (0,"queue: %s try have queue lock\n", name); diff --git a/gst/gstscheduler.c b/gst/gstscheduler.c index a0fc57f..5f9ad74 100644 --- a/gst/gstscheduler.c +++ b/gst/gstscheduler.c @@ -30,7 +30,7 @@ static int gst_bin_loopfunc_wrapper (int argc,char *argv[]) { GstElement *element = GST_ELEMENT (argv); - G_GNUC_UNUSED const gchar *name = gst_element_get_name (element); + G_GNUC_UNUSED const gchar *name = GST_ELEMENT_NAME (element); GST_DEBUG_ENTER("(%d,'%s')",argc,name); @@ -50,7 +50,7 @@ static int gst_bin_chain_wrapper (int argc,char *argv[]) { GstElement *element = GST_ELEMENT (argv); - G_GNUC_UNUSED const gchar *name = gst_element_get_name (element); + G_GNUC_UNUSED const gchar *name = GST_ELEMENT_NAME (element); GList *pads; GstPad *pad; GstRealPad *realpad; @@ -66,11 +66,11 @@ gst_bin_chain_wrapper (int argc,char *argv[]) if (!GST_IS_REAL_PAD(pad)) continue; realpad = GST_REAL_PAD(pad); if (GST_RPAD_DIRECTION(realpad) == GST_PAD_SINK) { - GST_DEBUG (0,"pulling a buffer from %s:%s\n", name, gst_pad_get_name (pad)); + GST_DEBUG (0,"pulling a buffer from %s:%s\n", name, GST_PAD_NAME (pad)); buf = gst_pad_pull (pad); - GST_DEBUG (0,"calling chain function of %s:%s\n", name, gst_pad_get_name (pad)); + GST_DEBUG (0,"calling chain function of %s:%s\n", name, GST_PAD_NAME (pad)); if (buf) GST_RPAD_CHAINFUNC(realpad) (pad,buf); - GST_DEBUG (0,"calling chain function of %s:%s done\n", name, gst_pad_get_name (pad)); + GST_DEBUG (0,"calling chain function of %s:%s done\n", name, GST_PAD_NAME (pad)); } } } while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element)); @@ -87,7 +87,7 @@ gst_bin_src_wrapper (int argc,char *argv[]) GList *pads; GstRealPad *realpad; GstBuffer *buf; - G_GNUC_UNUSED const gchar *name = gst_element_get_name (element); + G_GNUC_UNUSED const gchar *name = GST_ELEMENT_NAME (element); GST_DEBUG_ENTER("(%d,\"%s\")",argc,name); @@ -125,7 +125,7 @@ gst_bin_src_wrapper (int argc,char *argv[]) static void gst_bin_pushfunc_proxy (GstPad *pad, GstBuffer *buf) { - cothread_state *threadstate = GST_ELEMENT(pad->parent)->threadstate; + cothread_state *threadstate = GST_ELEMENT (GST_PAD_PARENT (pad))->threadstate; GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); GST_DEBUG (0,"putting buffer %p in peer's pen\n",buf); GST_RPAD_BUFPEN(GST_RPAD_PEER(pad)) = buf; @@ -209,7 +209,7 @@ gst_schedule_cothreaded_chain (GstBin *bin, _GstBinChain *chain) { // if the element has a loopfunc... if (element->loopfunc != NULL) { wrapper_function = GST_DEBUG_FUNCPTR(gst_bin_loopfunc_wrapper); - GST_DEBUG (0,"\nelement '%s' is a loop-based\n",gst_element_get_name(element)); + GST_DEBUG (0,"\nelement '%s' is a loop-based\n",GST_ELEMENT_NAME(element)); } else { // otherwise we need to decide what kind of cothread // if it's not DECOUPLED, we decide based on whether it's a source or not @@ -217,10 +217,10 @@ gst_schedule_cothreaded_chain (GstBin *bin, _GstBinChain *chain) { // if it doesn't have any sinks, it must be a source (duh) if (element->numsinkpads == 0) { wrapper_function = GST_DEBUG_FUNCPTR(gst_bin_src_wrapper); - GST_DEBUG (0,"\nelement '%s' is a source, using _src_wrapper\n",gst_element_get_name(element)); + GST_DEBUG (0,"\nelement '%s' is a source, using _src_wrapper\n",GST_ELEMENT_NAME(element)); } else { wrapper_function = GST_DEBUG_FUNCPTR(gst_bin_chain_wrapper); - GST_DEBUG (0,"\nelement '%s' is a filter, using _chain_wrapper\n",gst_element_get_name(element)); + GST_DEBUG (0,"\nelement '%s' is a filter, using _chain_wrapper\n",GST_ELEMENT_NAME(element)); } } } @@ -234,7 +234,7 @@ gst_schedule_cothreaded_chain (GstBin *bin, _GstBinChain *chain) { // if the element is DECOUPLED or outside the manager, we have to chain if ((wrapper_function == NULL) || - (GST_ELEMENT(GST_PAD(GST_RPAD_PEER(pad))->parent)->manager != GST_ELEMENT(bin))) { + (GST_ELEMENT (GST_PAD_PARENT (GST_PAD (GST_RPAD_PEER (pad))))->manager != GST_ELEMENT(bin))) { // set the chain proxies if (GST_RPAD_DIRECTION(pad) == GST_PAD_SINK) { GST_DEBUG (0,"copying chain function into push proxy for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); @@ -261,10 +261,10 @@ gst_schedule_cothreaded_chain (GstBin *bin, _GstBinChain *chain) { if (wrapper_function != NULL) { if (element->threadstate == NULL) { element->threadstate = cothread_create (bin->threadcontext); - GST_DEBUG (0,"created cothread %p for '%s'\n",element->threadstate,gst_element_get_name(element)); + GST_DEBUG (0,"created cothread %p for '%s'\n",element->threadstate,GST_ELEMENT_NAME(element)); } cothread_setfunc (element->threadstate, wrapper_function, 0, (char **)element); - GST_DEBUG (0,"set wrapper function for '%s' to &%s\n",gst_element_get_name(element), + GST_DEBUG (0,"set wrapper function for '%s' to &%s\n",GST_ELEMENT_NAME(element), GST_DEBUG_FUNCPTR_NAME(wrapper_function)); } } @@ -327,7 +327,7 @@ gst_bin_schedule_cleanup (GstBin *bin) static void gst_scheduler_handle_eos (GstElement *element, _GstBinChain *chain) { - GST_DEBUG (0,"chain removed from scheduler, EOS from element \"%s\"\n", gst_element_get_name (element)); + GST_DEBUG (0,"chain removed from scheduler, EOS from element \"%s\"\n", GST_ELEMENT_NAME (element)); chain->need_scheduling = FALSE; } @@ -341,7 +341,7 @@ void gst_bin_schedule_func(GstBin *bin) { GList *chains; _GstBinChain *chain; - GST_DEBUG_ENTER("(\"%s\")",gst_element_get_name (GST_ELEMENT (bin))); + GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME (GST_ELEMENT (bin))); gst_bin_schedule_cleanup(bin); @@ -356,12 +356,12 @@ void gst_bin_schedule_func(GstBin *bin) { // if this is a DECOUPLED element if (GST_FLAG_IS_SET (element, GST_ELEMENT_DECOUPLED)) { // skip this element entirely - GST_DEBUG (0,"skipping '%s' because it's decoupled\n",gst_element_get_name(element)); + GST_DEBUG (0,"skipping '%s' because it's decoupled\n",GST_ELEMENT_NAME(element)); elements = g_list_next (elements); continue; } - GST_DEBUG (0,"starting with element '%s'\n",gst_element_get_name(element)); + GST_DEBUG (0,"starting with element '%s'\n",GST_ELEMENT_NAME(element)); // prime the pending list with the first element off the top pending = g_slist_prepend (NULL, element); @@ -379,7 +379,7 @@ void gst_bin_schedule_func(GstBin *bin) { pending = g_slist_remove (pending, element); // add ourselves to the chain's list of elements - GST_DEBUG (0,"adding '%s' to chain\n",gst_element_get_name(element)); + GST_DEBUG (0,"adding '%s' to chain\n",GST_ELEMENT_NAME(element)); chain->elements = g_list_prepend (chain->elements, element); chain->num_elements++; gtk_signal_connect (GTK_OBJECT (element), "eos", gst_scheduler_handle_eos, chain); @@ -394,13 +394,13 @@ void gst_bin_schedule_func(GstBin *bin) { if ((element->manager == GST_ELEMENT(bin)) && !GST_FLAG_IS_SET (element, GST_ELEMENT_DECOUPLED)) { // remove ourselves from the outer list of all managed elements -// GST_DEBUG (0,"removing '%s' from list of possible elements\n",gst_element_get_name(element)); +// GST_DEBUG (0,"removing '%s' from list of possible elements\n",GST_ELEMENT_NAME(element)); elements = g_list_remove (elements, element); // if this element is a source, add it as an entry if (element->numsinkpads == 0) { chain->entries = g_list_prepend (chain->entries, element); - GST_DEBUG (0,"added '%s' as SRC entry into the chain\n",gst_element_get_name(element)); + GST_DEBUG (0,"added '%s' as SRC entry into the chain\n",GST_ELEMENT_NAME(element)); } // now we have to walk the pads to find peers @@ -413,9 +413,9 @@ void gst_bin_schedule_func(GstBin *bin) { if (GST_RPAD_PEER(pad) == NULL) GST_ERROR(pad,"peer is null!"); g_assert(GST_RPAD_PEER(pad) != NULL); - g_assert(GST_PAD(GST_RPAD_PEER(pad))->parent != NULL); + g_assert(GST_PAD_PARENT (GST_PAD(GST_RPAD_PEER(pad))) != NULL); - peerparent = GST_ELEMENT(GST_PAD(GST_RPAD_PEER(pad))->parent); + peerparent = GST_ELEMENT(GST_PAD_PARENT (GST_PAD(GST_RPAD_PEER(pad)))); GST_DEBUG (0,"peer pad %p\n", GST_RPAD_PEER(pad)); // only bother with if the pad's peer's parent is this bin or it's DECOUPLED @@ -424,7 +424,7 @@ void gst_bin_schedule_func(GstBin *bin) { GST_FLAG_IS_SET (peerparent, GST_ELEMENT_DECOUPLED)) { // add the peer element to the pending list GST_DEBUG (0,"adding '%s' to list of pending elements\n", - gst_element_get_name(peerparent)); + GST_ELEMENT_NAME(peerparent)); pending = g_slist_prepend (pending, peerparent); // if this is a sink pad, then the element on the other side is an entry @@ -432,10 +432,10 @@ void gst_bin_schedule_func(GstBin *bin) { (GST_FLAG_IS_SET (peerparent, GST_ELEMENT_DECOUPLED))) { chain->entries = g_list_prepend (chain->entries, peerparent); gtk_signal_connect (GTK_OBJECT (peerparent), "eos", gst_scheduler_handle_eos, chain); - GST_DEBUG (0,"added '%s' as DECOUPLED entry into the chain\n",gst_element_get_name(peerparent)); + GST_DEBUG (0,"added '%s' as DECOUPLED entry into the chain\n",GST_ELEMENT_NAME(peerparent)); } } else - GST_DEBUG (0,"element '%s' has already been dealt with\n",gst_element_get_name(peerparent)); + GST_DEBUG (0,"element '%s' has already been dealt with\n",GST_ELEMENT_NAME(peerparent)); } } } while (pending); @@ -446,7 +446,7 @@ void gst_bin_schedule_func(GstBin *bin) { while (elements) { element = GST_ELEMENT (elements->data); elements = g_list_next(elements); - GST_DEBUG_NOPREFIX(0,"%s, ",gst_element_get_name(element)); + GST_DEBUG_NOPREFIX(0,"%s, ",GST_ELEMENT_NAME(element)); } } GST_DEBUG_NOPREFIX(0,"\n"); @@ -472,7 +472,7 @@ void gst_bin_schedule_func(GstBin *bin) { } } - GST_DEBUG_LEAVE("(\"%s\")",gst_element_get_name(GST_ELEMENT(bin))); + GST_DEBUG_LEAVE("(\"%s\")",GST_ELEMENT_NAME(GST_ELEMENT(bin))); } @@ -490,7 +490,7 @@ void gst_bin_schedule_func(GstBin *bin) { if ((GST_IS_SRC (outside) || GST_IS_CONNECTION (outside)) && (gst_object_get_parent (GST_OBJECT (outside)) != GST_OBJECT (bin))) { if (gst_pad_get_direction (pad) == GST_PAD_SINK) { - GST_DEBUG (0,"dealing with outside source element %s\n",gst_element_get_name(outside)); + GST_DEBUG (0,"dealing with outside source element %s\n",GST_ELEMENT_NAME(outside)); // GST_DEBUG (0,"PUNT: copying pullfunc ptr from %s:%s to %s:%s (@ %p)\n", //GST_DEBUG_PAD_NAME(pad->peer),GST_DEBUG_PAD_NAME(pad),&pad->pullfunc); // pad->pullfunc = pad->peer->pullfunc; @@ -507,7 +507,7 @@ void gst_bin_schedule_func(GstBin *bin) { /* } else if (GST_IS_SRC (element)) { - GST_DEBUG (0,"adding '%s' as entry point, because it's a source\n",gst_element_get_name (element)); + GST_DEBUG (0,"adding '%s' as entry point, because it's a source\n",GST_ELEMENT_NAME (element)); bin->entries = g_list_prepend (bin->entries,element); bin->num_entries++; cothread_setfunc(element->threadstate,gst_bin_src_wrapper,0,(char **)element); @@ -544,12 +544,12 @@ void gst_bin_schedule_func(GstBin *bin) { elements = bin->children; while (elements) { element = GST_ELEMENT (elements->data); - GST_DEBUG (0,"found element \"%s\"\n", gst_element_get_name (element)); + GST_DEBUG (0,"found element \"%s\"\n", GST_ELEMENT_NAME (element)); if (GST_IS_BIN (element)) { gst_bin_create_plan (GST_BIN (element)); } if (GST_IS_SRC (element)) { - GST_DEBUG (0,"adding '%s' as entry point, because it's a source\n",gst_element_get_name (element)); + GST_DEBUG (0,"adding '%s' as entry point, because it's a source\n",GST_ELEMENT_NAME (element)); bin->entries = g_list_prepend (bin->entries, element); bin->num_entries++; } @@ -571,7 +571,7 @@ void gst_bin_schedule_func(GstBin *bin) { // get the pad's peer peer = GST_RPAD_PEER(pad); if (!peer) { - GST_DEBUG (0,"found SINK pad %s has no peer\n", gst_pad_get_name (pad)); + GST_DEBUG (0,"found SINK pad %s has no peer\n", GST_ELEMENT_NAME (pad)); break; } // get the parent of the peer of the pad @@ -582,14 +582,14 @@ void gst_bin_schedule_func(GstBin *bin) { (gst_object_get_parent (GST_OBJECT (outside)) != GST_OBJECT (bin))) { gst_info("gstbin: element \"%s\" is the external source Connection " "for internal element \"%s\"\n", - gst_element_get_name (GST_ELEMENT (outside)), - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (outside)), + GST_ELEMENT_NAME (GST_ELEMENT (element))); bin->entries = g_list_prepend (bin->entries, outside); bin->num_entries++; } } else { - GST_DEBUG (0,"found pad %s\n", gst_pad_get_name (pad)); + GST_DEBUG (0,"found pad %s\n", GST_ELEMENT_NAME (pad)); } pads = g_list_next (pads); @@ -626,7 +626,7 @@ void gst_bin_schedule_func(GstBin *bin) { // first of all, if there's a loopfunc, the decision's already made if (element->loopfunc != NULL) { wrapper_function = GST_DEBUG_FUNCPTR(gst_bin_loopfunc_wrapper); - GST_DEBUG (0,"element %s is a loopfunc, must use a cothread\n",gst_element_get_name(element)); + GST_DEBUG (0,"element %s is a loopfunc, must use a cothread\n",GST_ELEMENT_NAME (element)); } else { // otherwise we need to decide if it needs a cothread // if it's complex, or cothreads are preferred and it's *not* decoupled, cothread it @@ -685,10 +685,10 @@ void gst_bin_schedule_func(GstBin *bin) { if (element->threadstate == NULL) { element->threadstate = cothread_create (bin->threadcontext); GST_DEBUG (0,"created cothread %p (@%p) for \"%s\"\n",element->threadstate, - &element->threadstate,gst_element_get_name(element)); + &element->threadstate,GST_ELEMENT_NAME (element)); } cothread_setfunc (element->threadstate, wrapper_function, 0, (char **)element); - GST_DEBUG (0,"set wrapper function for \"%s\" to &%s\n",gst_element_get_name(element), + GST_DEBUG (0,"set wrapper function for \"%s\" to &%s\n",GST_ELEMENT_NAME (element), GST_DEBUG_FUNCPTR_NAME(wrapper_function)); } diff --git a/gst/gstthread.c b/gst/gstthread.c index 43ee46b..036660a 100644 --- a/gst/gstthread.c +++ b/gst/gstthread.c @@ -53,14 +53,13 @@ enum { static void gst_thread_class_init (GstThreadClass *klass); static void gst_thread_init (GstThread *thread); -static void gst_thread_set_arg (GtkObject *object,GtkArg *arg,guint id); -static void gst_thread_get_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_thread_set_arg (GtkObject *object, GtkArg *arg, guint id); +static void gst_thread_get_arg (GtkObject *object, GtkArg *arg, guint id); static GstElementStateReturn gst_thread_change_state (GstElement *element); -static xmlNodePtr gst_thread_save_thyself (GstElement *element,xmlNodePtr parent); -static void gst_thread_restore_thyself (GstElement *element,xmlNodePtr parent, - GHashTable *elements); +static xmlNodePtr gst_thread_save_thyself (GstObject *object, xmlNodePtr parent); +static void gst_thread_restore_thyself (GstObject *object, xmlNodePtr self); static void gst_thread_signal_thread (GstThread *thread); static void gst_thread_wait_thread (GstThread *thread); @@ -109,9 +108,10 @@ gst_thread_class_init (GstThreadClass *klass) gtk_object_add_arg_type ("GstThread::create_thread", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_CREATE_THREAD); + gstobject_class->save_thyself = gst_thread_save_thyself; + gstobject_class->restore_thyself = gst_thread_restore_thyself; + gstelement_class->change_state = gst_thread_change_state; - gstelement_class->save_thyself = gst_thread_save_thyself; - gstelement_class->restore_thyself = gst_thread_restore_thyself; gstbin_class->schedule = gst_thread_schedule_dummy; @@ -123,7 +123,7 @@ gst_thread_class_init (GstThreadClass *klass) static void gst_thread_init (GstThread *thread) { - GST_DEBUG (0,"initializing thread '%s'\n",gst_element_get_name(GST_ELEMENT(thread))); + GST_DEBUG (0,"initializing thread '%s'\n",GST_ELEMENT_NAME (thread)); // we're a manager by default GST_FLAG_SET (thread, GST_BIN_FLAG_MANAGER); @@ -212,12 +212,12 @@ gst_thread_change_state (GstElement *element) gint pending, transition; g_return_val_if_fail (GST_IS_THREAD(element), FALSE); - GST_DEBUG_ENTER("(\"%s\")",gst_element_get_name(element)); + GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME(element)); thread = GST_THREAD (element); GST_INFO (GST_CAT_THREAD,"gstthread: thread \"%s\" change state %d", - gst_element_get_name (GST_ELEMENT (element)), + GST_ELEMENT_NAME (GST_ELEMENT (element)), GST_STATE_PENDING (element)); pending = GST_STATE_PENDING (element); @@ -238,7 +238,7 @@ gst_thread_change_state (GstElement *element) // if (!stateset) return FALSE; // we want to prepare our internal state for doing the iterations GST_INFO (GST_CAT_THREAD, "gstthread: preparing thread \"%s\" for iterations:", - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (element))); // set the state to idle GST_FLAG_UNSET (thread, GST_THREAD_STATE_SPINNING); @@ -247,7 +247,7 @@ gst_thread_change_state (GstElement *element) if (GST_FLAG_IS_SET (thread, GST_THREAD_CREATE)) { GST_INFO (GST_CAT_THREAD, "gstthread: starting thread \"%s\"", - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (element))); // create the thread pthread_create (&thread->thread_id, NULL, @@ -257,28 +257,28 @@ gst_thread_change_state (GstElement *element) // gst_thread_wait_thread (thread); } else { GST_INFO (GST_CAT_THREAD, "gstthread: NOT starting thread \"%s\"", - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (element))); } break; case GST_STATE_PAUSED_TO_PLAYING: case GST_STATE_READY_TO_PLAYING: if (!stateset) return FALSE; GST_INFO (GST_CAT_THREAD, "gstthread: starting thread \"%s\"", - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (element))); GST_FLAG_SET (thread, GST_THREAD_STATE_SPINNING); gst_thread_signal_thread (thread); break; case GST_STATE_PLAYING_TO_PAUSED: GST_INFO (GST_CAT_THREAD,"gstthread: pausing thread \"%s\"", - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (element))); //GST_FLAG_UNSET(thread,GST_THREAD_STATE_SPINNING); gst_thread_signal_thread (thread); break; case GST_STATE_READY_TO_NULL: GST_INFO (GST_CAT_THREAD,"gstthread: stopping thread \"%s\"", - gst_element_get_name (GST_ELEMENT (element))); + GST_ELEMENT_NAME (GST_ELEMENT (element))); GST_FLAG_SET (thread, GST_THREAD_STATE_REAPING); gst_thread_signal_thread (thread); @@ -303,7 +303,7 @@ gst_thread_main_loop (void *arg) GstThread *thread = GST_THREAD (arg); GST_INFO (GST_CAT_THREAD,"gstthread: thread \"%s\" is running with PID %d", - gst_element_get_name (GST_ELEMENT (thread)), getpid ()); + GST_ELEMENT_NAME (GST_ELEMENT (thread)), getpid ()); // construct the plan and signal back if (GST_BIN_CLASS (parent_class)->schedule) @@ -318,7 +318,7 @@ gst_thread_main_loop (void *arg) } } else { - GST_DEBUG (0, "thread \"%s\" waiting\n", gst_element_get_name (GST_ELEMENT (thread))); + GST_DEBUG (0, "thread \"%s\" waiting\n", GST_ELEMENT_NAME (GST_ELEMENT (thread))); gst_thread_wait_thread (thread); } } @@ -327,7 +327,7 @@ gst_thread_main_loop (void *arg) //pthread_join (thread->thread_id, 0); GST_INFO (GST_CAT_THREAD, "gstthread: thread \"%s\" is stopped", - gst_element_get_name (GST_ELEMENT (thread))); + GST_ELEMENT_NAME (thread)); return NULL; } @@ -351,21 +351,20 @@ gst_thread_wait_thread (GstThread *thread) static void -gst_thread_restore_thyself (GstElement *element, - xmlNodePtr parent, - GHashTable *elements) +gst_thread_restore_thyself (GstObject *object, + xmlNodePtr self) { GST_DEBUG (0,"gstthread: restore\n"); - if (GST_ELEMENT_CLASS (parent_class)->restore_thyself) - GST_ELEMENT_CLASS (parent_class)->restore_thyself (element,parent, elements); + if (GST_OBJECT_CLASS (parent_class)->restore_thyself) + GST_OBJECT_CLASS (parent_class)->restore_thyself (object, self); } static xmlNodePtr -gst_thread_save_thyself (GstElement *element, - xmlNodePtr parent) +gst_thread_save_thyself (GstObject *object, + xmlNodePtr self) { - if (GST_ELEMENT_CLASS (parent_class)->save_thyself) - GST_ELEMENT_CLASS (parent_class)->save_thyself (element,parent); + if (GST_OBJECT_CLASS (parent_class)->save_thyself) + GST_OBJECT_CLASS (parent_class)->save_thyself (object, self); return NULL; } diff --git a/gst/gsttypefind.c b/gst/gsttypefind.c index 6d8fe21..8f8489d 100644 --- a/gst/gsttypefind.c +++ b/gst/gsttypefind.c @@ -161,9 +161,9 @@ gst_typefind_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - typefind = GST_TYPEFIND (pad->parent); + typefind = GST_TYPEFIND (GST_OBJECT_PARENT (pad)); GST_DEBUG (0,"got buffer of %d bytes in '%s'\n", - GST_BUFFER_SIZE (buf), gst_element_get_name (GST_ELEMENT (typefind))); + GST_BUFFER_SIZE (buf), GST_OBJECT_NAME (typefind)); type_list = gst_type_get_list (); diff --git a/gst/gstxml.c b/gst/gstxml.c index bceee0f..78d5def 100644 --- a/gst/gstxml.c +++ b/gst/gstxml.c @@ -25,11 +25,18 @@ #include "gstxml.h" #include "gstbin.h" +enum { + OBJECT_LOADED, + OBJECT_SAVED, + LAST_SIGNAL +}; + static void gst_xml_class_init (GstXMLClass *klass); static void gst_xml_init (GstXML *xml); static GstObjectClass *parent_class = NULL; +static guint gst_xml_signals[LAST_SIGNAL] = { 0 }; GtkType gst_xml_get_type(void) @@ -39,15 +46,15 @@ gst_xml_get_type(void) if (!xml_type) { static const GtkTypeInfo xml_info = { "GstXML", - sizeof(GstElement), - sizeof(GstElementClass), + sizeof(GstXML), + sizeof(GstXMLClass), (GtkClassInitFunc)gst_xml_class_init, (GtkObjectInitFunc)gst_xml_init, (GtkArgSetFunc)NULL, (GtkArgGetFunc)NULL, (GtkClassInitFunc)NULL, }; - xml_type = gtk_type_unique (GST_TYPE_XML, &xml_info); + xml_type = gtk_type_unique (GST_TYPE_OBJECT, &xml_info); } return xml_type; } @@ -55,12 +62,44 @@ gst_xml_get_type(void) static void gst_xml_class_init (GstXMLClass *klass) { + GtkObjectClass *gtkobject_class; + + gtkobject_class = (GtkObjectClass *)klass; + parent_class = gtk_type_class (GST_TYPE_OBJECT); + + gst_xml_signals[OBJECT_LOADED] = + gtk_signal_new ("object_loaded", GTK_RUN_LAST, gtkobject_class->type, + GTK_SIGNAL_OFFSET (GstXMLClass, object_loaded), + gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2, + GST_TYPE_OBJECT, GTK_TYPE_POINTER); + + gst_xml_signals[OBJECT_SAVED] = + gtk_signal_new ("object_saved", GTK_RUN_LAST, gtkobject_class->type, + GTK_SIGNAL_OFFSET (GstXMLClass, object_saved), + gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2, + GST_TYPE_OBJECT, GTK_TYPE_POINTER); + + gtk_object_class_add_signals (gtkobject_class, gst_xml_signals, LAST_SIGNAL); } static void gst_xml_init(GstXML *xml) { + xml->topelements = NULL; +} + +/** + * gst_xml_new: + * + * Create a new GstXML parser object. + * + * Returns: a pointer to a new GstXML object. + */ +GstXML* +gst_xml_new (void) +{ + return GST_XML (gtk_type_new (GST_TYPE_XML)); } /** @@ -75,41 +114,52 @@ xmlDocPtr gst_xml_write (GstElement *element) { xmlDocPtr doc; + xmlNodePtr elementnode; + xmlNsPtr ns; doc = xmlNewDoc ("1.0"); - doc->xmlRootNode = xmlNewDocNode (doc, NULL, "GST-Pipeline", NULL); + xmlNewGlobalNs (doc, "http://gstreamer.net/gst-core/1.0/", "gst"); + ns = xmlNewNs (doc->xmlRootNode, "http://gstreamer.net/gst-core/1.0/", "gst"); + + doc->xmlRootNode = xmlNewDocNode (doc, ns, "GST-Pipeline", NULL); - gst_element_save_thyself (element, doc->xmlRootNode); + elementnode = xmlNewChild (doc->xmlRootNode, NULL, "element", NULL); + + gst_object_save_thyself (GST_OBJECT (element), elementnode); return doc; } -static GstXML* -gst_xml_real_parse (xmlDocPtr doc, const guchar *root) +static gboolean +gst_xml_real_parse (GstXML *xml, xmlDocPtr doc, const guchar *root) { - GstXML *xml; - xmlNodePtr field; + xmlNodePtr field, cur; + xmlNsPtr ns; - if (strcmp(doc->xmlRootNode->name, "GST-Pipeline")) { + cur = xmlDocGetRootElement(doc); + if (cur == NULL) { + g_warning("gstxml: empty document\n"); + return FALSE ; + } + ns = xmlSearchNsByHref(doc, cur, "http://gstreamer.net/gst-core/1.0/"); + if (ns == NULL) { + g_warning("gstxml: document of wrong type, core namespace not found\n"); + return FALSE; + } + if (strcmp(cur->name, "GST-Pipeline")) { g_warning("gstxml: XML file is in wrong format\n"); - return NULL; + return FALSE; } - xml = GST_XML(gtk_type_new(GST_TYPE_XML)); - - xml->topelements = NULL; + xml->ns = ns; - field = doc->xmlRootNode->xmlChildrenNode; + field = cur->xmlChildrenNode; while (field) { - if (!strcmp(field->name, "element")) { + if (!strcmp(field->name, "element") && (field->ns == xml->ns)) { GstElement *element; - xml->elements = g_hash_table_new(g_str_hash, g_str_equal); - - element = gst_element_load_thyself(field, xml->elements); - - g_hash_table_destroy (xml->elements); + element = gst_element_load_thyself(field, NULL); xml->topelements = g_list_prepend (xml->topelements, element); } @@ -118,11 +168,11 @@ gst_xml_real_parse (xmlDocPtr doc, const guchar *root) xml->topelements = g_list_reverse (xml->topelements); - return xml; + return TRUE; } /** - * gst_xml_new: + * gst_xml_parse_file: * @fname: The filename with the xml description * @root: The name of the root object to build * @@ -134,27 +184,27 @@ gst_xml_real_parse (xmlDocPtr doc, const guchar *root) * tree is cached to speed up creating another GstXML object for * the same file * - * Returns: a pointer to a new GstXML object + * Returns: TRUE on success, FALSE otherwise */ -GstXML* -gst_xml_new (const guchar *fname, const guchar *root) +gboolean +gst_xml_parse_file (GstXML *xml, const guchar *fname, const guchar *root) { xmlDocPtr doc; - g_return_val_if_fail(fname != NULL, NULL); + g_return_val_if_fail(fname != NULL, FALSE); doc = xmlParseFile(fname); if (!doc) { g_warning("gstxml: XML file \"%s\" could not be read\n", fname); - return NULL; + return FALSE; } - return gst_xml_real_parse (doc, root); + return gst_xml_real_parse (xml, doc, root); } /** - * gst_xml_new_from_memory: + * gst_xml_parse_memory: * @buffer: a pointer to the in memory XML buffer * @size: the size of the buffer * @root: the name of the root objects to build @@ -164,18 +214,29 @@ gst_xml_new (const guchar *fname, const guchar *root) * * Returns: a pointer to a new GstXML object */ -GstXML* -gst_xml_new_from_memory (guchar *buffer, guint size, const gchar *root) +gboolean +gst_xml_parse_memory (GstXML *xml, guchar *buffer, guint size, const gchar *root) { xmlDocPtr doc; - g_return_val_if_fail(buffer != NULL, NULL); + g_return_val_if_fail(buffer != NULL, FALSE); doc = xmlParseMemory (buffer, size); - return gst_xml_real_parse (doc, root); + return gst_xml_real_parse (xml, doc, root); +} + +void +gst_xml_object_loaded (GstXML *xml, GstObject *object, xmlNodePtr self) +{ + gtk_signal_emit (GTK_OBJECT (xml), gst_xml_signals[OBJECT_LOADED], object, self); } +void +gst_xml_object_saved (GstXML *xml, GstObject *object, xmlNodePtr self) +{ + gtk_signal_emit (GTK_OBJECT (xml), gst_xml_signals[OBJECT_SAVED], object, self); +} /** * gst_xml_get_topelements: * @xml: The GstXML to get the elements from @@ -219,7 +280,8 @@ gst_xml_get_element (GstXML *xml, const guchar *name) while (topelements) { GstElement *top = GST_ELEMENT (topelements->data); - if (!strcmp (gst_element_get_name (top), name)) { + GST_DEBUG (0,"gstxml: getting element \"%s\"\n", name); + if (!strcmp (GST_ELEMENT_NAME (top), name)) { return top; } else { diff --git a/gst/gstxml.h b/gst/gstxml.h index 712ba25..a797272 100644 --- a/gst/gstxml.h +++ b/gst/gstxml.h @@ -1,6 +1,6 @@ /* GStreamer * Copyright (C) 1999,2000 Erik Walthinsen - * 2000 Wim Taymans + * 2000 Wim Taymans * * gstxml.h: Header for XML save/restore operations * @@ -23,7 +23,6 @@ #ifndef __GST_XML_H__ #define __GST_XML_H__ -//#include #include // Include compatability defines: if libxml hasn't already defined these, @@ -33,16 +32,14 @@ #define xmlRootNode root #endif - #include - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define GST_TYPE_XML \ - (gst_object_get_type()) + (gst_xml_get_type()) #define GST_XML(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_XML,GstXML)) #define GST_XML_CLASS(klass) \ @@ -56,14 +53,19 @@ typedef struct _GstXML GstXML; typedef struct _GstXMLClass GstXMLClass; struct _GstXML { - GtkObject object; + GstObject object; - GHashTable *elements; GList *topelements; + + xmlNsPtr ns; }; struct _GstXMLClass { - GtkObjectClass parent_class; + GstObjectClass parent_class; + + /* signal callbacks */ + void (*object_loaded) (GstXML *xml, GstObject *object, xmlNodePtr self); + void (*object_saved) (GstXML *xml, GstObject *object, xmlNodePtr self); }; GtkType gst_xml_get_type (void); @@ -72,13 +74,18 @@ GtkType gst_xml_get_type (void); /* create an XML document out of a pipeline */ xmlDocPtr gst_xml_write (GstElement *element); -GstXML* gst_xml_new (const guchar *fname, const guchar *root); -GstXML* gst_xml_new_from_memory (guchar *buffer, guint size, const gchar *root); +GstXML* gst_xml_new (void); + +gboolean gst_xml_parse_file (GstXML *xml, const guchar *fname, const guchar *root); +gboolean gst_xml_parse_memory (GstXML *xml, guchar *buffer, guint size, const gchar *root); GstElement* gst_xml_get_element (GstXML *xml, const guchar *name); GList* gst_xml_get_topelements (GstXML *xml); +void gst_xml_object_loaded (GstXML *xml, GstObject *object, xmlNodePtr self); +void gst_xml_object_saved (GstXML *xml, GstObject *object, xmlNodePtr self); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/gstplay/gstmediaplay.c b/gstplay/gstmediaplay.c index 46809a1..49276c6 100644 --- a/gstplay/gstmediaplay.c +++ b/gstplay/gstmediaplay.c @@ -12,18 +12,18 @@ #include "gstmediaplay.h" #include "callbacks.h" -static void gst_media_play_class_init (GstMediaPlayClass *klass); -static void gst_media_play_init (GstMediaPlay *play); +static void gst_media_play_class_init (GstMediaPlayClass *klass); +static void gst_media_play_init (GstMediaPlay *play); -static void gst_media_play_set_arg (GtkObject *object,GtkArg *arg,guint id); -static void gst_media_play_get_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_media_play_set_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_media_play_get_arg (GtkObject *object,GtkArg *arg,guint id); -static void gst_media_play_frame_displayed (GstPlay *play, GstMediaPlay *mplay); -static void gst_media_play_state_changed (GstPlay *play, GstPlayState state, GstMediaPlay *mplay); -static void gst_media_play_slider_changed (GtkAdjustment *adj, GstMediaPlay *mplay); +static void gst_media_play_frame_displayed (GstPlay *play, GstMediaPlay *mplay); +static void gst_media_play_state_changed (GstPlay *play, GstPlayState state, GstMediaPlay *mplay); +static void gst_media_play_slider_changed (GtkAdjustment *adj, GstMediaPlay *mplay); -static void update_buttons (GstMediaPlay *mplay, GstPlayState state); -static void update_slider (GstMediaPlay *mplay, GtkAdjustment *adjustment, gfloat value); +static void update_buttons (GstMediaPlay *mplay, GstPlayState state); +static void update_slider (GstMediaPlay *mplay, GtkAdjustment *adjustment, gfloat value); /* signals and args */ enum { @@ -47,7 +47,7 @@ target_drag_data_received (GtkWidget *widget, if (strstr (data->data, "file:")) { g_print ("Got: %s\n",&data->data[5]); gdk_threads_leave (); - gst_media_play_start_uri (play, g_strchomp(&data->data[5])); + gst_media_play_start_uri (play, g_strchomp(&data->data[5])); gdk_threads_enter (); } } @@ -59,8 +59,8 @@ static GtkTargetEntry target_table[] = { static GtkObject *parent_class = NULL; //static guint gst_media_play_signals[LAST_SIGNAL] = { 0 }; -GtkType -gst_media_play_get_type(void) +GtkType +gst_media_play_get_type(void) { static GtkType play_type = 0; diff --git a/plugins/elements/gstasyncdisksrc.c b/plugins/elements/gstasyncdisksrc.c index 333a73b..f02071d 100644 --- a/plugins/elements/gstasyncdisksrc.c +++ b/plugins/elements/gstasyncdisksrc.c @@ -218,7 +218,7 @@ gst_asyncdisksrc_get (GstPad *pad) GstBuffer *buf; g_return_val_if_fail (pad != NULL, NULL); - src = GST_ASYNCDISKSRC (gst_pad_get_parent(pad)); + src = GST_ASYNCDISKSRC (gst_pad_get_parent (pad)); g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_ASYNCDISKSRC_OPEN), NULL); /* deal with EOF state */ @@ -276,7 +276,7 @@ gst_asyncdisksrc_get_region (GstPad *pad, gulong offset, gulong size) g_return_val_if_fail (pad != NULL, NULL); - src = GST_ASYNCDISKSRC (gst_pad_get_parent(pad)); + src = GST_ASYNCDISKSRC (gst_pad_get_parent (pad)); g_return_val_if_fail (GST_IS_ASYNCDISKSRC (src), NULL); g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_ASYNCDISKSRC_OPEN), NULL); diff --git a/plugins/elements/gstaudiosink.c b/plugins/elements/gstaudiosink.c index f50d704..1027729 100644 --- a/plugins/elements/gstaudiosink.c +++ b/plugins/elements/gstaudiosink.c @@ -244,7 +244,7 @@ gst_audiosink_chain (GstPad *pad, GstBuffer *buf) /* this has to be an audio buffer */ // g_return_if_fail(((GstMeta *)buf->meta)->type != //gst_audiosink_type_audio); - audiosink = GST_AUDIOSINK (pad->parent); + audiosink = GST_AUDIOSINK (gst_pad_get_parent (pad)); // g_return_if_fail(GST_FLAG_IS_SET(audiosink,GST_STATE_RUNNING)); if ((in_flush = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLUSH))) { diff --git a/plugins/elements/gstaudiosrc.c b/plugins/elements/gstaudiosrc.c index d12bb79..b4645fd 100644 --- a/plugins/elements/gstaudiosrc.c +++ b/plugins/elements/gstaudiosrc.c @@ -149,7 +149,7 @@ gst_audiosrc_get (GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_AUDIOSRC(gst_pad_get_parent(pad)); + src = GST_AUDIOSRC(gst_pad_get_parent (pad)); // g_print("attempting to read something from soundcard\n"); diff --git a/plugins/elements/gstdisksrc.c b/plugins/elements/gstdisksrc.c index ae40a6e..5333122 100644 --- a/plugins/elements/gstdisksrc.c +++ b/plugins/elements/gstdisksrc.c @@ -208,7 +208,7 @@ gst_disksrc_get (GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_DISKSRC(gst_pad_get_parent(pad)); + src = GST_DISKSRC(gst_pad_get_parent (pad)); g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_DISKSRC_OPEN), NULL); g_return_val_if_fail (GST_STATE (src) >= GST_STATE_READY, NULL); diff --git a/plugins/elements/gstfakesink.c b/plugins/elements/gstfakesink.c index 1db7b2e..81709b7 100644 --- a/plugins/elements/gstfakesink.c +++ b/plugins/elements/gstfakesink.c @@ -180,7 +180,7 @@ gst_fakesink_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - fakesink = GST_FAKESINK (pad->parent); + fakesink = GST_FAKESINK (gst_pad_get_parent (pad)); g_print("fakesink: ******* (%s:%s)< \n",GST_DEBUG_PAD_NAME(pad)); gst_buffer_unref (buf); diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c index 3d24cb1..56bc217 100644 --- a/plugins/elements/gstfakesrc.c +++ b/plugins/elements/gstfakesrc.c @@ -269,9 +269,11 @@ gst_fakesrc_get(GstPad *pad) GstFakeSrc *src; GstBuffer *buf; - g_return_val_if_fail(pad != NULL, NULL); - src = GST_FAKESRC(gst_pad_get_parent(pad)); - g_return_val_if_fail(GST_IS_FAKESRC(src), NULL); + g_return_val_if_fail (pad != NULL, NULL); + + src = GST_FAKESRC (gst_pad_get_parent (pad)); + + g_return_val_if_fail (GST_IS_FAKESRC (src), NULL); if (src->num_buffers == 0) { gst_pad_set_eos (pad); diff --git a/plugins/elements/gstfdsink.c b/plugins/elements/gstfdsink.c index e521791..1b6fed7b 100644 --- a/plugins/elements/gstfdsink.c +++ b/plugins/elements/gstfdsink.c @@ -113,7 +113,7 @@ gst_fdsink_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - fdsink = GST_FDSINK (pad->parent); + fdsink = GST_FDSINK (gst_pad_get_parent (pad)); g_return_if_fail (fdsink->fd >= 0); diff --git a/plugins/elements/gstfdsrc.c b/plugins/elements/gstfdsrc.c index a5dfa0c..b256890 100644 --- a/plugins/elements/gstfdsrc.c +++ b/plugins/elements/gstfdsrc.c @@ -184,7 +184,7 @@ gst_fdsrc_get(GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_FDSRC(gst_pad_get_parent(pad)); + src = GST_FDSRC(gst_pad_get_parent (pad)); /* create the buffer */ // FIXME: should eventually use a bufferpool for this diff --git a/plugins/elements/gsthttpsrc.c b/plugins/elements/gsthttpsrc.c index 0516ae2..68c51b7 100644 --- a/plugins/elements/gsthttpsrc.c +++ b/plugins/elements/gsthttpsrc.c @@ -131,7 +131,7 @@ gst_httpsrc_get(GstPad *pad) glong readbytes; g_return_val_if_fail (pad != NULL, NULL); - src = GST_HTTPSRC(gst_pad_get_parent(pad)); + src = GST_HTTPSRC(gst_pad_get_parent (pad)); buf = gst_buffer_new(); GST_BUFFER_DATA(buf) = (gpointer)malloc(src->bytes_per_read); diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c index 361e75b..4e209a1 100644 --- a/plugins/elements/gstidentity.c +++ b/plugins/elements/gstidentity.c @@ -120,7 +120,7 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - identity = GST_IDENTITY (pad->parent); + identity = GST_IDENTITY (gst_pad_get_parent (pad)); g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad)); gst_pad_push (identity->srcpad, buf); diff --git a/plugins/elements/gstpipefilter.c b/plugins/elements/gstpipefilter.c index da6b603..432a762 100644 --- a/plugins/elements/gstpipefilter.c +++ b/plugins/elements/gstpipefilter.c @@ -118,13 +118,6 @@ static void gst_pipefilter_init(GstPipefilter *pipefilter) { pipefilter->seq = 0; } -GstElement *gst_pipefilter_new(gchar *name) { - GstElement *pipefilter = GST_ELEMENT(gtk_type_new(GST_TYPE_PIPEFILTER)); - gst_element_set_name(GST_ELEMENT(pipefilter),name); - return pipefilter; -} - - static gboolean gst_pipefilter_read_and_push(GstPipefilter *pipefilter) { GstBuffer *newbuf; glong readbytes; @@ -179,7 +172,7 @@ void gst_pipefilter_chain(GstPad *pad,GstBuffer *buf) { g_return_if_fail(GST_IS_PAD(pad)); g_return_if_fail(buf != NULL); - pipefilter = GST_PIPEFILTER(pad->parent); + pipefilter = GST_PIPEFILTER (gst_pad_get_parent (pad)); while (gst_pipefilter_read_and_push(pipefilter)); diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 1d3c4a4..ba91043 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -153,12 +153,12 @@ gst_queue_handle_eos (GstPad *pad) { GstQueue *queue; - queue = GST_QUEUE(pad->parent); + queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); - GST_DEBUG (0,"queue: %s received eos\n", gst_element_get_name (GST_ELEMENT (queue))); + GST_DEBUG (0,"queue: %s received eos\n", GST_ELEMENT_NAME (queue)); GST_LOCK (queue); - GST_DEBUG (0,"queue: %s has %d buffers left\n", gst_element_get_name (GST_ELEMENT (queue)), + GST_DEBUG (0,"queue: %s has %d buffers left\n", GST_ELEMENT_NAME (queue), queue->level_buffers); GST_FLAG_SET (pad, GST_PAD_EOS); @@ -182,7 +182,7 @@ static void gst_queue_flush (GstQueue *queue) { g_slist_foreach (queue->queue, gst_queue_cleanup_buffers, - (char *)gst_element_get_name (GST_ELEMENT (queue))); + (char *) GST_ELEMENT_NAME (queue)); g_slist_free (queue->queue); queue->queue = NULL; @@ -201,8 +201,8 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - queue = GST_QUEUE (pad->parent); - name = gst_element_get_name (GST_ELEMENT (queue)); + queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); + name = GST_ELEMENT_NAME (queue); /* we have to lock the queue since we span threads */ @@ -251,12 +251,12 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf) static GstBuffer * gst_queue_get (GstPad *pad) { - GstQueue *queue = GST_QUEUE (gst_pad_get_parent(pad)); + GstQueue *queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); GstBuffer *buf = NULL; GSList *front; const guchar *name; - name = gst_element_get_name (GST_ELEMENT (queue)); + name = GST_ELEMENT_NAME (queue); /* have to lock for thread-safety */ GST_DEBUG (0,"queue: %s try have queue lock\n", name); diff --git a/plugins/elements/gstsinesrc.c b/plugins/elements/gstsinesrc.c index 8d7e255..5e47d27 100644 --- a/plugins/elements/gstsinesrc.c +++ b/plugins/elements/gstsinesrc.c @@ -132,18 +132,6 @@ static void gst_sinesrc_init(GstSineSrc *sinesrc) { sinesrc->sentmeta = FALSE; } -GstElement *gst_sinesrc_new(gchar *name) { - GstElement *sinesrc = GST_ELEMENT(gtk_type_new(GST_TYPE_SINESRC)); - gst_element_set_name(GST_ELEMENT(sinesrc),name); - return sinesrc; -} - -GstElement *gst_sinesrc_new_with_fd(gchar *name,gchar *filename) { - GstElement *sinesrc = gst_sinesrc_new(name); - gtk_object_set(GTK_OBJECT(sinesrc),"location",filename,NULL); - return sinesrc; -} - static GstBuffer * gst_sinesrc_get(GstPad *pad) { @@ -155,7 +143,7 @@ gst_sinesrc_get(GstPad *pad) gdouble val; g_return_val_if_fail (pad != NULL, NULL); - src = GST_SINESRC(gst_pad_get_parent(pad)); + src = GST_SINESRC(gst_pad_get_parent (pad)); buf = gst_buffer_new(); g_return_val_if_fail (buf, NULL); diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c index ffb0ed0..d444217 100644 --- a/plugins/elements/gsttee.c +++ b/plugins/elements/gsttee.c @@ -181,7 +181,7 @@ gst_tee_chain (GstPad *pad, GstBuffer *buf) g_return_if_fail (GST_IS_PAD (pad)); g_return_if_fail (buf != NULL); - tee = GST_TEE (pad->parent); + tee = GST_TEE (gst_pad_get_parent (pad)); gst_trace_add_entry (NULL, 0, buf, "tee buffer"); for (i=0; inumsrcpads-1; i++) diff --git a/test/record.c b/test/record.c index 50726aa..b297969 100644 --- a/test/record.c +++ b/test/record.c @@ -31,9 +31,6 @@ int main(int argc,char *argv[]) { gst_pad_connect(gst_element_get_pad(audiosrc,"src"), gst_element_get_pad(fdsink,"sink")); - g_print("\neverything's built, setting it up to be runnable\n"); - gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY); - g_print("\nok, runnable, hitting 'play'...\n"); gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING); diff --git a/tests/old/examples/plugins/example.c b/tests/old/examples/plugins/example.c index c3f534e..7a4a7d0 100644 --- a/tests/old/examples/plugins/example.c +++ b/tests/old/examples/plugins/example.c @@ -76,7 +76,7 @@ static void gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id); GstPadTemplate *src_template, *sink_template; static GstElementClass *parent_class = NULL; -static guint gst_example_signals[LAST_SIGNAL] = { 0 }; +//static guint gst_example_signals[LAST_SIGNAL] = { 0 }; GtkType gst_example_get_type(void) @@ -134,15 +134,13 @@ static void gst_example_chain (GstPad *pad, GstBuffer *buf) { GstExample *example; - guchar *data; - gint i; g_return_if_fail(pad != NULL); g_return_if_fail(GST_IS_PAD(pad)); g_return_if_fail(buf != NULL); //g_return_if_fail(GST_IS_BUFFER(buf)); - example = GST_EXAMPLE(pad->parent); + example = GST_EXAMPLE(gst_pad_get_parent (pad)); g_return_if_fail(example != NULL); g_return_if_fail(GST_IS_EXAMPLE(example)); @@ -199,10 +197,10 @@ plugin_init (GModule *module) GstElementFactory *factory; plugin = gst_plugin_new("example"); - g_return_if_fail(plugin != NULL); + g_return_val_if_fail(plugin != NULL, NULL); factory = gst_elementfactory_new("example", GST_TYPE_EXAMPLE, &example_details); - g_return_if_fail(factory != NULL); + g_return_val_if_fail(factory != NULL, NULL); sink_template = gst_padtemplate_new (&sink_factory); gst_elementfactory_add_padtemplate (factory, sink_template); diff --git a/tests/old/examples/xml/createxml.c b/tests/old/examples/xml/createxml.c index 9f99c77..873a3e1 100644 --- a/tests/old/examples/xml/createxml.c +++ b/tests/old/examples/xml/createxml.c @@ -52,7 +52,7 @@ int main(int argc,char *argv[]) gst_bin_add(GST_BIN(thread), queue2); gst_bin_add(GST_BIN(thread2), audiosink); - + gst_pad_connect(gst_element_get_pad(disksrc,"src"), gst_element_get_pad(queue,"sink")); diff --git a/tests/old/examples/xml/runxml.c b/tests/old/examples/xml/runxml.c index 025508f..9bc756f 100644 --- a/tests/old/examples/xml/runxml.c +++ b/tests/old/examples/xml/runxml.c @@ -3,33 +3,40 @@ gboolean playing; -/* eos will be called when the src element has an end of stream */ -void eos(GstElement *element, gpointer data) +static void +xml_loaded (GstXML *xml, GstObject *object, gpointer data) { - g_print("have eos, quitting\n"); - - playing = FALSE; + if (GST_IS_PAD (object)) { + g_print ("pad loaded '%s'\n", gst_pad_get_name (GST_PAD (object))); + } + else if (GST_IS_ELEMENT (object)) { + g_print ("element loaded '%s'\n", gst_element_get_name (GST_ELEMENT (object))); + } } -int main(int argc,char *argv[]) +int main(int argc,char *argv[]) { GstXML *xml; GstElement *bin; - GstElement *disk; + gboolean ret; gst_init(&argc,&argv); - xml = gst_xml_new("xmlTest.gst", NULL); + xml = gst_xml_new (); + + gtk_signal_connect (GTK_OBJECT (xml), "object_loaded", xml_loaded, NULL); + + ret = gst_xml_parse_file(xml, "xmlTest.gst", NULL); + g_assert (ret == TRUE); bin = gst_xml_get_element(xml, "bin"); - + g_assert (bin != NULL); + gst_element_set_state(bin, GST_STATE_PLAYING); playing = TRUE; - while (playing) { - gst_bin_iterate(GST_BIN(bin)); - } + while (gst_bin_iterate(GST_BIN(bin))); gst_element_set_state(bin, GST_STATE_NULL); diff --git a/tests/sched/runxml.c b/tests/sched/runxml.c index a1bc8a2..e701836 100644 --- a/tests/sched/runxml.c +++ b/tests/sched/runxml.c @@ -41,7 +41,8 @@ int main(int argc,char *argv[]) g_print ("\n *** using testfile %s\n", argv[1]); - xml = gst_xml_new(argv[1], NULL); + xml = gst_xml_new(); + xml = gst_xml_parse_file (xml, argv[1], NULL); toplevelelements = gst_xml_get_topelements (xml); diff --git a/tools/gstreamer-inspect.c b/tools/gstreamer-inspect.c index da1876c..a95392e 100644 --- a/tools/gstreamer-inspect.c +++ b/tools/gstreamer-inspect.c @@ -84,6 +84,7 @@ struct _GstPropsEntry { gint print_element_info(GstElementFactory *factory) { GstElement *element; + GstObjectClass *gstobject_class; GstElementClass *gstelement_class; GList *pads, *caps; GstPad *pad; @@ -99,6 +100,8 @@ gint print_element_info(GstElementFactory *factory) { g_print ("couldn't construct element for some reason\n"); return -1; } + + gstobject_class = GST_OBJECT_CLASS (GTK_OBJECT (element)->klass); gstelement_class = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass); printf("Factory Details:\n"); @@ -184,9 +187,9 @@ gint print_element_info(GstElementFactory *factory) { printf(" Has change_state() function\n"); else printf(" No change_state() class function\n"); - if (gstelement_class->save_thyself) + if (gstobject_class->save_thyself) printf(" Has custom save_thyself() class function\n"); - if (gstelement_class->restore_thyself) + if (gstobject_class->restore_thyself) printf(" Has custom restore_thyself() class function\n"); printf("\n"); -- 2.7.4