Moved "Filter Writer's Guide" to "Plugin Writer's Guide". Divided existing info from...
[platform/upstream/gstreamer.git] / docs / pwg / gst-plugin-writers-guide.xml
1 <?xml version='1.0'?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3                   "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
4 <!ENTITY % magic-entities SYSTEM "magic">
5 %magic-entities;
6
7 <!ENTITY TITLEPAGE            SYSTEM "titlepage.xml">
8
9 <!ENTITY INTRO_PREFACE        SYSTEM "intro_preface.xml">
10 <!ENTITY INTRO_BASICS         SYSTEM "intro_basics.xml">
11
12 <!ENTITY BUILDING_BOILER      SYSTEM "building_boiler.xml">
13 <!ENTITY BUILDING_PADS        SYSTEM "building_pads.xml">
14 <!ENTITY BUILDING_CHAINFN     SYSTEM "building_chainfn.xml">
15 <!ENTITY BUILDING_STATE       SYSTEM "building_state.xml">
16 <!ENTITY BUILDING_PROPS       SYSTEM "building_props.xml">
17 <!ENTITY BUILDING_SIGNALS     SYSTEM "building_signals.xml">
18 <!ENTITY BUILDING_TESTAPP     SYSTEM "building_testapp.xml">
19
20 <!ENTITY ADVANCED_SCHEDULING  SYSTEM "advanced_scheduling.xml">
21 <!ENTITY ADVANCED_TYPES       SYSTEM "advanced_types.xml">
22 <!ENTITY ADVANCED_REQUEST     SYSTEM "advanced_request.xml">
23 <!ENTITY ADVANCED_CLOCK       SYSTEM "advanced_clock.xml">
24 <!ENTITY ADVANCED_DPARAMS     SYSTEM "advanced_dparams.xml">
25 <!ENTITY ADVANCED_MIDI        SYSTEM "advanced_midi.xml">
26
27 <!ENTITY OTHER_SOURCE         SYSTEM "other_source.xml">
28 <!ENTITY OTHER_SINK           SYSTEM "other_sink.xml">
29 <!ENTITY OTHER_AUTOPLUGGER    SYSTEM "other_autoplugger.xml">
30
31 <!ENTITY APPENDIX_CHECKLIST   SYSTEM "appendix_checklist.xml">
32 <!ENTITY APPENDIX_PYTHON      SYSTEM "appendix_python.xml">
33
34 <!ENTITY GStreamer    "<application>GStreamer</application>">
35 <!ENTITY GstVersion   "0.4.1">
36 <!ENTITY GstAppDevMan "<emphasis>GStreamer Application Development Manual</emphasis>">
37 <!ENTITY GstLibRef    "<emphasis>GStreamer Library Reference</emphasis>">
38 ]>
39
40 <book id="book-gst-plugin-writers-guide">
41   &TITLEPAGE;
42
43   <!-- ############# part ############### -->
44
45   <part id="part-introduction" xreflabel="Introduction">
46     <title>Introduction</title>
47     <partintro>
48       <para>
49         &GStreamer; is an exremely powerful and versatile framework for creating
50         streaming media applications. Many of the virtues of the &GStreamer;
51         framework come from its modularity: &GStreamer; can seamlessly
52         incorporate new plugin modules. But because modularity and power often
53         come at a cost of greater complexity (consider, for example, <ulink
54         type="http" url="http://www.omg.org/">CORBA</ulink>), writing new
55         plugins is not always easy.
56       </para>
57       <para>
58         This guide is intended to help you understand the &GStreamer; framework
59         so you can develop new plugins to extend &GStreamer;'s functionality.
60         This guide introduces most of the basic plugin writing issues in version
61         &GstVersion; of &GStreamer;. This guide presents most issues in the
62         context of an example audio filter plugin written in C. However, the
63         guide also addresses some issues involved in writing other types of
64         plugins, and the end of the guide also describes some of the Python
65         bindings for &GStreamer;.
66       </para>
67     </partintro>
68
69     &INTRO_PREFACE;
70     &INTRO_BASICS;
71   </part>
72
73   <!-- ############ part ############# -->
74
75   <part id="part-building" xreflabel="Building a Filter">
76     <title>Building a Filter</title>
77     <partintro>
78       <para>
79         You now have the neccessary concepts to build your first plugin. In this
80         part of the guide, you will learn how to apply these concepts to write a
81         simple audio filter plugin. The previous parts of the guide have
82         contained no explicit example code, perhaps making things a bit abstract
83         and difficult to understand. In contrast, this section will present both
84         applications and code by following the development of an example audio
85         filter plugin called <quote>ExampleFilter</quote>.
86       </para>
87       <para>
88         The example filter will begin with a single input pad and a single
89         output pad. The filter will, at first, simply pass data through without
90         modification. But by the end of this part of the guide, you will learn
91         to add some more interesting functionality, including properties and
92         signal handlers. And after reading the next part of the guide, <xref
93         linkend="part-advanced"/>, you will be able to add even more
94         functionality to your plugins.
95       </para>
96       <para>
97         The example code used in this part of the guide can be found in
98         <filename class="directory">examples/pwg/examplefilter/</filename> in
99         your &GStreamer; directory.
100       </para>
101     </partintro>
102
103     &BUILDING_BOILER;
104     &BUILDING_PADS;
105     &BUILDING_CHAINFN;
106     &BUILDING_STATE;
107     &BUILDING_PROPS;
108     &BUILDING_SIGNALS;
109     &BUILDING_TESTAPP;
110   </part>
111
112   <!-- ############ part ############# -->
113
114   <part id="part-advanced" xreflabel="Advanced Filter Concepts">
115     <title>Advanced Filter Concepts</title>
116     <partintro>
117       <para>
118       </para>
119     </partintro>
120
121     &ADVANCED_SCHEDULING;
122     &ADVANCED_TYPES;
123     &ADVANCED_REQUEST;
124     &ADVANCED_CLOCK;
125     &ADVANCED_DPARAMS;
126     &ADVANCED_MIDI;
127   </part>
128
129   <!-- ############ part ############# -->
130
131   <part id="part-other" xreflabel="Other Element Types">
132     <title>Other Element Types</title>
133     <partintro>
134       <para>
135       </para>
136     </partintro>
137
138     &OTHER_SOURCE;
139     &OTHER_SINK;
140     &OTHER_AUTOPLUGGER;
141   </part>
142
143   <!-- ############ part ############# -->
144
145   <part id="part-appendix" xreflabel="Appendices">
146     <title>Appendices</title>
147     <partintro>
148       <para>
149       </para>
150     </partintro>
151
152       &APPENDIX_CHECKLIST;
153       &APPENDIX_PYTHON;
154   </part>
155
156 </book>