revert the patch that made applications break
authorThomas Vander Stichele <thomas@apestaart.org>
Thu, 5 Feb 2004 19:03:03 +0000 (19:03 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Thu, 5 Feb 2004 19:03:03 +0000 (19:03 +0000)
Original commit message from CVS:
revert the patch that made applications break

23 files changed:
ChangeLog
common
docs/gst/tmpl/gstbin.sgml
docs/gst/tmpl/gstclock.sgml
docs/gst/tmpl/gstelement.sgml
docs/gst/tmpl/gstindex.sgml
docs/gst/tmpl/gstobject.sgml
docs/gst/tmpl/gstpadtemplate.sgml
docs/gst/tmpl/gstreamer-unused.sgml
docs/gst/tmpl/gstthread.sgml
docs/gst/tmpl/gstxml.sgml
docs/manual/advanced-clocks.xml [new file with mode: 0644]
docs/manual/basics-bins.xml [new file with mode: 0644]
docs/manual/basics-plugins.xml [new file with mode: 0644]
docs/manual/highlevel-components.xml [new file with mode: 0644]
docs/manual/highlevel-xml.xml [new file with mode: 0644]
docs/manual/intro-preface.xml [new file with mode: 0644]
gst/gstcaps.h
gst/gstelement.c
gst/gstpad.c
gst/gststructure.c
po/fr.po
po/nl.po

index ae36ef4b69eb7ad716864b30a1723f684d5f71cf..f3fa29590e732e27134a73003df2f811d2eb159e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2004-02-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/gstcaps.h:
+       * gst/gstelement.c: (gst_element_base_class_init),
+       (gst_element_class_set_details), (gst_element_clear_pad_caps):
+       * gst/gstpad.c: (gst_pad_link_intersect), (gst_pad_link_fixate),
+       (gst_pad_try_set_caps), (gst_pad_can_link_filtered),
+       (gst_real_pad_dispose):
+       * gst/gststructure.c: (gst_structure_free),
+       (gst_structure_from_string):
+          revert patch that breaks applications, reapply after release
+          to get this fixed properly
+
 2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
 
        * gst/gsttag.c: (_gst_tag_initialize):
diff --git a/common b/common
index 90e64b98d566fd8df793cfc0a9b08b8e5fb356d3..90097339543fb0a705447b599d7a36138cba4232 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 90e64b98d566fd8df793cfc0a9b08b8e5fb356d3
+Subproject commit 90097339543fb0a705447b599d7a36138cba4232
index 8a0038e0b9c8910f6232065f2881526d67db4560..68c62da4bcc0b01c0b962a877c43a68a42077574 100644 (file)
@@ -72,34 +72,6 @@ The GstBin object
 </para>
 
 
-<!-- ##### SIGNAL GstBin::element-added ##### -->
-<para>
-
-</para>
-
-@gstbin: the object which received the signal.
-@arg1: the element that was added to the bin
-
-<!-- ##### SIGNAL GstBin::element-removed ##### -->
-<para>
-
-</para>
-
-@gstbin: the object which received the signal.
-@arg1: the element that was removed from the bin
-
-<!-- ##### SIGNAL GstBin::iterate ##### -->
-<para>
-This signal is emitted when a bin iterates, either automatically or
-due to a #gst_bin_iterate() call.  The return value is used to
-determine if the object method handler processed any data.
-In most normal cases, a user-provided signal handler should return
-FALSE.
-</para>
-
-@gstbin: the object which received the signal.
-@Returns: TRUE if the state of the bin was advanced.
-
 <!-- ##### USER_FUNCTION GstBinPrePostIterateFunction ##### -->
 <para>
 The signature of the callback for the post and pre iterate function as set with
@@ -252,3 +224,31 @@ gst_bin_set_pre_iterate_function() and gst_bin_set_post_iterate_function().
 @clock: 
 
 
+<!-- ##### SIGNAL GstBin::element-added ##### -->
+<para>
+
+</para>
+
+@gstbin: the object which received the signal.
+@arg1: the element that was added to the bin
+
+<!-- ##### SIGNAL GstBin::element-removed ##### -->
+<para>
+
+</para>
+
+@gstbin: the object which received the signal.
+@arg1: the element that was removed from the bin
+
+<!-- ##### SIGNAL GstBin::iterate ##### -->
+<para>
+This signal is emitted when a bin iterates, either automatically or
+due to a #gst_bin_iterate() call.  The return value is used to
+determine if the object method handler processed any data.
+In most normal cases, a user-provided signal handler should return
+FALSE.
+</para>
+
+@gstbin: the object which received the signal.
+@Returns: TRUE if the state of the bin was advanced.
+
index ae99e7a9c88e9ba1a3ea7617540a4297cb22a731..998e6b9079b2107e347f14e76e5a60b8d97b85ad 100644 (file)
@@ -235,21 +235,6 @@ Get the clock flags
 </para>
 
 
-<!-- ##### ARG GstClock:event-diff ##### -->
-<para>
-
-</para>
-
-<!-- ##### ARG GstClock:max-diff ##### -->
-<para>
-Maximum allowed diff for clock sync requests against the real time.
-</para>
-
-<!-- ##### ARG GstClock:stats ##### -->
-<para>
-Boolean property to activate stat generation on the clock.
-</para>
-
 <!-- ##### FUNCTION gst_clock_set_speed ##### -->
 <para>
 
@@ -417,3 +402,18 @@ Boolean property to activate stat generation on the clock.
 @id: 
 
 
+<!-- ##### ARG GstClock:event-diff ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstClock:max-diff ##### -->
+<para>
+Maximum allowed diff for clock sync requests against the real time.
+</para>
+
+<!-- ##### ARG GstClock:stats ##### -->
+<para>
+Boolean property to activate stat generation on the clock.
+</para>
+
index 358c351697810f2f7c219949bb1c4626fa1b1638..4b966d9156ad44828ef9e223d530cf6306879fbe 100644 (file)
@@ -71,59 +71,6 @@ The element object
 </para>
 
 
-<!-- ##### SIGNAL GstElement::eos ##### -->
-<para>
-Signal emited when the element goes to PAUSED due to an end-of-stream
-condition.
-</para>
-
-@gstelement: the object which received the signal.
-
-<!-- ##### SIGNAL GstElement::error ##### -->
-<para>
-This signal is emitted when an element has encountered an error that caused
-it to fail performing its function.
-</para>
-
-@gstelement: the object which received the signal.
-@arg1: the original #GstElement that generated the error.
-@arg2: a #GError containing the translated error message.
-@arg3: a debug string providing additional untranslated debug information, or NULL.
-
-<!-- ##### SIGNAL GstElement::found-tag ##### -->
-<para>
-
-</para>
-
-@gstelement: the object which received the signal.
-@arg1: 
-@arg2: 
-
-<!-- ##### SIGNAL GstElement::new-pad ##### -->
-<para>
-Is triggered whenever a new pad is added to an element.
-</para>
-
-@gstelement: the object which received the signal.
-@arg1: the new pad that was added
-
-<!-- ##### SIGNAL GstElement::pad-removed ##### -->
-<para>
-Is triggered whenever a pad has been removed from the element.
-</para>
-
-@gstelement: the object which received the signal.
-@arg1: The pad that was removed.
-
-<!-- ##### SIGNAL GstElement::state-change ##### -->
-<para>
-Is triggered whenever the state of an element changes.
-</para>
-
-@gstelement: the object which received the signal.
-@arg1: the new state of the object
-@arg2: 
-
 <!-- ##### MACRO gst_element_get_name ##### -->
 <para>
 Gets the name of the element.
@@ -1019,3 +966,56 @@ Helper macro to create query type functions
 @...: list of query types.
 
 
+<!-- ##### SIGNAL GstElement::eos ##### -->
+<para>
+Signal emited when the element goes to PAUSED due to an end-of-stream
+condition.
+</para>
+
+@gstelement: the object which received the signal.
+
+<!-- ##### SIGNAL GstElement::error ##### -->
+<para>
+This signal is emitted when an element has encountered an error that caused
+it to fail performing its function.
+</para>
+
+@gstelement: the object which received the signal.
+@arg1: the original #GstElement that generated the error.
+@arg2: a #GError containing the translated error message.
+@arg3: a debug string providing additional untranslated debug information, or NULL.
+
+<!-- ##### SIGNAL GstElement::found-tag ##### -->
+<para>
+
+</para>
+
+@gstelement: the object which received the signal.
+@arg1: 
+@arg2: 
+
+<!-- ##### SIGNAL GstElement::new-pad ##### -->
+<para>
+Is triggered whenever a new pad is added to an element.
+</para>
+
+@gstelement: the object which received the signal.
+@arg1: the new pad that was added
+
+<!-- ##### SIGNAL GstElement::pad-removed ##### -->
+<para>
+Is triggered whenever a pad has been removed from the element.
+</para>
+
+@gstelement: the object which received the signal.
+@arg1: The pad that was removed.
+
+<!-- ##### SIGNAL GstElement::state-change ##### -->
+<para>
+Is triggered whenever the state of an element changes.
+</para>
+
+@gstelement: the object which received the signal.
+@arg1: the new state of the object
+@arg2: 
+
index cdc3cfa10e529e7770a2aed48c532be3b952674c..d828fa3114b3c052aeedafe19782f6186a017763 100644 (file)
@@ -209,19 +209,6 @@ The GstIndex object
 </para>
 
 
-<!-- ##### SIGNAL GstIndex::entry-added ##### -->
-<para>
-Is emited when a new entry is added to the index.
-</para>
-
-@gstindex: the object which received the signal.
-@arg1: The entry added to the index.
-
-<!-- ##### ARG GstIndex:resolver ##### -->
-<para>
-
-</para>
-
 <!-- ##### FUNCTION gst_index_new ##### -->
 <para>
 
@@ -414,3 +401,16 @@ Is emited when a new entry is added to the index.
 @id: 
 
 
+<!-- ##### SIGNAL GstIndex::entry-added ##### -->
+<para>
+Is emited when a new entry is added to the index.
+</para>
+
+@gstindex: the object which received the signal.
+@arg1: The entry added to the index.
+
+<!-- ##### ARG GstIndex:resolver ##### -->
+<para>
+
+</para>
+
index cf69ab93eedd17a3fdb5df69a60e76e0fbe72a9f..52616a22157fc935d8ed3c1107bd490457f5dd18 100644 (file)
@@ -40,47 +40,6 @@ The GstObject
 </para>
 
 
-<!-- ##### SIGNAL GstObject::deep-notify ##### -->
-<para>
-The deep notify signal is used to be notified of property changes.
-it is typically attached to the toplevel bin to receive notifications
-from all the elements contained in that bin.
-</para>
-
-@gstobject: the object which received the signal.
-@arg1: the object that originated the signal
-@arg2: the property that changed
-
-<!-- ##### SIGNAL GstObject::object-saved ##### -->
-<para>
-Is trigered whenever a new object is saved to XML. You can connect to
-this signal to insert custom XML tags into the core XML.
-</para>
-
-@gstobject: the object which received the signal.
-@arg1: the xmlNodePtr of the parent node
-
-<!-- ##### SIGNAL GstObject::parent-set ##### -->
-<para>
-Is emitted when the parent of an object is set.
-</para>
-
-@gstobject: the object which received the signal.
-@arg1: the new parent
-
-<!-- ##### SIGNAL GstObject::parent-unset ##### -->
-<para>
-Is emitted when the parent of an object is unset.
-</para>
-
-@gstobject: the object which received the signal.
-@arg1: the old parent
-
-<!-- ##### ARG GstObject:name ##### -->
-<para>
-The name of the object
-</para>
-
 <!-- ##### MACRO GST_FLAGS ##### -->
 <para>
 This macro returns the entire set of flags for the object.
@@ -331,3 +290,44 @@ Check if the object has been destroyed.
 @Returns: 
 
 
+<!-- ##### SIGNAL GstObject::deep-notify ##### -->
+<para>
+The deep notify signal is used to be notified of property changes.
+it is typically attached to the toplevel bin to receive notifications
+from all the elements contained in that bin.
+</para>
+
+@gstobject: the object which received the signal.
+@arg1: the object that originated the signal
+@arg2: the property that changed
+
+<!-- ##### SIGNAL GstObject::object-saved ##### -->
+<para>
+Is trigered whenever a new object is saved to XML. You can connect to
+this signal to insert custom XML tags into the core XML.
+</para>
+
+@gstobject: the object which received the signal.
+@arg1: the xmlNodePtr of the parent node
+
+<!-- ##### SIGNAL GstObject::parent-set ##### -->
+<para>
+Is emitted when the parent of an object is set.
+</para>
+
+@gstobject: the object which received the signal.
+@arg1: the new parent
+
+<!-- ##### SIGNAL GstObject::parent-unset ##### -->
+<para>
+Is emitted when the parent of an object is unset.
+</para>
+
+@gstobject: the object which received the signal.
+@arg1: the old parent
+
+<!-- ##### ARG GstObject:name ##### -->
+<para>
+The name of the object
+</para>
+
index b20d655c80b19811a5f8297cd242e2f818f5e2f7..a2736922d0eb262306632afe057fbfc2cb81a77b 100644 (file)
@@ -87,15 +87,6 @@ The padtemplate object.
 </para>
 
 
-<!-- ##### SIGNAL GstPadTemplate::pad-created ##### -->
-<para>
-This signal is fired when an element creates a pad from this 
-template.
-</para>
-
-@gstpadtemplate: the object which received the signal.
-@arg1: The pad that was created.
-
 <!-- ##### ENUM GstPadTemplateFlags ##### -->
 <para>
 Flags for the padtemplate
@@ -177,3 +168,12 @@ Check if the properties of the padtemplate are fixed
 @Returns: 
 
 
+<!-- ##### SIGNAL GstPadTemplate::pad-created ##### -->
+<para>
+This signal is fired when an element creates a pad from this 
+template.
+</para>
+
+@gstpadtemplate: the object which received the signal.
+@arg1: The pad that was created.
+
index 8b63b9e9fe787b2fe9bba8efb7a6918ce4353134..ba393dd5da448a0a73bac6c89e7e93347a4b4b55 100644 (file)
@@ -6023,16 +6023,6 @@ Query the element for the current mime type
 </para>
 
 
-<!-- ##### SIGNAL GstXML::object-loaded ##### -->
-<para>
-
-</para>
-
-@: 
-@: 
-@:
-
-
 <!-- ##### USER_FUNCTION GstXMLRegistryAddPathList ##### -->
 <para>
 
index 38a7691b0ae91e8ee1edb76d1b9fd75197890486..6d7021906dd2da6de99a2d0ac71d3cfba5cb7bdd 100644 (file)
@@ -34,24 +34,24 @@ The GstThread object
 </para>
 
 
-<!-- ##### SIGNAL GstThread::shutdown ##### -->
+<!-- ##### FUNCTION gst_thread_new ##### -->
 <para>
 
 </para>
 
-@gstthread: the object which received the signal.
+@name: 
+@Returns: 
 
-<!-- ##### ARG GstThread:priority ##### -->
-<para>
-The thread priority
-</para>
 
-<!-- ##### FUNCTION gst_thread_new ##### -->
+<!-- ##### SIGNAL GstThread::shutdown ##### -->
 <para>
 
 </para>
 
-@name: 
-@Returns: 
+@gstthread: the object which received the signal.
 
+<!-- ##### ARG GstThread:priority ##### -->
+<para>
+The thread priority
+</para>
 
index ea4e4bd24aaa90b32040c83d698c52fc2ae19695..08450b21b9fcdd370fac1bdfcee0a65f4dd01147 100644 (file)
@@ -105,3 +105,25 @@ All GstElements can be serialized to an XML presentation and subsequently loaded
 @Returns: 
 
 
+<!-- ##### SIGNAL GstXML::object-loaded ##### -->
+<para>
+
+</para>
+
+@: 
+@: 
+@:
+
+@gstxml: the object which received the signal.
+@arg1: 
+@arg2: 
+
+<!-- ##### SIGNAL GstXML::object-loaded ##### -->
+<para>
+
+</para>
+
+@gstxml: the object which received the signal.
+@arg1: 
+@arg2: 
+
diff --git a/docs/manual/advanced-clocks.xml b/docs/manual/advanced-clocks.xml
new file mode 100644 (file)
index 0000000..68b3720
--- /dev/null
@@ -0,0 +1,5 @@
+<chapter id="chapter-clocks">
+  <title>Clocks in GStreamer</title>
+  <para> 
+  </para>
+</chapter>
diff --git a/docs/manual/basics-bins.xml b/docs/manual/basics-bins.xml
new file mode 100644 (file)
index 0000000..c1d6b3b
--- /dev/null
@@ -0,0 +1,49 @@
+<chapter id="chapter-bins">
+  <title>Bins</title>
+  <para> 
+    A bin is a container element. You can add elements to a bin. Since a bin is 
+    an element itself, it can also be added to another bin.
+  </para>
+  <para> 
+    Bins allow you to combine a group of linked elements into one logical element. You do
+    not deal with the individual elements anymore but with just one element, the bin.
+    We will see that this is extremely powerful when you are going to construct
+    complex pipelines since it allows you to break up the pipeline in smaller chunks.
+  </para>
+  <para> 
+    The bin will also manage the elements contained in it. It will figure out how
+    the data will flow in the bin and generate an optimal plan for that data flow. Plan
+    generation is one of the most complicated procedures in GStreamer.
+  </para>
+
+  <figure float="1" id="section-bin-img">
+    <title>Visualisation of a bin with some elements in it</title>
+      <mediaobject>  
+        <imageobject>
+          <imagedata fileref="images/bin-element.&image;" format="&IMAGE;" />
+        </imageobject>
+      </mediaobject>
+  </figure>
+
+  <para> 
+    There are two specialized bins available to the GStreamer programmer:
+
+    <itemizedlist>
+      <listitem>
+        <para>
+          a pipeline: a generic container that allows scheduling of the
+          containing elements.  The toplevel bin has to be a pipeline.
+          Every application thus needs at least one of these.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          a thread: a bin that will be run in a separate execution thread.
+         You will have to use this bin if you have to carefully
+          synchronize audio and video, or for buffering. You will learn
+         more about threads in <xref linkend="chapter-threads"/>.
+        </para>
+      </listitem>
+    </itemizedlist>
+  </para>
+</chapter>
diff --git a/docs/manual/basics-plugins.xml b/docs/manual/basics-plugins.xml
new file mode 100644 (file)
index 0000000..3189384
--- /dev/null
@@ -0,0 +1,31 @@
+<chapter id="chapter-plugins">
+  <title>Plugins</title>
+  <!-- FIXME: introduce type definitions before this chapter -->
+  <para> 
+    A plugin is a shared library that contains at least one of the following
+    items:
+  </para>
+
+  <itemizedlist>
+    <listitem>
+      <para>
+        one or more element factories
+      </para>
+    </listitem>
+    <listitem>
+      <para>
+        one or more type definitions
+      </para>
+    </listitem>
+    <listitem>
+      <para>
+        one or more auto-pluggers
+      </para>
+    </listitem>
+    <listitem>
+      <para>
+        exported symbols for use in other plugins
+      </para>
+    </listitem>
+  </itemizedlist>
+</chapter>
diff --git a/docs/manual/highlevel-components.xml b/docs/manual/highlevel-components.xml
new file mode 100644 (file)
index 0000000..2875d46
--- /dev/null
@@ -0,0 +1,37 @@
+<chapter id="chapter-components">
+  <title>Components</title>
+
+  <para>
+    FIXME: This chapter is way out of date.
+  </para>
+
+  <para> 
+    <application>GStreamer</application> includes components that people can include
+    in their programs.
+  </para>
+
+  <sect1 id="section-components-gst-play">
+    <title>GstPlay</title>
+    <para> 
+      GstPlay is a GtkWidget with a simple API to play, pause and stop a media file.
+    </para>
+      
+  </sect1>
+
+  <sect1 id="section-components-gst-media-play">
+    <title>GstMediaPlay</title>
+    <para> 
+      GstMediaPlay is a complete player widget.
+    </para>
+      
+  </sect1>
+
+  <sect1 id="section-components-gst-editor">
+    <title>GstEditor</title>
+    <para> 
+      GstEditor is a set of widgets to display a graphical representation of a 
+      pipeline.
+    </para> 
+  </sect1>
+
+</chapter>
diff --git a/docs/manual/highlevel-xml.xml b/docs/manual/highlevel-xml.xml
new file mode 100644 (file)
index 0000000..cd01041
--- /dev/null
@@ -0,0 +1,283 @@
+<chapter id="chapter-xml">
+  <title>XML in <application>GStreamer</application></title>
+  <para> 
+    <application>GStreamer</application> uses XML to store and load
+    its pipeline definitions. XML is also used internally to manage the
+    plugin registry. The plugin registry is a file that contains the definition
+    of all the plugins <application>GStreamer</application> knows about to have 
+    quick access to the specifics of the plugins.
+  </para>
+
+  <para>
+    We will show you how you can save a pipeline to XML and how you can reload that
+    XML file again for later use. 
+  </para>
+  
+  <sect1 id="section-xml-write">
+    <title>Turning GstElements into XML</title>
+
+    <para>
+      We create a simple pipeline and write it to stdout with
+      gst_xml_write_file (). The following code constructs an MP3 player
+      pipeline with two threads and then writes out the XML both to stdout
+      and to a file. Use this program with one argument: the MP3 file on disk.
+    </para>
+
+    <programlisting>
+/* example-begin xml-mp3.c */
+#include &lt;stdlib.h&gt;
+#include &lt;gst/gst.h&gt;
+
+gboolean playing;
+
+int 
+main (int argc, char *argv[]) 
+{
+  GstElement *filesrc, *osssink, *queue, *queue2, *decode;
+  GstElement *bin;
+  GstElement *thread, *thread2;
+
+  gst_init (&amp;argc,&amp;argv);
+
+  if (argc != 2) {
+    g_print ("usage: %s &lt;mp3 filename&gt;\n", argv[0]);
+    exit (-1);
+  }
+
+  /* create a new thread to hold the elements */
+  thread = gst_element_factory_make ("thread", "thread");
+  g_assert (thread != NULL);
+  thread2 = gst_element_factory_make ("thread", "thread2");
+  g_assert (thread2 != NULL);
+
+  /* create a new bin to hold the elements */
+  bin = gst_bin_new ("bin");
+  g_assert (bin != NULL);
+
+  /* create a disk reader */
+  filesrc = gst_element_factory_make ("filesrc", "disk_source");
+  g_assert (filesrc != NULL);
+  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+
+  queue = gst_element_factory_make ("queue", "queue");
+  queue2 = gst_element_factory_make ("queue", "queue2");
+
+  /* and an audio sink */
+  osssink = gst_element_factory_make ("osssink", "play_audio");
+  g_assert (osssink != NULL);
+
+  decode = gst_element_factory_make ("mad", "decode");
+  g_assert (decode != NULL);
+
+  /* add objects to the main bin */
+  gst_bin_add_many (GST_BIN (bin), filesrc, queue, NULL);
+
+  gst_bin_add_many (GST_BIN (thread), decode, queue2, NULL);
+
+  gst_bin_add (GST_BIN (thread2), osssink);
+  
+  gst_element_link_many (filesrc, queue, decode, queue2, osssink, NULL);
+
+  gst_bin_add_many (GST_BIN (bin), thread, thread2, NULL);
+
+  /* write the bin to stdout */
+  gst_xml_write_file (GST_ELEMENT (bin), stdout);
+
+  /* write the bin to a file */
+  gst_xml_write_file (GST_ELEMENT (bin), fopen ("xmlTest.gst", "w"));
+
+  exit (0);
+}
+/* example-end xml-mp3.c */
+    </programlisting>
+    <para>
+      The most important line is:
+    </para>
+    <programlisting>
+  gst_xml_write_file (GST_ELEMENT (bin), stdout);
+    </programlisting>
+    <para>
+      gst_xml_write_file () will turn the given element into an xmlDocPtr that 
+      is then formatted and saved to a file. To save to disk, pass the result
+      of a fopen(2) as the second argument.
+    </para>
+    <para>
+      The complete element hierarchy will be saved along with the inter element
+      pad links and the element parameters. Future <application>GStreamer</application>
+      versions will also allow you to store the signals in the XML file.
+    </para>
+  </sect1>
+
+  <sect1 id="section-xml-load">
+    <title>Loading a GstElement from an XML file</title>
+    <para>
+      Before an XML file can be loaded, you must create a GstXML object. 
+      A saved XML file can then be loaded with the 
+      gst_xml_parse_file (xml, filename, rootelement) method.
+      The root element can optionally left NULL. The following code example loads
+      the previously created XML file and runs it.
+    </para>
+    <programlisting>
+#include &lt;stdlib.h&gt;
+#include &lt;gst/gst.h&gt;
+
+int 
+main(int argc, char *argv[]) 
+{
+  GstXML *xml;
+  GstElement *bin;
+  gboolean ret;
+
+  gst_init (&amp;argc, &amp;argv);
+
+  xml = gst_xml_new ();
+
+  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);
+
+  while (gst_bin_iterate(GST_BIN(bin)));
+
+  gst_element_set_state (bin, GST_STATE_NULL);
+
+  exit (0);
+}
+    </programlisting>
+    <para>
+      gst_xml_get_element (xml, "name") can be used to get a specific element 
+      from the XML file. 
+    </para>
+    <para>
+      gst_xml_get_topelements (xml) can be used to get a list of all toplevel elements
+      in the XML file.
+    </para>
+    <para>
+      In addition to loading a file, you can also load a from a xmlDocPtr and
+      an in memory buffer using gst_xml_parse_doc and gst_xml_parse_memory
+      respectively. Both of these methods return a gboolean indicating
+      success or failure of the requested action.
+    </para>
+  </sect1>
+  <sect1 id="section-xml-custom">
+    <title>Adding custom XML tags into the core XML data</title>
+
+    <para>
+      It is possible to add custom XML tags to the core XML created with
+      gst_xml_write. This feature can be used by an application to add more
+      information to the save plugins. The editor will for example insert
+      the position of the elements on the screen using the custom XML tags.
+    </para>
+    <para>
+      It is strongly suggested to save and load the custom XML tags using
+      a namespace. This will solve the problem of having your XML tags 
+      interfere with the core XML tags.
+    </para>
+    <para>
+      To insert a hook into the element saving procedure you can link
+      a signal to the GstElement using the following piece of code:
+    </para>
+    <programlisting>
+xmlNsPtr ns;
+
+  ...
+  ns = xmlNewNs (NULL, "http://gstreamer.net/gst-test/1.0/", "test");
+    ...
+  thread = gst_element_factory_make ("thread", "thread");
+  g_signal_connect (G_OBJECT (thread), "object_saved", 
+                    G_CALLBACK (object_saved), g_strdup ("decoder thread"));
+    ...
+    </programlisting>
+    <para>
+      When the thread is saved, the object_save method will be called. Our example
+      will insert a comment tag:
+    </para>
+    <programlisting>
+static void
+object_saved (GstObject *object, xmlNodePtr parent, gpointer data)
+{
+  xmlNodePtr child;
+
+  child = xmlNewChild (parent, ns, "comment", NULL);
+  xmlNewChild (child, ns, "text", (gchar *)data);
+}
+    </programlisting>
+    <para>
+      Adding the custom tag code to the above example you will get an XML file
+      with the custom tags in it. Here's an excerpt:
+    </para>
+    <programlisting>
+          ...
+        &lt;gst:element&gt;
+          &lt;gst:name&gt;thread&lt;/gst:name&gt;
+          &lt;gst:type&gt;thread&lt;/gst:type&gt;
+          &lt;gst:version&gt;0.1.0&lt;/gst:version&gt;
+         ...
+        &lt;/gst:children&gt;
+        &lt;test:comment&gt;
+          &lt;test:text&gt;decoder thread&lt;/test:text&gt;
+        &lt;/test:comment&gt;
+      &lt;/gst:element&gt;
+          ...
+    </programlisting>
+    <para>
+      To retrieve the custom XML again, you need to attach a signal to 
+      the GstXML object used to load the XML data. You can then parse your
+      custom XML from the XML tree whenever an object is loaded.
+    </para>
+
+    <para>
+      We can extend our previous example with the following piece of
+      code.
+    </para>
+
+    <programlisting>
+  xml = gst_xml_new ();
+
+  g_signal_connect (G_OBJECT (xml), "object_loaded", 
+                    G_CALLBACK (xml_loaded), xml);
+
+  ret = gst_xml_parse_file (xml, "xmlTest.gst", NULL);
+  g_assert (ret == TRUE);
+    </programlisting>
+
+    <para>
+      Whenever a new object has been loaded, the xml_loaded function will
+      be called. This function looks like:
+    </para>
+    <programlisting>
+static void
+xml_loaded (GstXML *xml, GstObject *object, xmlNodePtr self, gpointer data)
+{
+  xmlNodePtr children = self-&gt;xmlChildrenNode;
+
+  while (children) {
+    if (!strcmp (children-&gt;name, "comment")) {
+      xmlNodePtr nodes = children-&gt;xmlChildrenNode;
+
+      while (nodes) {
+        if (!strcmp (nodes-&gt;name, "text")) {
+          gchar *name = g_strdup (xmlNodeGetContent (nodes));
+          g_print ("object %s loaded with comment '%s'\n",
+                   gst_object_get_name (object), name);
+        }
+        nodes = nodes-&gt;next;
+      }
+    }
+    children = children-&gt;next;
+  }
+}
+    </programlisting>
+    <para>
+      As you can see, you'll get a handle to the GstXML object, the 
+      newly loaded GstObject and the xmlNodePtr that was used to create
+      this object. In the above example we look for our special tag inside
+      the XML tree that was used to load the object and we print our
+      comment to the console.
+    </para>
+  </sect1>
+
+</chapter>
diff --git a/docs/manual/intro-preface.xml b/docs/manual/intro-preface.xml
new file mode 100644 (file)
index 0000000..fd38af1
--- /dev/null
@@ -0,0 +1,59 @@
+<chapter id="chapter-intro">
+  <title>Introduction</title>
+  <para> 
+    This chapter gives you an overview of the technologies described in this
+    book.  
+  </para>
+
+  <sect1 id="section-intro-what">
+    <title>What is GStreamer?</title>
+    <para> 
+      GStreamer is a framework for creating streaming media applications.
+      The fundamental design comes from the video pipeline at Oregon Graduate
+      Institute, as well as some ideas from DirectShow.  
+    </para>
+    <para>
+      GStreamer's development framework makes it possible to write any type of
+      streaming multimedia application. The GStreamer framework is designed
+      to make it easy to write applications that handle audio or video or both.
+      It isn't restricted to audio and video, and can process any kind of
+      data flow.
+      The pipeline design is made to have little overhead above what the
+      applied filters induce. This makes GStreamer a good framework for designing
+      even high-end audio applications which put high demands on latency. 
+    </para> 
+
+    <para>
+      One of the the most obvious uses of GStreamer is using it to build
+      a media player.  GStreamer already includes components for building a
+      media player that can support a very wide variety of formats, including
+      MP3, Ogg Vorbis, MPEG1, MPEG2, AVI, Quicktime, mod, and more.  GStreamer,
+      however, is much more than just another media player. Its main advantages
+      are that the pluggable components can be mixed and matched into arbitrary
+      pipelines so that it's possible to write a full-fledged video or audio
+      editing application.
+    </para> 
+
+    <para>
+      The framework is based on plugins that will provide the various codec 
+      and other functionality. The plugins can be linked and arranged in
+      a pipeline. This pipeline defines the flow of the data. Pipelines can 
+      also be edited with a GUI editor and saved as XML so that pipeline
+      libraries can be made with a minimum of effort.
+    </para> 
+
+    <para>
+      The GStreamer core function is to provide a framework for plugins, data flow 
+      and media type handling/negotiation. 
+      It also provides an API to write applications using the various plugins.
+    </para> 
+
+    <para>
+      This book is about GStreamer from a developer's point of view; it describes
+      how to write a GStreamer application using the GStreamer libraries and tools.
+      For an explanation about writing plugins, we suggest the Plugin Writers Guide.
+    </para> 
+
+  </sect1>
+</chapter>
index fcf44a68e91cc557e8890211b44cab035133fcb1..aac52e5c7726d275247342085a7ce143667d7ecd 100644 (file)
@@ -58,10 +58,12 @@ struct _GstStaticCaps {
 
 #define GST_TYPE_CAPS gst_caps_get_type()
 
-#ifndef GST_DISABLE_DEPRECATED
-#define GST_DEBUG_CAPS(string, caps) \
-  GST_DEBUG ( string "%s: " GST_PTR_FORMAT, caps)
-#endif
+/* FIXME Company should decide the best way to do this */
+#define GST_DEBUG_CAPS(string, caps) do {              \
+  char *s = gst_caps_to_string(caps);                  \
+  GST_DEBUG ( "%s: %s", (string), s);                  \
+  g_free(s);                                           \
+}while(0)
 
 
 void _gst_caps_initialize (void);
