2010-06-02 04:58:23 +02:00
|
|
|
Lumiera (as seen) from Outer Space
|
|
|
|
|
==================================
|
2011-11-27 06:15:35 +01:00
|
|
|
:Author: Lumiera_Core_Developers
|
2011-03-04 02:48:31 +01:00
|
|
|
:Date: Summer 2010
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
[abstract]
|
|
|
|
|
******************************************************************************
|
2010-06-02 19:33:28 +02:00
|
|
|
The Lumiera Community creates a non linear video editing and compositing FOSS
|
2010-06-02 04:58:23 +02:00
|
|
|
application for Linux/Unix/Posix Operating Systems, suitable for professional
|
|
|
|
|
and quality oriented work, building on common open source video, sound and GUI
|
|
|
|
|
toolkits and libraries, providing flexibility and a high degree of
|
|
|
|
|
configurability and full control of all parameters, but at the same time a
|
|
|
|
|
smooth workflow which scales well to larger and more complicated editing
|
|
|
|
|
projects. This Document outlines the Design from some distance,
|
|
|
|
|
helping people to understand the Ideas behind Lumiera and understand the tools
|
|
|
|
|
they get to work with. It is aimed for workflow designers any anyone who wants
|
2010-06-03 22:31:20 +02:00
|
|
|
to know how the program works in general.
|
2010-06-02 04:58:23 +02:00
|
|
|
******************************************************************************
|
|
|
|
|
|
|
|
|
|
// all things starting with '//' are asciidoc comments and drafts/notes while
|
|
|
|
|
// working on this document
|
|
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
.About this Document
|
2010-06-02 04:58:23 +02:00
|
|
|
This document is meant to be read electronically, it contains a lot
|
|
|
|
|
hyper-links between explanations denoted by an arrow ->. Lumiera is still in
|
2010-06-03 22:31:20 +02:00
|
|
|
development, we describe here planned features without explicitly tagging them;
|
|
|
|
|
some things are not worked out in detail yet. Although this document is heavily
|
2010-06-02 04:58:23 +02:00
|
|
|
cross-linked we try to start with a broad overview and work out more detailed
|
|
|
|
|
things towards the end.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vision
|
|
|
|
|
------
|
|
|
|
|
|
|
|
|
|
// objective and goals of the project
|
|
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
Lumiera claims to be a _professional non-linear video editor_. To start with, we should
|
|
|
|
|
point out that ``professional'' does not necessarily mean ``commercial'' or ``industrial''.
|
|
|
|
|
It's more of an attitude or mindset -- doing work seriously, and to be subject to any
|
|
|
|
|
kind of wider goal, demand, or purpose. When it comes to editing film, this might be
|
|
|
|
|
artistry, a narration or meaning to convey, a political message or something to show
|
|
|
|
|
to your audience. Anyhow, for the tools, the editing software used to this end,
|
|
|
|
|
we can identify several properties and requirements, to be labeled ``professional'':
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Reliability::
|
|
|
|
|
Whatever happens, your work must be safe, protected against software
|
2010-06-03 22:31:20 +02:00
|
|
|
glitches and incompatibilities. Ideally Lumiera should be very stable and
|
2010-06-02 04:58:23 +02:00
|
|
|
never crash, in practice even crashes or power outages should not
|
2010-06-02 19:33:28 +02:00
|
|
|
result in lost work.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Quality::
|
|
|
|
|
If you work with high quality, cinema grade digital video material you
|
2011-05-22 05:45:59 +02:00
|
|
|
want to be sure that you can deliver crisp quality without compromise,
|
|
|
|
|
throughout the whole workflow to your final product. All rendering
|
2010-06-03 22:31:20 +02:00
|
|
|
must be reproducible to the bit.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
Performance and Productivity::
|
|
|
|
|
Professionals want to get things done, in time, but optionally with control
|
|
|
|
|
over every aspect. Balancing these goals should be the central concern for
|
|
|
|
|
workflow design and usability.
|
|
|
|
|
|
|
|
|
|
Scalability and Adaptability::
|
2010-06-02 04:58:23 +02:00
|
|
|
Projects and budgets differ, hardware advances, Lumiera must scale
|
|
|
|
|
in different dimensions and use the available resources as best as it
|
2011-05-22 05:45:59 +02:00
|
|
|
can. From small Laptops to multi core computers and Renderfarms.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
Durability::
|
2010-06-02 04:58:23 +02:00
|
|
|
Soft and Hardware advances at a fast pace. We must not lock into the
|
|
|
|
|
current state of technology but being flexible to extend the System
|
|
|
|
|
without breaking compatibility. Projects you create nowadays with
|
2010-06-03 22:31:20 +02:00
|
|
|
Lumiera should be usable in foreseeable future, at least there needs
|
|
|
|
|
to be a guaranteed upgrade path.
|
2011-05-22 05:45:59 +02:00
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Fundamental Forces
|
|
|
|
|
------------------
|
|
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
// the basic ideas which drive the Lumiera design
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2010-06-04 19:30:51 +02:00
|
|
|
The Lumiera design is guided by a small number of basic principles. Keeping
|
|
|
|
|
these in mind will help to understand how actually more interesting things can
|
|
|
|
|
be built up on that foundation.
|
2010-06-03 22:31:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Open ended combining of Building Blocks
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2010-06-04 19:30:51 +02:00
|
|
|
|
|
|
|
|
Lumiera is not so much defined in terms of _features_ -- rather it allows to
|
|
|
|
|
combine basic _building blocks._ These basic modules, entities or objects each
|
|
|
|
|
have a distinct _type_ explicitly limiting the connections. Within these
|
|
|
|
|
limits, any conceivable combination shall be supported without further hidden
|
|
|
|
|
limitations.
|
2010-06-03 22:31:20 +02:00
|
|
|
|
|
|
|
|
Lumiera is neither a set of Lego bricks, nor is it the business application
|
|
|
|
|
driven by finite usage stories.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Medium level Abstraction and Project specific Conventions
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2010-06-04 19:30:51 +02:00
|
|
|
These building blocks within Lumiera create a moderate level of abstraction; a
|
|
|
|
|
user may, if desired, directly manipulate through the GUI clips, individual
|
|
|
|
|
effects, masks, and even the placements xref:placement[->] used to stitch the
|
|
|
|
|
objects together, which is comparatively low-level. On the other hand, these
|
|
|
|
|
abstractions shield the user from the actual technical details like format
|
|
|
|
|
conversions and the accessing of individual channels.
|
|
|
|
|
|
|
|
|
|
To complement this approach, Lumiera does _not_ rely on hard wired, global
|
|
|
|
|
conventions -- rather we allow to build up project specific conventions and
|
|
|
|
|
rules xref:rules[->] to fit the given requirements and preferred working
|
|
|
|
|
style. To help getting started, Lumiera will ship with a fairly conventional
|
|
|
|
|
project template and default configuration.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
[[graphs]]
|
|
|
|
|
Rendering is Graph Processing
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2010-06-03 22:31:20 +02:00
|
|
|
Processing of Video (and audio) data can be generalized as graph processing
|
2010-06-04 19:30:51 +02:00
|
|
|
(more precisely ``directed acyclic graphs''). Data flows on the edges of these
|
|
|
|
|
graphs and is processed in the nodes.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
image:{imgd}/lumiera_big_graph.png[Example for a graph]
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
When we look at this model we discover that we only need to build
|
2010-06-03 22:31:20 +02:00
|
|
|
xref:builder[->] such graphs, the nodes themselves can be seen as black boxes
|
2010-06-02 04:58:23 +02:00
|
|
|
and will be implemented by plugins xref:plugins[->]. Moreover one can
|
|
|
|
|
preconfigure subgraphs and handle them as single entity xref:pluginstack[->].
|
|
|
|
|
|
2010-06-03 22:31:20 +02:00
|
|
|
In Lumiera everything will be translated into such a graph. Your footage will
|
2010-06-04 19:30:51 +02:00
|
|
|
be demultiplexed xref:demultiplexer[->] at a first node, down to the encoding
|
|
|
|
|
xref:encoder[->] and multiplexer xref:multiplexer[->] which assembles the
|
|
|
|
|
final video.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Pulling not Pushing
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2010-06-03 22:31:20 +02:00
|
|
|
On a first glance, it looks fairly natural to set up the graphs xref:graphs[->]
|
|
|
|
|
as described above and then push data into the system through the input nodes
|
|
|
|
|
whereas the final result can then be seen soon on the output node. Several
|
2010-06-02 04:58:23 +02:00
|
|
|
multimedia frameworks use this approach. But it has a lot of shortcomings
|
2010-06-03 22:31:20 +02:00
|
|
|
which make it inappropriate for non-linear video editing.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Lumiera instead pulls data though the pipe, that is a request starts at the
|
|
|
|
|
output node and makes it way up to the inputs. This has certain advantages
|
|
|
|
|
xref:pull[->], explained later.
|
|
|
|
|
|
|
|
|
|
|
2010-06-03 22:31:20 +02:00
|
|
|
Don't waste work
|
2010-06-02 04:58:23 +02:00
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Rendering A/V Data can be quite CPU intensive, to ensure that we do not waste
|
2010-06-03 22:31:20 +02:00
|
|
|
CPU power by rendering things twice, or the worse, have to throw results away
|
2010-06-02 04:58:23 +02:00
|
|
|
because they couldn't be rendered in time, we use sophisticated caching
|
|
|
|
|
xref:caching[->] and profiling xref:profiling[->].
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The visible Universe
|
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
|
|
// coarse overview whats seen on the gui, details later
|
|
|
|
|
|
|
|
|
|
Now its time to take a look at the prelimary Lumiera GUI:
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
image:{l}/images/lumiera_gui_small.png[Current Lumiera GUI Screenshot]
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2010-06-02 19:33:28 +02:00
|
|
|
The GUI is a plugin by itself and only one way to work Lumiera, it will become
|
|
|
|
|
possible to create special-purpose GUIs or control Lumiera in different ways,
|
|
|
|
|
like a headless rendernode xref:rendernode[->] or frameserver
|
|
|
|
|
xref:frameserver[->]. Completely script driven interfaces for automated
|
|
|
|
|
processing are also planned.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
The GUI screenshot you see above is faily default as when you start Lumiera up
|
2010-06-04 19:30:51 +02:00
|
|
|
for the first time (the plan is to add a 2nd Viewer to the default
|
|
|
|
|
configuration). While we support a much more sophisticated screen concept
|
|
|
|
|
xref:screenconcept[->] to adapt to different workplaces and workflows.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Viewer
|
|
|
|
|
~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// only one viewer type used for everything
|
|
|
|
|
// how is audio integrated in the viewer
|
|
|
|
|
// effects may add overlays (masking/rotoscoping, information for example)
|
|
|
|
|
// these may be manipulateable in the viewer, but not part of the rendered
|
|
|
|
|
// video. Maybe effects can add widgets to the viewer too (how, where?)
|
|
|
|
|
// one can open as many viewers he needs
|
|
|
|
|
// these can be attached everyhere in the processing graph (pre/post effect)
|
|
|
|
|
// have bus in front to adapt output format
|
|
|
|
|
// detachable window, fullscreen, external screen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Transport Controls
|
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
The layout in current gui is rather preliminary -- it is not finally decided
|
|
|
|
|
where transport controls will be integrated; possibly as its own gui element
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
This are devices either controlled by widgets or by some input device
|
|
|
|
|
(MIDI, control surface, etc) so their gui may look differently.
|
|
|
|
|
Either way they connect to a Play Controler xref.. in the core which
|
|
|
|
|
manages playing and cursor positioning.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
thus there will be some gui facility to attach Transport controls to Play
|
|
|
|
|
Controllers. Transport controls are ganged when they attach to the same
|
|
|
|
|
Play Controler.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
just playing some footage for preview creates a simple internal timeline,
|
|
|
|
|
no magic here.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// TODO: bit unrelated, think about how ganging controls in general should
|
|
|
|
|
// work, also for faders, masks and so on
|
2010-06-03 22:31:20 +02:00
|
|
|
// Note by Ichthyo: the connection to a fader is handled through the placements,
|
|
|
|
|
// which allows to inherit such a control connection. IMHO together with the
|
|
|
|
|
// tree-like tracks this removes 80% of the need to gang faders.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Timeline View
|
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
hierarchical tracks, not just a list
|
|
|
|
|
|
|
|
|
|
Format Independent Timeline, one can put anything on the timeline.
|
|
|
|
|
the busses constrain what kind of data is pulled out and in turn the
|
|
|
|
|
builder creates a processing graph which does the necessary conversions and
|
|
|
|
|
stuff.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// Q: how to handle interaction, for example when some conversion can only be
|
|
|
|
|
// done in a lossy way and some conversion node may or may not be inserted
|
|
|
|
|
// (i mean gui wise)?
|
2010-06-03 22:31:20 +02:00
|
|
|
// A: this usually is detected at build time, which means the incriminating
|
|
|
|
|
// object and exit node is just in scope when the problem is detected.
|
|
|
|
|
// My intention was to have a problem flag with accompanying information
|
|
|
|
|
// attached to this object, so the GUI can highlight the problem location
|
|
|
|
|
// and give a general alert.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// TBD: Cursors .. discussion, handling, gui representation
|
2010-06-03 22:31:20 +02:00
|
|
|
// Note by Ichthyo: we shouldn't focus on cursors, but rather on selections.
|
|
|
|
|
// IMHO a playhead or edit marker or similar cursor is just
|
|
|
|
|
// a special case of a selection.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
Busses
|
|
|
|
|
~~~~~~
|
|
|
|
|
The GUI provides a separate _bus view_, showing the master busses (subgroups)
|
|
|
|
|
in a manner similar to an audio mixing desk. Any bus is just a means to collect
|
|
|
|
|
and sum up the output of a specific kind of media (video, audio, number of channels),
|
|
|
|
|
produced by various processing elements and other busses. Conceptionally, these global
|
|
|
|
|
busses are considered a part of the timeline
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Asset View
|
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
Manages all assets available in one project.
|
|
|
|
|
* source media/footage/soundfiles
|
|
|
|
|
* prepared clips, known subprojects
|
|
|
|
|
* all available effects and transitions
|
|
|
|
|
* internal artefacts like sequences and automation data sets
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// First this will be simply implemented showing data loaded into the session
|
|
|
|
|
// and all available plugins/effects
|
2010-06-03 22:31:20 +02:00
|
|
|
// The user may build custom effect collections ("effect palette")
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// (much) Later it is planed to make this a database driven interface, where
|
|
|
|
|
// the tabs showing things are basically just database queries. Then it
|
|
|
|
|
// becomes possible to create/extend this by customized queries and augment
|
|
|
|
|
// assets with all kinds of metadata which can be queried
|
|
|
|
|
|
2010-06-03 22:31:20 +02:00
|
|
|
// Actually, the same underlying data structure is used to implement the
|
|
|
|
|
// asset view with folders, clip bins and effect palettes, and the timeline
|
|
|
|
|
// view with tracks, clips and attached effects. Technically, there is no
|
|
|
|
|
// difference between a track or a clip bin -- just the presentation varies.
|
|
|
|
|
// Timeline contents can be viewed like assets for bookkeeping purposes, and
|
|
|
|
|
// the contents of a clip bin can be played like a storyboard
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
''''''''
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Dark Matter
|
|
|
|
|
-----------
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
|
|
|
|
coarse overview about things the user does not see but have some contact
|
|
|
|
|
with, details later...
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
|
|
|
|
|
Now lets take a look under the hood.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Session storage
|
|
|
|
|
~~~~~~~~~~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// not generateable data
|
|
|
|
|
|
|
|
|
|
// its the timeline mostly
|
|
|
|
|
// session storage
|
|
|
|
|
// benefits, unlimited undo, selective undo
|
|
|
|
|
// export/import plugins
|
|
|
|
|
// everything is stored in the session
|
|
|
|
|
|
|
|
|
|
|
2010-06-04 19:30:51 +02:00
|
|
|
[[placement]]
|
2010-06-03 22:31:20 +02:00
|
|
|
Placements
|
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
2010-06-04 19:30:51 +02:00
|
|
|
Generic mechanism to stitch together media objects. Any placement may contain
|
|
|
|
|
a list of conditions how to locate the placed object, examples being
|
|
|
|
|
time-absolute/relative, relative to another object, or relative to some
|
|
|
|
|
specific source media frame.
|
|
|
|
|
|
|
|
|
|
All of the session model contents are attached by placement, forming a large
|
|
|
|
|
tree. Placements are to be _resolved_ to find out the actual position, output
|
|
|
|
|
and further locational properties of an object. Missing placement information
|
|
|
|
|
is _inherited_ from parent placements in the session tree. This causes a lot
|
|
|
|
|
of relational and locational properties to be inherited from more global
|
|
|
|
|
settings, unless defined locally at a given object: time reference point,
|
|
|
|
|
output destination, layering, fade control, audio pan,...
|
2010-06-03 22:31:20 +02:00
|
|
|
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
Rendering Engine
|
|
|
|
|
~~~~~~~~~~~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
|
|
|
|
rendering...
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
[[builder]]
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
rules system
|
|
|
|
|
[red]#to be written#
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
I/O Subsystem
|
|
|
|
|
~~~~~~~~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
// file handling
|
|
|
|
|
// vault, work, cache
|
|
|
|
|
// repositories
|
|
|
|
|
// explain details later
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Configuration
|
|
|
|
|
~~~~~~~~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
// configuration system
|
|
|
|
|
// serves defaults, actual data are stored in the session
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Plugins/Interfaces
|
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
|
2012-07-27 21:49:14 +02:00
|
|
|
|
|
|
|
|
What are Plugins?
|
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
A Plug-in is a kind of generalisation of a library.
|
|
|
|
|
|
|
|
|
|
All applications use, to varying degrees of intensity, libraries. A programmer
|
|
|
|
|
will not reinvent the wheel each time he sits down to programme an
|
|
|
|
|
application. A programmer will typically borrow and use features and
|
|
|
|
|
functionality from other programmers---or even borrow from himself, stuff
|
|
|
|
|
written long ago in the past. Such features are collected together in
|
|
|
|
|
libraries.
|
|
|
|
|
|
|
|
|
|
A library is used in an application by _linking_ the library into the
|
|
|
|
|
application. (There are other things to be done, but we'll call these 'details',
|
|
|
|
|
which wont concern us here.) There are different ways to _link_ a library
|
|
|
|
|
into an application: statically linking and dynamically linking.
|
|
|
|
|
|
|
|
|
|
_Staticall Linking_ is done while the application is being built, or
|
|
|
|
|
compiled. It is performed by the linker. The linker can perform some checks
|
|
|
|
|
(mostly checks on syntax) and warn the user that some particular feature is
|
|
|
|
|
being used incorrectly. The user can then correct the offending code, and
|
|
|
|
|
recompile.
|
|
|
|
|
There are a number of disadvantages associated with static linking. Features and
|
|
|
|
|
libraries are being constantly improved. If the application wants to use new
|
|
|
|
|
features, it will have to be recompiled with the new library which provides the
|
|
|
|
|
new features.
|
|
|
|
|
|
|
|
|
|
_Dynamic Linking_ helps rectify the necessity of having to recompile. If a
|
|
|
|
|
new, improved library becomes available, all the user has to do is to install
|
|
|
|
|
the new library onto the operating system, restart the application and the new
|
|
|
|
|
features can be used by the application. The features provided by a dynamic
|
|
|
|
|
library are loaded when the application starts to run.
|
|
|
|
|
|
|
|
|
|
However both methods exibit a number of shortcomings. Wouldn't it be better if
|
|
|
|
|
all features could be loaded only when needed? If features could be loaded only
|
|
|
|
|
when needed, then they could also be unloaded when not required, thus saving
|
|
|
|
|
memory and possibly increasing performance. This scheme of making features
|
|
|
|
|
available to an application is known as run-time linking, aka plug-ins.
|
|
|
|
|
Plug-ins offer other benifits: the application can continue to use both the old
|
|
|
|
|
features and the new features together, side-by-side, by using the version
|
|
|
|
|
number associated with the plug-in. This saves the application from considerable
|
|
|
|
|
headaches associated with other linking methods, havocked library version
|
|
|
|
|
incompatibility.
|
|
|
|
|
|
|
|
|
|
Most modern applications use plug-ins, some are heavily dependent on plug-ins
|
|
|
|
|
and only provide limited functionality without any plug-ins.
|
|
|
|
|
Lumiera will not reinvent the wheel. One major goal is to provide considerable
|
|
|
|
|
functionality via well-designed, external code supplied to Lumiera by plug-ins.
|
|
|
|
|
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rendering Video
|
|
|
|
|
---------------
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// describe the flow of data to render a frame
|
|
|
|
|
|
|
|
|
|
// viewer
|
|
|
|
|
// final
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pulling a Frame
|
|
|
|
|
~~~~~~~~~~~~~~~
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#to be written#
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
// special cases,
|
|
|
|
|
// case studies,
|
|
|
|
|
// constrain viewer
|
|
|
|
|
|
|
|
|
|
// proxy
|
2010-06-03 22:31:20 +02:00
|
|
|
// viewer circuit
|
|
|
|
|
// render circuit
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Example Plugins
|
|
|
|
|
//---------------
|
|
|
|
|
|
|
|
|
|
// show some case-studies that someone gets a feel how plugins work
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
[red]#TODO# Consider integrating the following things into the document above
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
* plugins
|
|
|
|
|
* timeline
|
|
|
|
|
* pull
|
|
|
|
|
* bus defines rendering format
|
|
|
|
|
* caching
|
|
|
|
|
* frameserver
|
|
|
|
|
* screenconcept / perspectives
|
|
|
|
|
* automation
|
|
|
|
|
* 3 layered model
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Glossary
|
|
|
|
|
--------
|
|
|
|
|
|
2010-11-16 09:00:46 +01:00
|
|
|
The above outline of the design uses a lot of special terms and common termes
|
|
|
|
|
used with specific meaning within Lumiera. To ease the understanding, we've
|
|
|
|
|
collected a link:Glossary.html[Glossary of common terms].
|
2010-06-02 04:58:23 +02:00
|
|
|
|