docs: Add overview and architecture document and cleanup docs more.
[platform/upstream/gstreamer.git] / docs / libs / architecture.xml
1 <?xml version="1.0"?>
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
3           "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
4           <!ENTITY % version-entities SYSTEM "version.entities">
5           %version-entities;
6           <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
7           ]>
8 <refentry id="ges-architecture" revision="25 mar 2009">
9   <refmeta>
10     <refentrytitle>Overview and architecture</refentrytitle>
11     <manvolnum>1</manvolnum>
12     <refmiscinfo>GStreamer Editing Services</refmiscinfo>
13   </refmeta>
14
15   <!-- <refnamediv> -->
16   <!-- <refname>Overview</refname> -->
17   <!-- <refpurpose> -->
18   <!-- Goals of the GStreamer Editing Services. -->
19   <!-- </refpurpose> -->
20   <!-- </refnamediv> -->
21
22   <refsect1>
23     <title>Goals of GStreamer Editing Services</title>
24     
25     <para>
26       The GStreamer multimedia framework and the accompanying GNonLin set
27       of plugins for non-linear editing offer all the building blocks for:
28       <itemizedlist>
29         <listitem>
30           Decoding and encoding to a wide variety of formats, through
31           all the available GStreamer plugins.
32         </listitem>
33         <listitem>
34           Easily choosing segments of streams and arranging them through
35           time through the GNonLin set of plugins.
36         </listitem>
37       </itemizedlist>
38     </para>
39
40     <para>
41       But all those building blocks only offer stream-level access,
42       which results in developers who want to write non-linear editors
43       to write a consequent amount of code to get to the level of
44       <emphasis>non-linear editing</emphasis> notions which are closer
45       and more meaningful for the end-user (and therefore the
46       application).
47     </para>
48
49     <para>
50       The GStreamer Editing Services <remark>(hereafter GES)</remark>
51       aims to fill the gap between GStreamer/GNonLin and the
52       application developer by offering a series of classes to
53       simplify the creation of many kind of editing-related
54       applications. 
55     </para>
56
57   </refsect1>
58
59   <refsect1>
60     <title>Architecture</title>
61
62     <refsect2>
63       <title>Timeline and TimelinePipeline</title>
64
65       <para>
66         The most top-level object encapsulating every other object is
67         the <link linkend="GESTimeline">GESTimeline</link>. It is the
68         central object for any editing project. 
69       </para>
70
71       <para>
72         The <classname>GESTimeline</classname> is
73         a <classname>GstElement</classname>. It can therefore be used in
74         any GStreamer pipeline like any other object.
75       </para>
76
77       <para>
78         The GESTimeline can contain two types of objects:
79         <itemizedlist>
80           <listitem>
81             <emphasis>Layers</emphasis> - Corresponds to the user-visible
82             layout of non-overlapping objects. A minimalistic would
83             only have one layer. A more complex editing application
84             could use as many as needed.
85           </listitem>
86           <listitem>
87             <emphasis>Tracks</emphasis> - Corresponds to the output
88             stream formats. A typical GESTimeline would have a audio
89             track and a video track. A audio editor would only require
90             one single audio Track.
91           </listitem>
92         </itemizedlist>
93       </para>
94
95       <para>
96         FIXME : INSERT DIAGRAM
97       </para>
98
99       <para>
100         In order to reduce even more the amount of GStreamer
101         interaction the application developer has to deal with , a
102         convenience GstPipeline has been made available specifically
103         for Timelines
104         :  <link linkend="GESTimelinePipeline">GESTimelinePipeline</link>.
105       </para>
106     </refsect2>
107
108
109     <refsect2>
110       <title>Timeline layers</title>
111
112       <para>
113         The layers are the end-user visible part of GES.
114       </para>
115     </refsect2>
116
117     <refsect2>
118       <title>Timeline Tracks</title>
119
120       <para>
121         The tracks are the GStreamer-level components of a
122         Timeline. They are a 1-to-1 relationship to the output
123         streams. 
124       </para>
125     </refsect2>
126   </refsect1>
127
128 </refentry>