index afbcc78082f9c12ca066bf6c99afdd5b255219b0..f73ca65e77669f12936a67e4ddeb2f4955ac5302 100644 (file)
@@ -53,7 +53,7 @@ enum {
 };
 
 extern void                    __gst_element_details_clear     (GstElementDetails *dp);
-extern void                    __gst_element_details_copy      (GstElementDetails *dest, 
+extern void                    __gst_element_details_set       (GstElementDetails *dest, 
                                                                 const GstElementDetails *src);
 
 static void                    gst_element_class_init          (GstElementClass *klass);
@@ -172,7 +172,6 @@ gst_element_base_class_init (gpointer g_class)
   gobject_class->set_property =                GST_DEBUG_FUNCPTR(gst_element_real_set_property);
   gobject_class->get_property =                GST_DEBUG_FUNCPTR(gst_element_real_get_property);
 
-  memset (&element_class->details, 0, sizeof (GstElementDetails));
   element_class->padtemplates = NULL;
 }
 
@@ -1383,7 +1382,7 @@ gst_element_class_set_details (GstElementClass *klass, const GstElementDetails *
   g_return_if_fail (GST_IS_ELEMENT_CLASS (klass));
   g_return_if_fail (GST_IS_ELEMENT_DETAILS (details));
   
-  __gst_element_details_copy (&klass->details, details);
+  __gst_element_details_set (&klass->details, details);
 }
 
 /**
@@ -2757,9 +2756,6 @@ gst_element_clear_pad_caps (GstElement *element)
     GstPad *pad = GST_PAD (pads->data);
 
     gst_pad_unnegotiate (pad);
-    if (GST_IS_REAL_PAD (pad)){
-      gst_caps_replace (&GST_RPAD_EXPLICIT_CAPS (pad), NULL);
-    }
 
     pads = g_list_next (pads);
   }
index cfaeeaaa3d8185cc7dcbc17287afe99e99de473a..0fb5331a74dc05f4aea1e6d6c607e6bc753dbc05 100644 (file)
@@ -35,6 +35,9 @@
 
 #define GST_CAT_DEFAULT GST_CAT_PADS
 
+/* FIXME */
+#define gst_caps_debug(a,b) GST_DEBUG_CAPS(b,a)
+
 
 enum {
   TEMPL_PAD_CREATED,
@@ -1043,21 +1046,21 @@ static void gst_pad_link_intersect (GstPadLink *link)
 
   GST_DEBUG ("intersecting link from %s:%s to %s:%s",
       GST_DEBUG_PAD_NAME (link->srcpad), GST_DEBUG_PAD_NAME (link->sinkpad));
-  GST_DEBUG ("srccaps " GST_PTR_FORMAT, link->srccaps);
-  GST_DEBUG ("sinkcaps " GST_PTR_FORMAT, link->sinkcaps);
-  GST_DEBUG ("filtercaps " GST_PTR_FORMAT, link->filtercaps);
+  GST_DEBUG_CAPS ("srccaps", link->srccaps);
+  GST_DEBUG_CAPS ("sinkcaps", link->sinkcaps);
+  GST_DEBUG_CAPS ("filtercaps", link->filtercaps);
 
   pad_intersection = gst_caps_intersect (link->srccaps, link->sinkcaps);
 
   if (link->filtercaps) {
-    GST_DEBUG ("unfiltered intersection " GST_PTR_FORMAT, pad_intersection);
+    GST_DEBUG_CAPS ("unfiltered intersection", pad_intersection);
     link->caps = gst_caps_intersect (pad_intersection, link->filtercaps);
     gst_caps_free (pad_intersection);
   } else {
     link->caps = pad_intersection;
   }
 
-  GST_DEBUG ("intersection " GST_PTR_FORMAT, link->caps);
+  GST_DEBUG_CAPS ("intersection", link->caps);
 }
 
 static gboolean
