docs/manual/: Update for 0.10: s/0.9/0.10/; s/audioscale/audiorsample/; add converters in front of pipelines; remove ...

Original commit message from CVS:
* docs/manual/advanced-dataaccess.xml:
* docs/manual/appendix-checklist.xml:
* docs/manual/appendix-programs.xml:
* docs/manual/basics-pads.xml:
* docs/manual/highlevel-components.xml:
* docs/manual/manual.xml:
Update for 0.10: s/0.9/0.10/; s/audioscale/audiorsample/;
add converters in front of pipelines; remove curly
brackets for threads stuff, they no longer exist; use
GST_TYPE_FRACTION for framerates; update some pieces of
code to 0.10, but there's plenty more to do.
* docs/manual/appendix-porting.xml:
Expand on asynchroneous state changes; s/0.9/0.10/;
mention disappearance of gst_init_get_popt_table()
(fixes #322916).
This commit is contained in:
Tim-Philipp Müller 2005-12-11 17:49:10 +00:00
parent 5f5f9417af
commit 30cfab511a
8 changed files with 126 additions and 47 deletions

View file

@ -1,3 +1,22 @@
2005-12-11 Tim-Philipp Müller <tim at centricular dot net>
* docs/manual/advanced-dataaccess.xml:
* docs/manual/appendix-checklist.xml:
* docs/manual/appendix-programs.xml:
* docs/manual/basics-pads.xml:
* docs/manual/highlevel-components.xml:
* docs/manual/manual.xml:
Update for 0.10: s/0.9/0.10/; s/audioscale/audiorsample/;
add converters in front of pipelines; remove curly
brackets for threads stuff, they no longer exist; use
GST_TYPE_FRACTION for framerates; update some pieces of
code to 0.10, but there's plenty more to do.
* docs/manual/appendix-porting.xml:
Expand on asynchroneous state changes; s/0.9/0.10/;
mention disappearance of gst_init_get_popt_table()
(fixes #322916).
2005-12-11 Tim-Philipp Müller <tim at centricular dot net> 2005-12-11 Tim-Philipp Müller <tim at centricular dot net>
* docs/faq/using.xml: * docs/faq/using.xml:

View file

@ -66,6 +66,7 @@ main (gint argc,
{ {
GMainLoop *loop; GMainLoop *loop;
GstElement *pipeline, *src, *sink, *filter, *csp; GstElement *pipeline, *src, *sink, *filter, *csp;
GstCaps *caps;
GstPad *pad; GstPad *pad;
/* init GStreamer */ /* init GStreamer */
@ -80,15 +81,17 @@ main (gint argc,
sink = gst_element_factory_make ("xvimagesink", "sink"); sink = gst_element_factory_make ("xvimagesink", "sink");
gst_bin_add_many (GST_BIN (pipeline), src, filter, csp, sink, NULL); gst_bin_add_many (GST_BIN (pipeline), src, filter, csp, sink, NULL);
gst_element_link_many (src, filter, csp, sink, NULL); gst_element_link_many (src, filter, csp, sink, NULL);
g_object_set (G_OBJECT (filter), "caps", filtercaps = gst_caps_new_simple ("video/x-raw-rgb",
gst_caps_new_simple ("video/x-raw-rgb",
"width", G_TYPE_INT, 384, "width", G_TYPE_INT, 384,
"height", G_TYPE_INT, 288, "height", G_TYPE_INT, 288,
"framerate", G_TYPE_DOUBLE, (gdouble) 25.0, "framerate", GST_TYPE_FRACTION, 25, 1,
"bpp", G_TYPE_INT, 16, "bpp", G_TYPE_INT, 16,
"depth", G_TYPE_INT, 16, "depth", G_TYPE_INT, 16,
"endianness", G_TYPE_INT, G_BYTE_ORDER, "endianness", G_TYPE_INT, G_BYTE_ORDER,
NULL), NULL); NULL);
g_object_set (G_OBJECT (filter), "caps", filtercaps, NULL);
gst_caps_unref (filtercaps);
pad = gst_element_get_pad (src, "src"); pad = gst_element_get_pad (src, "src");
gst_pad_add_buffer_probe (pad, G_CALLBACK (cb_have_data), NULL); gst_pad_add_buffer_probe (pad, G_CALLBACK (cb_have_data), NULL);
gst_object_unref (pad); gst_object_unref (pad);
@ -105,7 +108,7 @@ main (gint argc,
} }
<!-- example-end probe.c --></programlisting> <!-- example-end probe.c --></programlisting>
<para> <para>
Compare that output with the output of <quote>gst-launch-0.9 Compare that output with the output of <quote>gst-launch-0.10
videotestsrc ! xvimagesink</quote>, just so you know what you're videotestsrc ! xvimagesink</quote>, just so you know what you're
looking for. looking for.
</para> </para>
@ -239,7 +242,7 @@ main (gint argc,
gst_caps_new_simple ("video/x-raw-rgb", gst_caps_new_simple ("video/x-raw-rgb",
"width", G_TYPE_INT, 384, "width", G_TYPE_INT, 384,
"height", G_TYPE_INT, 288, "height", G_TYPE_INT, 288,
"framerate", G_TYPE_DOUBLE, (gdouble) 1.0, "framerate", GST_TYPE_FRACTION, 1, 1,
"bpp", G_TYPE_INT, 16, "bpp", G_TYPE_INT, 16,
"depth", G_TYPE_INT, 16, "depth", G_TYPE_INT, 16,
"endianness", G_TYPE_INT, G_BYTE_ORDER, "endianness", G_TYPE_INT, G_BYTE_ORDER,

View file

@ -105,12 +105,14 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<option>--gst-debug-no-color</option> will disable color debugging. <option>--gst-debug-no-color</option> will disable color debugging
(you can also set the GST_DEBUG_NO_COLOR environment variable to 1
if you want to disable colored debug output permanently)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<option>--gst-debug-disable</option> disables debugging alltogether. <option>--gst-debug-disable</option> disables debugging altogether.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -130,7 +132,7 @@
applications will find useful. Specifically, those are videoscalers applications will find useful. Specifically, those are videoscalers
(videoscale), colorspace convertors (ffmpegcolorspace), audio format (videoscale), colorspace convertors (ffmpegcolorspace), audio format
convertors and channel resamplers (audioconvert) and audio samplerate convertors and channel resamplers (audioconvert) and audio samplerate
convertors (audioscale). Those convertors don't do anything when not convertors (audioresample). Those convertors don't do anything when not
required, they will act in passthrough mode. They will activate when required, they will act in passthrough mode. They will activate when
the hardware doesn't support a specific request, though. All the hardware doesn't support a specific request, though. All
applications are recommended to use those elements. applications are recommended to use those elements.
@ -150,16 +152,20 @@
<para> <para>
<command>gst-launch</command> is a simple script-like commandline <command>gst-launch</command> is a simple script-like commandline
application that can be used to test pipelines. For example, the application that can be used to test pipelines. For example, the
command <command>gst-launch audiotestsrc ! alsasink</command> will run command <command>gst-launch audiotestsrc ! audioconvert !
audio/x-raw-int,channels=2 ! alsasink</command> will run
a pipeline which generates a sine-wave audio stream and plays it a pipeline which generates a sine-wave audio stream and plays it
to your ALSA audio card. <command>gst-launch</command> also allows to your ALSA audio card. <command>gst-launch</command> also allows
the use of threads (using curly brackets, so <quote>{</quote> the use of threads (will be used automatically as required or as queue
and <quote>}</quote>) and bins (using brackets, so <quote>(</quote> elements are inserted in the pipeline) and bins (using brackets, so
and <quote>)</quote>). You can use dots to imply padnames on elements, <quote>(</quote> and <quote>)</quote>). You can use dots to imply
padnames on elements,
or even omit the padname to automatically select a pad. Using or even omit the padname to automatically select a pad. Using
all this, the pipeline <command>gst-launch filesrc location=file.ogg all this, the pipeline
! oggdemux name=d { d. ! theoradec ! ffmpegcolorspace ! xvimagesink <command>gst-launch filesrc location=file.ogg ! oggdemux name=d
} { d. ! vorbisdec ! alsasink }</command> will play an Ogg file d. ! queue ! theoradec ! ffmpegcolorspace ! xvimagesink
d. ! queue ! vorbisdec ! audioconvert ! audioresample ! alsasink
</command> will play an Ogg file
containing a Theora video-stream and a Vorbis audio-stream. You can containing a Theora video-stream and a Vorbis audio-stream. You can
also use autopluggers such as decodebin on the commandline. See the also use autopluggers such as decodebin on the commandline. See the
manual page of <command>gst-launch</command> for more information. manual page of <command>gst-launch</command> for more information.

View file

@ -1,12 +1,12 @@
<chapter id="chapter-porting"> <chapter id="chapter-porting">
<title>Porting 0.8 applications to 0.9</title> <title>Porting 0.8 applications to 0.10</title>
<para> <para>
This section of the appendix will discuss shortly what changes to This section of the appendix will discuss shortly what changes to
applications will be needed to quickly and conveniently port most applications will be needed to quickly and conveniently port most
applications from &GStreamer;-0.8 to &GStreamer;-0.9, with references applications from &GStreamer;-0.8 to &GStreamer;-0.10, with references
to the relevant sections in this Application Development Manual to the relevant sections in this Application Development Manual
where needed. With this list, it should be possible to port simple where needed. With this list, it should be possible to port simple
applications to &GStreamer;-0.9 in less than a day. applications to &GStreamer;-0.10 in less than a day.
</para> </para>
<sect1 id="section-porting-objects"> <sect1 id="section-porting-objects">
@ -17,13 +17,15 @@
Most functions returning an object or an object property have Most functions returning an object or an object property have
been changed to return its own reference rather than a constant been changed to return its own reference rather than a constant
reference of the one owned by the object itself. The reason for reference of the one owned by the object itself. The reason for
this change is primarily threadsafety. This means, effectively, this change is primarily thread safety. This means, effectively,
that return values of functions such as that return values of functions such as
<function>gst_element_get_pad ()</function>, <function>gst_element_get_pad ()</function>,
<function>gst_pad_get_name ()</function> and many more like these <function>gst_pad_get_name ()</function> and many more like these
have to be free'ed or unreferenced after use. Check the API have to be free'ed or unreferenced after use. Check the API
references of each function to know for sure whether return references of each function to know for sure whether return
values should be free'ed or not. values should be free'ed or not. It is important that all objects
derived from GstObject are ref'ed/unref'ed using gst_object_ref()
and gst_object_unref() respectively (instead of g_object_ref/unref).
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -32,8 +34,8 @@
of errors, end-of-stream and other similar pipeline events. of errors, end-of-stream and other similar pipeline events.
Instead, they should use the <classname>GstBus</classname>, which Instead, they should use the <classname>GstBus</classname>, which
has been discussed in <xref linkend="chapter-bus"/>. The bus will has been discussed in <xref linkend="chapter-bus"/>. The bus will
take care that the messages will be delivered in the context of take care that the messages will be delivered in the context of a
mainloop, which is almost certainly the application's main thread. main loop, which is almost certainly the application's main thread.
The big advantage of this is that applications no longer need to The big advantage of this is that applications no longer need to
be thread-aware; they don't need to use <function>g_idle_add be thread-aware; they don't need to use <function>g_idle_add
()</function> in the signal handler and do the actual real work ()</function> in the signal handler and do the actual real work
@ -51,14 +53,27 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
State changes can be delayed; ASYNC. State changes can be delayed (ASYNC). Due to the new fully threaded
nature of GStreamer-0.10, state changes are not always immediate,
in particular changes including the transition from READY to PAUSED
state. This means two things in the context of porting applications:
first of all, it is no longer always possible to do
<function>gst_element_set_state ()</function> and check for a return
value of GST_STATE_CHANGE_SUCCESS, as the state change might be
delayed (ASYNC) and the result will not be known until later. You
should still check for GST_STATE_CHANGE_FAILURE right away, it is
just no longer possible to assume that everything that is not SUCCESS
means failure. Secondly, state changes might not be immediate, so
your code needs to take that into account. You can wait for a state
change to complete if you use GST_CLOCK_TIME_NONE as timeout interval
with <function>gst_element_get_state ()</function>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
In 0.8, events and queries had to manually be sent to sinks in In 0.8, events and queries had to manually be sent to sinks in
pipelines (unless you were using playbin). This is no longer pipelines (unless you were using playbin). This is no longer
the case in 0.9. In 0.9, queries and events can be sent to the case in 0.10. In 0.10, queries and events can be sent to
toplevel pipelines, and the pipeline will do the dispatching toplevel pipelines, and the pipeline will do the dispatching
internally for you. This means less bookkeeping in your internally for you. This means less bookkeeping in your
application. For a short code example, see <xref application. For a short code example, see <xref
@ -82,12 +97,13 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Filtered caps -> caps-filter. Filtered caps -> capsfilter element (the pipeline syntax for
gst-launch has not changed though).
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
libgstgconf-0.9.la does not exist. Use the libgstgconf-0.10.la does not exist. Use the
<quote>gconfvideosink</quote> and <quote>gconfaudiosink</quote> <quote>gconfvideosink</quote> and <quote>gconfaudiosink</quote>
elements instead, which will do live-updates and require no library elements instead, which will do live-updates and require no library
linking. linking.
@ -100,6 +116,15 @@
<quote>pad-added</quote> and <quote>state-changed</quote>. <quote>pad-added</quote> and <quote>state-changed</quote>.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<function>gst_init_get_popt_table ()</function> has been removed
in favour of the new GOption command line option API that was
added to GLib 2.6. <function>gst_init_get_option_group ()</function>
is the new GOption-based equivalent to
<function>gst_init_get_ptop_table ()</function>.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -3,15 +3,6 @@
<para> <para>
</para> </para>
<sect1 id="section-programs-gst-register">
<title><command>gst-register</command></title>
<para>
<command>gst-register</command> is used to rebuild the database of plugins.
It is used after a new plugin has been added to the system. The plugin database
can be found, by default, in <filename>/etc/gstreamer/reg.xml</filename>.
</para>
</sect1>
<sect1 id="section-programs-gst-launch"> <sect1 id="section-programs-gst-launch">
<title><command>gst-launch</command></title> <title><command>gst-launch</command></title>
<para> <para>
@ -22,15 +13,15 @@
A simple commandline looks like: A simple commandline looks like:
<screen> <screen>
gst-launch filesrc location=hello.mp3 ! mad ! osssink gst-launch filesrc location=hello.mp3 ! mad ! audioresample ! osssink
</screen> </screen>
A more complex pipeline looks like: A more complex pipeline looks like:
<screen> <screen>
gst-launch filesrc location=redpill.vob ! mpegdemux name=demux \ gst-launch filesrc location=redpill.vob ! dvddemux name=demux \
{ demux.audio_00 ! queue ! a52dec ! audioconvert ! audioscale ! osssink } \ demux.audio_00 ! queue ! a52dec ! audioconvert ! audioresample ! osssink \
{ demux.video_00 ! queue ! mpeg2dec ! ffmpegcolorspace ! xvmagesink } demux.video_00 ! queue ! mpeg2dec ! ffmpegcolorspace ! xvimagesink
</screen> </screen>
</para> </para>
@ -49,6 +40,8 @@ main (int argc, char *argv[])
{ {
GstElement *pipeline; GstElement *pipeline;
GstElement *filesrc; GstElement *filesrc;
GstMessage *msg;
GstBus *bus;
GError *error = NULL; GError *error = NULL;
gst_init (&amp;argc, &amp;argv); gst_init (&amp;argc, &amp;argv);
@ -65,13 +58,46 @@ main (int argc, char *argv[])
} }
filesrc = gst_bin_get_by_name (GST_BIN (pipeline), "my_filesrc"); filesrc = gst_bin_get_by_name (GST_BIN (pipeline), "my_filesrc");
g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); g_object_set (filesrc, "location", argv[1], NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING); gst_element_set_state (pipeline, GST_STATE_PLAYING);
while (gst_bin_iterate (GST_BIN (pipeline))); bus = gst_element_get_bus (pipeline);
/* wait until we either get an EOS or an ERROR message. Note that in a real
* program you would probably not use gst_bus_poll(), but rather set up an
* async signal watch on the bus and run a main loop and connect to the
* bus's signals to catch certain messages or all messages */
msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
switch (GST_MESSAGE_TYPE (msg)) {
case GST_MESSAGE_EOS: {
g_print ("EOS\n");
break;
}
case GST_MESSAGE_ERROR: {
GError *err = NULL; /* error to show to users */
gchar *dbg = NULL; /* additional debug string for developers */
gst_message_parse_error (msg, &err, &dbg);
if (err) {
g_printerr ("ERROR: %s\n", err-&gt;message);
g_error_free (err);
}
if (dbg) {
g_printerr ("[Debug details: %s]\n", dbg);
g_free (dbg);
}
}
default:
g_printerr ("Unexpected message of type %d", GST_MESSAGE_TYPE (msg));
break;
}
gst_message_unref (msg);
gst_element_set_state (pipeline, GST_STATE_NULL); gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
gst_object_unref (bus);
return 0; return 0;
} }

View file

@ -451,7 +451,7 @@ link_pads_with_filter (GstPad *one,
caps = gst_caps_new_simple ("video/x-raw-yuv", caps = gst_caps_new_simple ("video/x-raw-yuv",
"width", G_TYPE_INT, 384, "width", G_TYPE_INT, 384,
"height", G_TYPE_INT, 288, "height", G_TYPE_INT, 288,
"framerate", G_TYPE_DOUBLE, 25., "framerate", GST_TYPE_FRACTION, 25, 1,
NULL); NULL);
gst_pad_link_filtered (one, other, caps); gst_pad_link_filtered (one, other, caps);
} }
@ -473,12 +473,12 @@ link_pads_with_filter (GstPad *one,
gst_structure_new ("video/x-raw-yuv", gst_structure_new ("video/x-raw-yuv",
"width", G_TYPE_INT, 384, "width", G_TYPE_INT, 384,
"height", G_TYPE_INT, 288, "height", G_TYPE_INT, 288,
"framerate", G_TYPE_DOUBLE, 25., "framerate", GST_TYPE_FRACTION, 25, 1,
NULL), NULL),
gst_structure_new ("video/x-raw-rgb", gst_structure_new ("video/x-raw-rgb",
"width", G_TYPE_INT, 384, "width", G_TYPE_INT, 384,
"height", G_TYPE_INT, 288, "height", G_TYPE_INT, 288,
"framerate", G_TYPE_DOUBLE, 25., "framerate", GST_TYPE_FRACTION, 25, 1,
NULL), NULL),
NULL); NULL);

View file

@ -168,7 +168,7 @@ main (gint argc,
</itemizedlist> </itemizedlist>
<para> <para>
For convenience, it is possible to test <quote>playbin</quote> on For convenience, it is possible to test <quote>playbin</quote> on
the commandline, using the command <quote>gst-launch-0.9 playbin the commandline, using the command <quote>gst-launch-0.10 playbin
uri=file:///path/to/file</quote>. uri=file:///path/to/file</quote>.
</para> </para>
</sect1> </sect1>

View file

@ -257,7 +257,7 @@
</para> </para>
<para> <para>
In addition, we also provide a porting guide which will explain In addition, we also provide a porting guide which will explain
easily how to port &GStreamer;-0.8 applications to &GStreamer;-0.9. easily how to port &GStreamer;-0.8 applications to &GStreamer;-0.10.
</para> </para>
</partintro> </partintro>