docs: Clarify the distinction between Tracks and Layers
[platform/upstream/gstreamer.git] / docs / libs / architecture.xml
1 <?xml version="1.0" encoding="UTF-8"?>
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 % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
5 ]>
6 <refentry id="ges-architecture" revision="25 mar 2009">
7   <refmeta>
8     <refentrytitle>Overview and architecture</refentrytitle>
9
10     <manvolnum>1</manvolnum>
11
12     <refmiscinfo>GStreamer Editing Services</refmiscinfo>
13   </refmeta>
14
15   <!-- <refnamediv> -->
16
17   <!-- <refname>Overview</refname> -->
18
19   <!-- <refpurpose> -->
20
21   <!-- Goals of the GStreamer Editing Services. -->
22
23   <!-- </refpurpose> -->
24
25   <!-- </refnamediv> -->
26
27   <refsect1>
28     <title>Goals of GStreamer Editing Services</title>
29
30     <para>The GStreamer multimedia framework and the accompanying GNonLin set
31     of plugins for non-linear editing offer all the building blocks for:
32     <itemizedlist>
33         <listitem>
34           <para>Decoding and encoding to a wide variety of formats, through
35           all the available GStreamer plugins.</para>
36         </listitem>
37
38         <listitem>
39           <para>Easily choosing segments of streams and arranging them through
40           time through the GNonLin set of plugins.</para>
41         </listitem>
42       </itemizedlist></para>
43
44     <para>But all those building blocks only offer stream-level access, which
45     results in developers who want to write non-linear editors to write a
46     consequent amount of code to get to the level of <emphasis>non-linear
47     editing</emphasis> notions which are closer and more meaningful for the
48     end-user (and therefore the application).</para>
49
50     <para>The GStreamer Editing Services <remark>(hereafter GES)</remark> aims
51     to fill the gap between GStreamer/GNonLin and the application developer by
52     offering a series of classes to simplify the creation of many kind of
53     editing-related applications.</para>
54   </refsect1>
55
56   <refsect1>
57     <title>Architecture</title>
58
59     <refsect2>
60       <title>Timeline and TimelinePipeline</title>
61
62       <para>The most top-level object encapsulating every other object is the
63       <link linkend="GESTimeline">GESTimeline</link>. It is the central object
64       for any editing project.</para>
65
66       <para>The <classname>GESTimeline</classname> is a
67       <classname>GstElement</classname>. It can therefore be used in any
68       GStreamer pipeline like any other object.</para>
69     </refsect2>
70
71
72     <refsect2>
73       <title>Tracks and Layers</title>
74
75       <para>The GESTimeline can contain two types of objects (seen in <xref
76       linkend="layer_tracks_diagram" />): <itemizedlist>
77           <listitem>
78             <para>Layers - Corresponds to the user-visible arrangement of clips,
79             and what you primarily interact with as an application developer.
80             A minimalistic timeline would only have one layer,
81             but a more complex editing application could use as many as needed.
82             </para>
83           </listitem>
84
85           <listitem>
86             <para>Tracks - Corresponds to the output streams in GStreamer.
87             A typical GESTimeline, aimed at a video editing application, would
88             have an audio track and a video track.
89             A GESTimeline for an audio editing application would only require
90             an audio track. Multiple layers can be related to each track.</para>
91           </listitem>
92         </itemizedlist></para>
93
94       <figure float="0" id="layer_tracks_diagram">
95         <title>Layers and Tracks</title>
96
97         <mediaobject>
98           <imageobject>
99             <imagedata fileref="layer_track_overview.png" scale="75" />
100           </imageobject>
101         </mediaobject>
102       </figure>
103
104       <para>In order to reduce even more the amount of GStreamer interaction
105       the application developer has to deal with, a convenience GstPipeline
106       has been made available specifically for Timelines : <link
107       linkend="GESTimelinePipeline">GESTimelinePipeline</link>.</para>
108     </refsect2>
109
110   </refsect1>
111 </refentry>