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
|
2012-08-26 17:49:58 +02:00
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
[abstract]
|
|
|
|
|
******************************************************************************
|
2012-08-26 17:49:58 +02:00
|
|
|
The Lumiera Community is in the process of making a non-linear video editing
|
2012-08-29 17:55:00 +02:00
|
|
|
and compositing FOSS application for Linux/Unix/Posix operating systems. The
|
2012-08-26 17:49:58 +02:00
|
|
|
application is geared towards professional, high-quality work; but
|
|
|
|
|
it is equally suitable for low-end users, due to its in-design scalability.
|
|
|
|
|
Lumiera builds on common open source video, sound and GUI toolkits and
|
|
|
|
|
libraries, being highly flexibile, configurable---user-control over a broad
|
2012-08-29 17:55:00 +02:00
|
|
|
spectrum of configurable parameters---and with smooth workflows that scale well
|
|
|
|
|
to larger more intricate projects and smaller projects.
|
2012-08-26 17:49:58 +02:00
|
|
|
|
|
|
|
|
This document outlines the design from a more general perspective,
|
|
|
|
|
providing potential users with sufficient insight into the tools and technology
|
2012-08-29 17:55:00 +02:00
|
|
|
behind Lumiera to start working with Lumiera quickly.
|
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
|
2012-08-26 17:49:58 +02:00
|
|
|
// It contains many hyper-links to explanations which are denoted by an arrow ->.
|
|
|
|
|
Lumiera is still under active development. Here we describe planned features
|
|
|
|
|
without explicitly tagging them; some points have still to be worked out in
|
|
|
|
|
detail. Although this document is heavily cross-linked, we try to start with a
|
2012-08-29 17:55:00 +02:00
|
|
|
broad overview, then develop details towards the end.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Vision
|
|
|
|
|
------
|
|
|
|
|
|
|
|
|
|
// objective and goals of the project
|
|
|
|
|
|
2012-12-30 20:23:01 +01:00
|
|
|
Lumiera strives towards being a _professional non-linear video editor_. It is
|
|
|
|
|
important to note that by ``professional'' we do not necessarily imply
|
|
|
|
|
``commercial'' or even ``industrial''. We do, however, wish to suggest an
|
|
|
|
|
attitude or frame of mind in how this work is approached, but not the goal,
|
|
|
|
|
requirement or purpose of this work. The concept of professionality in film
|
|
|
|
|
editing can indicate something of an artistic nature, suggest that there is a
|
|
|
|
|
narration, meaning or political messages revealed by the work; or, simply, that
|
|
|
|
|
the work attempts to convey something to an audience.
|
2012-08-26 17:49:58 +02:00
|
|
|
|
|
|
|
|
Anyhow, for the tools, the editing software used to this end, we can identify
|
|
|
|
|
several properties and requirements, to be labeled ``professional'':
|
|
|
|
|
|
|
|
|
|
With this perspective in mind, we can identify a number of key properties
|
2012-12-30 20:23:01 +01:00
|
|
|
film production tools should have and be professional:
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Reliability::
|
2012-12-30 20:23:01 +01:00
|
|
|
All work must be secure and be safe against any software glitches,
|
|
|
|
|
incompatibility or instability. Ideally, Lumiera should be reliable,
|
|
|
|
|
very stable and not susceptible to software crashes, i.e., crashes or
|
|
|
|
|
power failure should ideally not result in data or work loss.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
Quality::
|
2012-08-26 17:49:58 +02:00
|
|
|
The demands placed on high-quality, cinema grade digital video material
|
2012-12-30 20:23:01 +01:00
|
|
|
requires crisp-quality results with no concessions made throughout the
|
|
|
|
|
entire workflow that might compromise quality of the final work.
|
|
|
|
|
It will be necessary to be able to reconstruct all rendering down to a
|
|
|
|
|
single digit.
|
2012-08-26 17:49:58 +02:00
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
Performance and Productivity::
|
2012-12-30 20:23:01 +01:00
|
|
|
Professionals want to get things done in time and content, but, ideally,
|
|
|
|
|
with control over all detail. The fine balance of these goals is a
|
2012-08-26 17:49:58 +02:00
|
|
|
central goal of workflow design and usability.
|
2011-05-22 05:45:59 +02:00
|
|
|
|
|
|
|
|
Scalability and Adaptability::
|
2012-12-30 20:23:01 +01:00
|
|
|
Projects and budgets differ, hardware advances; and Lumiera must scale
|
|
|
|
|
in different dimensions and make optimum use of the resources that are
|
|
|
|
|
available. From small Laptops to multi-core computers up to render farms,
|
|
|
|
|
Lumiera must be adept in optimum use of the hardware at hand.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-05-22 05:45:59 +02:00
|
|
|
Durability::
|
2012-12-30 20:23:01 +01:00
|
|
|
The rapid pace at which software and hardware rampage forward is surely
|
|
|
|
|
a warning to new software projects and the dangers of locking into any
|
|
|
|
|
current technological ``fashion'' to achieve a ``cheap'' goal, feature
|
|
|
|
|
or performance boost. Once the fad fades, the software woes begin.
|
|
|
|
|
The software must be able to engage new technological developments
|
|
|
|
|
without any compromise to functionality or backward compatibility.
|
|
|
|
|
|
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
|
2012-08-29 17:55:00 +02:00
|
|
|
these principles in mind will help you understand how more interesting things can
|
|
|
|
|
be built up from these fundamental principles.
|
2010-06-03 22:31:20 +02:00
|
|
|
|
|
|
|
|
|
2012-08-29 17:55:00 +02:00
|
|
|
Open Ended Combination of Building Blocks
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2010-06-04 19:30:51 +02:00
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
Lumiera is not so much defined in terms of _features_. Instead it can be better
|
|
|
|
|
envisaged as a workshop in which the emphasis is on individual
|
|
|
|
|
_basic building-blocks_ that can be combined together in interesting ways to
|
|
|
|
|
form more complex structures. These basic modules, entities
|
|
|
|
|
or objects each have a distinct _type_ which explicitly limits the
|
|
|
|
|
connections between the modules. Within these limits, any conceivable
|
|
|
|
|
combination is possible without additional hidden restrictions.
|
|
|
|
|
|
|
|
|
|
Lumiera is not a set of Lego bricks, nor is it a business application
|
2010-06-03 22:31:20 +02:00
|
|
|
driven by finite usage stories.
|
|
|
|
|
|
|
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
Medium Level Abstraction and Project Specific Conventions
|
2010-06-03 22:31:20 +02:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2010-06-04 19:30:51 +02:00
|
|
|
These building blocks within Lumiera create a moderate level of abstraction; a
|
2012-12-30 21:20:24 +01:00
|
|
|
user may, if desired, directly manipulate -- using, for example, GUI clips --
|
|
|
|
|
individual effects, masks, and even the placements xref:placement[->] used to
|
|
|
|
|
stitch the objects together, which is comparatively low-level. Such abstraction
|
|
|
|
|
protects the user from technical details such as format conversion or access
|
|
|
|
|
to individual channels.
|
2010-06-04 19:30:51 +02:00
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
To complement this approach, Lumiera does _not_ rely on hard-wired, global
|
|
|
|
|
conventions -- rather we allow the building up of project specific conventions and
|
|
|
|
|
rules xref:rules[->] to fit a given requirement and preferred working style.
|
2012-08-29 17:55:00 +02:00
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
Lumiera will be supplied with a conventional template and a default
|
|
|
|
|
configuration to ease the learning curve #for new users.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
[[graphs]]
|
|
|
|
|
Rendering is Graph Processing
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
Processing video (and audio) data can be conceived as a graph (more precisely
|
|
|
|
|
``directed acyclic graphs''). In this model of video processing, data flows
|
|
|
|
|
along the edges of the graph and is processed at the nodes.
|
|
|
|
|
|
|
|
|
|
The following figure depicts manipulating video data as a graph. The nodes of
|
|
|
|
|
the root of the graph is where data input occurs. From there, the data moves on
|
|
|
|
|
to the next nodes: the direct syblings of the root. Here, the video data
|
|
|
|
|
pre-processing occurs. All other operations on the data can be represented by
|
|
|
|
|
nodes, and data flows from one operation to the next along the nodes of the
|
|
|
|
|
graph.
|
|
|
|
|
|
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
|
2012-12-30 21:20:24 +01:00
|
|
|
pre-configure subgraphs and handle them as a single entity xref:pluginstack[->].
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
In Lumiera everything will be translated into such a graph. Footage will
|
|
|
|
|
be demultiplexed xref:demultiplexer[->] at the first node, thereafter to the
|
|
|
|
|
encoding stage xref:encoder[->] and on to the multiplexer xref:multiplexer[->]
|
|
|
|
|
which assembles the final video.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Pulling not Pushing
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2012-08-26 17:49:58 +02:00
|
|
|
At a first glance, it looks fairly natural to set up the graphs xref:graphs[->]
|
2012-12-30 21:20:24 +01:00
|
|
|
as described above. Data can then be pushed into the system through the input
|
|
|
|
|
nodes and the final result can be seen at the output node. Several multimedia
|
|
|
|
|
frameworks use this approach. However this scheme exhibits a number of
|
|
|
|
|
shortcomings which make it inappropriate for non-linear video editing.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
Lumiera takes a different approach. Data is pulled through a pipe, i.e., a
|
|
|
|
|
request starts at the output node and makes its way back up through the graph to
|
|
|
|
|
the inputs. This scheme offers a number of advantages over the naive scheme
|
|
|
|
|
xref:pull[->], beu we will defer the reasons until later.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
2010-06-03 22:31:20 +02:00
|
|
|
Don't waste work
|
2010-06-02 04:58:23 +02:00
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2012-12-30 21:20:24 +01:00
|
|
|
Rendering A/V data can be CPU intensive. To relieve the CPU workload by not
|
|
|
|
|
rendering material twice or avoiding having to throw away material because it
|
|
|
|
|
could not be rendered in time, Lumiera employs a sophisticated means of using
|
|
|
|
|
cache xref:caching[->] and profiling xref:profiling[->].
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2012-08-29 17:55:00 +02:00
|
|
|
Lumiera consists of three major parts: the GUI, proc and backend. The initial
|
|
|
|
|
GUI Lumiera will ship with is not the only GUI possible, indeed Lumiera can work
|
|
|
|
|
satisfactorily without a GUI, for example, for specail purposes.
|
|
|
|
|
headless rendernode xref:rendernode[->] or frameserver
|
|
|
|
|
xref:frameserver[->]. Later scripts will be written for automated
|
|
|
|
|
processing. Special purpose GUIs are also envisaged later.
|
|
|
|
|
|
|
|
|
|
The GUI screenshot you above is more or less the default you see when when you
|
|
|
|
|
start Lumiera up for the first time. A 2nd viewer is planned for later to be
|
|
|
|
|
added to the default. We support a much more sophisticated screen concept
|
2010-06-04 19:30:51 +02:00
|
|
|
xref:screenconcept[->] to adapt to different workplaces and workflows.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Viewer
|
|
|
|
|
~~~~~~
|
|
|
|
|
|
2012-08-26 17:49:58 +02:00
|
|
|
The viewer is an area where material can be displayed, i.e., ``play-back'',
|
|
|
|
|
which also supports audio playback connections. As there are many sources that
|
|
|
|
|
can be displayed, a viewer is attached to a source via the viewer switch board.
|
|
|
|
|
Timelines, probepoints, wiretaps and individual clips are examlpes of sources
|
|
|
|
|
that can be atached to a viewer. Moreover, the number of viewers open at any one
|
|
|
|
|
time is only limited by the hardware, and each viewer can be collapsed, hooked
|
|
|
|
|
up to a beamer or monitor.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
2012-08-26 17:49:58 +02:00
|
|
|
A timeline is a container that provides a time axis and an output. The output
|
|
|
|
|
can de derived from various sources and have different configurations. An
|
|
|
|
|
output can have various configurations, for each output configuration, there
|
|
|
|
|
will be one timeline. A timeline does not temporally arrange material, this is
|
|
|
|
|
performed by a sequence, which can be snapped to a timeline.
|
|
|
|
|
|
|
|
|
|
A typical film will define many sequences, but only a few timelines. A sequence
|
|
|
|
|
contains a number of tracks which are ordered in a hierarchy. Tracs do not have
|
|
|
|
|
any format associated with them and more or less anything can be put into a
|
|
|
|
|
track. Consequently, audio and video material can be equally assigned to a
|
|
|
|
|
track, there is no discrimination between audio and video in the Lumiera concept
|
|
|
|
|
of a track.
|
|
|
|
|
|
|
|
|
|
A timeline must be assigned to viewer if playback viewing is desired.
|
|
|
|
|
|
|
|
|
|
//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
|
|
|
|
|
~~~~~~
|
2012-08-26 17:49:58 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
The GUI provides a separate _bus view_, showing the master busses (subgroups)
|
2012-08-26 17:49:58 +02:00
|
|
|
in a manner similar to an audio mixing desk. Any bus is just a means of collecting
|
|
|
|
|
and and adding (aka overlaying) together the output of various kinds of media
|
|
|
|
|
(video, audio, number of channels), produced by various processing elements and
|
|
|
|
|
from other busses. These global busses can be concieved as being part of the
|
|
|
|
|
timeline.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Asset View
|
|
|
|
|
~~~~~~~~~~
|
2012-08-26 17:49:58 +02:00
|
|
|
We can conceive the Asset View as the timeline's book keeper: it manages the various
|
|
|
|
|
constituent in the timeline. Moreover, in addition to managing timeline
|
|
|
|
|
constituents, raw material, clips, bins (folders) are managed by the Asset
|
|
|
|
|
View, i.e., typical management operations including, deleting, adding,
|
|
|
|
|
naming, tagging, groupping into bins, etc. all occur here.
|
|
|
|
|
|
|
|
|
|
Plugins are also managed in the Asset View.
|
|
|
|
|
|
|
|
|
|
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
Manages all assets available in one project.
|
|
|
|
|
* source media/footage/soundfiles
|
2012-08-26 17:49:58 +02:00
|
|
|
|
2011-03-31 20:44:03 +02:00
|
|
|
* 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
|
|
|
|
|
-----------
|
|
|
|
|
|
2012-08-26 17:49:58 +02:00
|
|
|
The material in this section provides a cursory view of features not required by
|
2012-08-29 17:55:00 +02:00
|
|
|
a typical user, but of more importance to people loking under the hud, i.e.,
|
2012-08-26 17:49:58 +02:00
|
|
|
programers, etc.
|
2010-06-02 04:58:23 +02:00
|
|
|
|
2012-08-29 17:55:00 +02:00
|
|
|
Most of the material in this section is to be found in the proc layer and in the
|
|
|
|
|
backend.
|
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
|
|
|
|
2012-08-26 17:49:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//databank with logging, no data loss.
|
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
|
|
|
|
2012-08-29 17:55:00 +02:00
|
|
|
Input-Output Subsystem
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Lumiera will process large quantities of data and it is of critical imnportance
|
|
|
|
|
to perform this efficiently. The input and output subsystem are all processed
|
|
|
|
|
in the backend, in fact, this is one very important function provided by the
|
|
|
|
|
back end.
|
|
|
|
|
|
|
|
|
|
The typical Lumiera user will have many clips, in various configurations located
|
|
|
|
|
at various places. All this data will have to be stored by the backend,
|
|
|
|
|
moreover all this data will have to be rapidly retrieved from storage and
|
|
|
|
|
provided to the user. The demands on memory are high: huge chunks of data,
|
|
|
|
|
that can be quickly stored and equally quickly fetched, even if stored over
|
|
|
|
|
longer periods of time. Moreover, due to the scalability requirement of Lumiera,
|
|
|
|
|
this process will have to perform adequately on lower-end hardware, and perform
|
|
|
|
|
efficiently on higher-end hardware.
|
|
|
|
|
|
|
|
|
|
Lumiera will break down processes that need to be processed into smaller units
|
|
|
|
|
called _tasks_. Typically, there will be many hundreds of tasks waiting for
|
|
|
|
|
processing at any one time. These tasks are qued for processing and the order in
|
|
|
|
|
which this is performed is managed by the _scheduler_. This is all done in the
|
|
|
|
|
back end.
|
|
|
|
|
|
|
|
|
|
Apart from memory, the backend will be responsible for accessing and saving
|
|
|
|
|
files. It will be of the utmost to do this efficiently. This will be carried out
|
|
|
|
|
in the backend using low-level mechanisms.
|
2011-03-31 20:44:03 +02:00
|
|
|
|
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.
|
|
|
|
|
|
2012-08-26 17:49:58 +02:00
|
|
|
How are Plugins Implemented?
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
2012-07-27 21:49:14 +02:00
|
|
|
|
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
|
|
|
|