@@ -1092,7 +1095,7 @@ gst_pad_link_fixate (GstPadLink *link)
   g_return_if_fail (caps != NULL);
   g_return_if_fail (!gst_caps_is_empty(caps));
 
-  GST_DEBUG ("trying to fixate caps " GST_PTR_FORMAT, caps);
+  GST_DEBUG_CAPS ("trying to fixate caps", caps);
 
   while (!gst_caps_is_fixed (caps)) {
     int i;
@@ -1103,31 +1106,31 @@ gst_pad_link_fixate (GstPadLink *link)
        case 0:
          g_signal_emit (G_OBJECT (link->srcpad),
              gst_real_pad_signals[REAL_FIXATE], 0, caps, &newcaps);
-         GST_DEBUG ("app srcpad signal fixated to " GST_PTR_FORMAT, newcaps);
+         GST_DEBUG_CAPS ("app srcpad signal fixated to", newcaps);
          break;
        case 1:
          g_signal_emit (G_OBJECT (link->sinkpad),
              gst_real_pad_signals[REAL_FIXATE], 0, caps, &newcaps);
-         GST_DEBUG ("app sinkpad signal fixated to " GST_PTR_FORMAT, newcaps);
+         GST_DEBUG_CAPS ("app sinkpad signal fixated to", newcaps);
          break;
        case 2:
           if (GST_RPAD_FIXATEFUNC(link->srcpad)) {
            newcaps = GST_RPAD_FIXATEFUNC(link->srcpad) (
                GST_PAD (link->srcpad), caps);
-           GST_DEBUG ("srcpad fixated to " GST_PTR_FORMAT, newcaps);
+           GST_DEBUG_CAPS ("srcpad fixated to", newcaps);
          }
          break;
        case 3:
           if (GST_RPAD_FIXATEFUNC(link->sinkpad)) {
            newcaps = GST_RPAD_FIXATEFUNC(link->sinkpad) (
                GST_PAD (link->sinkpad), caps);
-           GST_DEBUG ("sinkpad fixated to " GST_PTR_FORMAT, newcaps);
+           GST_DEBUG_CAPS ("sinkpad fixated to", newcaps);
          }
          break;
        case 4:
           newcaps = _gst_pad_default_fixate_func (
              GST_PAD(link->srcpad), caps);
-         GST_DEBUG ("core fixated to GST_PTR_FORMAT", newcaps);
+         GST_DEBUG_CAPS ("core fixated to", newcaps);
          break;
       }
       if (newcaps) {
@@ -1329,7 +1332,7 @@ gst_pad_try_set_caps (GstPad *pad, const GstCaps *caps)
     g_warning ("trying to set non fixed caps on pad %s:%s, not allowed",
                GST_DEBUG_PAD_NAME (pad));
 
-    GST_DEBUG ("unfixed caps " GST_PTR_FORMAT, caps);
+    gst_caps_debug (caps, "unfixed caps");
     return GST_PAD_LINK_REFUSED;
   }
 
