rewrap text to 80 colummns (except for comments)
This commit is contained in:
parent
9a396c6725
commit
27a610c957
1 changed files with 119 additions and 92 deletions
|
|
@ -68,24 +68,26 @@ some explanation what it means to us:
|
||||||
without breaking compatibility. Projects you create nowadays with
|
without breaking compatibility. Projects you create nowadays with
|
||||||
Lumiera should be usable in foreseeable future, at least there needs
|
Lumiera should be usable in foreseeable future, at least there needs
|
||||||
to be a guaranteed upgrade path.
|
to be a guaranteed upgrade path.
|
||||||
|
<
|
||||||
|
|
||||||
Fundamental Forces
|
Fundamental Forces
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
// the basic ideas which drive the lumiera design
|
// the basic ideas which drive the lumiera design
|
||||||
|
|
||||||
The Lumiera design is guided by a small number of basic principles. Keeping these in
|
The Lumiera design is guided by a small number of basic principles. Keeping
|
||||||
mind will help to understand how actually more interesting things can be built up
|
these in mind will help to understand how actually more interesting things can
|
||||||
on that foundation.
|
be built up on that foundation.
|
||||||
|
|
||||||
|
|
||||||
Open ended combining of Building Blocks
|
Open ended combining of Building Blocks
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
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
|
Lumiera is not so much defined in terms of _features_ -- rather it allows to
|
||||||
_type_ explicitly limiting the connections. Within these limits, any conceivable
|
combine basic _building blocks._ These basic modules, entities or objects each
|
||||||
combination shall be supported without further hidden limitations.
|
have a distinct _type_ explicitly limiting the connections. Within these
|
||||||
|
limits, any conceivable combination shall be supported without further hidden
|
||||||
|
limitations.
|
||||||
|
|
||||||
Lumiera is neither a set of Lego bricks, nor is it the business application
|
Lumiera is neither a set of Lego bricks, nor is it the business application
|
||||||
driven by finite usage stories.
|
driven by finite usage stories.
|
||||||
|
|
@ -93,16 +95,19 @@ driven by finite usage stories.
|
||||||
|
|
||||||
Medium level Abstraction and Project specific Conventions
|
Medium level Abstraction and Project specific Conventions
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
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 --
|
These building blocks within Lumiera create a moderate level of abstraction; a
|
||||||
rather we allow to build up project specific conventions and rules xref:rules[->]
|
user may, if desired, directly manipulate through the GUI clips, individual
|
||||||
to fit the given requirements and preferred working style. To help getting started,
|
effects, masks, and even the placements xref:placement[->] used to stitch the
|
||||||
Lumiera will ship with a fairly conventional project template and default configuration.
|
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.
|
||||||
|
|
||||||
|
|
||||||
[[graphs]]
|
[[graphs]]
|
||||||
|
|
@ -110,8 +115,8 @@ Rendering is Graph Processing
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Processing of Video (and audio) data can be generalized as graph processing
|
Processing of Video (and audio) data can be generalized as graph processing
|
||||||
(more precisely ``directed acyclic graphs''). Data flows on the
|
(more precisely ``directed acyclic graphs''). Data flows on the edges of these
|
||||||
edges of these graphs and is processed in the nodes.
|
graphs and is processed in the nodes.
|
||||||
|
|
||||||
image:graph.svg[Example for a graph]
|
image:graph.svg[Example for a graph]
|
||||||
|
|
||||||
|
|
@ -121,8 +126,9 @@ and will be implemented by plugins xref:plugins[->]. Moreover one can
|
||||||
preconfigure subgraphs and handle them as single entity xref:pluginstack[->].
|
preconfigure subgraphs and handle them as single entity xref:pluginstack[->].
|
||||||
|
|
||||||
In Lumiera everything will be translated into such a graph. Your footage will
|
In Lumiera everything will be translated into such a graph. Your footage will
|
||||||
be demultiplexed xref:demultiplexer[->] at a first node, down to the encoding xref:encoder[->]
|
be demultiplexed xref:demultiplexer[->] at a first node, down to the encoding
|
||||||
and multiplexer xref:multiplexer[->] which assembles the final video.
|
xref:encoder[->] and multiplexer xref:multiplexer[->] which assembles the
|
||||||
|
final video.
|
||||||
|
|
||||||
|
|
||||||
Pulling not Pushing
|
Pulling not Pushing
|
||||||
|
|
@ -164,9 +170,9 @@ xref:frameserver[->]. Completely script driven interfaces for automated
|
||||||
processing are also planned.
|
processing are also planned.
|
||||||
|
|
||||||
The GUI screenshot you see above is faily default as when you start Lumiera up
|
The GUI screenshot you see above is faily default as when you start Lumiera up
|
||||||
for the first time (the plan is to add a 2nd Viewer to the default configuration).
|
for the first time (the plan is to add a 2nd Viewer to the default
|
||||||
While we support a much more sophisticated screen concept xref:screenconcept[->]
|
configuration). While we support a much more sophisticated screen concept
|
||||||
to adapt to different workplaces and workflows.
|
xref:screenconcept[->] to adapt to different workplaces and workflows.
|
||||||
|
|
||||||
|
|
||||||
Viewer
|
Viewer
|
||||||
|
|
@ -289,18 +295,22 @@ Session storage
|
||||||
// everything is stored in the session
|
// everything is stored in the session
|
||||||
|
|
||||||
|
|
||||||
|
[[placement]]
|
||||||
Placements
|
Placements
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
[[placement]]
|
|
||||||
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
|
Generic mechanism to stitch together media objects. Any placement may contain
|
||||||
to be _resolved_ to find out the actual position, output and further locational properties of an object.
|
a list of conditions how to locate the placed object, examples being
|
||||||
Missing placement information is _inherited_ from parent placements in the session tree. This causes
|
time-absolute/relative, relative to another object, or relative to some
|
||||||
a lot of relational and locational properties to be inherited from more global settings, unless defined
|
specific source media frame.
|
||||||
locally at a given object: time reference point, output destination, layering, fade control, audio pan,...
|
|
||||||
|
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,...
|
||||||
|
|
||||||
|
|
||||||
Rendering Engine
|
Rendering Engine
|
||||||
|
|
@ -434,13 +444,16 @@ Glossary
|
||||||
|
|
||||||
Track-head/patchbay::
|
Track-head/patchbay::
|
||||||
TODO: better term for this
|
TODO: better term for this
|
||||||
|
|
||||||
//Note by Ichthyo: while I like the term "patchbay", my concern with this is that
|
//Note by Ichthyo: while I like the term "patchbay", my concern with this is that
|
||||||
// it has already a very specific meaning in audio applications; and while our track heads
|
// it has already a very specific meaning in audio applications; and while our track heads
|
||||||
// certainly can serve as a patchbay, that is not the main purpose and they can do things
|
// certainly can serve as a patchbay, that is not the main purpose and they can do things
|
||||||
// beyond that..
|
// beyond that..
|
||||||
the box in front of a track allowing to control properties of the elements
|
|
||||||
contained within this track, unfold nested tracks and so on. To a large extent,
|
the box in front of a track allowing to control properties of the
|
||||||
it corresponds to the placement of this track and allows to manipulate this placement
|
elements contained within this track, unfold nested tracks and so on.
|
||||||
|
To a large extent, it corresponds to the placement of this track and
|
||||||
|
allows to manipulate this placement
|
||||||
|
|
||||||
|
|
||||||
Timeline::
|
Timeline::
|
||||||
|
|
@ -452,18 +465,20 @@ Glossary
|
||||||
is comprised of:
|
is comprised of:
|
||||||
* Time axis, defining the time base
|
* Time axis, defining the time base
|
||||||
* Play Controller (WIP: discussion if thats belongs to the timeline
|
* Play Controller (WIP: discussion if thats belongs to the timeline
|
||||||
and if we want a 1:N relation here). Note by Ichthyo: yes, our current discussion showed us
|
and if we want a 1:N relation here). Note by Ichthyo: yes, our
|
||||||
that a play controller rather gets allocated to a timeline, but isn't contained therein.
|
current discussion showed us that a play controller rather gets
|
||||||
|
allocated to a timeline, but isn't contained therein.
|
||||||
* global pipes, i.e. global busses like in a mixing desk
|
* global pipes, i.e. global busses like in a mixing desk
|
||||||
* exactly one top level Sequence
|
* exactly one top level Sequence
|
||||||
|
|
||||||
Time Axis::
|
Time Axis::
|
||||||
An entity defining the temporal properties of a timeline. A time axis defines
|
|
||||||
the time base, kind of timecode and absolute anchor point. Besides, it manages
|
An entity defining the temporal properties of a timeline. A time axis
|
||||||
a set of frame quantisation grids, corresponding to the outputs configured for
|
defines the time base, kind of timecode and absolute anchor point.
|
||||||
this timeline (through the global busses).
|
Besides, it manages a set of frame quantisation grids, corresponding
|
||||||
The GUI representation is a time ruler with configurable time ticks showed
|
to the outputs configured for this timeline (through the global
|
||||||
on top of the timeline view
|
busses). The GUI representation is a time ruler with configurable time
|
||||||
|
ticks showed on top of the timeline view
|
||||||
|
|
||||||
|
|
||||||
Busses::
|
Busses::
|
||||||
|
|
@ -473,42 +488,47 @@ Glossary
|
||||||
Busses are part of a Timeline.
|
Busses are part of a Timeline.
|
||||||
|
|
||||||
Sequence::
|
Sequence::
|
||||||
A collection of *Media Objects* (clips, effects, transitions, labels, automation)
|
A collection of *Media Objects* (clips, effects, transitions, labels,
|
||||||
placed onto a tree of tracks. By means of this placement, the objects could be
|
automation) placed onto a tree of tracks. By means of this placement,
|
||||||
anchored relative to each other, relative to external objects, absolute in time.
|
the objects could be anchored relative to each other, relative to
|
||||||
A sequence can connect to the global pipes when used as top-level sequence within
|
external objects, absolute in time. A sequence can connect to the
|
||||||
a timeline, or alternatively it can act as a virtual-media when used within a
|
global pipes when used as top-level sequence within a timeline, or
|
||||||
|
alternatively it can act as a virtual-media when used within a
|
||||||
meta-clip (nested sequence). In the default configuration, a Sequence
|
meta-clip (nested sequence). In the default configuration, a Sequence
|
||||||
contains just a single root track and sends directly to the master
|
contains just a single root track and sends directly to the master bus
|
||||||
bus of the timeline.
|
of the timeline.
|
||||||
|
|
||||||
Placement::
|
Placement::
|
||||||
A Placement represents a relation: it is always linked to a Subject (this being a Media Object)
|
A Placement represents a relation: it is always linked to a Subject
|
||||||
and has the meaning to place this Subject in some manner, either relatively to other Media Objects,
|
(this being a Media Object) and has the meaning to place this Subject
|
||||||
by some Constraint or simply absolute at (time, output). Placements are used to stitch together
|
in some manner, either relatively to other Media Objects, by some
|
||||||
the objects in the high-level-model. Placements thus are organised hierarchically and need
|
Constraint or simply absolute at (time, output). Placements are used
|
||||||
to be _resolved_ to obtain a specific value (time point, output routing, layering, fade,...)
|
to stitch together the objects in the high-level-model. Placements
|
||||||
|
thus are organised hierarchically and need to be _resolved_ to obtain
|
||||||
|
a specific value (time point, output routing, layering, fade,...)
|
||||||
|
|
||||||
Pipe::
|
Pipe::
|
||||||
Conceptual building block of the high-level model. It can be thought off as
|
Conceptual building block of the high-level model. It can be thought
|
||||||
simple linear processing chain. A stream can be 'sent to' a pipe, in which case
|
off as simple linear processing chain. A stream can be 'sent to' a
|
||||||
it will be mixed in at the input, and you can 'plug' the output of a pipe to
|
pipe, in which case it will be mixed in at the input, and you can
|
||||||
another destination. Further, effects or processors can be attached to the pipe.
|
'plug' the output of a pipe to another destination. Further, effects
|
||||||
Besides the global pipes (busses) in each Timeline, each clip automatically creates N pipes
|
or processors can be attached to the pipe. Besides the global pipes
|
||||||
(one for each distinct content stream. Typically N=2, for video and audio)
|
(busses) in each Timeline, each clip automatically creates N pipes
|
||||||
|
(one for each distinct content stream. Typically N=2, for video and
|
||||||
|
audio)
|
||||||
|
|
||||||
PlayController::
|
PlayController::
|
||||||
coordinating playback, cueing and rewinding of a playback position, visible
|
coordinating playback, cueing and rewinding of a playback position,
|
||||||
as 'Playhead' cursor in the GUI. When in play state, a PlayController requests
|
visible as 'Playhead' cursor in the GUI. When in play state, a
|
||||||
and directs a render process to deliver the media data needed for playback.
|
PlayController requests and directs a render process to deliver the
|
||||||
|
media data needed for playback.
|
||||||
|
|
||||||
//TODO not sure about the term and if it's appropriate to include it here
|
//TODO not sure about the term and if it's appropriate to include it here
|
||||||
|
|
||||||
RenderTask::
|
RenderTask::
|
||||||
basically a PlayController, but collecting output directly, without moving a
|
basically a PlayController, but collecting output directly, without
|
||||||
PlayheadCursor (maybe a progress indicator) and not operating in a
|
moving a PlayheadCursor (maybe a progress indicator) and not operating
|
||||||
timed fashion, but freewheeling or in background mode
|
in a timed fashion, but freewheeling or in background mode
|
||||||
|
|
||||||
|
|
||||||
Controller Gui::
|
Controller Gui::
|
||||||
This can be either a full Software implementation for a Transport
|
This can be either a full Software implementation for a Transport
|
||||||
|
|
@ -517,28 +537,35 @@ Glossary
|
||||||
gui-entities (Viewers, Timeline Views)
|
gui-entities (Viewers, Timeline Views)
|
||||||
|
|
||||||
Viewer::
|
Viewer::
|
||||||
the display destination showing video frame and possibly some effect overlays (masking etc.).
|
the display destination showing video frame and possibly some effect
|
||||||
When attached to a timeline, a viewer reflects the state of the timeline's associated
|
overlays (masking etc.). When attached to a timeline, a viewer
|
||||||
PlayController, and it attaches to the timeline's global pipes (stream-type match or explicitly),
|
reflects the state of the timeline's associated PlayController, and it
|
||||||
showing video as monitor image and sending audio to the system audio port. Possible extensions are
|
attaches to the timeline's global pipes (stream-type match or
|
||||||
for a viewer to be able to attach to probe points within the render network, to show a second stream
|
explicitly), showing video as monitor image and sending audio to the
|
||||||
as (partial) overlay for comparison, or to be collapsed to a mere control for sending video to a
|
system audio port. Possible extensions are for a viewer to be able to
|
||||||
dedicated monitor (separate X display or firewire)
|
attach to probe points within the render network, to show a second
|
||||||
|
stream as (partial) overlay for comparison, or to be collapsed to a
|
||||||
|
mere control for sending video to a dedicated monitor (separate X
|
||||||
|
display or firewire)
|
||||||
|
|
||||||
High Level Model::
|
High Level Model::
|
||||||
All the session content to be edited and manipulated by the user through the GUI.
|
All the session content to be edited and manipulated by the user
|
||||||
The high-level-model will be translated by the Builder into the Low Level Model for rendering.
|
through the GUI. The high-level-model will be translated by the
|
||||||
|
Builder into the Low Level Model for rendering.
|
||||||
|
|
||||||
Low Level Model::
|
Low Level Model::
|
||||||
The generated Processing Graph, to be ``performed'' within the engine to yield rendered output
|
The generated Processing Graph, to be ``performed'' within the engine
|
||||||
|
to yield rendered output
|
||||||
|
|
||||||
Builder::
|
Builder::
|
||||||
A kind of compiler which creates Low Level/Processing Graphs, by traversing and evaluating
|
A kind of compiler which creates Low Level/Processing Graphs, by
|
||||||
the relevant parts of the high-level-model and using the Rules System.
|
traversing and evaluating the relevant parts of the high-level-model
|
||||||
|
and using the Rules System.
|
||||||
|
|
||||||
Timeline Segment::
|
Timeline Segment::
|
||||||
A range in the timeline which yields in one Processing graph, commonly
|
A range in the timeline which yields in one Processing graph, commonly
|
||||||
the range between cut points (which require a reconfiguration of the graph).
|
the range between cut points (which require a reconfiguration of the
|
||||||
|
graph).
|
||||||
|
|
||||||
// Note by Ichthyo: "Extent" sounds somewhat cool, just it didn't occur to me as a term.
|
// Note by Ichthyo: "Extent" sounds somewhat cool, just it didn't occur to me as a term.
|
||||||
// We may well agree on it, if "extent" communicates the meaning better. Up to now, I called it "segment"
|
// We may well agree on it, if "extent" communicates the meaning better. Up to now, I called it "segment"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue