revert the patch that made applications break

Original commit message from CVS:
revert the patch that made applications break
This commit is contained in:
Thomas Vander Stichele 2004-02-05 19:03:03 +00:00
parent 2826ec0813
commit d78c1bc319
23 changed files with 869 additions and 383 deletions

View file

@ -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):

2
common

@ -1 +1 @@
Subproject commit 90e64b98d566fd8df793cfc0a9b08b8e5fb356d3
Subproject commit 90097339543fb0a705447b599d7a36138cba4232

View 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.

View 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>

View 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:

View 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>

View 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>

View 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.

View file

@ -6023,16 +6023,6 @@ Query the element for the current mime type
</para>
<!-- ##### SIGNAL GstXML::object-loaded ##### -->
<para>
</para>
@:
@:
@:
<!-- ##### USER_FUNCTION GstXMLRegistryAddPathList ##### -->
<para>

View file

@ -34,6 +34,15 @@ The GstThread object
</para>
<!-- ##### FUNCTION gst_thread_new ##### -->
<para>
</para>
@name:
@Returns:
<!-- ##### SIGNAL GstThread::shutdown ##### -->
<para>
@ -46,12 +55,3 @@ The GstThread object
The thread priority
</para>
<!-- ##### FUNCTION gst_thread_new ##### -->
<para>
</para>
@name:
@Returns:

View 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:

View file

@ -0,0 +1,5 @@
<chapter id="chapter-clocks">
<title>Clocks in GStreamer</title>
<para>
</para>
</chapter>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View 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);

View 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);
}

View 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);
}

View 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

247
po/fr.po
View file

@ -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"

View file

@ -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"