@@ -1536,12 +1539,9 @@ gst_pad_can_link_filtered (GstPad *srcpad, GstPad *sinkpad,
   if (filtercaps) link->filtercaps = gst_caps_copy (filtercaps);
 
   gst_pad_link_intersect (link);
-  if (gst_caps_is_empty (link->caps)) {
-    gst_pad_link_free (link);
+  if (gst_caps_is_empty (link->caps))
     return FALSE;
-  }
 
-  gst_pad_link_free (link);
   return TRUE;
 }
 
@@ -2716,11 +2716,6 @@ gst_real_pad_dispose (GObject *object)
     gst_element_remove_pad (GST_ELEMENT (GST_OBJECT_PARENT (pad)), pad);
   }
   
-  if (GST_RPAD_EXPLICIT_CAPS (pad)) {
-    GST_ERROR_OBJECT (pad, "still explicit caps %"GST_PTR_FORMAT" set", GST_RPAD_EXPLICIT_CAPS (pad));
-    g_warning ("pad %p has still explicit caps set", pad);
-    gst_caps_replace (&GST_RPAD_EXPLICIT_CAPS (pad), NULL);
-  }
   G_OBJECT_CLASS (real_pad_parent_class)->dispose (object);
 }
 
index 7e1cb0ea139c240bf51babfb053a134d44acd1a3..d593371ce1b4d7e6624f6bec67ef2757aee16ce0 100644 (file)
@@ -237,6 +237,8 @@ void gst_structure_free(GstStructure *structure)
   GstStructureField *field;
   int i;
 
