mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 13:41:48 +00:00
195 lines
7.8 KiB
XML
195 lines
7.8 KiB
XML
<?xml version='1.0'?>
|
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
|
<!ENTITY % image-entities SYSTEM "image.entities">
|
|
%image-entities;
|
|
<!ENTITY % version-entities SYSTEM "version.entities">
|
|
%version-entities;
|
|
|
|
<!ENTITY TITLEPAGE SYSTEM "titlepage.xml">
|
|
|
|
<!-- Part 1: Introduction -->
|
|
<!ENTITY INTRO_PREFACE SYSTEM "intro-preface.xml">
|
|
<!ENTITY INTRO_BASICS SYSTEM "intro-basics.xml">
|
|
|
|
<!-- Part 2: Building a Plugin -->
|
|
<!ENTITY BUILDING_BOILER SYSTEM "building-boiler.xml">
|
|
<!ENTITY BUILDING_DEBUG SYSTEM "building-debug.xml">
|
|
<!ENTITY BUILDING_PADS SYSTEM "building-pads.xml">
|
|
<!ENTITY BUILDING_CHAINFN SYSTEM "building-chainfn.xml">
|
|
<!ENTITY BUILDING_STATE SYSTEM "building-state.xml">
|
|
<!ENTITY BUILDING_PROPS SYSTEM "building-props.xml">
|
|
<!ENTITY BUILDING_SIGNALS SYSTEM "building-signals.xml">
|
|
<!ENTITY BUILDING_TESTAPP SYSTEM "building-testapp.xml">
|
|
|
|
<!-- Part 3: Advanced Filter Concepts -->
|
|
<!ENTITY ADVANCED_NEGOTIATION SYSTEM "advanced-negotiation.xml">
|
|
<!ENTITY ADVANCED_SCHEDULING SYSTEM "advanced-scheduling.xml">
|
|
<!ENTITY ADVANCED_TYPES SYSTEM "advanced-types.xml">
|
|
<!ENTITY ADVANCED_REQUEST SYSTEM "advanced-request.xml">
|
|
<!ENTITY ADVANCED_CLOCK SYSTEM "advanced-clock.xml">
|
|
<!ENTITY ADVANCED_DPARAMS SYSTEM "advanced-dparams.xml">
|
|
<!ENTITY ADVANCED_INTERFACES SYSTEM "advanced-interfaces.xml">
|
|
<!ENTITY ADVANCED_TAGGING SYSTEM "advanced-tagging.xml">
|
|
<!ENTITY ADVANCED_EVENTS SYSTEM "advanced-events.xml">
|
|
|
|
<!-- Part 4: Creating special element types -->
|
|
<!ENTITY OTHER_BASE SYSTEM "other-base.xml">
|
|
<!ENTITY OTHER_ONETON SYSTEM "other-oneton.xml">
|
|
<!ENTITY OTHER_NTOONE SYSTEM "other-ntoone.xml">
|
|
<!ENTITY OTHER_MANAGER SYSTEM "other-manager.xml">
|
|
|
|
<!-- Appendices -->
|
|
<!ENTITY APPENDIX_CHECKLIST SYSTEM "appendix-checklist.xml">
|
|
<!ENTITY APPENDIX_PORTING SYSTEM "appendix-porting.xml">
|
|
<!ENTITY APPENDIX_LICENSING SYSTEM "appendix-licensing.xml">
|
|
<!ENTITY APPENDIX_PYTHON SYSTEM "appendix-python.xml">
|
|
|
|
<!ENTITY GStreamer "<application>GStreamer</application>">
|
|
<!ENTITY GstAppDevMan "<emphasis>GStreamer Application Development Manual</emphasis>">
|
|
<!ENTITY GstLibRef "<emphasis>GStreamer Library Reference</emphasis>">
|
|
]>
|
|
|
|
<book id="index">
|
|
&TITLEPAGE;
|
|
|
|
<!-- ############# Introduction - part ############### -->
|
|
|
|
<part id="part-introduction" xreflabel="Introduction">
|
|
<title>Introduction</title>
|
|
<partintro>
|
|
<para><!-- synchronize with AppDevMan -->
|
|
&GStreamer; is an extremely powerful and versatile framework for creating
|
|
streaming media applications. Many of the virtues of the &GStreamer;
|
|
framework come from its modularity: &GStreamer; can seamlessly
|
|
incorporate new plugin modules. But because modularity and power often
|
|
come at a cost of greater complexity (consider, for example, <ulink
|
|
type="http" url="http://www.omg.org/">CORBA</ulink>), writing new
|
|
plugins is not always easy.
|
|
</para>
|
|
<para>
|
|
This guide is intended to help you understand the &GStreamer; framework
|
|
(version &GST_VERSION;) so you can develop new plugins to extend the
|
|
existing functionality. The guide addresses most issues by following the
|
|
development of an example plugin - an audio filter plugin -
|
|
written in C. However, the later parts of the guide also present some
|
|
issues involved in writing other types of plugins, and the end of the
|
|
guide describes some of the Python bindings for &GStreamer;.
|
|
</para>
|
|
</partintro>
|
|
|
|
&INTRO_PREFACE;
|
|
&INTRO_BASICS;
|
|
</part>
|
|
|
|
<!-- ############ Building a Plugin - part ############# -->
|
|
|
|
<part id="part-building" xreflabel="Building a Plugin">
|
|
<title>Building a Plugin</title>
|
|
<partintro>
|
|
<para>
|
|
You are now ready to learn how to build a plugin. In this part of the
|
|
guide, you will learn how to apply basic &GStreamer;
|
|
programming concepts to write a simple plugin. The previous parts of the
|
|
guide have contained no explicit example code, perhaps making things a
|
|
bit abstract and difficult to understand. In contrast, this section will
|
|
present both applications and code by following the development of an
|
|
example audio filter plugin called <quote>ExampleFilter</quote>.
|
|
</para>
|
|
<para>
|
|
The example filter element will begin with a single input pad and a
|
|
single
|
|
output pad. The filter will, at first, simply pass media and event data
|
|
from its sink pad to its source pad without modification. But by the end
|
|
of this part of the guide, you will learn to add some more interesting
|
|
functionality, including properties and signal handlers. And after
|
|
reading the next part of the guide, <xref linkend="part-advanced"/>, you
|
|
will be able to add even more functionality to your plugins.
|
|
</para>
|
|
<para>
|
|
The example code used in this part of the guide can be found in
|
|
<filename class="directory">examples/pwg/examplefilter/</filename> in
|
|
your &GStreamer; directory.
|
|
</para>
|
|
</partintro>
|
|
|
|
&BUILDING_BOILER;
|
|
&BUILDING_PADS;
|
|
&BUILDING_CHAINFN;
|
|
&BUILDING_STATE;
|
|
&BUILDING_PROPS;
|
|
&BUILDING_SIGNALS;
|
|
&BUILDING_TESTAPP;
|
|
</part>
|
|
|
|
<!-- ############ Advanced Filter Concepts - part ############# -->
|
|
|
|
<part id="part-advanced" xreflabel="Advanced Filter Concepts">
|
|
<title>Advanced Filter Concepts</title>
|
|
<partintro>
|
|
<para>
|
|
By now, you should be able to create basic filter elements that can
|
|
receive and send data. This is the simple model that &GStreamer; stands
|
|
for. But &GStreamer; can do much more than only this! In this chapter,
|
|
various advanced topics will be discussed, such as scheduling, special
|
|
pad types, clocking, events, interfaces, tagging and more. These topics
|
|
are the sugar that makes &GStreamer; so easy to use for applications.
|
|
</para>
|
|
</partintro>
|
|
|
|
&ADVANCED_NEGOTIATION;
|
|
&ADVANCED_SCHEDULING;
|
|
&ADVANCED_TYPES;
|
|
&ADVANCED_REQUEST;
|
|
&ADVANCED_CLOCK;
|
|
&ADVANCED_DPARAMS;
|
|
&ADVANCED_INTERFACES;
|
|
&ADVANCED_TAGGING;
|
|
&ADVANCED_EVENTS;
|
|
|
|
<!-- FIXME: add querying, event handling and conversion -->
|
|
|
|
</part>
|
|
|
|
<!-- ############ Creating special element types - part ############# -->
|
|
|
|
<part id="part-other" xreflabel="Creating special element types">
|
|
<title>Creating special element types</title>
|
|
<partintro>
|
|
<para>
|
|
By now, we have looked at pretty much any feature that can be embedded
|
|
into a &GStreamer; element. Most of this has been fairly low-level and
|
|
given deep insights in how &GStreamer; works internally. Fortunately,
|
|
&GStreamer; contains some easier-to-use interfaces to create such
|
|
elements. In order to do that, we will look closer at the element
|
|
types for which &GStreamer; provides base classes (sources, sinks and
|
|
transformation elements). We will also look closer at some types of
|
|
elements that require no specific coding such as scheduling-interaction
|
|
or data passing, but rather require specific pipeline control (e.g.
|
|
N-to-1 elements and managers).
|
|
</para>
|
|
</partintro>
|
|
|
|
&OTHER_BASE;
|
|
&OTHER_ONETON;
|
|
&OTHER_NTOONE;
|
|
&OTHER_MANAGER;
|
|
</part>
|
|
|
|
<!-- ############ Appendices - part ############# -->
|
|
|
|
<part id="part-appendix" xreflabel="Appendices">
|
|
<title>Appendices</title>
|
|
<partintro>
|
|
<para>
|
|
This chapter contains things that don't belong anywhere else.
|
|
</para>
|
|
</partintro>
|
|
|
|
&APPENDIX_CHECKLIST;
|
|
&APPENDIX_PORTING;
|
|
&APPENDIX_LICENSING;
|
|
&APPENDIX_PYTHON;
|
|
</part>
|
|
|
|
</book>
|