Glossary
========


NOTE: Draft, please help rephrase/review and shorten explanations!

 anchor:AssetsView[] link:#AssetsView[->]Assets View::
        The session contains various things that can be edited, worked on
        and connected. These things are collectively known as the _assets_.
        The _assets view_ is a ``bookkeeping view'' for displaying and managing
        the assets of the current session. It provides a list of all ingested footage,
        a list of all clips, effects, transitions, available timelines and sub-sequences,
        automation data, time grids, tags, labels and similar internal artefacts.

 anchor:Builder[] link:#Builder[->]Builder::
        This is a kind of compiler that creates low-level, or processing, graphs
        by traversing and evaluating the relevant parts of the high-level-model
        and using the Rules System.

 anchor:Busses[] link:#Busses[->]Busses::
        A list of 'global Pipes' representing the possible outputs (master
        busses) similar to audio mixing desk. A bus defines the properties of
        the rendered output (Framerate, Resolution, Colorformat and so on).
        Busses are part of a Timeline.

 anchor:ConfigSystem_Preferences[] link:#ConfigSystem_Preferences[->]Config System/Preferences::
        TODO: agree on one term here
        Provides defaults for all kinds of application configurations. These
        include machine specific configurations for performance
        characteristics, File and Plugins Paths and configuration data and so
        on. Note that this only provides defaults for data that has not already
        been set. Many settings will then be stored within the project which
        override Config/Preferences.

 anchor:ControllerGui[] link:#ControllerGui[->]Controller Gui::
        This can be either a full Software implementation for a Transport
        control (Widgets for Start/Stop/Rev/Ffw etc) or some GUI managing an
        Input Device. They share some feature to attach them to controllable
        GUI-entities (Viewers, Timeline Views)

 anchor:Cursor[] link:#Cursor[->]Cursor::
        Playback- or edit position

 anchor:Focus[] link:#Focus[->]Focus::
        TBD

 anchor:Fork[] link:#Fork[->]Fork::
        A grouping device within the HighLevelModel.
        Used within Lumiera to unify the handling of media bins, tracks
        in the timeline and tool palettes. Most notably, Lumiera has no
        distinction between ``audio tracks'' and ``video tracks'' --
        rather, each Sequence holds a fork, which is a tree like structure
        of nested scopes. Clips and other media objects are _placed_ into
        these scopes and the application will derive the output connections
        automatically.

 anchor:HighLevelModel[] link:#HighLevelModel[->]High Level Model::
        All the session content to be edited and manipulated by the user
        through the GUI. The high-level-model will be translated by the
        Builder into the Low Level Model for rendering.

 anchor:InputDevice[] link:#InputDevice[->]Input Device::
        Some hardware controler, like an extra keyboard, midi mixer, Jog, ..
        TODO: we still need to decide on whether we can treat the main keyboard 
        as special global state or whether we can handle the keyboard as a generic 
        input devide. 

 anchor:LowLevelModel[] link:#LowLevelModel[->]Low Level Model::
        The generated Processing Graph, to be ``performed'' within the engine
        to yield rendered output

 anchor:MediaStream[] link:#MediaStream[->]MediaStream::
        Media data is supposed to appear structured as stream(s) over time.
        While there may be an inherent internal structuring, at a given
        perspective any stream is a unit and homogeneous. In the context of
        digital media data processing, streams are always quantized, which means
        they appear as a temporal sequence of data chunks called frames.

 anchor:OutputDesignation[] link:#OutputDesignation[->]OutputDesignation::
        A specification denoting where to connect the output of a pipe.
        It might either be given _absoulutely_, i.e as a Pipe-ID,
        or by a _relative_ or an _indirect_ specification
        
 anchor:OutputManager[] link:#OutputManager[->]OutputManager::
        Manages all external outputs of the application and provides output
        slots targetting these.

 anchor:OutputMapping[] link:#OutputMapping[->]OutputMapping::
        Diverts one output designation into another designation, e.g. when hooking
        up a sequence as a virtual clip within another sequence.

 anchor:OutputSlot[] link:#OutputSlot[->]OutputSlot::
        Opaque descriptor for an output facility, ready to dispose frames
        of data to be output.

 anchor:Pipe[] link:#Pipe[->]Pipe::
        Conceptual building block of the high-level model. It can be thought
        of as simple linear processing chain. A stream can be 'sent to' a
        pipe, in which case it will be mixed in at the input, and you can
        'plug' the output of a pipe to another destination. Furthermore, effects
        or processors can be attached to the pipe. In addition to global pipes
        (busses) in each Timeline, each clip automatically creates N pipes
        (one for each distinct content stream. Typically N=2, for video and
        audio)

 anchor:Placement[] link:#Placement[->]Placement::
        A Placement represents a relation: it is always linked to a Subject
        (this being a Media Object) and has the meaning to place this Subject
        in some manner, either relatively to other Media Objects, by some
        Constraint or simply absolute at (time, output). Placements are used
        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,...)

 anchor:PlayController[] link:#PlayController[->]PlayController::
        coordinating playback, cueing and rewinding of a playback position,
        visible as 'Playhead' cursor in the GUI. When in play state, a
        PlayController requests and directs a render process to deliver the
        media data needed for playback.

 anchor:ProcessingGraph[] link:#ProcessingGraph[->]Processing Graph::
        Rendering is expressed as a detailed network of nodes. The edges can be
        envisaged as data flow, while the nodes represent data processing.

 anchor:Project[] link:#Project[->]Project::
        The top-level context in which all editing is done over an extended
        period of time. A Project can be saved and re-opened. It consists of
        various things a user is working on: user-information, assets, state and
        objects to be edited. 

 anchor:RenderTask[] link:#RenderTask[->]RenderTask::
        This is basically a PlayController, but directly collects output without
        moving a PlayheadCursor (could be a progress indicator) and not operating
        in a timed fashion, but freewheeling or in background mode

 anchor:RulesSystem[] link:#RulesSystem[->]Rules System::
        Translating the Timeline to the underlying Processing Graphs involves
        some logic and knowledge about handling/converting data. This may be
        configued with this Rules System. Typically Lumiera will provide sane
        defaults for most purposes but may extended/refined for site specific
        things.  

 anchor:Sequence[] link:#Sequence[->]Sequence::
        A collection of *Media Objects* (clips, effects, transitions, labels,
        automation) placed onto a fork (``tree of tracks''). By means of this
        placement, the objects could be anchored relative to each other,
        relative to external objects, absolute in time. A sequence can connect
        to global pipes when used as a top-level sequence within a timeline, or
        alternatively it can act as a virtual-media when used within a
        meta-clip (nested sequence). A Sequence by default contains just a
        single root track and directly sends to the master bus of the Timeline.

 anchor:Session[] link:#Session[->]Session::
        the current in-memory representation of the Project when opened within
        an instance of Lumiera. This is an implementation-internal term. For
        the GUI and the users POV we should always prefer the term "Project"
        for the general concept.

 anchor:StreamType[] link:#StreamType[->]StreamType::
        Classification of a media stream. StreamType is a descriptor record.
        While external media processing libraries usually do provide some kind
        of classification already, within lumiera we rely on an uniform yet
        abstract classification which is owned by the project and geared to
        fit the internal needs, especially for the wiring and connecting.
        A Lumiera stream type is comprised of the parts
        - media kind (Video, Image, Audio, MIDI, Text,... )
        - prototype (open ended collection of semantical kinds of media,
          examples being stereoscopic, periphonic, monaural, binaural,
          film quality, TV, youtube).
        - implementation type (e.g. 96kHz 24bit PCM, 2 channels muxed)
        - intention tag (Source, Raw, Intermediary and Target)

 anchor:TimeAxis[] link:#TimeAxis[->]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 a set of frame quantisation grids, corresponding
        to the outputs configured for this timeline (through the global
        busses). The GUI representation is a time ruler with configurable time
        ticks showed on top of the timeline view

 anchor:Timeline[] link:#Timeline[->]Timeline::
        the top level element(s) within the Project. It is visible within a
        'timeline view' in the GUI and represents the effective (resulting)
        arrangement of media objects, resolved to a finite time axis, to be
        rendered for output or viewed in a Monitor (viewer window).
        Timeline(s) are top-level and may not be further combined. A timeline
        is comprised of:
         * Time axis, defining the time base
         * 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 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
         * exactly one top level Sequence

 anchor:TimelineSegment[] link:#TimelineSegment[->]Timeline Segment::
        A range in the timeline which yields in one Processing graph, commonly
        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.
// We may well agree on it, if "extent" communicates the meaning better. Up to now, I called it "segment"

 anchor:TimelineView[] link:#TimelineView[->]Timeline View::
        A view in the GUI featuring a given Timeline. There might be multiple
        views of the same timeline, all sharing the same PlayController. A
        proposed extension is the ability to 'focus' a timeline view to a
        sub-Sequence contained within the top-level sequence of the underlying
        Timeline. (Intended for editing meta-clips)

 anchor:Track-head_patchbay[] link:#Track-head_patchbay[->]Track-head/patchbay::
        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, it corresponds to the placement of this track and
        allows to manipulate this placement
        
        - *TODO*: better term for this
        - 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 certainly can serve as a
          patchbay, that is not the main purpose and they can do things beyond
          that..

 anchor:Viewer[] link:#Viewer[->]Viewer::
        The display destination showing video frame and possibly some effect
        overlays (masking etc.). When attached to a timeline, a viewer
        reflects the state of the timeline's associated PlayController, and it
        attaches to the timeline's global pipes (stream-type match or
        explicitly), showing video as a monitor image and sending audio to the
        system audio port. A number of supplimentary features are possible: the
        viewer could  support the ability to attach to view points within the
        render network; the capability to display a second stream as an overlay
        (partially) which would enable user comparison or it might even be
        possible to allow the Viewer to be collapsed to a control, thus,
        allowing a video to be sent to a dedicated monitor, e.g., to a separate
        X/-display or to a firewire.

 anchor:ViewerSwitchBoard[] link:#Viewer-Switch-Board[->]Viewer Switch Board::
        A control panel attached to the viewer, allowing to select dynamically
        between various possible inputs. With the help of the Switch Board,
        ``A vs B'' comparisons can be done, optionally in split screen mode.