+  return;
+
   g_return_if_fail(structure != NULL);
 
   for(i=0;i<structure->fields->len;i++){
@@ -1335,8 +1337,9 @@ gst_structure_from_string (const gchar *string, gchar **end)
   char *w;
   char *r;
   char save;
-  GstStructure *structure = NULL;
+  GstStructure *structure;
   GstStructureField field = { 0 };
+  gboolean res;
 
   g_return_val_if_fail(string != NULL, NULL);
 
@@ -1344,11 +1347,11 @@ gst_structure_from_string (const gchar *string, gchar **end)
   r = copy;
 
   name = r;
-  if (!_gst_structure_parse_string (r, &w, &r))
-    goto error;
+  res = _gst_structure_parse_string (r, &w, &r);
+  if (!res) return NULL;
   
   while (g_ascii_isspace(*r)) r++;
-  if(*r != 0 && *r != ';' && *r != ',') goto error;
+  if(*r != 0 && *r != ';' && *r != ',') return NULL;
 
   save = *w;
   *w = 0;
@@ -1356,28 +1359,24 @@ gst_structure_from_string (const gchar *string, gchar **end)
   *w = save;
 
   while (*r && (*r != ';')){
-    if(*r != ',')
-      goto error;
+    if(*r != ',') {
+      return NULL;
+    }
     r++;
     while (*r && g_ascii_isspace(*r)) r++;
 
     memset(&field,0,sizeof(field));
-    if (!_gst_structure_parse_field (r, &r, &field))
-      goto error;
+    res = _gst_structure_parse_field (r, &r, &field);
+    if (!res) {
+      gst_structure_free (structure);
+      return NULL;
+    }
     gst_structure_set_field(structure, &field);
     while (*r && g_ascii_isspace(*r)) r++;
   }
 
   if (end) *end = (char *)string + (r - copy);
-
-  g_free (copy);
   return structure;
-
-error:
-  if (structure)
-    gst_structure_free (structure);
-  g_free (copy);
-  return NULL;
 }
 
 static void
index ca0a9250fd1e024b11ea5f48e56bb2c3413ea506..8e1e3050081e65e42f917a395992fbb1d9b18373 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GStreamer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-01-31 23:31+0100\n"
+"POT-Creation-Date: 2004-02-05 19:44+0100\n"
 "PO-Revision-Date: 2004-01-13 16:52+0100\n"
 "Last-Translator: Julien Moutte <julien@moutte.net>\n"
 "Language-Team: French <fr@li.org>\n"
@@ -15,72 +15,72 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: gst/gst.c:118
+#: gst/gst.c:120
 msgid "Print the GStreamer version"
 msgstr "Afficher la version de GStreamer"
 
-#: gst/gst.c:119
+#: gst/gst.c:121
 msgid "Make all warnings fatal"
 msgstr "Rendre tout les avertissements bloquants"
 
-#: gst/gst.c:121
+#: gst/gst.c:123
 msgid ""
 "Default debug level from 1 (only error) to 5 (anything) or 0 for no output"
 msgstr ""
 "Niveau de deboguage par defaut de 1 (que les erreurs) a 5 (tout) ou 0 pour "
 "n'avoir aucun affichage"
 
-#: gst/gst.c:121
+#: gst/gst.c:123
 msgid "LEVEL"
 msgstr "NIVEAU"
 
-#: gst/gst.c:122
+#: gst/gst.c:124
+#, fuzzy
 msgid ""
 "Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories.\n"
-"Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 msgstr ""
 "Liste séparée par des virgules de paires nom_catégorie:niveau definissant "
 "des niveaux spécifiques pour chaque catégorie.\n"
 "Exemple: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
-#: gst/gst.c:122
+#: gst/gst.c:124
 msgid "CATEGORIES"
 msgstr "CATEGORIES"
 
-#: gst/gst.c:123
+#: gst/gst.c:125
 msgid "Disable color debugging output"
 msgstr "Désactiver la couleur dans la sortie de deboguage"
 
-#: gst/gst.c:124
+#: gst/gst.c:126
 msgid "Disable debugging"
 msgstr "Désactiver la sortie de deboguage"
 
-#: gst/gst.c:125
+#: gst/gst.c:127
 msgid "Print available debug categories and exit"
 msgstr "Afficher les catégories de deboguage disponibles et quitter"
 
-#: gst/gst.c:127
+#: gst/gst.c:129
 msgid "Disable accelerated CPU instructions"
 msgstr "Désactiver les instructions accélerées du processeur"
 
-#: gst/gst.c:128
+#: gst/gst.c:130
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Activer un diagnostique détaillé du chargement des plugins"
 
-#: gst/gst.c:129
+#: gst/gst.c:131
 msgid "path list for loading plugins (separated by '"
 msgstr "liste de chemins pour le chargement des plugins (séparés par '"
 
-#: gst/gst.c:129
+#: gst/gst.c:131
 msgid "')"
 msgstr "')"
 
-#: gst/gst.c:129
+#: gst/gst.c:131
 msgid "PATHS"
 msgstr "CHEMINS"
 
-#: gst/gst.c:130
+#: gst/gst.c:132
 msgid ""
 "Comma-separated list of plugins to preload in addition to the list stored in "
 "env variable GST_PLUGIN_PATH"
@@ -88,44 +88,44 @@ msgstr ""
 "Liste séparée par des virgules de plugins a precharger en plus de la liste "
 "contenue dans la variable d'environnement GST_PLUGIN_PATH"
 
-#: gst/gst.c:130
+#: gst/gst.c:132
 msgid "PLUGINS"
 msgstr "PLUGINS"
 
-#: gst/gst.c:131
+#: gst/gst.c:133
 msgid "Disable trapping of segmentation faults during plugin loading"
 msgstr ""
 "Désactiver la detection des erreurs de segmentation pendant le chargement "
 "des plugins"
 
-#: gst/gst.c:132
+#: gst/gst.c:134
 msgid "Scheduler to use ('"
 msgstr "Planificateur a utiliser ('"
 
-#: gst/gst.c:132
+#: gst/gst.c:134
 msgid "' is the default)"
 msgstr "' est la valeur par defaut)"
 
-#: gst/gst.c:132
+#: gst/gst.c:134
 msgid "SCHEDULER"
 msgstr "PLANIFICATEUR"
 
-#: gst/gst.c:133
+#: gst/gst.c:135
 msgid "Registry to use"
 msgstr "Registre a utiliser"
 
-#: gst/gst.c:133
+#: gst/gst.c:135
 msgid "REGISTRY"
 msgstr "REGISTRE"
 
-#: gst/gstelement.c:239
+#: gst/gstelement.c:240
 #, fuzzy, c-format
-msgid "ERROR: from element %s: %s.\n"
+msgid "ERROR: from element %s: %s\n"
 msgstr ""
 "ERREUR: impossible d'interpreter l'argument de la ligne de commande numero %"
 "d: %s.\n"
 
-#: gst/gstelement.c:241
+#: gst/gstelement.c:242
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -261,35 +261,39 @@ msgid "The stream is of a different type than handled by this element."
 msgstr ""
 
 #: gst/gsterror.c:152
+msgid "There is no codec present that can handle the stream's type."
+msgstr ""
+
+#: gst/gsterror.c:154
 #, fuzzy
 msgid "Could not decode stream."
 msgstr "Echoué a déterminer le type du flux"
 
-#: gst/gsterror.c:154
+#: gst/gsterror.c:156
 #, fuzzy
 msgid "Could not encode stream."
 msgstr "Echoué a déterminer le type du flux"
 
-#: gst/gsterror.c:156
+#: gst/gsterror.c:158
 #, fuzzy
 msgid "Could not demultiplex stream."
 msgstr "Echoué a déterminer le type du flux"
 
-#: gst/gsterror.c:158
+#: gst/gsterror.c:160
 #, fuzzy
 msgid "Could not multiplex stream."
 msgstr "Echoué a déterminer le type du flux"
 
-#: gst/gsterror.c:160
+#: gst/gsterror.c:162
 msgid "Stream is of the wrong format."
 msgstr ""
 
-#: gst/gsterror.c:207
+#: gst/gsterror.c:209
 #, c-format
 msgid "No error message for domain %s."
 msgstr ""
 
-#: gst/gsterror.c:212
+#: gst/gsterror.c:214
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr ""
@@ -427,163 +431,154 @@ msgid "person(s) performing"
 msgstr "personne(s) qui interprète(nt)"
 
 #: gst/gsttag.c:147
-#, fuzzy
-msgid "application"
-msgstr "emplacement"
-
-#: gst/gsttag.c:148
-msgid "application that wrote the stream"
-msgstr ""
-
-#: gst/gsttag.c:152
 msgid "duration"
 msgstr "durèe"
 
-#: gst/gsttag.c:153
+#: gst/gsttag.c:148
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "longueur en unité de temps GStreamer (nanosecondes)"
 
-#: gst/gsttag.c:157
+#: gst/gsttag.c:152
 msgid "codec"
 msgstr "codec"
 
-#: gst/gsttag.c:158
+#: gst/gsttag.c:153
 msgid "codec the data is stored in"
 msgstr "codec avec lequel la donnée fut enregistrée"
 
-#: gst/gsttag.c:162
+#: gst/gsttag.c:157
 msgid "bitrate"
 msgstr "bitrate"
 
-#: gst/gsttag.c:163
+#: gst/gsttag.c:158
 msgid "exact or average bitrate in bits/s"
 msgstr "bitrate exact ou moyen en bits par seconde"
 
-#: gst/gsttag.c:167
+#: gst/gsttag.c:162
 #, fuzzy
 msgid "nominal bitrate"
 msgstr "bitrate minimum"
 
-#: gst/gsttag.c:168
+#: gst/gsttag.c:163
 #, fuzzy
 msgid "nominal bitrate in bits/s"
 msgstr "bitrate minimum en bits par seconde"
 
-#: gst/gsttag.c:172
+#: gst/gsttag.c:167
 msgid "minimum bitrate"
 msgstr "bitrate minimum"
 
-#: gst/gsttag.c:173
+#: gst/gsttag.c:168
 msgid "minimum bitrate in bits/s"
 msgstr "bitrate minimum en bits par seconde"
 
-#: gst/gsttag.c:177
+#: gst/gsttag.c:172
 msgid "maximum bitrate"
 msgstr "bitrate maximum"
 
-#: gst/gsttag.c:178
+#: gst/gsttag.c:173
 msgid "maximum bitrate in bits/s"
 msgstr "bitrate maximum en bits par seconde"
 
-#: gst/gsttag.c:182
+#: gst/gsttag.c:177
 #, fuzzy
 msgid "encoder"
 msgstr "codec"
 
-#: gst/gsttag.c:183
+#: gst/gsttag.c:178
 #, fuzzy
 msgid "encoder used to encode this stream"
 msgstr "Echoué a déterminer le type du flux"
 
-#: gst/gsttag.c:187
+#: gst/gsttag.c:182
 #, fuzzy
 msgid "encoder version"
 msgstr "version"
 
-#: gst/gsttag.c:188
+#: gst/gsttag.c:183
 msgid "version of the encoder used to encode this stream"
 msgstr ""
 
-#: gst/gsttag.c:192
+#: gst/gsttag.c:187
 msgid "serial"
 msgstr ""
 
-#: gst/gsttag.c:193
+#: gst/gsttag.c:188
 msgid "serial number of track"
 msgstr ""
 
-#: gst/gsttag.c:197
+#: gst/gsttag.c:192
 msgid "replaygain track gain"
 msgstr ""
 
-#: gst/gsttag.c:198
+#: gst/gsttag.c:193
 msgid "track gain in db"
 msgstr ""
 
-#: gst/gsttag.c:202
+#: gst/gsttag.c:197
 msgid "replaygain track peak"
 msgstr ""
 
-#: gst/gsttag.c:203
+#: gst/gsttag.c:198
 msgid "peak of the track"
 msgstr ""
 
-#: gst/gsttag.c:207
+#: gst/gsttag.c:202
 msgid "replaygain album gain"
 msgstr ""
 
-#: gst/gsttag.c:208
+#: gst/gsttag.c:203
 #, fuzzy
 msgid "album gain in db"
 msgstr "album contenant cette donnée"
 
-#: gst/gsttag.c:212
+#: gst/gsttag.c:207
 msgid "replaygain album peak"
 msgstr ""
 
-#: gst/gsttag.c:213
+#: gst/gsttag.c:208
 msgid "peak of the album"
 msgstr ""
 
-#: gst/gsttag.c:251
+#: gst/gsttag.c:246
 msgid ", "
 msgstr ", "
 
-#: gst/elements/gstfilesink.c:237 gst/elements/gstfilesrc.c:723
+#: gst/elements/gstfilesink.c:248 gst/elements/gstfilesrc.c:674
 msgid "No filename specified."
 msgstr ""
 
-#: gst/elements/gstfilesink.c:244
+#: gst/elements/gstfilesink.c:255
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr ""
 
-#: gst/elements/gstfilesink.c:264
+#: gst/elements/gstfilesink.c:275
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr ""
 
-#: gst/elements/gstfilesink.c:331 gst/elements/gstfilesink.c:363
-#: gst/elements/gstfilesink.c:415
+#: gst/elements/gstfilesink.c:342 gst/elements/gstfilesink.c:374
+#: gst/elements/gstfilesink.c:426
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr ""
 
-#: gst/elements/gstfilesrc.c:730
+#: gst/elements/gstfilesrc.c:681
 msgid "No file specified for reading."
 msgstr ""
 
-#: gst/elements/gstfilesrc.c:745 gst/elements/gstmultidisksrc.c:244
+#: gst/elements/gstfilesrc.c:696 gst/elements/gstmultidisksrc.c:244
 #, fuzzy, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Echoué a déterminer le type du flux"
 
-#: gst/elements/gstfilesrc.c:756
+#: gst/elements/gstfilesrc.c:707
 #, c-format
 msgid "File \"%s\" isn't a regular file."
 msgstr ""
 
-#: gst/elements/gstidentity.c:170
+#: gst/elements/gstidentity.c:171
 msgid "Failed after iterations as requested."
 msgstr ""
 
@@ -618,13 +613,13 @@ msgstr "pas de conteneur \"%s\", ignoré"
 msgid "no property \"%s\" in element \"%s\""
 msgstr "pas de proprieté \"%s\" dans l'element \"%s\""
 
-#: gst/parse/grammar.y:327
+#: gst/parse/grammar.y:331
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr ""
 "impossible de definir la proprieté \"%s\" dans l'element \"%s\" comme \"%s\""
 
-#: gst/parse/grammar.y:332
+#: gst/parse/grammar.y:336
 #, c-format
 msgid ""
 "could not convert \"%s\" so that it fits property \"%s\" in element \"%s\""
@@ -632,182 +627,194 @@ msgstr ""
 "impossible de convertir \"%s\" de manière a correspondre avec la proprieté "
 "\"%s\" dans l'element \"%s\" "
 
-#: gst/parse/grammar.y:511
+#: gst/parse/grammar.y:515
 #, c-format
 msgid "could not link %s to %s"
 msgstr "impossible de connecter %s a %s"
 
-#: gst/parse/grammar.y:556
+#: gst/parse/grammar.y:560
 #, c-format
 msgid "no element \"%s\""
 msgstr "pas d'element \"%s\""
 
-#: gst/parse/grammar.y:607
+#: gst/parse/grammar.y:611
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "impossible d'interpreter les capacités \"%s\""
 
-#: gst/parse/grammar.y:629 gst/parse/grammar.y:683 gst/parse/grammar.y:699
-#: gst/parse/grammar.y:757
+#: gst/parse/grammar.y:633 gst/parse/grammar.y:687 gst/parse/grammar.y:703
+#: gst/parse/grammar.y:761
 msgid "link without source element"
 msgstr "lien sans element source"
 
-#: gst/parse/grammar.y:635 gst/parse/grammar.y:680 gst/parse/grammar.y:766
+#: gst/parse/grammar.y:639 gst/parse/grammar.y:684 gst/parse/grammar.y:770
 msgid "link without sink element"
 msgstr "lien sans element destination"
 
-#: gst/parse/grammar.y:717
+#: gst/parse/grammar.y:721
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "pas d'element source pour l'URI \"%s\""
 
-#: gst/parse/grammar.y:727
+#: gst/parse/grammar.y:731
 #, c-format
 msgid "no element to link URI \"%s\" to"
 msgstr "pas d'element avec lequel lier l'URI \"%s\""
 
-#: gst/parse/grammar.y:735
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "pas d'element destination pour l'URI \"%s\""
 
-#: gst/parse/grammar.y:739
+#: gst/parse/grammar.y:743
 #, c-format
 msgid "could not link sink element for URI \"%s\""
 msgstr "impossible de lier un element destination pour l'URI \"%s\""
 
-#: gst/parse/grammar.y:751
+#: gst/parse/grammar.y:755
 msgid "empty pipeline not allowed"
 msgstr "tube vide non autorisé"
 
-#: tools/gst-launch.c:83
+#: tools/gst-inspect.c:909
+msgid "Show plugin details"
+msgstr ""
+
+#: tools/gst-inspect.c:911
+msgid "Show scheduler details"
+msgstr ""
+
+#: tools/gst-launch.c:79
 msgid "Execution ended after %"
 msgstr "L'execution s'est terminé après %"
 
-#: tools/gst-launch.c:83
+#: tools/gst-launch.c:79
 msgid " iterations (sum %"
 msgstr "itérations (somme %"
 
-#: tools/gst-launch.c:83
+#: tools/gst-launch.c:79
 msgid " ns, average %"
 msgstr "ns, moyenne %"
 
-#: tools/gst-launch.c:83
+#: tools/gst-launch.c:79
 msgid " ns, min %"
 msgstr "ns, min %"
 
-#: tools/gst-launch.c:83
+#: tools/gst-launch.c:79
 msgid " ns, max %"
 msgstr "ns, max %"
 
-#: tools/gst-launch.c:83
+#: tools/gst-launch.c:79
 msgid " ns).\n"
 msgstr "ns).\n"
 
-#: tools/gst-launch.c:103
+#: tools/gst-launch.c:99
 msgid "Usage: gst-xmllaunch <file.xml> [ element.property=value ... ]\n"
 msgstr ""
 "Utilisation: gst-xmllaunch <fichier.xml> [ element.property=valeur ... ]\n"
 
-#: tools/gst-launch.c:111
+#: tools/gst-launch.c:107
 #, c-format
 msgid "ERROR: parse of xml file '%s' failed.\n"
 msgstr "ERREUR: l'interpretation du fichier xml '%s' a echoué.\n"
 
-#: tools/gst-launch.c:117
+#: tools/gst-launch.c:113
 #, c-format
 msgid "ERROR: no toplevel pipeline element in file '%s'.\n"
 msgstr "ERREUR: pas d'element tube de plus haut niveau dans le fichier '%s'.\n"
 
-#: tools/gst-launch.c:122
+#: tools/gst-launch.c:118
 msgid "WARNING: only one toplevel element is supported at this time."
 msgstr ""
 "AVERTISSEMENT: actuellement seul un element tube de plus haut niveau est "
 "supporté."
 
-#: tools/gst-launch.c:132
+#: tools/gst-launch.c:128
 #, c-format
 msgid "ERROR: could not parse command line argument %d: %s.\n"
 msgstr ""
 "ERREUR: impossible d'interpreter l'argument de la ligne de commande numero %"
 "d: %s.\n"
 
-#: tools/gst-launch.c:142
+#: tools/gst-launch.c:138
 #, c-format
 msgid "WARNING: element named '%s' not found.\n"
 msgstr "AVERTISSEMENT: l'element nommé '%s' est introuvable.\n"
 
-#: tools/gst-launch.c:277
+#: tools/gst-launch.c:273
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "TAG DECOUVERT   : decouvert par l'element \"%s\".\n"
 
-#: tools/gst-launch.c:354
+#: tools/gst-launch.c:350
 msgid "Output tags (also known as metadata)"
 msgstr "tags de sortie (aussi connus sous le nom de metadata)"
 
-#: tools/gst-launch.c:356
+#: tools/gst-launch.c:352
 msgid "Output status information and property notifications"
 msgstr ""
 "Afficher des informations sur le status et les notifications de proprietés"
 
-#: tools/gst-launch.c:358
+#: tools/gst-launch.c:354
 msgid "Do not output status information of TYPE"
 msgstr "Ne pas afficher d'informations sur les status de TYPE"
 
-#: tools/gst-launch.c:358
+#: tools/gst-launch.c:354
 msgid "TYPE1,TYPE2,..."
 msgstr "TYPE1,TYPE2,..."
 
-#: tools/gst-launch.c:361
+#: tools/gst-launch.c:357
 msgid "Save xml representation of pipeline to FILE and exit"
 msgstr "Sauvegarder la representation xml du tube dans FICHIER et quitter"
 
-#: tools/gst-launch.c:361
+#: tools/gst-launch.c:357
 msgid "FILE"
 msgstr "FICHIER"
 
-#: tools/gst-launch.c:364
+#: tools/gst-launch.c:360
 msgid "Do not install a fault handler"
 msgstr "Ne pas installer un gestionaire de dysfonctionement"
 
-#: tools/gst-launch.c:366
+#: tools/gst-launch.c:362
 msgid "Print alloc trace (if enabled at compile time)"
 msgstr "Imprimer les traces d'allocations (si activées lors de la compilation)"
 
-#: tools/gst-launch.c:368
+#: tools/gst-launch.c:364
 msgid "Number of times to iterate pipeline"
 msgstr "Nombres d'iterations du tube a accomplir"
 
-#: tools/gst-launch.c:433
+#: tools/gst-launch.c:429
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "ERREUR: le tube n'a pas pu etre construit: %s.\n"
 
-#: tools/gst-launch.c:437
+#: tools/gst-launch.c:433
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "ERREUR: le tube n'a pas pu etre construit.\n"
 
-#: tools/gst-launch.c:441
+#: tools/gst-launch.c:437
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "AVERTISSEMENT: tube erroné: %s\n"
 
-#: tools/gst-launch.c:442
+#: tools/gst-launch.c:438
 msgid "         Trying to run anyway.\n"
 msgstr "         Tentative d'execution malgrè tout.\n"
 
-#: tools/gst-launch.c:466
+#: tools/gst-launch.c:462
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "ERREUR: l'element 'tube' est introuvable.\n"
 
-#: tools/gst-launch.c:473
+#: tools/gst-launch.c:469
 msgid "RUNNING pipeline ...\n"
 msgstr "EXECUTION du tube en cours ...\n"
 
-#: tools/gst-launch.c:475
+#: tools/gst-launch.c:471
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "ERREUR: le tube refuse de s'executer.\n"
 
+#, fuzzy
+#~ msgid "application"
+#~ msgstr "emplacement"
+
 #~ msgid "Failed to change state"
 #~ msgstr "Echoué a changer d'état"
index cfdc3b44debeed8e6df54889d0525bb95e2c4f76..d49376222a82a068a2066438e0542f9f13d4cd51 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GStreamer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-02-04 23:10+0100\n"
+"POT-Creation-Date: 2004-02-05 19:44+0100\n"
 "PO-Revision-Date: 2004-01-13 12:03+0100\n"
 "Last-Translator: Thomas Vander Stichele <thomas@apestaart.org>\n"
 "Language-Team: Dutch <nl@li.org>\n"
@@ -116,12 +116,12 @@ msgstr "Register om te gebruiken"
 msgid "REGISTRY"
 msgstr "REGISTER"
 
-#: gst/gstelement.c:241
+#: gst/gstelement.c:240
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "FOUT: van element %s: %s\n"
 
-#: gst/gstelement.c:243
+#: gst/gstelement.c:242
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -421,118 +421,110 @@ msgid "person(s) performing"
 msgstr "perso(o)n(en) die het stuk uitvoeren"
 
 #: gst/gsttag.c:147
-msgid "application"
-msgstr "applicatie"
-
-#: gst/gsttag.c:148
-msgid "application that wrote the stream"
-msgstr "applicatie die de stroom geschreven heeft"
-
-#: gst/gsttag.c:152
 msgid "duration"
 msgstr "duur"
 
-#: gst/gsttag.c:153
+#: gst/gsttag.c:148
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "lengte in GStreamer tijdseenheden (nanoseconden)"
 
-#: gst/gsttag.c:157
+#: gst/gsttag.c:152
 msgid "codec"
 msgstr "codec"
 
-#: gst/gsttag.c:158
+#: gst/gsttag.c:153
 msgid "codec the data is stored in"
 msgstr "codec waarin het stuk is opgeslagen"
 
-#: gst/gsttag.c:162
+#: gst/gsttag.c:157
 msgid "bitrate"
 msgstr "bitsnelheid"
 
-#: gst/gsttag.c:163
+#: gst/gsttag.c:158
 msgid "exact or average bitrate in bits/s"
 msgstr "exacte of gemiddelde bitsnelheid in bits/s"
 
-#: gst/gsttag.c:167
+#: gst/gsttag.c:162
 msgid "nominal bitrate"
 msgstr "nominale bitsnelheid"
 
-#: gst/gsttag.c:168
+#: gst/gsttag.c:163
 msgid "nominal bitrate in bits/s"
 msgstr "nominale bitsnelheid in bits per seconde"
 
-#: gst/gsttag.c:172
+#: gst/gsttag.c:167
 msgid "minimum bitrate"
 msgstr "minimum bitsnelheid"
 
-#: gst/gsttag.c:173
+#: gst/gsttag.c:168
 msgid "minimum bitrate in bits/s"
 msgstr "minimum bitsnelheid in bits per seconde"
 
-#: gst/gsttag.c:177
+#: gst/gsttag.c:172
 msgid "maximum bitrate"
 msgstr "maximum bitsnelheid"
 
-#: gst/gsttag.c:178
+#: gst/gsttag.c:173
 msgid "maximum bitrate in bits/s"
 msgstr "maximum bitsnelheid in bits per seconde"
 
-#: gst/gsttag.c:182
+#: gst/gsttag.c:177
 msgid "encoder"
 msgstr "encoder"
 
-#: gst/gsttag.c:183
+#: gst/gsttag.c:178
 msgid "encoder used to encode this stream"
 msgstr "encoder gebruikt om deze stroom te encoderen"
 
-#: gst/gsttag.c:187
+#: gst/gsttag.c:182
 msgid "encoder version"
 msgstr "encoder versie"
 
-#: gst/gsttag.c:188
+#: gst/gsttag.c:183
 msgid "version of the encoder used to encode this stream"
 msgstr "versie van de encoder gebruikt om deze stroom te encoderen"
 
-#: gst/gsttag.c:192
+#: gst/gsttag.c:187
 msgid "serial"
 msgstr "volgnummer"
 
-#: gst/gsttag.c:193
+#: gst/gsttag.c:188
 msgid "serial number of track"
 msgstr "volgnummer van dit nummer"
 
-#: gst/gsttag.c:197
+#: gst/gsttag.c:192
 msgid "replaygain track gain"
 msgstr ""
 
-#: gst/gsttag.c:198
+#: gst/gsttag.c:193
 msgid "track gain in db"
 msgstr ""
 
-#: gst/gsttag.c:202
+#: gst/gsttag.c:197
 msgid "replaygain track peak"
 msgstr ""
 
-#: gst/gsttag.c:203
+#: gst/gsttag.c:198
 msgid "peak of the track"
 msgstr ""
 
-#: gst/gsttag.c:207
+#: gst/gsttag.c:202
 msgid "replaygain album gain"
 msgstr ""
 
-#: gst/gsttag.c:208
+#: gst/gsttag.c:203
 msgid "album gain in db"
 msgstr ""
 
-#: gst/gsttag.c:212
+#: gst/gsttag.c:207
 msgid "replaygain album peak"
 msgstr ""
 
-#: gst/gsttag.c:213
+#: gst/gsttag.c:208
 msgid "peak of the album"
 msgstr ""
 
-#: gst/gsttag.c:251
+#: gst/gsttag.c:246
 msgid ", "
 msgstr ", "
 
@@ -799,3 +791,9 @@ msgstr "BEZIG met pijplijn ...\n"
 #: tools/gst-launch.c:471
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "FOUT: pijplijn wil niet spelen.\n"
+
+#~ msgid "application"
+#~ msgstr "applicatie"
+
+#~ msgid "application that wrote the stream"
+#~ msgstr "applicatie die de stroom geschreven heeft"