From 91bddede45ac06cdc1a775fee8a2b065a80e0dc5 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 9 Aug 2007 18:51:47 +0200 Subject: [PATCH] better organization of global imports and namespaces avoid spurious quasi-global namespace cinelerra and use namespace hierarchies only where necessary. document my intended use of namespaces/interfaces in the renderengine-wiki. --- doc/devel/uml/class128005.html | 2 +- doc/devel/uml/class128133.html | 2 +- doc/devel/uml/class128261.html | 2 +- doc/devel/uml/class128517.html | 4 +- doc/devel/uml/class130309.html | 2 +- doc/devel/uml/class130437.html | 2 +- doc/devel/uml/class130565.html | 2 +- doc/devel/uml/class131973.html | 2 +- doc/devel/uml/class132613.html | 2 +- doc/devel/uml/class132741.html | 2 +- doc/devel/uml/class134533.html | 2 +- doc/devel/uml/class134661.html | 2 +- doc/devel/uml/class134917.html | 2 +- doc/devel/uml/class135173.html | 2 +- doc/devel/uml/componentdiagrams.html | 1 + doc/devel/uml/fig129669.png | Bin 21193 -> 21189 bytes doc/devel/uml/fig130053.png | Bin 0 -> 44088 bytes doc/devel/uml/index.html | 107 +++-- doc/devel/uml/index_60.html | 4 +- doc/devel/uml/index_65.html | 2 +- doc/devel/uml/index_67.html | 15 +- doc/devel/uml/index_69.html | 2 +- doc/devel/uml/index_71.html | 1 + doc/devel/uml/index_72.html | 2 +- doc/devel/uml/index_73.html | 5 +- doc/devel/uml/index_76.html | 3 +- doc/devel/uml/index_79.html | 3 +- doc/devel/uml/index_80.html | 3 +- doc/devel/uml/index_83.html | 3 +- doc/devel/uml/index_84.html | 4 +- doc/devel/uml/index_86.html | 20 +- src/cinelerra.h | 61 +++ src/main.cpp | 2 + src/proc/controllerfacade.cpp | 12 +- src/proc/controllerfacade.hpp | 8 +- src/proc/engine/aframe.cpp | 18 +- src/proc/engine/aframe.hpp | 24 +- src/proc/engine/arender.cpp | 18 +- src/proc/engine/arender.hpp | 29 +- src/proc/engine/codecadapter.cpp | 10 +- src/proc/engine/codecadapter.hpp | 40 +- src/proc/engine/exitnode.cpp | 16 +- src/proc/engine/exitnode.hpp | 32 +- src/proc/engine/glbuf.cpp | 18 +- src/proc/engine/glbuf.hpp | 22 +- src/proc/engine/glpipe.cpp | 18 +- src/proc/engine/glpipe.hpp | 36 +- src/proc/engine/glrender.cpp | 16 +- src/proc/engine/glrender.hpp | 28 +- src/proc/engine/hub.cpp | 18 +- src/proc/engine/hub.hpp | 26 +- src/proc/engine/link.cpp | 18 +- src/proc/engine/link.hpp | 44 +- src/proc/engine/mask.cpp | 18 +- src/proc/engine/mask.hpp | 22 +- src/proc/engine/pluginadapter.cpp | 18 +- src/proc/engine/pluginadapter.hpp | 38 +- src/proc/engine/processor.cpp | 18 +- src/proc/engine/processor.hpp | 37 +- src/proc/engine/procnode.cpp | 10 +- src/proc/engine/procnode.hpp | 41 +- src/proc/engine/projector.cpp | 18 +- src/proc/engine/projector.hpp | 34 +- src/proc/engine/renderengine.cpp | 21 +- src/proc/engine/renderengine.hpp | 35 +- src/proc/engine/source.cpp | 18 +- src/proc/engine/source.hpp | 34 +- src/proc/engine/trafo.cpp | 16 +- src/proc/engine/trafo.hpp | 44 +- src/proc/engine/vframe.cpp | 15 +- src/proc/engine/vframe.hpp | 26 +- src/proc/engine/vrender.cpp | 16 +- src/proc/engine/vrender.hpp | 36 +- src/proc/frame.cpp | 4 +- src/proc/frame.hpp | 8 +- src/proc/mobject/buildable.cpp | 26 +- src/proc/mobject/buildable.hpp | 46 +- src/proc/mobject/builder/assembler.cpp | 31 +- src/proc/mobject/builder/assembler.hpp | 40 +- src/proc/mobject/builder/conmanager.cpp | 27 +- src/proc/mobject/builder/conmanager.hpp | 46 +- src/proc/mobject/builder/nodecreatertool.cpp | 54 ++- src/proc/mobject/builder/nodecreatertool.hpp | 80 ++-- src/proc/mobject/builder/segmentationtool.cpp | 42 +- src/proc/mobject/builder/segmentationtool.hpp | 78 ++-- src/proc/mobject/builder/tool.cpp | 14 +- src/proc/mobject/builder/tool.hpp | 48 +-- src/proc/mobject/builder/toolfactory.cpp | 30 +- src/proc/mobject/builder/toolfactory.hpp | 28 +- src/proc/mobject/builderfacade.cpp | 34 +- src/proc/mobject/builderfacade.hpp | 52 ++- src/proc/mobject/controller/pathmanager.cpp | 32 +- src/proc/mobject/controller/pathmanager.hpp | 44 +- src/proc/mobject/controller/renderstate.cpp | 27 +- src/proc/mobject/controller/renderstate.hpp | 48 +-- src/proc/mobject/explicitplacement.cpp | 12 +- src/proc/mobject/explicitplacement.hpp | 36 +- src/proc/mobject/interpolator.cpp | 16 +- src/proc/mobject/interpolator.hpp | 38 +- src/proc/mobject/mobject.cpp | 14 +- src/proc/mobject/mobject.hpp | 54 ++- src/proc/mobject/parameter.cpp | 26 +- src/proc/mobject/parameter.hpp | 44 +- src/proc/mobject/paramprovider.cpp | 23 +- src/proc/mobject/paramprovider.hpp | 46 +- src/proc/mobject/placement.cpp | 24 +- src/proc/mobject/placement.hpp | 48 +-- src/proc/mobject/session/abstractmo.cpp | 20 +- src/proc/mobject/session/abstractmo.hpp | 26 +- src/proc/mobject/session/allocation.cpp | 20 +- src/proc/mobject/session/allocation.hpp | 47 +-- src/proc/mobject/session/auto.cpp | 28 +- src/proc/mobject/session/auto.hpp | 38 +- src/proc/mobject/session/clip.cpp | 20 +- src/proc/mobject/session/clip.hpp | 60 ++- src/proc/mobject/session/edl.cpp | 20 +- src/proc/mobject/session/edl.hpp | 35 +- src/proc/mobject/session/effect.cpp | 20 +- src/proc/mobject/session/effect.hpp | 36 +- src/proc/mobject/session/fixedplacement.cpp | 20 +- src/proc/mobject/session/fixedplacement.hpp | 28 +- src/proc/mobject/session/fixture.cpp | 38 +- src/proc/mobject/session/fixture.hpp | 43 +- src/proc/mobject/session/label.cpp | 20 +- src/proc/mobject/session/label.hpp | 36 +- src/proc/mobject/session/meta.cpp | 20 +- src/proc/mobject/session/meta.hpp | 38 +- .../mobject/session/relativeplacement.cpp | 13 +- .../mobject/session/relativeplacement.hpp | 67 ++- src/proc/mobject/session/segment.cpp | 22 +- src/proc/mobject/session/segment.hpp | 64 ++- src/proc/mobject/session/session.cpp | 20 +- src/proc/mobject/session/session.hpp | 54 ++- src/proc/mobject/session/track.cpp | 20 +- src/proc/mobject/session/track.hpp | 45 +- src/proc/stateproxy.cpp | 4 +- src/proc/stateproxy.hpp | 8 +- uml/cinelerra3/128005 | 78 +++- uml/cinelerra3/128645 | 98 ++--- uml/cinelerra3/128901 | 2 +- uml/cinelerra3/129285.diagram | 4 +- uml/cinelerra3/129669 | 4 +- uml/cinelerra3/129797.diagram | 4 +- uml/cinelerra3/130053.diagram | 135 ++++++ uml/cinelerra3/130181 | 4 +- uml/cinelerra3/130309 | 4 +- uml/cinelerra3/130437 | 4 +- uml/cinelerra3/130565 | 4 +- uml/cinelerra3/130693 | 4 +- uml/cinelerra3/5.session | 8 +- uml/cinelerra3/cinelerra3.prj | 2 +- wiki/renderengine.html | 398 +++++++++++++++++- 152 files changed, 2208 insertions(+), 1929 deletions(-) create mode 100644 doc/devel/uml/fig130053.png create mode 100644 src/cinelerra.h create mode 100644 uml/cinelerra3/130053.diagram diff --git a/doc/devel/uml/class128005.html b/doc/devel/uml/class128005.html index a1c4c2ebc..9ee1b55a0 100644 --- a/doc/devel/uml/class128005.html +++ b/doc/devel/uml/class128005.html @@ -16,7 +16,7 @@ -

Declaration :

Artifact : session

+

Declaration :

Artifact : session, Component(s) : Session

Relation edls (<directional aggregation>)

Declaration :

  • Uml : # edls : EDL, multiplicity : 1..*
  • C++ : protected: EDL * edls
Relation fixture (<unidirectional association>)

Declaration :

  • Uml : # fixture : Fixture, multiplicity : 1
  • C++ : protected: Fixture * fixture
diff --git a/doc/devel/uml/class128133.html b/doc/devel/uml/class128133.html index 788456ce7..cbf83e3ea 100644 --- a/doc/devel/uml/class128133.html +++ b/doc/devel/uml/class128133.html @@ -17,7 +17,7 @@

Declaration :

Directly inherited by : Fixture

-

Artifact : edl

+

Artifact : edl, Component(s) : Session

Relation tracks (<directional aggregation by value>)

Declaration :

  • Uml : # tracks : Track, multiplicity : *
  • C++ : protected: list<Track> tracks
Relation clips (<directional aggregation>)

Declaration :

  • Uml : # clips : MObject, multiplicity : *
  • C++ : protected: list<MObject *> clips
diff --git a/doc/devel/uml/class128261.html b/doc/devel/uml/class128261.html index c5dbd585f..9cb960678 100644 --- a/doc/devel/uml/class128261.html +++ b/doc/devel/uml/class128261.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class Fixture : public EDL

Artifact : fixture

+

Declaration :

  • C++ : class Fixture : public EDL

Artifact : fixture, Component(s) : Session

Relation tracks (<directional aggregation by value>)

Declaration :

  • Uml : # tracks : Track, multiplicity : 1..*
  • C++ : protected: Track tracks
Relation timeline (<directional aggregation by value>)

Declaration :

diff --git a/doc/devel/uml/class128517.html b/doc/devel/uml/class128517.html index 723bd59f6..31e491fce 100644 --- a/doc/devel/uml/class128517.html +++ b/doc/devel/uml/class128517.html @@ -17,10 +17,10 @@

Declaration :

  • C++ : class MObject : public Buildable
  • Java : public interface MObject

Directly inherited by : AbstractMO

-

Artifact : mobject

+

Artifact : mobject, Component(s) : Session

Attribut length
-

Declaration :

  • Uml : # length : long
  • C++ : protected: long length

TODO: how to represent?

+

Declaration :

  • Uml : # length : Time
  • C++ : protected: Time length

TODO: how to represent time intervals?

Relation placement (<association>)

Declaration :

  • Uml : # placement : Placement, multiplicity : 1..*
  • C++ : protected: list<Placement *> placement

All public operations : apply

diff --git a/doc/devel/uml/class130309.html b/doc/devel/uml/class130309.html index 9ae730182..5c515d659 100644 --- a/doc/devel/uml/class130309.html +++ b/doc/devel/uml/class130309.html @@ -16,5 +16,5 @@ -

Declaration :

  • C++ : class ControllerFacade

Provides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.

Artifact : controllerfacade

+

Declaration :

  • C++ : class ControllerFacade

Provides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.

Artifact : controllerfacade, Component(s) : ControllerFacade

diff --git a/doc/devel/uml/class130437.html b/doc/devel/uml/class130437.html index bce32e299..f70da5140 100644 --- a/doc/devel/uml/class130437.html +++ b/doc/devel/uml/class130437.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class PathManager

While building a render engine, this Strategy class decides on the actual render strategy in accordance to the current controller settings (system state)

Artifact : pathmanager

+

Declaration :

  • C++ : class PathManager

While building a render engine, this Strategy class decides on the actual render strategy in accordance to the current controller settings (system state)

Artifact : pathmanager, Component(s) : RenderPathManager

Operation buildProcessor

Declaration :

All public operations : buildProcessor

diff --git a/doc/devel/uml/class130565.html b/doc/devel/uml/class130565.html index ae8a0ded5..9e783f8e1 100644 --- a/doc/devel/uml/class130565.html +++ b/doc/devel/uml/class130565.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class BuilderFacade

Provides unified access to the builder functionality. While individual components of the builder subsystem may be called if necessary or suitable, it is usually better to do all extern invocations via the high level methods of this Facade

Artifact : builderfacade

+

Declaration :

  • C++ : class BuilderFacade

Provides unified access to the builder functionality. While individual components of the builder subsystem may be called if necessary or suitable, it is usually better to do all extern invocations via the high level methods of this Facade

Artifact : builderfacade, Component(s) : Controller

Operation buildEngine

Declaration :

Main Operation of the Builder: create a render engine for a given part of the timeline

All public operations : buildEngine

diff --git a/doc/devel/uml/class131973.html b/doc/devel/uml/class131973.html index 39cb21caa..68e7e24de 100644 --- a/doc/devel/uml/class131973.html +++ b/doc/devel/uml/class131973.html @@ -17,7 +17,7 @@

Declaration :

Directly inherited by : GLPipe

-

Artifact : pipe

+

Artifact : link

diff --git a/doc/devel/uml/class132613.html b/doc/devel/uml/class132613.html index 33576f2eb..0134205d1 100644 --- a/doc/devel/uml/class132613.html +++ b/doc/devel/uml/class132613.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class GLPipe : public Link

specialized connection node used to handle the transfer of OpenGL data from a image bitmap into texture form

Artifact : openglpipe

+

Declaration :

  • C++ : class GLPipe : public Link

specialized connection node used to handle the transfer of OpenGL data from a image bitmap into texture form

Artifact : glpipe

diff --git a/doc/devel/uml/class132741.html b/doc/devel/uml/class132741.html index a7f5baf22..f0a749926 100644 --- a/doc/devel/uml/class132741.html +++ b/doc/devel/uml/class132741.html @@ -17,7 +17,7 @@

Declaration :

  • C++ : class StateProxy
  • Java : public interface StateProxy

Directly inherited by : ARender GLRender VRender

-

Artifact : stateproxy

+

Artifact : stateproxy, Component(s) : Builder

Relation currFrame (<unidirectional association>)

Declaration :

  • Uml : # currFrame : Frame
  • C++ : protected: Frame * currFrame
diff --git a/doc/devel/uml/class134533.html b/doc/devel/uml/class134533.html index 0a5e1a658..cc2ba0f55 100644 --- a/doc/devel/uml/class134533.html +++ b/doc/devel/uml/class134533.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : template<class VAL> class Parameter

Descriptor and access object for a plugin parameter. Parameters may be provided with values from the session, and this values may be automated.

Artifact : parameter

+

Declaration :

  • C++ : template<class VAL> class Parameter

Descriptor and access object for a plugin parameter. Parameters may be provided with values from the session, and this values may be automated.

Artifact : parameter, Component(s) : ProcNode

Operation getValue

Declaration :

  • Uml : + getValue() : VAL
  • C++ : public: VAL getValue () const
Relation <association>

Declaration :

diff --git a/doc/devel/uml/class134661.html b/doc/devel/uml/class134661.html index 811531c79..1933e5d2e 100644 --- a/doc/devel/uml/class134661.html +++ b/doc/devel/uml/class134661.html @@ -17,7 +17,7 @@

Declaration :

  • C++ : template<class VAL> class ParamProvider
  • Java : public interface ParamProvider<VAL>

Directly inherited by : Auto

-

A facility to get the actual value of a plugin/effect parameter

Artifact : paramprovider

+

A facility to get the actual value of a plugin/effect parameter

Artifact : paramprovider, Component(s) : Session

Relation param (<association>)

Declaration :

Relation ipo (<unidirectional association>)

Declaration :

diff --git a/doc/devel/uml/class134917.html b/doc/devel/uml/class134917.html index 00fdfb1e2..c2d5f5781 100644 --- a/doc/devel/uml/class134917.html +++ b/doc/devel/uml/class134917.html @@ -16,5 +16,5 @@ -

Declaration :

  • C++ : class Time

denotes a temporal position (time point), based on timeline start.

investigate posix.4 realtime timers, wrap these here

Artifact : time

+

Declaration :

  • C++ : class Time

denotes a temporal position (time point), based on timeline start.

investigate posix.4 realtime timers, wrap these here

Artifact : time, Component(s) : CommonLib

diff --git a/doc/devel/uml/class135173.html b/doc/devel/uml/class135173.html index 7acd8333f..d4c848734 100644 --- a/doc/devel/uml/class135173.html +++ b/doc/devel/uml/class135173.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class Segment
+

Declaration :

  • C++ : class Segment

Artifact : segment

Attribut start

Declaration :

  • Uml : # start : Time
  • C++ : protected: Time start
diff --git a/doc/devel/uml/componentdiagrams.html b/doc/devel/uml/componentdiagrams.html index 49939b439..15a1086a2 100644 --- a/doc/devel/uml/componentdiagrams.html +++ b/doc/devel/uml/componentdiagrams.html @@ -17,6 +17,7 @@ +
OverviewThis drawing shows the top level compoents and relations
proc-components
diff --git a/doc/devel/uml/fig129669.png b/doc/devel/uml/fig129669.png index d3bef463a980e3a71e31163167b1b3add012b3db..36073fe33126c4e0f926550aec854da655a3af92 100644 GIT binary patch literal 21189 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 literal 21193 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 XnIS6P8@B`!7Ixvhk9+00Yw7<6nCyCo diff --git a/doc/devel/uml/fig130053.png b/doc/devel/uml/fig130053.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6810f94a1b94bea64180fc070e3aee068b21ae GIT binary patch literal 44088 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 literal 0 HcmV?d00001 diff --git a/doc/devel/uml/index.html b/doc/devel/uml/index.html index da7ba2469..2450fdd12 100644 --- a/doc/devel/uml/index.html +++ b/doc/devel/uml/index.html @@ -27,10 +27,16 @@ Documentation

Overview



-

This drawing shows the top level compoents and relations

+

This drawing shows the top level compoents and relations

+
Component CommonLib
+

provided classes : Time

+
Component Builder
+

provided classes : StateProxy

+

required classes : Fixture, Session

Component Session
+

provided classes : EDL, Fixture, MObject, ParamProvider, Session

Component EDL
@@ -41,7 +47,8 @@ Documentation
Component Controller
-

Depends on Builder

+

Depends on Builder

provided classes : BuilderFacade

+
Component AssetManagement
@@ -49,7 +56,13 @@ Documentation
Component Dispatcher
Component Engine
-

Depends on Frame (Stream) Provider

+

Depends on Frame (Stream) Provider

required classes : StateProxy

+
+ +
Component ProcNode
+

nested in Engine

+

provided classes : Parameter

+

required classes : ParamProvider

Component Frame (Stream) Provider
@@ -59,15 +72,27 @@ Documentation
Component Cache
Component RenderPathManager
+

provided classes : PathManager

+
+ +

1.2 Component View interfaces

+
+ +

+

proc-components



+ +
Component ControllerFacade
+

provided classes : ControllerFacade

+

required classes : BuilderFacade, PathManager

+ +
Component ConManager
+

required classes : ParamProvider

-

1.2 Package codegen

-

    -
  • C++ namespace : cinelerra
  • -
+

1.3 Package codegen

This package is used to organize code generation by BOUML. It is considered useless after having generated the initial code skeleton.

-

1.2.1 Deployment View EXE Deployment

+

1.3.1 Deployment View EXE Deployment

defines and lists how the Cinelerra executable has to be created

-

1.2.2 Package common

+

1.3.2 Package common

    -
  • C++ namespace : lib
  • +
  • C++ namespace : cinelerra

sourcecode package

Common library and helper classes

Diagram : Source Overview

-

1.2.2.1 Deployment View gen

+

1.3.2.1 Deployment View gen

defines source files to be generated by BOUML

@@ -99,22 +124,22 @@ Documentation
-

1.2.3 Package backend

+

1.3.3 Package backend

  • C++ namespace : data

sourcecode package

Data backend classes here...

-

1.2.3.1 Deployment View gen

+

1.3.3.1 Deployment View gen

-

1.2.4 Package proc

+

1.3.4 Package proc

    -
  • C++ namespace : proc
  • +
  • C++ namespace : proc_interface

sourcecode package

All classes belonging to the (middle) processing layer

-

1.2.4.1 Deployment View gen

+

1.3.4.1 Deployment View gen

defines source files to be generated by BOUML

@@ -131,23 +156,23 @@ Documentation

Artifact source associated with : Frame

-

1.2.4.2 Package asset

+

1.3.4.2 Package asset

  • C++ namespace : asset

sourcecode package

Asset Management

-

1.2.4.2.1 Deployment View gen

+

1.3.4.2.1 Deployment View gen

defines source files to be generated by BOUML

-

1.2.4.3 Package mobject

+

1.3.4.3 Package mobject

  • C++ namespace : mobject

sourcecode package

MObject Subsystem
including the Session (EDL), Builder and Processing Controller

-

1.2.4.3.1 Deployment View gen

+

1.3.4.3.1 Deployment View gen

defines source files to be generated by BOUML

@@ -184,13 +209,13 @@ Documentation

Artifact source associated with : Interpolator

-

1.2.4.3.2 Package session

+

1.3.4.3.2 Package session

    -
  • C++ namespace : session
  • +
  • C++ namespace : mobject::session

sourcecode package

Everything concerning the EDL and Session, within the MObject Subsystem

-

1.2.4.3.2.1 Deployment View gen

+

1.3.4.3.2.1 Deployment View gen

defines source files to be generated by BOUML

@@ -205,6 +230,10 @@ Documentation
Artifact fixture

the (low level) representation of the EDL with concrete placement data

Artifact source associated with : Fixture

+ +
Artifact segment
+

Segment of the Timeline.
Used at the moment (7/07) for partitioning the timeline/fixture into segments
to be rendered by a specialized render node network for each, without the need
to change any connections within a given segment.
Note this concept may be superfluos alltogether; is a draft and the real
use still needs to be worked out...

+

Artifact source associated with : Segment

Artifact track

descriptor for one track in the Session

@@ -245,13 +274,13 @@ Documentation
-

1.2.4.3.3 Package builder

+

1.3.4.3.3 Package builder

    -
  • C++ namespace : proc
  • +
  • C++ namespace : mobject::builder

sourcecode package

The Builder creating the Render Engine,
located within the MObject Subsystem

-

1.2.4.3.3.1 Deployment View gen

+

1.3.4.3.3.1 Deployment View gen

defines source files to be generated by BOUML

@@ -281,13 +310,13 @@ Documentation
-

1.2.4.3.4 Package controller

+

1.3.4.3.4 Package controller

    -
  • C++ namespace : proc
  • +
  • C++ namespace : mobject::controller

sourcecode package

The Processing and Render Controller,
located within the MObject Subsystem

-

1.2.4.3.4.1 Deployment View gen

+

1.3.4.3.4.1 Deployment View gen

defines source files to be generated by BOUML

@@ -302,13 +331,13 @@ Documentation
-

1.2.4.4 Package engine

+

1.3.4.4 Package engine

  • C++ namespace : engine

sourcecode package

The Core Render Engine

-

1.2.4.4.1 Deployment View gen

+

1.3.4.4.1 Deployment View gen

defines source files to be generated by BOUML

@@ -332,7 +361,7 @@ Documentation

transforming processing Node

Artifact source associated with : Trafo

-
Artifact pipe
+
Artifact link

forwarding, adapting or connecting ProcNode

Artifact source associated with : Link

@@ -356,7 +385,7 @@ Documentation

Processing Node for (de)coding media data

Artifact source associated with : CodecAdapter

-
Artifact openglpipe
+
Artifact glpipe

specialized connection element for handling OpenGL implementation details

Artifact source associated with : GLPipe

@@ -391,20 +420,20 @@ Documentation
-

1.2.5 Package gui

+

1.3.5 Package gui

  • C++ namespace : gui

sourcecode package

User Interface classes go here

-

1.2.5.1 Deployment View gen

+

1.3.5.1 Deployment View gen

defines source files to be generated by BOUML

-

1.2.6 Package tool

+

1.3.6 Package tool

sourcecode package

Tools and Utilities
(separate from the main cinelrra binary)

-

1.2.6.1 Deployment View gen

+

1.3.6.1 Deployment View gen

defines source files to be generated by BOUML

@@ -426,11 +455,11 @@ Documentation
Class Session
Class EDL
Class Fixture
+
Class Segment
Class Track
Class MObject
Class Placement
-
Class Segment
Class Clip
Class Effect
diff --git a/doc/devel/uml/index_60.html b/doc/devel/uml/index_60.html index fd4e47cd3..0a78be5d0 100644 --- a/doc/devel/uml/index_60.html +++ b/doc/devel/uml/index_60.html @@ -17,8 +17,8 @@ - + @@ -28,8 +28,8 @@ - + diff --git a/doc/devel/uml/index_65.html b/doc/devel/uml/index_65.html index e15fdd2ae..fb3771d6c 100644 --- a/doc/devel/uml/index_65.html +++ b/doc/devel/uml/index_65.html @@ -37,8 +37,8 @@ - + diff --git a/doc/devel/uml/index_67.html b/doc/devel/uml/index_67.html index 26195a57f..d3fce2569 100644 --- a/doc/devel/uml/index_67.html +++ b/doc/devel/uml/index_67.html @@ -26,7 +26,6 @@ - @@ -34,13 +33,14 @@ - - - - + + + + + @@ -48,6 +48,7 @@ + @@ -56,15 +57,17 @@ + - + +
NameKindDescription
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
<flow>transition
AssetManagerpackage
ATTACHattributeattach subject to anchor (e.g. an effect to a clip)
au1class instance
aud_aclass instance
aud_Aclass instance
aud_aclass instance
audioclass instance
audio1class instance
audio1class instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
class instanceclass instance
clipartifacta Media Clip
Clipclass
clipsrelation
codecadapterartifactProcessing Node for (de)coding media data
codegenpackageThis package is used to organize code generation by BOUML. It is considered useless after having generated the initial code skeleton.
commonpackagesourcecode package

Common library and helper classes
CommonLibcomponent
CommonLibpackage
complete Render Engineactivity object
ConditionclassI provided a reworked Condition class in my cinelerra2 repository
configure Toolsopaque activity action
ConManagerclassConnection Manager, used to build the connections between render engine nodes, if these nodes need to cooperate besides the normal "data pull" operation. Esp., the Connection Manager knows how to wire up the effect's parameters with the corresponding ParamProviders (autmation) in the Session
conmanagerartifactmanages the creation of additional ProcNode connections for the Renderengine
ConManagercomponent
connectopaque activity action
Constraintclass
Controllercomponent
controllerpackagesourcecode package

The Processing and Render Controller,
located within the MObject Subsystem
Controllerpackage
controllerpackagesourcecode package

The Processing and Render Controller,
located within the MObject Subsystem
Controller Entitiesclass diagram
Controller Workingsclass view
ControllerFacadeclassProvides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.
controllerfacadeartifactFacade and service access point for the Proc Layer Controller
ControllerFacadecomponent
create ProcNodeopaque activity action
currFramerelation
diff --git a/doc/devel/uml/index_69.html b/doc/devel/uml/index_69.html index bbabc7c4b..9d52d03bb 100644 --- a/doc/devel/uml/index_69.html +++ b/doc/devel/uml/index_69.html @@ -18,8 +18,8 @@ - + diff --git a/doc/devel/uml/index_71.html b/doc/devel/uml/index_71.html index 4df086527..62a9306fc 100644 --- a/doc/devel/uml/index_71.html +++ b/doc/devel/uml/index_71.html @@ -41,6 +41,7 @@ + diff --git a/doc/devel/uml/index_72.html b/doc/devel/uml/index_72.html index 6f91bc17d..3b76fe797 100644 --- a/doc/devel/uml/index_72.html +++ b/doc/devel/uml/index_72.html @@ -22,8 +22,8 @@ - +
NameKindDescription
edlartifactthe (high level) Edit Decision List within the current Session
EDLcomponent
EDLclass
EDLcomponent
EDL Example1object diagramA simple example showing how the actual objects are placed in the Fixture (=definitive playlist). It shows a Video and Audio clip placed on two tracks
EDL Example2object diagramMore complex example showing the Object graph in the EDL and how it is linked into the Fixture to yield the actual locations. In this example, an HUE Effect is applied on a part of the Clip
edlsrelation
GLBufclass
glbufartifacta buffer and render process holding a Video frame for OpenGL rendering
GLPipeclassspecialized connection node used to handle the transfer of OpenGL data from a image bitmap into texture form
glpipeartifactspecialized connection element for handling OpenGL implementation details
GLRenderclassRepresentation of a OpenGL accelerated Video render process
glrenderartifactRepresentation of a OpenGL accellerated Video render process
GUIpackageGUI is here just a container to hold any entities considered to be User Interface related, which is not in focus for this Design draft
handles_availableattributeinitialized to the maximum number of filehandles the backend may use for mapped files. When no handles are available, the handle which is last in the handles list is closed and (re-)used.
Else this number is decremented for each new filehandle used and incremented for any one explicitly freed.
Hubclass
hubartifactspecial ProcNode used to build data distributing connections
HUEclass instance
HUEclass instance
HUEclass instance
diff --git a/doc/devel/uml/index_73.html b/doc/devel/uml/index_73.html index 26d333336..a97f05ce5 100644 --- a/doc/devel/uml/index_73.html +++ b/doc/devel/uml/index_73.html @@ -19,9 +19,10 @@ NameKindDescription In Memory Databaseclass diagram inFixtureactivity action pin -inputclass instance -inputclass instance inputclass instance +inputclass instance +inputclass instance +interfacescomponent view interpolatorartifactdenotes a facility to get (continuously interpolated) parameter values InterpolatorclassProvides the implementation for getting the acutal value of a time varying or automated effect/plugin parameter iporelation diff --git a/doc/devel/uml/index_76.html b/doc/devel/uml/index_76.html index 101b4133d..680ae56c6 100644 --- a/doc/devel/uml/index_76.html +++ b/doc/devel/uml/index_76.html @@ -19,9 +19,10 @@ NameKindDescription labelartifact Labelclass -lengthattributeTODO: how to represent? +lengthattributeTODO: how to represent time intervals? lengthattributeduration (span) of this timeline segment. Linkclass +linkartifactforwarding, adapting or connecting ProcNode Lockclass Lockclass diff --git a/doc/devel/uml/index_79.html b/doc/devel/uml/index_79.html index 198ef8b94..edbb2994f 100644 --- a/doc/devel/uml/index_79.html +++ b/doc/devel/uml/index_79.html @@ -18,10 +18,9 @@ - + - diff --git a/doc/devel/uml/index_80.html b/doc/devel/uml/index_80.html index dfef6cced..639db95d5 100644 --- a/doc/devel/uml/index_80.html +++ b/doc/devel/uml/index_80.html @@ -25,7 +25,6 @@ - @@ -40,9 +39,11 @@ + + diff --git a/doc/devel/uml/index_83.html b/doc/devel/uml/index_83.html index 4bd694b57..b930aa453 100644 --- a/doc/devel/uml/index_83.html +++ b/doc/devel/uml/index_83.html @@ -19,6 +19,7 @@ + @@ -29,8 +30,8 @@ - + diff --git a/doc/devel/uml/index_84.html b/doc/devel/uml/index_84.html index 923ddb56b..26fad698a 100644 --- a/doc/devel/uml/index_84.html +++ b/doc/devel/uml/index_84.html @@ -38,10 +38,10 @@ - - + +
NameKindDescription
offsetattributeOffset the actual position by this (time) value relative to the anchor point. TODO: Representation?
openglpipeartifactspecialized connection element for handling OpenGL implementation details
ouputclass instance
ouputclass instance
ouputclass instance
ouputclass instance
outputrelation
Overviewcomponent diagramThis drawing shows the top level compoents and relations
Overview Render Enginedeployment diagram
paramsrelation
PathManagerclassWhile building a render engine, this Strategy class decides on the actual render strategy in accordance to the current controller settings (system state)
pathmanagerartifactManager for deciding the actual render strategy
pipeartifactforwarding, adapting or connecting ProcNode
placementartifactKey Abstraction: a way to place and locate a Media Object
placementrelation
Placementclass
procpackagesourcecode package

All classes belonging to the (middle) processing layer
procnode
procattributeholds the Processor (Render Engine Element) to be built by the current build step
proc-componentscomponent diagram
ProcessingLayerpackage
Processorclass
processorartifacta single render pipeline for one segment of the timeline
ProcNodecomponent
ProcNodeclassKey abstraction of the Render Engine: A Data processing Node
procnodeartifactKey abstraction of the Render Engine: a Processing Node
ProjectorclassSpecial video processing node used to scale and translate image data.
NameKindDescription
SAMETIMEattributeplace subject at the sime time as the anchor
Schedulerclass
segmentartifactSegment of the Timeline.
Used at the moment (7/07) for partitioning the timeline/fixture into segments
to be rendered by a specialized render node network for each, without the need
to change any connections within a given segment.
Note this concept may be superfluos alltogether; is a draft and the real
use still needs to be worked out...
Segmentclass
segment Toolactivity object
SegmentationToolclassTool implementation for deriving a partitioning of the current timeline such, that each segement has a constant configuration. "Constant" means here, that any remaining changes over time can be represented by automation solely, without the need to change the node connections.
Service Componentsclass view
Sessioncomponent
sessionartifactholds the complete session to be edited by the user
Sessionclass view
sessionpackagesourcecode package

Everything concerning the EDL and Session, within the MObject Subsystem
Sessionclass view
Sessionclass
Session structureclass diagram
setup Build Paramsopaque activity action
trafoartifacttransforming processing Node
treatoperation
treatoperation
treatoperation
treatoperation
treatoperation
treatoperation
treatoperation
treatoperation
treatoperation
treatoperationThis operation is to be overloaded for the specific MObject subclasses to be treated.
diff --git a/doc/devel/uml/index_86.html b/doc/devel/uml/index_86.html index 3fa17f5a7..092c278b0 100644 --- a/doc/devel/uml/index_86.html +++ b/doc/devel/uml/index_86.html @@ -19,23 +19,23 @@ NameKindDescription VFrameclass vframeartifacta buffer and render process holding a Video frame -vid1class instance vid1class instance -vid_Aclass instance -vid_Aclass instance -vid_aclass instance -vid_Aclass instance +vid1class instance vid_aclass instance -videoclass instance -videoclass instance +vid_Aclass instance +vid_Aclass instance +vid_Aclass instance +vid_aclass instance videoclass instance +videoclass instance videoclass instance -video1class instance -video1class instance +videoclass instance +video1class instance video1class instance +video1class instance +video1class instance video1class instance video1class instance -video1class instance VRenderclassRepresentation of a Video render process. (Encapsulates the video buffers for the actual calculations) vrenderartifactRepresentation of a Video render process diff --git a/src/cinelerra.h b/src/cinelerra.h new file mode 100644 index 000000000..d9a813952 --- /dev/null +++ b/src/cinelerra.h @@ -0,0 +1,61 @@ +/* + CINELERRA.h - global definitions and common types + + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef CINELERRA_H +#define CINELERRA_H + + + +#ifdef __cplusplus +extern "C" { +#endif /* ========================== common C Part ============ */ + + +#ifdef __cplusplus +} +#endif /* ==================== (End) common C Part ============ */ + + + + + + +#ifdef __cplusplus /* ============== C++-Part ================= */ + + + /* common types frequently used... */ + +#include "common/time.hpp" + + +namespace cinelerra + { + /* additional global configuration goes here... */ + + +} // namespace cinelerra + +#endif /* ===================== (End) C++-Part ================= */ + +#endif /*CINELERRA_H*/ diff --git a/src/main.cpp b/src/main.cpp index 459ead88a..3d4c1ef20 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,6 +23,8 @@ #include +#include "cinelerra.h" + using std::cout; int main (int argc, char* argv[]) diff --git a/src/proc/controllerfacade.cpp b/src/proc/controllerfacade.cpp index 17cfab707..92dca2864 100644 --- a/src/proc/controllerfacade.cpp +++ b/src/proc/controllerfacade.cpp @@ -23,11 +23,11 @@ #include "proc/controllerfacade.hpp" -namespace proc +namespace proc_interface { - + /** */ - - - -} // namespace proc + + + +} // namespace proc_interface diff --git a/src/proc/controllerfacade.hpp b/src/proc/controllerfacade.hpp index 3170f1a04..1d32d9488 100644 --- a/src/proc/controllerfacade.hpp +++ b/src/proc/controllerfacade.hpp @@ -21,12 +21,12 @@ */ -#ifndef PROC_CONTROLLERFACADE_H -#define PROC_CONTROLLERFACADE_H +#ifndef PROC_INTERFACE_CONTROLLERFACADE_H +#define PROC_INTERFACE_CONTROLLERFACADE_H -namespace proc +namespace proc_interface { @@ -42,5 +42,5 @@ namespace proc -} // namespace proc +} // namespace proc_interface #endif diff --git a/src/proc/engine/aframe.cpp b/src/proc/engine/aframe.cpp index 3993e9f8e..53109fffd 100644 --- a/src/proc/engine/aframe.cpp +++ b/src/proc/engine/aframe.cpp @@ -23,16 +23,12 @@ #include "proc/engine/aframe.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/aframe.hpp b/src/proc/engine/aframe.hpp index 366c6d2ea..37e920e6f 100644 --- a/src/proc/engine/aframe.hpp +++ b/src/proc/engine/aframe.hpp @@ -21,25 +21,21 @@ */ -#ifndef PROC_ENGINE_AFRAME_H -#define PROC_ENGINE_AFRAME_H +#ifndef ENGINE_AFRAME_H +#define ENGINE_AFRAME_H #include "proc/frame.hpp" -namespace proc +namespace engine { - namespace engine - { - - - class AFrame : public proc::Frame - {}; - - - - } // namespace proc::engine -} // namespace proc + + class AFrame : public proc_interface::Frame + {}; + + + +} // namespace engine #endif diff --git a/src/proc/engine/arender.cpp b/src/proc/engine/arender.cpp index e03a6cbff..95db74706 100644 --- a/src/proc/engine/arender.cpp +++ b/src/proc/engine/arender.cpp @@ -23,16 +23,12 @@ #include "proc/engine/arender.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/arender.hpp b/src/proc/engine/arender.hpp index 0ab47506b..0ac62282e 100644 --- a/src/proc/engine/arender.hpp +++ b/src/proc/engine/arender.hpp @@ -21,29 +21,24 @@ */ -#ifndef PROC_ENGINE_ARENDER_H -#define PROC_ENGINE_ARENDER_H +#ifndef ENGINE_ARENDER_H +#define ENGINE_ARENDER_H #include "proc/stateproxy.hpp" -namespace proc +namespace engine { - namespace engine - { + + + /** + * Representation of a Audio render process + */ + class ARender : public proc_interface::StateProxy + {}; - /** - * Representation of a Audio render process - */ - class ARender : public proc::StateProxy - {}; - - - - - } // namespace proc::engine - -} // namespace proc + +} // namespace engine #endif diff --git a/src/proc/engine/codecadapter.cpp b/src/proc/engine/codecadapter.cpp index be88d0ff6..104008d2a 100644 --- a/src/proc/engine/codecadapter.cpp +++ b/src/proc/engine/codecadapter.cpp @@ -23,14 +23,8 @@ #include "proc/engine/codecadapter.hpp" -namespace proc +namespace engine { - namespace engine - { - - - } // namespace proc::engine - -} // namespace proc +} // namespace engine diff --git a/src/proc/engine/codecadapter.hpp b/src/proc/engine/codecadapter.hpp index 0618b4432..a82692697 100644 --- a/src/proc/engine/codecadapter.hpp +++ b/src/proc/engine/codecadapter.hpp @@ -21,33 +21,29 @@ */ -#ifndef PROC_ENGINE_CODECADAPTER_H -#define PROC_ENGINE_CODECADAPTER_H +#ifndef ENGINE_CODECADAPTER_H +#define ENGINE_CODECADAPTER_H #include "proc/engine/trafo.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * Adapter for wiring an externally loaded - * codec into the render pipeline. The decoding - * process thus is integrated into the framework - * of the Renderengine, while the actual implementation - * can be delegated to an external library accessed - * through Cinelerra's datat backend. - */ - class CodecAdapter : public Trafo - {}; - - - - } // namespace proc::engine -} // namespace proc + + /** + * Adapter for wiring an externally loaded + * codec into the render pipeline. The decoding + * process thus is integrated into the framework + * of the Renderengine, while the actual implementation + * can be delegated to an external library accessed + * through Cinelerra's datat backend. + */ + class CodecAdapter : public Trafo + {}; + + + +} // namespace engine #endif diff --git a/src/proc/engine/exitnode.cpp b/src/proc/engine/exitnode.cpp index a7b996b9d..f0ecaae36 100644 --- a/src/proc/engine/exitnode.cpp +++ b/src/proc/engine/exitnode.cpp @@ -23,15 +23,11 @@ #include "proc/engine/exitnode.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + +} // namespace engine diff --git a/src/proc/engine/exitnode.hpp b/src/proc/engine/exitnode.hpp index b3b93b056..43d26756b 100644 --- a/src/proc/engine/exitnode.hpp +++ b/src/proc/engine/exitnode.hpp @@ -21,29 +21,25 @@ */ -#ifndef PROC_ENGINE_EXITNODE_H -#define PROC_ENGINE_EXITNODE_H +#ifndef ENGINE_EXITNODE_H +#define ENGINE_EXITNODE_H #include "proc/engine/procnode.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * The output end of each render pipeline. - * Pulling from such exit nodes actually ivokes the render process - */ - class ExitNode : public ProcNode - {}; - - - - } // namespace proc::engine -} // namespace proc + + /** + * The output end of each render pipeline. + * Pulling from such exit nodes actually ivokes the render process + */ + class ExitNode : public ProcNode + {}; + + + +} // namespace engine #endif diff --git a/src/proc/engine/glbuf.cpp b/src/proc/engine/glbuf.cpp index c6a7b2cd3..856fea223 100644 --- a/src/proc/engine/glbuf.cpp +++ b/src/proc/engine/glbuf.cpp @@ -23,16 +23,12 @@ #include "proc/engine/glbuf.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/glbuf.hpp b/src/proc/engine/glbuf.hpp index 6acba91c2..d48da3985 100644 --- a/src/proc/engine/glbuf.hpp +++ b/src/proc/engine/glbuf.hpp @@ -21,25 +21,19 @@ */ -#ifndef PROC_ENGINE_GLBUF_H -#define PROC_ENGINE_GLBUF_H +#ifndef ENGINE_GLBUF_H +#define ENGINE_GLBUF_H #include "proc/frame.hpp" -namespace proc +namespace engine { - namespace engine - { - - - class GLBuf : public proc::Frame - {}; - - - - } // namespace proc::engine -} // namespace proc + + class GLBuf : public proc_interface::Frame + {}; + +} // namespace engine #endif diff --git a/src/proc/engine/glpipe.cpp b/src/proc/engine/glpipe.cpp index cd165d7bf..8abd008a9 100644 --- a/src/proc/engine/glpipe.cpp +++ b/src/proc/engine/glpipe.cpp @@ -23,16 +23,12 @@ #include "proc/engine/glpipe.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/glpipe.hpp b/src/proc/engine/glpipe.hpp index 5708b785c..06f21474f 100644 --- a/src/proc/engine/glpipe.hpp +++ b/src/proc/engine/glpipe.hpp @@ -1,5 +1,5 @@ /* - OPENGLPIPE.hpp - specialized connection element for handling OpenGL implementation details + GLPIPE.hpp - specialized connection element for handling OpenGL implementation details Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,30 +21,26 @@ */ -#ifndef PROC_ENGINE_OPENGLPIPE_H -#define PROC_ENGINE_OPENGLPIPE_H +#ifndef ENGINE_GLPIPE_H +#define ENGINE_GLPIPE_H #include "proc/engine/link.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * specialized connection node used to handle the transfer of OpenGL data - * from a image bitmap into texture form. - */ - class GLPipe : public Link - {}; - - - - - } // namespace proc::engine -} // namespace proc + + /** + * specialized connection node used to handle the transfer of OpenGL data + * from a image bitmap into texture form. + */ + class GLPipe : public Link + {}; + + + + +} // namespace engine #endif diff --git a/src/proc/engine/glrender.cpp b/src/proc/engine/glrender.cpp index 310a3a329..e27899935 100644 --- a/src/proc/engine/glrender.cpp +++ b/src/proc/engine/glrender.cpp @@ -23,15 +23,11 @@ #include "proc/engine/glrender.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + +} // namespace engine diff --git a/src/proc/engine/glrender.hpp b/src/proc/engine/glrender.hpp index 43957e8b6..a0eb79c4e 100644 --- a/src/proc/engine/glrender.hpp +++ b/src/proc/engine/glrender.hpp @@ -21,28 +21,22 @@ */ -#ifndef PROC_ENGINE_GLRENDER_H -#define PROC_ENGINE_GLRENDER_H +#ifndef ENGINE_GLRENDER_H +#define ENGINE_GLRENDER_H #include "proc/stateproxy.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * Representation of a OpenGL accelerated Video render process - */ - class GLRender : public StateProxy - {}; - - - - } // namespace proc::engine -} // namespace proc + + /** + * Representation of a OpenGL accelerated Video render process + */ + class GLRender : public proc_interface::StateProxy + {}; + +} // namespace engine #endif diff --git a/src/proc/engine/hub.cpp b/src/proc/engine/hub.cpp index c6333f35c..14c847aed 100644 --- a/src/proc/engine/hub.cpp +++ b/src/proc/engine/hub.cpp @@ -23,16 +23,12 @@ #include "proc/engine/hub.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/hub.hpp b/src/proc/engine/hub.hpp index 528702996..d7961db36 100644 --- a/src/proc/engine/hub.hpp +++ b/src/proc/engine/hub.hpp @@ -21,28 +21,24 @@ */ -#ifndef PROC_ENGINE_HUB_H -#define PROC_ENGINE_HUB_H +#ifndef ENGINE_HUB_H +#define ENGINE_HUB_H #include "proc/engine/procnode.hpp" -namespace proc +namespace engine { - namespace engine - { - class Hub : public ProcNode - {}; - ///TODO: seems rather we don't need this one anymore?? - //////// to be decided after the implementing the basic render engine.... - - - - - } // namespace proc::engine + class Hub : public ProcNode + {}; + ///TODO: seems rather we don't need this one anymore?? + //////// to be decided after the implementing the basic render engine.... -} // namespace proc + + + +} // namespace engine #endif diff --git a/src/proc/engine/link.cpp b/src/proc/engine/link.cpp index 6bbfe65bf..b447accbd 100644 --- a/src/proc/engine/link.cpp +++ b/src/proc/engine/link.cpp @@ -23,16 +23,12 @@ #include "proc/engine/link.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/link.hpp b/src/proc/engine/link.hpp index 0fd62cc6d..42127f86c 100644 --- a/src/proc/engine/link.hpp +++ b/src/proc/engine/link.hpp @@ -1,5 +1,5 @@ /* - PIPE.hpp - forwarding, adapting or connecting ProcNode + LINK.hpp - forwarding, adapting or connecting ProcNode Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,34 +21,30 @@ */ -#ifndef PROC_ENGINE_PIPE_H -#define PROC_ENGINE_PIPE_H +#ifndef ENGINE_LINK_H +#define ENGINE_LINK_H #include "proc/engine/procnode.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * Abstraction of all sorts of connecting Elements with - * special functionality. For example the coneections enabling - * to mix OpenGL implemented Effects/Previews with normal CPU based - * processing in one render pipeline. - */ - class Link : public ProcNode - { - ///////TODO: flatten hierarchy if we don't have common functionallity for all Link-Subclasses - ///////TODO: can be decdiede when we know more how to handle OpenGL rendering - }; - - - - } // namespace proc::engine -} // namespace proc + + /** + * Abstraction of all sorts of connecting Elements with + * special functionality. For example the coneections enabling + * to mix OpenGL implemented Effects/Previews with normal CPU based + * processing in one render pipeline. + */ + class Link : public ProcNode + { + ///////TODO: flatten hierarchy if we don't have common functionallity for all Link-Subclasses + ///////TODO: can be decdiede when we know more how to handle OpenGL rendering + }; + + + +} // namespace engine #endif diff --git a/src/proc/engine/mask.cpp b/src/proc/engine/mask.cpp index 70292802c..b1b292557 100644 --- a/src/proc/engine/mask.cpp +++ b/src/proc/engine/mask.cpp @@ -23,16 +23,12 @@ #include "proc/engine/mask.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/mask.hpp b/src/proc/engine/mask.hpp index c4ff32ff4..89fc22af0 100644 --- a/src/proc/engine/mask.hpp +++ b/src/proc/engine/mask.hpp @@ -21,26 +21,22 @@ */ -#ifndef PROC_ENGINE_MASK_H -#define PROC_ENGINE_MASK_H +#ifndef ENGINE_MASK_H +#define ENGINE_MASK_H #include "proc/engine/trafo.hpp" -namespace proc +namespace engine { - namespace engine - { - class Mask : public Trafo - {}; - - - - - } // namespace proc::engine + class Mask : public Trafo + {}; -} // namespace proc + + + +} // namespace engine #endif diff --git a/src/proc/engine/pluginadapter.cpp b/src/proc/engine/pluginadapter.cpp index a46657fc6..909271133 100644 --- a/src/proc/engine/pluginadapter.cpp +++ b/src/proc/engine/pluginadapter.cpp @@ -23,16 +23,12 @@ #include "proc/engine/pluginadapter.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/pluginadapter.hpp b/src/proc/engine/pluginadapter.hpp index 91ade35df..8c0a850a7 100644 --- a/src/proc/engine/pluginadapter.hpp +++ b/src/proc/engine/pluginadapter.hpp @@ -21,32 +21,28 @@ */ -#ifndef PROC_ENGINE_PLUGINADAPTER_H -#define PROC_ENGINE_PLUGINADAPTER_H +#ifndef ENGINE_PLUGINADAPTER_H +#define ENGINE_PLUGINADAPTER_H #include "proc/engine/trafo.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * Adapter used to integrate an effects processor in the render pipeline. - * Effects processors are typically defined in a separate library and - * will be loaded at runtime using Cinelerra's plugin interface. - */ - class PluginAdapter : public Trafo - { - ///////////// - }; - - - - } // namespace proc::engine -} // namespace proc + + /** + * Adapter used to integrate an effects processor in the render pipeline. + * Effects processors are typically defined in a separate library and + * will be loaded at runtime using Cinelerra's plugin interface. + */ + class PluginAdapter : public Trafo + { + ///////////// + }; + + + +} // namespace engine #endif diff --git a/src/proc/engine/processor.cpp b/src/proc/engine/processor.cpp index b001afa48..a81589342 100644 --- a/src/proc/engine/processor.cpp +++ b/src/proc/engine/processor.cpp @@ -25,16 +25,12 @@ #include "proc/engine/exitnode.hpp" #include "proc/stateproxy.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/processor.hpp b/src/proc/engine/processor.hpp index 408538020..0794d7285 100644 --- a/src/proc/engine/processor.hpp +++ b/src/proc/engine/processor.hpp @@ -21,38 +21,33 @@ */ -#ifndef PROC_ENGINE_PROCESSOR_H -#define PROC_ENGINE_PROCESSOR_H +#ifndef ENGINE_PROCESSOR_H +#define ENGINE_PROCESSOR_H -#include "common/time.hpp" +#include "cinelerra.h" #include "proc/stateproxy.hpp" - -namespace proc +namespace engine { - namespace engine + + class ExitNode; + + class Processor { + protected: + ExitNode * output; - class ExitNode; + /** begin of the timerange covered by this processor */ + cinelerra::Time start; - class Processor - { - protected: - ExitNode * output; + /**end (exclusive) of the timerange */ + cinelerra::Time end; - /** begin of the timerange covered by this processor */ - cinelerra::Time start; + }; - /**end (exclusive) of the timerange */ - cinelerra::Time end; - }; - - - - } // namespace proc::engine -} // namespace proc +} // namespace engine #endif diff --git a/src/proc/engine/procnode.cpp b/src/proc/engine/procnode.cpp index 74457f3be..81a1dd22d 100644 --- a/src/proc/engine/procnode.cpp +++ b/src/proc/engine/procnode.cpp @@ -23,15 +23,11 @@ #include "proc/engine/procnode.hpp" -namespace proc +namespace engine { - namespace engine - { - /** */ - + /** */ - } // namespace proc::engine -} // namespace proc +} // namespace engine diff --git a/src/proc/engine/procnode.hpp b/src/proc/engine/procnode.hpp index d3bc83acd..dbf983f3c 100644 --- a/src/proc/engine/procnode.hpp +++ b/src/proc/engine/procnode.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_ENGINE_PROCNODE_H -#define PROC_ENGINE_PROCNODE_H +#ifndef ENGINE_PROCNODE_H +#define ENGINE_PROCNODE_H #include @@ -33,31 +33,26 @@ using std::vector; -namespace proc +namespace engine { - namespace engine + + + /** + * Key abstraction of the Render Engine: A Data processing Node + */ + class ProcNode { + protected: + typedef mobject::Parameter Param; + /** The predecessor in a processing pipeline. + * I.e. a source to get data to be processed + */ + ProcNode * datasrc; - /** - * Key abstraction of the Render Engine: A Data processing Node - */ - class ProcNode - { - protected: - typedef proc::mobject::Parameter Param; - - /** The predecessor in a processing pipeline. - * I.e. a source to get data to be processed - */ - ProcNode * datasrc; + vector params; - vector params; + }; - }; - - - } // namespace proc::engine - -} // namespace proc +} // namespace engine #endif diff --git a/src/proc/engine/projector.cpp b/src/proc/engine/projector.cpp index 92ddee6a8..15eef8c8a 100644 --- a/src/proc/engine/projector.cpp +++ b/src/proc/engine/projector.cpp @@ -23,16 +23,12 @@ #include "proc/engine/projector.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/projector.hpp b/src/proc/engine/projector.hpp index bb6b0539c..881a988b1 100644 --- a/src/proc/engine/projector.hpp +++ b/src/proc/engine/projector.hpp @@ -21,30 +21,26 @@ */ -#ifndef PROC_ENGINE_PROJECTOR_H -#define PROC_ENGINE_PROJECTOR_H +#ifndef ENGINE_PROJECTOR_H +#define ENGINE_PROJECTOR_H #include "proc/engine/trafo.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * Special video processing node used to scale and translate image data. - */ - class Projector : public Trafo - { - //////////// - }; - - - - } // namespace proc::engine -} // namespace proc + + /** + * Special video processing node used to scale and translate image data. + */ + class Projector : public Trafo + { + //////////// + }; + + + +} // namespace engine #endif diff --git a/src/proc/engine/renderengine.cpp b/src/proc/engine/renderengine.cpp index f0809aebb..50ba3b68b 100644 --- a/src/proc/engine/renderengine.cpp +++ b/src/proc/engine/renderengine.cpp @@ -23,23 +23,18 @@ #include "proc/engine/renderengine.hpp" -namespace proc +namespace engine { - namespace engine - { - /** - * TODO: will probably be handled differently (see Cehteh) - */ - void - RenderEngine::play () - { - } + /** + * TODO: will probably be handled differently (see Cehteh) + */ + void + RenderEngine::play () + {} - } // namespace proc::engine - -} // namespace proc +} // namespace engine diff --git a/src/proc/engine/renderengine.hpp b/src/proc/engine/renderengine.hpp index 0184af4f9..a05a1f596 100644 --- a/src/proc/engine/renderengine.hpp +++ b/src/proc/engine/renderengine.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_ENGINE_RENDERENGINE_H -#define PROC_ENGINE_RENDERENGINE_H +#ifndef ENGINE_RENDERENGINE_H +#define ENGINE_RENDERENGINE_H #include @@ -32,27 +32,22 @@ using std::list; -namespace proc +namespace engine { - namespace engine + + + class RenderEngine : public Processor { + public: + /** + * TODO: will probably be handled differently (see Cehteh) + */ + void play () ; + private: + list renderSegments; - class RenderEngine : public Processor - { - public: - /** - * TODO: will probably be handled differently (see Cehteh) - */ - void play () ; + }; - private: - list renderSegments; - - }; - - - } // namespace proc::engine - -} // namespace proc +} // namespace engine #endif diff --git a/src/proc/engine/source.cpp b/src/proc/engine/source.cpp index cebe3e7a5..801da289e 100644 --- a/src/proc/engine/source.cpp +++ b/src/proc/engine/source.cpp @@ -23,16 +23,12 @@ #include "proc/engine/source.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + +} // namespace engine diff --git a/src/proc/engine/source.hpp b/src/proc/engine/source.hpp index ed659ae09..9241b7998 100644 --- a/src/proc/engine/source.hpp +++ b/src/proc/engine/source.hpp @@ -21,33 +21,29 @@ */ -#ifndef PROC_ENGINE_SOURCE_H -#define PROC_ENGINE_SOURCE_H +#ifndef ENGINE_SOURCE_H +#define ENGINE_SOURCE_H #include "proc/engine/procnode.hpp" -namespace proc +namespace engine { - namespace engine + + + /** + * Source Node: represents a media source to pull data from. + * Source is special, because it has no predecessor nodes, + * but rather makes calls down to the data backend internally + * to get at the raw data. + */ + class Source : public ProcNode { + /////////////////TODO + }; - /** - * Source Node: represents a media source to pull data from. - * Source is special, because it has no predecessor nodes, - * but rather makes calls down to the data backend internally - * to get at the raw data. - */ - class Source : public ProcNode - { - /////////////////TODO - }; - - - - } // namespace proc::engine -} // namespace proc +} // namespace engine #endif diff --git a/src/proc/engine/trafo.cpp b/src/proc/engine/trafo.cpp index 934583974..c570e999e 100644 --- a/src/proc/engine/trafo.cpp +++ b/src/proc/engine/trafo.cpp @@ -23,15 +23,11 @@ #include "proc/engine/trafo.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + +} // namespace engine diff --git a/src/proc/engine/trafo.hpp b/src/proc/engine/trafo.hpp index 8befa1b1c..6aa327beb 100644 --- a/src/proc/engine/trafo.hpp +++ b/src/proc/engine/trafo.hpp @@ -21,35 +21,31 @@ */ -#ifndef PROC_ENGINE_TRAFO_H -#define PROC_ENGINE_TRAFO_H +#ifndef ENGINE_TRAFO_H +#define ENGINE_TRAFO_H #include "proc/engine/procnode.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * abstraction of the most important kind of Processing node, - * which really works on the media data and transforms input - * into ouput. Subclasses include the (Video) Projector - * for scaling/translating, all sorts of effects (Plugins), - * as well as the low level codecs used to decode the raw - * media at the source end of the render pipeline(s) - */ - class Trafo : public ProcNode - { - /////////// - }; - - - - } // namespace proc::engine -} // namespace proc + + /** + * abstraction of the most important kind of Processing node, + * which really works on the media data and transforms input + * into ouput. Subclasses include the (Video) Projector + * for scaling/translating, all sorts of effects (Plugins), + * as well as the low level codecs used to decode the raw + * media at the source end of the render pipeline(s) + */ + class Trafo : public ProcNode + { + /////////// + }; + + + +} // namespace engine #endif diff --git a/src/proc/engine/vframe.cpp b/src/proc/engine/vframe.cpp index 1e9d22139..9fe88d7a1 100644 --- a/src/proc/engine/vframe.cpp +++ b/src/proc/engine/vframe.cpp @@ -23,16 +23,11 @@ #include "proc/engine/vframe.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - } // namespace proc::engine + /** */ -} // namespace proc + + +} // namespace engine diff --git a/src/proc/engine/vframe.hpp b/src/proc/engine/vframe.hpp index 2496397bd..350b7d26a 100644 --- a/src/proc/engine/vframe.hpp +++ b/src/proc/engine/vframe.hpp @@ -21,27 +21,21 @@ */ -#ifndef PROC_ENGINE_VFRAME_H -#define PROC_ENGINE_VFRAME_H +#ifndef ENGINE_VFRAME_H +#define ENGINE_VFRAME_H #include "proc/frame.hpp" -namespace proc +namespace engine { - namespace engine - { - - - class VFrame : public proc::Frame - { - /////////////////////// - }; - - - - } // namespace proc::engine -} // namespace proc + + class VFrame : public proc_interface::Frame + { + /////////////////////// + }; + +} // namespace engine #endif diff --git a/src/proc/engine/vrender.cpp b/src/proc/engine/vrender.cpp index bd29cd1cc..1fbd6b6b3 100644 --- a/src/proc/engine/vrender.cpp +++ b/src/proc/engine/vrender.cpp @@ -23,15 +23,11 @@ #include "proc/engine/vrender.hpp" -namespace proc +namespace engine { - namespace engine - { - - /** */ - - - - } // namespace proc::engine -} // namespace proc + /** */ + + + + } // namespace engine diff --git a/src/proc/engine/vrender.hpp b/src/proc/engine/vrender.hpp index 19037ed79..5a9f16179 100644 --- a/src/proc/engine/vrender.hpp +++ b/src/proc/engine/vrender.hpp @@ -21,31 +21,27 @@ */ -#ifndef PROC_ENGINE_VRENDER_H -#define PROC_ENGINE_VRENDER_H +#ifndef ENGINE_VRENDER_H +#define ENGINE_VRENDER_H #include "proc/stateproxy.hpp" -namespace proc +namespace engine { - namespace engine - { - - - /** - * Representation of a Video render process. - * (Encapsulates the video buffers for the actual calculations) - */ - class VRender : public proc::StateProxy - { - ///////////// - }; - - - - } // namespace proc::engine -} // namespace proc + + /** + * Representation of a Video render process. + * (Encapsulates the video buffers for the actual calculations) + */ + class VRender : public proc_interface::StateProxy + { + ///////////// + }; + + + +} // namespace engine #endif diff --git a/src/proc/frame.cpp b/src/proc/frame.cpp index 9df36467b..9443b46e7 100644 --- a/src/proc/frame.cpp +++ b/src/proc/frame.cpp @@ -23,11 +23,11 @@ #include "proc/frame.hpp" -namespace proc +namespace proc_interface { /** */ -} // namespace proc +} // namespace proc_interface diff --git a/src/proc/frame.hpp b/src/proc/frame.hpp index ad453eba0..072f57a2d 100644 --- a/src/proc/frame.hpp +++ b/src/proc/frame.hpp @@ -21,12 +21,12 @@ */ -#ifndef PROC_FRAME_H -#define PROC_FRAME_H +#ifndef PROC_INTERFACE_FRAME_H +#define PROC_INTERFACE_FRAME_H -namespace proc +namespace proc_interface { @@ -42,5 +42,5 @@ namespace proc -} // namespace proc +} // namespace proc_interface #endif diff --git a/src/proc/mobject/buildable.cpp b/src/proc/mobject/buildable.cpp index 9379d1799..1b9d335de 100644 --- a/src/proc/mobject/buildable.cpp +++ b/src/proc/mobject/buildable.cpp @@ -24,24 +24,20 @@ #include "proc/mobject/buildable.hpp" #include "proc/mobject/builder/tool.hpp" -namespace proc +namespace mobject { - namespace mobject - { - /** typically the provided actual Tool class will - * contain overloaded fuctions for treating - * different Buildable subclasses specifically - */ - void - Buildable::apply (builder::Tool& provided_tool) - { - provided_tool.treat( *this); //// TODO: how to call??? (ref or pointer??) - } + /** typically the provided actual Tool class will + * contain overloaded fuctions for treating + * different Buildable subclasses specifically + */ + void + Buildable::apply (builder::Tool& provided_tool) + { + provided_tool.treat( *this); //// TODO: how to call??? (ref or pointer??) + } - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/buildable.hpp b/src/proc/mobject/buildable.hpp index c0f16ef15..145c3496b 100644 --- a/src/proc/mobject/buildable.hpp +++ b/src/proc/mobject/buildable.hpp @@ -21,35 +21,31 @@ */ -#ifndef PROC_MOBJECT_BUILDABLE_H -#define PROC_MOBJECT_BUILDABLE_H +#ifndef MOBJECT_BUILDABLE_H +#define MOBJECT_BUILDABLE_H -namespace proc +namespace mobject { - namespace mobject - { - - - namespace builder{ class Tool; } - - - /** - * All Buidables support double-dispatch of given Tool operations. - * The actual operation is thus selected at runtime based both on the - * actual type of the Tool class /and/ the actual type of the Buildabele. - */ - class Buildable - { - public: - void apply (builder::Tool& provided_tool) ; - }; - - - - } // namespace proc::mobject -} // namespace proc + + namespace builder{ class Tool; } + + + /** + * All Buidables support double-dispatch of given Tool operations. + * The actual operation is thus selected at runtime based both on the + * actual type of the Tool class /and/ the actual type of the Buildabele. + */ + class Buildable + { + public: + void apply (builder::Tool& provided_tool) ; + }; + + + +} // namespace mobject #endif diff --git a/src/proc/mobject/builder/assembler.cpp b/src/proc/mobject/builder/assembler.cpp index 04df4ce83..1be4f8957 100644 --- a/src/proc/mobject/builder/assembler.cpp +++ b/src/proc/mobject/builder/assembler.cpp @@ -23,25 +23,20 @@ #include "proc/mobject/builder/assembler.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder - { - - - - proc::engine::RenderEngine & - Assembler::build () - { - } - - - - - } // namespace proc::mobject::builder - } // namespace proc::mobject -} // namespace proc + + engine::RenderEngine & + Assembler::build () + { + } + + + + } // namespace mobject::builder + +} // namespace mobject diff --git a/src/proc/mobject/builder/assembler.hpp b/src/proc/mobject/builder/assembler.hpp index df2028439..238071f79 100644 --- a/src/proc/mobject/builder/assembler.hpp +++ b/src/proc/mobject/builder/assembler.hpp @@ -21,38 +21,34 @@ */ -#ifndef PROC_MOBJECT_BUILDER_ASSEMBLER_H -#define PROC_MOBJECT_BUILDER_ASSEMBLER_H +#ifndef MOBJECT_BUILDER_ASSEMBLER_H +#define MOBJECT_BUILDER_ASSEMBLER_H #include "proc/engine/renderengine.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder + + + /** + * This is the actual building facility: + * provided the correct tools and associations, + * it serves to build and connect the individual ProcNode objects + */ + class Assembler { + public: + engine::RenderEngine & build () ; + // TODO: allocation, GC??? + }; - /** - * This is the actual building facility: - * provided the correct tools and associations, - * it serves to build and connect the individual ProcNode objects - */ - class Assembler - { - public: - proc::engine::RenderEngine & build () ; - // TODO: allocation, GC??? - }; - - - - } // namespace proc::mobject::builder - } // namespace proc::mobject + } // namespace mobject::builder -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/builder/conmanager.cpp b/src/proc/mobject/builder/conmanager.cpp index 8232affff..c159c24e8 100644 --- a/src/proc/mobject/builder/conmanager.cpp +++ b/src/proc/mobject/builder/conmanager.cpp @@ -23,27 +23,24 @@ #include "proc/mobject/builder/conmanager.hpp" -namespace proc +namespace mobject { - namespace mobject + + namespace builder { - namespace builder - { - /** - * TODO !!!!!!!!!!!!!!!!!! - */ - int - ConManager::getConnection () - { - } + /** + * TODO !!!!!!!!!!!!!!!!!! + */ + int + ConManager::getConnection () + { + } - } // namespace proc::mobject::builder + } // namespace mobject::builder - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/builder/conmanager.hpp b/src/proc/mobject/builder/conmanager.hpp index 0e9a3fc72..bd390e96b 100644 --- a/src/proc/mobject/builder/conmanager.hpp +++ b/src/proc/mobject/builder/conmanager.hpp @@ -21,39 +21,35 @@ */ -#ifndef PROC_MOBJECT_BUILDER_CONMANAGER_H -#define PROC_MOBJECT_BUILDER_CONMANAGER_H +#ifndef MOBJECT_BUILDER_CONMANAGER_H +#define MOBJECT_BUILDER_CONMANAGER_H -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder + + + /** + * Connection Manager: used to build the connections between render engine nodes + * if these nodes need to cooperate besides the normal "data pull" operation. + * Esp. the Connection Manager knows how to wire up the effect's parameters + * with the corresponding ParamProviders (autmation) in the Session. + */ + class ConManager { + public: + /** + * TODO just a design sketch, work out signatures etc... + */ + int getConnection () ; + }; - /** - * Connection Manager: used to build the connections between render engine nodes - * if these nodes need to cooperate besides the normal "data pull" operation. - * Esp. the Connection Manager knows how to wire up the effect's parameters - * with the corresponding ParamProviders (autmation) in the Session. - */ - class ConManager - { - public: - /** - * TODO just a design sketch, work out signatures etc... - */ - int getConnection () ; - }; - - - - } // namespace proc::mobject::builder - } // namespace proc::mobject + } // namespace mobject::builder -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/builder/nodecreatertool.cpp b/src/proc/mobject/builder/nodecreatertool.cpp index 62f3681b2..81f0281b5 100644 --- a/src/proc/mobject/builder/nodecreatertool.cpp +++ b/src/proc/mobject/builder/nodecreatertool.cpp @@ -27,48 +27,44 @@ #include "proc/mobject/session/effect.hpp" #include "proc/mobject/session/auto.hpp" +using mobject::Buildable; +using mobject::session::Clip; +using mobject::session::Effect; +using mobject::session::Auto; -using proc::mobject::Buildable; -using proc::mobject::session::Clip; -using proc::mobject::session::Effect; -using proc::mobject::session::Auto; - -namespace proc +namespace mobject { - namespace mobject + + namespace builder { - namespace builder - { - void - NodeCreatorTool::treat (Buildable& something) - { - } + void + NodeCreatorTool::treat (Buildable& something) + { + } - void - NodeCreatorTool::treat (Clip& clip) - { - } + void + NodeCreatorTool::treat (Clip& clip) + { + } - void - NodeCreatorTool::treat (Effect& effect) - { - } + void + NodeCreatorTool::treat (Effect& effect) + { + } - void - NodeCreatorTool::treat (Auto& automation) - { - } + void + NodeCreatorTool::treat (Auto& automation) + { + } - } // namespace proc::mobject::builder + } // namespace mobject::builder - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/builder/nodecreatertool.hpp b/src/proc/mobject/builder/nodecreatertool.hpp index 2ae3eec70..ea1c5f26d 100644 --- a/src/proc/mobject/builder/nodecreatertool.hpp +++ b/src/proc/mobject/builder/nodecreatertool.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_MOBJECT_BUILDER_NODECREATERTOOL_H -#define PROC_MOBJECT_BUILDER_NODECREATERTOOL_H +#ifndef MOBJECT_BUILDER_NODECREATERTOOL_H +#define MOBJECT_BUILDER_NODECREATERTOOL_H #include "proc/mobject/builder/tool.hpp" #include "proc/mobject/buildable.hpp" @@ -30,53 +30,47 @@ -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - // Forward declarations - class Effect; - class Clip; - template class Auto; - } - - namespace builder + // Forward declarations + class Effect; + class Clip; + template class Auto; + } + + namespace builder + { + + + + // TODO: define Lifecycle... + + /** + * This Tool implementation plays the central role in the buld process: + * given a MObject from Session, it is able to attach ProcNodes to the + * render engine under construction such as to reflect the properties + * of the MObject in the actual render. + */ + class NodeCreatorTool : public Tool { + public: + virtual void treat (mobject::session::Clip& clip) ; + virtual void treat (mobject::session::Effect& effect) ; + virtual void treat (mobject::session::Auto& automation) ; //TODO: the automation-type-problem + virtual void treat (mobject::Buildable& something) ; - - - // TODO: define Lifecycle... - /** - * This Tool implementation plays the central role in the buld process: - * given a MObject from Session, it is able to attach ProcNodes to the - * render engine under construction such as to reflect the properties - * of the MObject in the actual render. - */ - class NodeCreatorTool : public Tool - { - public: - virtual void treat (proc::mobject::session::Clip& clip) ; - virtual void treat (proc::mobject::session::Effect& effect) ; - virtual void treat (proc::mobject::session::Auto& automation) ; //TODO: the automation-type-problem - virtual void treat (proc::mobject::Buildable& something) ; + protected: + /** holds the Processor (Render Engine Element) + * to be built by the current build step + */ + engine::Processor* proc; - - protected: - /** holds the Processor (Render Engine Element) - * to be built by the current build step - */ - proc::engine::Processor* proc; + }; - }; + } // namespace mobject::builder - - - } // namespace proc::mobject::builder - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/builder/segmentationtool.cpp b/src/proc/mobject/builder/segmentationtool.cpp index 4a7b25951..65965fec4 100644 --- a/src/proc/mobject/builder/segmentationtool.cpp +++ b/src/proc/mobject/builder/segmentationtool.cpp @@ -27,41 +27,37 @@ #include "proc/mobject/session/effect.hpp" #include "proc/mobject/session/segment.hpp" -using proc::mobject::Buildable; -using proc::mobject::session::Clip; -using proc::mobject::session::Effect; +using mobject::Buildable; +using mobject::session::Clip; +using mobject::session::Effect; -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder - { - void - SegmentationTool::treat (Buildable& something) - { - } + void + SegmentationTool::treat (Buildable& something) + { + } - void - SegmentationTool::treat (Clip& clip) - { - } + void + SegmentationTool::treat (Clip& clip) + { + } - void - SegmentationTool::treat (Effect& effect) - { - } + void + SegmentationTool::treat (Effect& effect) + { + } - } // namespace proc::mobject::builder + } // namespace mobject::builder - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/builder/segmentationtool.hpp b/src/proc/mobject/builder/segmentationtool.hpp index 7e222c24a..5f666ea78 100644 --- a/src/proc/mobject/builder/segmentationtool.hpp +++ b/src/proc/mobject/builder/segmentationtool.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_MOBJECT_BUILDER_SEGMENTATIONTOOL_H -#define PROC_MOBJECT_BUILDER_SEGMENTATIONTOOL_H +#ifndef MOBJECT_BUILDER_SEGMENTATIONTOOL_H +#define MOBJECT_BUILDER_SEGMENTATIONTOOL_H #include @@ -34,50 +34,46 @@ using std::list; -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - // Forward declarations - class Clip; - class Effect; - } - - namespace builder + // Forward declarations + class Clip; + class Effect; + } + + namespace builder + { + + + /** + * Tool implementation for deriving a partitioning of the current + * timeline, such that each segement has a constant configuration. + * "Constant" means here, that any remaining changes over time + * can be represented by automation solely, without the need + * to change the node connections. + */ + class SegmentationTool : public Tool { + public: + void treat (mobject::session::Clip& clip) ; + void treat (mobject::session::Effect& effect) ; + + void treat (mobject::Buildable& something) ; + + protected: + typedef mobject::session::Segment Segment; + + /** Partitioning of the Timeline to be created by this tool. */ + list segments; + // TODO handle alloc!!!! + + }; - /** - * Tool implementation for deriving a partitioning of the current - * timeline, such that each segement has a constant configuration. - * "Constant" means here, that any remaining changes over time - * can be represented by automation solely, without the need - * to change the node connections. - */ - class SegmentationTool : public Tool - { - public: - void treat (proc::mobject::session::Clip& clip) ; - void treat (proc::mobject::session::Effect& effect) ; - void treat (proc::mobject::Buildable& something) ; + } // namespace mobject::builder - protected: - typedef proc::mobject::session::Segment Segment; - - /** Partitioning of the Timeline to be created by this tool. */ - list segments; - // TODO handle alloc!!!! - - }; - - - - } // namespace proc::mobject::builder - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/builder/tool.cpp b/src/proc/mobject/builder/tool.cpp index 5861e8814..784692485 100644 --- a/src/proc/mobject/builder/tool.cpp +++ b/src/proc/mobject/builder/tool.cpp @@ -24,21 +24,17 @@ #include "proc/mobject/builder/tool.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder - { - /** */ + /** */ - } // namespace proc::mobject::builder + } // namespace mobject::builder - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/builder/tool.hpp b/src/proc/mobject/builder/tool.hpp index f8ec88452..e6ca43f07 100644 --- a/src/proc/mobject/builder/tool.hpp +++ b/src/proc/mobject/builder/tool.hpp @@ -21,41 +21,35 @@ */ -#ifndef PROC_MOBJECT_BUILDER_TOOL_H -#define PROC_MOBJECT_BUILDER_TOOL_H +#ifndef MOBJECT_BUILDER_TOOL_H +#define MOBJECT_BUILDER_TOOL_H -#include "proc/mobject/buildable.hpp" +#include "proc/mobject/buildable.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder + + + /** + * Used according to the visitor pattern: each Tool contains + * the concrete implementation for one task to be done to the various MObject classes + */ + class Tool { + protected: + typedef mobject::Buildable Buildable; + public: + /** This operation is to be overloaded for specific MObject subclasses to be treated. + */ + virtual void treat (Buildable& mElement) = 0; + }; - /** - * Used according to the visitor pattern: each Tool contains - * the concrete implementation for one task to be done to the various MObject classes - */ - class Tool - { - protected: - typedef proc::mobject::Buildable Buildable; - - public: - /** This operation is to be overloaded for specific MObject subclasses to be treated. - */ - virtual void treat (Buildable& mElement) = 0; - }; + } // namespace mobject::builder - - - } // namespace proc::mobject::builder - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/builder/toolfactory.cpp b/src/proc/mobject/builder/toolfactory.cpp index 3e28f372a..1297d15b4 100644 --- a/src/proc/mobject/builder/toolfactory.cpp +++ b/src/proc/mobject/builder/toolfactory.cpp @@ -23,24 +23,20 @@ #include "proc/mobject/builder/toolfactory.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder - { - - - - Tool& - ToolFactory::configure () - { - } - - - - } // namespace proc::mobject::builder - } // namespace proc::mobject -} // namespace proc + + Tool & + ToolFactory::configure () + { + } + + + + } // namespace mobject::builder + +} // namespace mobject diff --git a/src/proc/mobject/builder/toolfactory.hpp b/src/proc/mobject/builder/toolfactory.hpp index 5b357341c..65c74913e 100644 --- a/src/proc/mobject/builder/toolfactory.hpp +++ b/src/proc/mobject/builder/toolfactory.hpp @@ -21,32 +21,28 @@ */ -#ifndef PROC_MOBJECT_BUILDER_TOOLFACTORY_H -#define PROC_MOBJECT_BUILDER_TOOLFACTORY_H +#ifndef MOBJECT_BUILDER_TOOLFACTORY_H +#define MOBJECT_BUILDER_TOOLFACTORY_H #include "proc/mobject/builder/tool.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace builder { - namespace builder + + + class ToolFactory { + public: + Tool & configure () ; + }; - class ToolFactory - { - public: - Tool & configure () ; - }; - - - - } // namespace proc::mobject::builder - } // namespace proc::mobject + } // namespace mobject::builder -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/builderfacade.cpp b/src/proc/mobject/builderfacade.cpp index 473ae2301..6113ad857 100644 --- a/src/proc/mobject/builderfacade.cpp +++ b/src/proc/mobject/builderfacade.cpp @@ -23,24 +23,20 @@ #include "proc/mobject/builderfacade.hpp" -namespace proc +namespace mobject { - namespace mobject - { - - - /** - * Main Operation of the Builder: - * create a render engine for a given part of the timeline - */ - proc::engine::RenderEngine & - BuilderFacade::buildEngine () - { - //////////////////////TODO - } - - - - } // namespace proc::mobject -} // namespace proc + + /** + * Main Operation of the Builder: + * create a render engine for a given part of the timeline + */ + engine::RenderEngine & + BuilderFacade::buildEngine () + { + //////////////////////TODO + } + + + +} // namespace mobject diff --git a/src/proc/mobject/builderfacade.hpp b/src/proc/mobject/builderfacade.hpp index e1e04d82e..72c884e20 100644 --- a/src/proc/mobject/builderfacade.hpp +++ b/src/proc/mobject/builderfacade.hpp @@ -21,39 +21,35 @@ */ -#ifndef PROC_MOBJECT_BUILDERFACADE_H -#define PROC_MOBJECT_BUILDERFACADE_H +#ifndef MOBJECT_BUILDERFACADE_H +#define MOBJECT_BUILDERFACADE_H #include "proc/engine/renderengine.hpp" -namespace proc +namespace mobject { - namespace mobject - { - - - /** - * Provides unified access to the builder functionality. - * While individual components of the builder subsystem may be called - * if necessary or suitable, it is usually better to do all extern invocations - * via the high level methods of this Facade. - */ - class BuilderFacade - { - public: - /** - * Main Operation of the Builder: - * create a render engine for a given part of the timeline - */ - proc::engine::RenderEngine & buildEngine () ; - // TODO: allocation, GC?????? - }; - - - - } // namespace proc::mobject -} // namespace proc + + /** + * Provides unified access to the builder functionality. + * While individual components of the builder subsystem may be called + * if necessary or suitable, it is usually better to do all extern invocations + * via the high level methods of this Facade. + */ + class BuilderFacade + { + public: + /** + * Main Operation of the Builder: + * create a render engine for a given part of the timeline + */ + engine::RenderEngine & buildEngine () ; + // TODO: allocation, GC?????? + }; + + + +} // namespace mobject #endif diff --git a/src/proc/mobject/controller/pathmanager.cpp b/src/proc/mobject/controller/pathmanager.cpp index f7cb5841b..674fb6847 100644 --- a/src/proc/mobject/controller/pathmanager.cpp +++ b/src/proc/mobject/controller/pathmanager.cpp @@ -23,25 +23,21 @@ #include "proc/mobject/controller/pathmanager.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace controller { - namespace controller - { - - - - proc::engine::Processor * - PathManager::buildProcessor () - { - return 0;//////////////////TODO - } - - - - } // namespace proc::mobject::controller - } // namespace proc::mobject -} // namespace proc + + engine::Processor * + PathManager::buildProcessor () + { + return 0;//////////////////TODO + } + + + + } // namespace mobject::controller + +} // namespace mobject diff --git a/src/proc/mobject/controller/pathmanager.hpp b/src/proc/mobject/controller/pathmanager.hpp index 8005c9d14..786297360 100644 --- a/src/proc/mobject/controller/pathmanager.hpp +++ b/src/proc/mobject/controller/pathmanager.hpp @@ -21,38 +21,34 @@ */ -#ifndef PROC_MOBJECT_CONTROLLER_PATHMANAGER_H -#define PROC_MOBJECT_CONTROLLER_PATHMANAGER_H +#ifndef MOBJECT_CONTROLLER_PATHMANAGER_H +#define MOBJECT_CONTROLLER_PATHMANAGER_H #include "proc/engine/processor.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace controller { - namespace controller + + + /** + * While building a render engine, this Strategy class + * decides on the actual render strategy in accordance + * to the current controller settings (system state) + */ + class PathManager { - - - /** - * While building a render engine, this Strategy class - * decides on the actual render strategy in accordance - * to the current controller settings (system state) - */ - class PathManager - { - public: - proc::engine::Processor* buildProcessor () ; - // TODO: allocation, GC?? - }; - - - - } // namespace proc::mobject::controller + public: + engine::Processor* buildProcessor () ; + // TODO: allocation, GC?? + }; - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::controller + +} // namespace mobject #endif diff --git a/src/proc/mobject/controller/renderstate.cpp b/src/proc/mobject/controller/renderstate.cpp index 5a64eb14b..5a1c52e7b 100644 --- a/src/proc/mobject/controller/renderstate.cpp +++ b/src/proc/mobject/controller/renderstate.cpp @@ -23,25 +23,22 @@ #include "proc/mobject/controller/renderstate.hpp" -namespace proc + +namespace mobject { - namespace mobject + namespace controller { - namespace controller - { - StateProxy& - RenderState::getStateProxy () - { - //////////////TODO - } - - - - } // namespace proc::mobject::controller + StateProxy& + RenderState::getStateProxy () + { + //////////////TODO + } - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::controller + +} // namespace mobject diff --git a/src/proc/mobject/controller/renderstate.hpp b/src/proc/mobject/controller/renderstate.hpp index 68fbe729e..b9cf195e0 100644 --- a/src/proc/mobject/controller/renderstate.hpp +++ b/src/proc/mobject/controller/renderstate.hpp @@ -21,39 +21,37 @@ */ -#ifndef PROC_MOBJECT_CONTROLLER_RENDERSTATE_H -#define PROC_MOBJECT_CONTROLLER_RENDERSTATE_H +#ifndef MOBJECT_CONTROLLER_RENDERSTATE_H +#define MOBJECT_CONTROLLER_RENDERSTATE_H #include "proc/stateproxy.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace controller { - namespace controller + + typedef proc_interface::StateProxy StateProxy; + + + /** + * Encapsulates the logic used to get a "current render process" + * in accordance to the currently applicable controller settings. + * The provided StateProxy serves to hold any mutalbe state used + * in the render process, so the rest of the render engine + * can be stateless. + */ + class RenderState { - - - /** - * Encapsulates the logic used to get a "current render process" - * in accordance to the currently applicable controller settings. - * The provided StateProxy serves to hold any mutalbe state used - * in the render process, so the rest of the render engine - * can be stateless. - */ - class RenderState - { - public: - StateProxy& getStateProxy () ; - }; - - - - } // namespace proc::mobject::controller + public: + StateProxy& getStateProxy () ; + }; - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::controller + +} // namespace mobject #endif diff --git a/src/proc/mobject/explicitplacement.cpp b/src/proc/mobject/explicitplacement.cpp index 7bc1a60c5..a81777501 100644 --- a/src/proc/mobject/explicitplacement.cpp +++ b/src/proc/mobject/explicitplacement.cpp @@ -23,15 +23,11 @@ #include "proc/mobject/explicitplacement.hpp" -namespace proc +namespace mobject { - namespace mobject - { - /** */ - - + /** */ - } // namespace proc::mobject -} // namespace proc + +} // namespace mobject diff --git a/src/proc/mobject/explicitplacement.hpp b/src/proc/mobject/explicitplacement.hpp index 58b01a802..00e77812b 100644 --- a/src/proc/mobject/explicitplacement.hpp +++ b/src/proc/mobject/explicitplacement.hpp @@ -21,35 +21,31 @@ */ -#ifndef PROC_MOBJECT_EXPLICITPLACEMENT_H -#define PROC_MOBJECT_EXPLICITPLACEMENT_H +#ifndef MOBJECT_EXPLICITPLACEMENT_H +#define MOBJECT_EXPLICITPLACEMENT_H #include "proc/mobject/placement.hpp" -namespace proc +namespace mobject { - namespace mobject + + namespace session{ class Track; } + + + // TODO: need Garbage Collector for this class!!!!! + + class ExplicitPlacement : public Placement { + protected: - namespace session{ class Track; } - - - // TODO: need Garbage Collector for this class!!!!! - - class ExplicitPlacement : public Placement - { - protected: + Time time; + Track* track; - Time time; - Track* track; + }; - }; - - - - } // namespace proc::mobject -} // namespace proc + +} // namespace mobject #endif diff --git a/src/proc/mobject/interpolator.cpp b/src/proc/mobject/interpolator.cpp index a69cb7398..36bf6e8c3 100644 --- a/src/proc/mobject/interpolator.cpp +++ b/src/proc/mobject/interpolator.cpp @@ -23,15 +23,11 @@ #include "proc/mobject/interpolator.hpp" -namespace proc +namespace mobject { - namespace mobject - { - - /** */ - - - - } // namespace proc::mobject -} // namespace proc + /** */ + + + +} // namespace mobject diff --git a/src/proc/mobject/interpolator.hpp b/src/proc/mobject/interpolator.hpp index e9e19fef2..7c1c4e9cb 100644 --- a/src/proc/mobject/interpolator.hpp +++ b/src/proc/mobject/interpolator.hpp @@ -21,30 +21,26 @@ */ -#ifndef PROC_MOBJECT_INTERPOLATOR_H -#define PROC_MOBJECT_INTERPOLATOR_H +#ifndef MOBJECT_INTERPOLATOR_H +#define MOBJECT_INTERPOLATOR_H -namespace proc +namespace mobject { - namespace mobject - { - - - /** - * Provides the implementation for getting the acutal value - * of a time varying or automated effect/plugin parameter - */ - template - class Interpolator - { - /////////////// - }; - - - - } // namespace proc::mobject -} // namespace proc + + /** + * Provides the implementation for getting the acutal value + * of a time varying or automated effect/plugin parameter + */ + template + class Interpolator + { + /////////////// + }; + + + +} // namespace mobject #endif diff --git a/src/proc/mobject/mobject.cpp b/src/proc/mobject/mobject.cpp index 0cfe2213d..47b47a943 100644 --- a/src/proc/mobject/mobject.cpp +++ b/src/proc/mobject/mobject.cpp @@ -24,14 +24,10 @@ #include "proc/mobject/mobject.hpp" #include "proc/mobject/placement.hpp" -namespace proc +namespace mobject { - namespace mobject - { - - /** */ - - - } // namespace proc::mobject -} // namespace proc + /** */ + + +} // namespace mobject diff --git a/src/proc/mobject/mobject.hpp b/src/proc/mobject/mobject.hpp index 2d5c5e2de..02a3345bc 100644 --- a/src/proc/mobject/mobject.hpp +++ b/src/proc/mobject/mobject.hpp @@ -21,47 +21,43 @@ */ -#ifndef PROC_MOBJECT_MOBJECT_H -#define PROC_MOBJECT_MOBJECT_H +#ifndef MOBJECT_MOBJECT_H +#define MOBJECT_MOBJECT_H #include -#include "common/time.hpp" +#include "cinelerra.h" #include "proc/mobject/buildable.hpp" using std::list; -namespace proc +namespace mobject { - namespace mobject + + class Placement; + + + /** + * MObject is the interface class for all "Media Objects". + * All the contents and elements that can be placed and + * manipulated and finally rendered within Cinelerra's EDL + * are MObjects. + */ + class MObject : public Buildable { - - class Placement; + protected: + typedef cinelerra::Time Time; + + // TODO: how to represent time intervals best? + Time length; + + list placement; + + }; - /** - * MObject is the interface class for all "Media Objects". - * All the contents and elements that can be placed and - * manipulated and finally rendered within Cinelerra's EDL - * are MObjects. - */ - class MObject : public Buildable - { - protected: - typedef cinelerra::Time Time; - - // TODO: how to represent time intervals best? - Time length; - list placement; - - }; - - - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/parameter.cpp b/src/proc/mobject/parameter.cpp index 97c46f9ac..93345f05a 100644 --- a/src/proc/mobject/parameter.cpp +++ b/src/proc/mobject/parameter.cpp @@ -24,20 +24,16 @@ #include "proc/mobject/parameter.hpp" #include "proc/mobject/paramprovider.hpp" -namespace proc +namespace mobject { - namespace mobject - { - - template - VAL - Parameter::getValue () - { - ////////////TODO - } - - - - } // namespace proc::mobject -} // namespace proc + template + VAL + Parameter::getValue () + { + ////////////TODO + } + + + +} // namespace mobject diff --git a/src/proc/mobject/parameter.hpp b/src/proc/mobject/parameter.hpp index c5fafd72b..59832fa26 100644 --- a/src/proc/mobject/parameter.hpp +++ b/src/proc/mobject/parameter.hpp @@ -21,39 +21,35 @@ */ -#ifndef PROC_MOBJECT_PARAMETER_H -#define PROC_MOBJECT_PARAMETER_H +#ifndef MOBJECT_PARAMETER_H +#define MOBJECT_PARAMETER_H -namespace proc +namespace mobject { - namespace mobject + + template class ParamProvider; + + + /** + * Descriptor and access object for a plugin parameter. + * Parameters may be provided with values from the session, + * and this values may be automated. + */ + template + class Parameter { + public: + VAL getValue () ; - template class ParamProvider; + protected: + ParamProvider* provider; - - /** - * Descriptor and access object for a plugin parameter. - * Parameters may be provided with values from the session, - * and this values may be automated. - */ - template - class Parameter - { - public: - VAL getValue () ; - - protected: - ParamProvider* provider; - - }; + }; - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/paramprovider.cpp b/src/proc/mobject/paramprovider.cpp index cf9c91e9b..d90c91493 100644 --- a/src/proc/mobject/paramprovider.cpp +++ b/src/proc/mobject/paramprovider.cpp @@ -25,20 +25,15 @@ #include "proc/mobject/parameter.hpp" #include "proc/mobject/interpolator.hpp" -namespace proc +namespace mobject { - namespace mobject - { - - template - VAL - ParamProvider::getValue () - { - } - - - - } // namespace proc::mobject -} // namespace proc + template + VAL + ParamProvider::getValue () + {} + + + +} // namespace mobject diff --git a/src/proc/mobject/paramprovider.hpp b/src/proc/mobject/paramprovider.hpp index 79a3b7ddd..4ac155e81 100644 --- a/src/proc/mobject/paramprovider.hpp +++ b/src/proc/mobject/paramprovider.hpp @@ -21,39 +21,35 @@ */ -#ifndef PROC_MOBJECT_PARAMPROVIDER_H -#define PROC_MOBJECT_PARAMPROVIDER_H +#ifndef MOBJECT_PARAMPROVIDER_H +#define MOBJECT_PARAMPROVIDER_H -namespace proc +namespace mobject { - namespace mobject + + template class Parameter; + template class Interpolator; + + + + /** + * A facility to get the actual value of a plugin/effect parameter + */ + template + class ParamProvider { - - template class Parameter; - template class Interpolator; - - - - /** - * A facility to get the actual value of a plugin/effect parameter - */ - template - class ParamProvider - { - protected: - Parameter* param; - Interpolator* ipo; + protected: + Parameter* param; + Interpolator* ipo; - public: - virtual VAL getValue () ; - }; + public: + virtual VAL getValue () ; + }; - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/placement.cpp b/src/proc/mobject/placement.cpp index 46a928f9e..eccd34e80 100644 --- a/src/proc/mobject/placement.cpp +++ b/src/proc/mobject/placement.cpp @@ -24,24 +24,20 @@ #include "proc/mobject/placement.hpp" #include "proc/mobject/explicitplacement.hpp" -namespace proc +namespace mobject { - namespace mobject - { - /** create an actual (explicit) placement while trying to - * satisfy the network of adjacent objects and placements. - * TODO: need GC!!!!!!!!!!! - */ - ExplicitPlacement& - Placement::resolve () - { - } + /** create an actual (explicit) placement while trying to + * satisfy the network of adjacent objects and placements. + * TODO: need GC!!!!!!!!!!! + */ + ExplicitPlacement& + Placement::resolve () + { + } - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/placement.hpp b/src/proc/mobject/placement.hpp index 7a10fd164..c486c9573 100644 --- a/src/proc/mobject/placement.hpp +++ b/src/proc/mobject/placement.hpp @@ -21,41 +21,37 @@ */ -#ifndef PROC_MOBJECT_PLACEMENT_H -#define PROC_MOBJECT_PLACEMENT_H +#ifndef MOBJECT_PLACEMENT_H +#define MOBJECT_PLACEMENT_H #include "proc/mobject/mobject.hpp" #include "proc/mobject/session/track.hpp" -namespace proc +namespace mobject { - namespace mobject + + + class ExplicitPlacement; + + + class Placement { - - - class ExplicitPlacement; - - - class Placement - { - protected: - typedef cinelerra::Time Time; - typedef proc::mobject::session::Track Track; + protected: + typedef cinelerra::Time Time; + typedef session::Track Track; - MObject* subject; + MObject* subject; - public: - /** resolve the network of placement and - * provide the resulting (explicit) placement. - */ - ExplicitPlacement& resolve () ; - }; - - - - } // namespace proc::mobject + public: + /** resolve the network of placement and + * provide the resulting (explicit) placement. + */ + ExplicitPlacement& resolve () ; + }; -} // namespace proc + + +} // namespace mobject #endif diff --git a/src/proc/mobject/session/abstractmo.cpp b/src/proc/mobject/session/abstractmo.cpp index 338e1fa70..b2ec01b0f 100644 --- a/src/proc/mobject/session/abstractmo.cpp +++ b/src/proc/mobject/session/abstractmo.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/abstractmo.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/abstractmo.hpp b/src/proc/mobject/session/abstractmo.hpp index bf610f8ba..560e4e7b6 100644 --- a/src/proc/mobject/session/abstractmo.hpp +++ b/src/proc/mobject/session/abstractmo.hpp @@ -21,31 +21,27 @@ */ -#ifndef PROC_MOBJECT_SESSION_ABSTRACTMO_H -#define PROC_MOBJECT_SESSION_ABSTRACTMO_H +#ifndef MOBJECT_SESSION_ABSTRACTMO_H +#define MOBJECT_SESSION_ABSTRACTMO_H #include "proc/mobject/mobject.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + class AbstractMO : public MObject { + ////////////// TODO: work out common services to provide!!!! + }; - class AbstractMO : public MObject - { - ////////////// TODO: work out common services to provide!!!! - }; - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + } // namespace mobject::session -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/allocation.cpp b/src/proc/mobject/session/allocation.cpp index a4bd6c047..e3ed4b701 100644 --- a/src/proc/mobject/session/allocation.cpp +++ b/src/proc/mobject/session/allocation.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/allocation.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/allocation.hpp b/src/proc/mobject/session/allocation.hpp index 2eab5b59e..88605572a 100644 --- a/src/proc/mobject/session/allocation.hpp +++ b/src/proc/mobject/session/allocation.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_MOBJECT_SESSION_ALLOCATION_H -#define PROC_MOBJECT_SESSION_ALLOCATION_H +#ifndef MOBJECT_SESSION_ALLOCATION_H +#define MOBJECT_SESSION_ALLOCATION_H #include @@ -32,35 +32,30 @@ using std::string; -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * a directive to place a MObject in a specific way + */ + class Allocation : public Placement { + protected: + /** human readable representation of the condition + * characterizing this allocaton, e.g. "t >= 10" + */ + string repr; + + public: + const string& getRepr () const { return repr; } + }; - /** - * a directive to place a MObject in a specific way - */ - class Allocation : public Placement - { - protected: - /** human readable representation of the condition - * characterizing this allocaton, e.g. "t >= 10" - */ - string repr; - - public: - const string& getRepr () const { return repr; } - }; - - - - } // namespace proc::mobject::session + } // namespace mobject::session - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/auto.cpp b/src/proc/mobject/session/auto.cpp index 88d3dbedc..2911b39f1 100644 --- a/src/proc/mobject/session/auto.cpp +++ b/src/proc/mobject/session/auto.cpp @@ -23,26 +23,22 @@ #include "proc/mobject/session/auto.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - template - VAL - Auto::getValue () - { - return 0; //////////////TODO - } - - + template + VAL + Auto::getValue () + { + return 0; //////////////TODO + } - } // namespace proc::mobject::session - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/auto.hpp b/src/proc/mobject/session/auto.hpp index 8510374d2..2bc12e8ae 100644 --- a/src/proc/mobject/session/auto.hpp +++ b/src/proc/mobject/session/auto.hpp @@ -21,38 +21,34 @@ */ -#ifndef PROC_MOBJECT_SESSION_AUTO_H -#define PROC_MOBJECT_SESSION_AUTO_H +#ifndef MOBJECT_SESSION_AUTO_H +#define MOBJECT_SESSION_AUTO_H #include "proc/mobject/session/meta.hpp" #include "proc/mobject/paramprovider.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * Automation data for some parameter + * (i.e. the parameter is a time varying function) + */ + template + class Auto : public Meta, public ParamProvider { - - - /** - * Automation data for some parameter - * (i.e. the parameter is a time varying function) - */ - template - class Auto : public Meta, public ParamProvider - { - public: - virtual VAL getValue () ; - }; + public: + virtual VAL getValue () ; + }; - } // namespace proc::mobject::session + } // namespace mobject::session - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/clip.cpp b/src/proc/mobject/session/clip.cpp index e0f78510d..7fbb30dcb 100644 --- a/src/proc/mobject/session/clip.cpp +++ b/src/proc/mobject/session/clip.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/clip.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/clip.hpp b/src/proc/mobject/session/clip.hpp index f913ac716..83696c866 100644 --- a/src/proc/mobject/session/clip.hpp +++ b/src/proc/mobject/session/clip.hpp @@ -21,48 +21,44 @@ */ -#ifndef PROC_MOBJECT_SESSION_CLIP_H -#define PROC_MOBJECT_SESSION_CLIP_H +#ifndef MOBJECT_SESSION_CLIP_H +#define MOBJECT_SESSION_CLIP_H #include "proc/mobject/session/abstractmo.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * A user visible/editable Clip is a reference to a contiguous + * sequence of media data loaded as Asset into the current Session. + * As such, it is a virtual (non destructive) cut or edit of the + * source material and can be placed into the EDL to be rendered + * into the ouput. The actual media type of a clip will be derived + * at runtime by resolving this reference to the underlying Asset. + * + * TODO: define how to denote Time positions /lengths. This is tricky, + * because it depends on the actual media type, and we wand to encapsulate + * all these details as much as possible. + */ + class Clip : public AbstractMO { + protected: + /** startpos in source */ + Time start; + + //TODO: where to put the duration ??? + + }; - /** - * A user visible/editable Clip is a reference to a contiguous - * sequence of media data loaded as Asset into the current Session. - * As such, it is a virtual (non destructive) cut or edit of the - * source material and can be placed into the EDL to be rendered - * into the ouput. The actual media type of a clip will be derived - * at runtime by resolving this reference to the underlying Asset. - * - * TODO: define how to denote Time positions /lengths. This is tricky, - * because it depends on the actual media type, and we wand to encapsulate - * all these details as much as possible. - */ - class Clip : public AbstractMO - { - protected: - /** startpos in source */ - Time start; - - //TODO: where to put the duration ??? - }; - - - - } // namespace proc::mobject::session + } // namespace mobject::session - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/edl.cpp b/src/proc/mobject/session/edl.cpp index 9a868d7e7..8fc76bb0c 100644 --- a/src/proc/mobject/session/edl.cpp +++ b/src/proc/mobject/session/edl.cpp @@ -25,19 +25,15 @@ #include "proc/mobject/session/track.hpp" #include "proc/mobject/mobject.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/edl.hpp b/src/proc/mobject/session/edl.hpp index 00cf588b7..31b0319a4 100644 --- a/src/proc/mobject/session/edl.hpp +++ b/src/proc/mobject/session/edl.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_MOBJECT_SESSION_EDL_H -#define PROC_MOBJECT_SESSION_EDL_H +#ifndef MOBJECT_SESSION_EDL_H +#define MOBJECT_SESSION_EDL_H #include @@ -32,28 +32,23 @@ using std::list; - -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + class EDL { - - - class EDL - { - protected: - list tracks; - list clips; + protected: + list tracks; + list clips; - }; - - - - } // namespace proc::mobject::session + }; - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::session + +} // namespace mobject #endif diff --git a/src/proc/mobject/session/effect.cpp b/src/proc/mobject/session/effect.cpp index e03537611..36e5835b5 100644 --- a/src/proc/mobject/session/effect.cpp +++ b/src/proc/mobject/session/effect.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/effect.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/effect.hpp b/src/proc/mobject/session/effect.hpp index 56ef08a59..09ed321bf 100644 --- a/src/proc/mobject/session/effect.hpp +++ b/src/proc/mobject/session/effect.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_MOBJECT_SESSION_EFFECT_H -#define PROC_MOBJECT_SESSION_EFFECT_H +#ifndef MOBJECT_SESSION_EFFECT_H +#define MOBJECT_SESSION_EFFECT_H #include @@ -32,27 +32,23 @@ using std::string; -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + class Effect : public AbstractMO { + protected: + /** Identifier of the Plugin to be used */ + string plugID; + }; + + + + } // namespace mobject::session - class Effect : public AbstractMO - { - protected: - /** Identifier of the Plugin to be used */ - string plugID; - - }; - - - - } // namespace proc::mobject::session - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/fixedplacement.cpp b/src/proc/mobject/session/fixedplacement.cpp index 5986b9cf1..cfd370501 100644 --- a/src/proc/mobject/session/fixedplacement.cpp +++ b/src/proc/mobject/session/fixedplacement.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/fixedplacement.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/fixedplacement.hpp b/src/proc/mobject/session/fixedplacement.hpp index 2dbdf6e2e..badf3e781 100644 --- a/src/proc/mobject/session/fixedplacement.hpp +++ b/src/proc/mobject/session/fixedplacement.hpp @@ -21,33 +21,29 @@ */ -#ifndef PROC_MOBJECT_SESSION_FIXEDPLACEMENT_H -#define PROC_MOBJECT_SESSION_FIXEDPLACEMENT_H +#ifndef MOBJECT_SESSION_FIXEDPLACEMENT_H +#define MOBJECT_SESSION_FIXEDPLACEMENT_H #include "proc/mobject/placement.hpp" #include "proc/mobject/explicitplacement.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + // TODO: didn't we plan to rename ExplicitPlacement to DirectPlacement?? + + class DirectPlacement : public ExplicitPlacement { + /////////// + }; - // TODO: didn't we plan to rename ExplicitPlacement to DirectPlacement?? - class DirectPlacement : public ExplicitPlacement - { - /////////// - }; - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + } // namespace mobject::session -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/fixture.cpp b/src/proc/mobject/session/fixture.cpp index c6cf2669d..73fa72e7e 100644 --- a/src/proc/mobject/session/fixture.cpp +++ b/src/proc/mobject/session/fixture.cpp @@ -23,35 +23,31 @@ #include "proc/mobject/session/fixture.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - list & - Fixture::getPlaylistForRender () - { - abort();/////////////////////TODO - } + list & + Fixture::getPlaylistForRender () + { + abort();/////////////////////TODO + } - /** TODO: a placeholder for the Operation needed for - * wiring the Automation providers in the Build process - */ - Auto* - Fixture::getAutomation () - { - return 0;/////////////////////TODO - } + /** TODO: a placeholder for the Operation needed for + * wiring the Automation providers in the Build process + */ + Auto* + Fixture::getAutomation () + { + return 0;/////////////////////TODO + } - } // namespace proc::mobject::session + } // namespace mobject::session - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/session/fixture.hpp b/src/proc/mobject/session/fixture.hpp index 9425dce7c..eebdc87af 100644 --- a/src/proc/mobject/session/fixture.hpp +++ b/src/proc/mobject/session/fixture.hpp @@ -21,8 +21,8 @@ */ -#ifndef PROC_MOBJECT_SESSION_FIXTURE_H -#define PROC_MOBJECT_SESSION_FIXTURE_H +#ifndef MOBJECT_SESSION_FIXTURE_H +#define MOBJECT_SESSION_FIXTURE_H #include @@ -35,32 +35,29 @@ using std::list; -namespace proc + +namespace mobject { - namespace mobject + namespace session { - namespace session + + + + class Fixture : public EDL { - - - - class Fixture : public EDL - { - protected: - Track tracks; - list timeline; + protected: + Track tracks; + list timeline; - public: - list & getPlaylistForRender () ; - Auto* getAutomation () ; /////TODO: just a placeholder at the moment!!! - }; - - - - } // namespace proc::mobject::session + public: + list & getPlaylistForRender () ; + Auto* getAutomation () ; /////TODO: just a placeholder at the moment!!! + }; - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::session + +} // namespace mobject #endif diff --git a/src/proc/mobject/session/label.cpp b/src/proc/mobject/session/label.cpp index fb969a00c..3fd9f283b 100644 --- a/src/proc/mobject/session/label.cpp +++ b/src/proc/mobject/session/label.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/label.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/label.hpp b/src/proc/mobject/session/label.hpp index 1e9e5915b..2998b923c 100644 --- a/src/proc/mobject/session/label.hpp +++ b/src/proc/mobject/session/label.hpp @@ -21,36 +21,32 @@ */ -#ifndef PROC_MOBJECT_SESSION_LABEL_H -#define PROC_MOBJECT_SESSION_LABEL_H +#ifndef MOBJECT_SESSION_LABEL_H +#define MOBJECT_SESSION_LABEL_H #include "proc/mobject/session/meta.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * Any sort of User visible Marker or Tag, used + * to mark time positions and ranges, or specific + * locations to attach other MObjects to. + */ + class Label : public Meta { + ///////////TODO: timespan fields here or already in class Meta?? + }; - /** - * Any sort of User visible Marker or Tag, used - * to mark time positions and ranges, or specific - * locations to attach other MObjects to. - */ - class Label : public Meta - { - ///////////TODO: timespan fields here or already in class Meta?? - }; - - - } // namespace proc::mobject::session + } // namespace mobject::session - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/meta.cpp b/src/proc/mobject/session/meta.cpp index 91ff85e38..35c1cc7af 100644 --- a/src/proc/mobject/session/meta.cpp +++ b/src/proc/mobject/session/meta.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/meta.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/meta.hpp b/src/proc/mobject/session/meta.hpp index dc6f38414..8c141f516 100644 --- a/src/proc/mobject/session/meta.hpp +++ b/src/proc/mobject/session/meta.hpp @@ -21,37 +21,33 @@ */ -#ifndef PROC_MOBJECT_SESSION_META_H -#define PROC_MOBJECT_SESSION_META_H +#ifndef MOBJECT_SESSION_META_H +#define MOBJECT_SESSION_META_H #include "proc/mobject/session/abstractmo.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * Meta-MObject doesn't represent real Media Content, + * but rather all sorts of Processing Instructions + * and other metadata, which can be placed and + * attached within the EDL/Session. + */ + class Meta : public AbstractMO { + /////////// + }; - /** - * Meta-MObject doesn't represent real Media Content, - * but rather all sorts of Processing Instructions - * and other metadata, which can be placed and - * attached within the EDL/Session. - */ - class Meta : public AbstractMO - { - /////////// - }; - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + } // namespace mobject::session -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/relativeplacement.cpp b/src/proc/mobject/session/relativeplacement.cpp index 1ad7aefd2..6fd934f12 100644 --- a/src/proc/mobject/session/relativeplacement.cpp +++ b/src/proc/mobject/session/relativeplacement.cpp @@ -24,17 +24,12 @@ #include "proc/mobject/session/relativeplacement.hpp" #include "proc/mobject/mobject.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { + } // namespace mobject::session - } // namespace proc::mobject::session - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject diff --git a/src/proc/mobject/session/relativeplacement.hpp b/src/proc/mobject/session/relativeplacement.hpp index 67a898454..ca3041928 100644 --- a/src/proc/mobject/session/relativeplacement.hpp +++ b/src/proc/mobject/session/relativeplacement.hpp @@ -21,53 +21,48 @@ */ -#ifndef PROC_MOBJECT_SESSION_RELATIVEPLACEMENT_H -#define PROC_MOBJECT_SESSION_RELATIVEPLACEMENT_H +#ifndef MOBJECT_SESSION_RELATIVEPLACEMENT_H +#define MOBJECT_SESSION_RELATIVEPLACEMENT_H #include "proc/mobject/placement.hpp" -#include "common/time.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + + class RelativePlacement : public Placement { - - - - class RelativePlacement : public proc::mobject::Placement - { - public: - - /** - * the possible kinds of RelativePlacements - */ - enum RelType - { SAMETIME /** place subject at the same time as the anchor */ + public: + + /** + * the possible kinds of RelativePlacements + */ + enum RelType + { SAMETIME /** place subject at the same time as the anchor */ , ATTACH /** attach subject to anchor (e.g. an effect to a clip) */ - }; - - protected: - MObject* anchor; - - /** the kind of relation denoted by this Placement */ - RelType relType; - - /** Offset the actual position by this (time) value relative to the anchor point. */ - cinelerra::Time offset; - //TODO: suitable representation? - }; - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + protected: + MObject* anchor; -} // namespace proc + /** the kind of relation denoted by this Placement */ + RelType relType; + + /** Offset the actual position by this (time) value relative to the anchor point. */ + cinelerra::Time offset; + //TODO: suitable representation? + + }; + + + + } // namespace mobject::session + +} // namespace mobject #endif diff --git a/src/proc/mobject/session/segment.cpp b/src/proc/mobject/session/segment.cpp index 73c149f50..e89021c2a 100644 --- a/src/proc/mobject/session/segment.cpp +++ b/src/proc/mobject/session/segment.cpp @@ -25,24 +25,20 @@ // Used at the moment (7/07) for partitioning the timeline/fixture into segments // to be rendered by a specialized render node network for each, without the need -// to change any connections within a given segment. +// to change any connections within a given segment. // Note this concept may be superfluos alltogether; is a draft and the real // use still needs to be worked out... -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/segment.hpp b/src/proc/mobject/session/segment.hpp index 8edd75882..af12f6de1 100644 --- a/src/proc/mobject/session/segment.hpp +++ b/src/proc/mobject/session/segment.hpp @@ -21,54 +21,50 @@ */ -#ifndef PROC_MOBJECT_SESSION_SEGMENT_H -#define PROC_MOBJECT_SESSION_SEGMENT_H +#ifndef MOBJECT_SESSION_SEGMENT_H +#define MOBJECT_SESSION_SEGMENT_H #include -#include "common/time.hpp" +#include "cinelerra.h" #include "proc/mobject/explicitplacement.hpp" using std::list; -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * Used at the moment (7/07) for partitioning the timeline/fixture into segments + * to be rendered by a specialized render node network for each, without the need + * to change any connections within a given segment. + * Note this concept may be superfluos alltogether; is a draft and the real + * use still needs to be worked out... + */ + class Segment { + protected: + typedef cinelerra::Time Time; + + /** begin of this timeline segment. */ + Time start; + /** duration (span) of this timeline segment. */ + Time length; + + /** relevant MObjects comprising this segment. */ + list elements; + // TODO: actually necessary?? + + }; - /** - * Used at the moment (7/07) for partitioning the timeline/fixture into segments - * to be rendered by a specialized render node network for each, without the need - * to change any connections within a given segment. - * Note this concept may be superfluos alltogether; is a draft and the real - * use still needs to be worked out... - */ - class Segment - { - protected: - typedef cinelerra::Time Time; - - /** begin of this timeline segment. */ - Time start; - /** duration (span) of this timeline segment. */ - Time length; - /** relevant MObjects comprising this segment. */ - list elements; - // TODO: actually necessary?? + } // namespace mobject::session - }; - - - - } // namespace proc::mobject::session - - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/mobject/session/session.cpp b/src/proc/mobject/session/session.cpp index 5154b6de2..1bb585d3e 100644 --- a/src/proc/mobject/session/session.cpp +++ b/src/proc/mobject/session/session.cpp @@ -25,19 +25,15 @@ #include "proc/mobject/session/edl.hpp" #include "proc/mobject/session/fixture.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/session.hpp b/src/proc/mobject/session/session.hpp index 5c661d32f..e63730eb0 100644 --- a/src/proc/mobject/session/session.hpp +++ b/src/proc/mobject/session/session.hpp @@ -21,42 +21,38 @@ */ -#ifndef PROC_MOBJECT_SESSION_SESSION_H -#define PROC_MOBJECT_SESSION_SESSION_H +#ifndef MOBJECT_SESSION_SESSION_H +#define MOBJECT_SESSION_SESSION_H -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + class EDL; + class Fixture; + + /** + * The (current) Session holds all the user + * visible content to be edited and manipulated + * within the Cinelerra Application. From a users + * perspective, it is a collection of Media Objects + * (--> MObject) placed (--> Placement) onto virtual + * Tracks. + */ + class Session { - - class EDL; - class Fixture; - - /** - * The (current) Session holds all the user - * visible content to be edited and manipulated - * within the Cinelerra Application. From a users - * perspective, it is a collection of Media Objects - * (--> MObject) placed (--> Placement) onto virtual - * Tracks. - */ - class Session - { - protected: - EDL& edl; - Fixture& fixture; + protected: + EDL& edl; + Fixture& fixture; - }; - - - - } // namespace proc::mobject::session + }; - } // namespace proc::mobject -} // namespace proc + + } // namespace mobject::session + +} // namespace mobject #endif diff --git a/src/proc/mobject/session/track.cpp b/src/proc/mobject/session/track.cpp index 4d618cc1d..d3e24a9e4 100644 --- a/src/proc/mobject/session/track.cpp +++ b/src/proc/mobject/session/track.cpp @@ -23,19 +23,15 @@ #include "proc/mobject/session/track.hpp" -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session - { - - /** */ - - - - } // namespace proc::mobject::session - } // namespace proc::mobject + /** */ -} // namespace proc + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/track.hpp b/src/proc/mobject/session/track.hpp index 7778bb491..f3acec86f 100644 --- a/src/proc/mobject/session/track.hpp +++ b/src/proc/mobject/session/track.hpp @@ -21,39 +21,34 @@ */ -#ifndef PROC_MOBJECT_SESSION_TRACK_H -#define PROC_MOBJECT_SESSION_TRACK_H +#ifndef MOBJECT_SESSION_TRACK_H +#define MOBJECT_SESSION_TRACK_H -namespace proc +namespace mobject { - namespace mobject + namespace session { - namespace session + + + /** + * A Track in the EDL or Session. + * But, honestly, I don't quite know what a Track stands for! + * Usually, this stems from the metaphor of a multitrack tape machine, + * but I doubt this metaphor is really helpful for editing video; mostly + * people stick to such metaphors out of mental laziyness... + * + * So, let's see if the concept "Track" will get any practical functionallity + * or if we end up with "Track" beeing just a disguise for an int ID.... + */ + class Track { + }; - /** - * A Track in the EDL or Session. - * But, honestly, I don't quite know what a Track stands for! - * Usually, this stems from the metaphor of a multitrack tape machine, - * but I doubt this metaphor is really helpful for editing video; mostly - * people stick to such metaphors out of mental laziyness... - * - * So, let's see if the concept "Track" will get any practical functionallity - * or if we end up with "Track" beeing just a disguise for an int ID.... - */ - class Track - { - - }; - - - } // namespace proc::mobject::session + } // namespace mobject::session - } // namespace proc::mobject - -} // namespace proc +} // namespace mobject #endif diff --git a/src/proc/stateproxy.cpp b/src/proc/stateproxy.cpp index a7703e8ab..fa11dc11d 100644 --- a/src/proc/stateproxy.cpp +++ b/src/proc/stateproxy.cpp @@ -24,11 +24,11 @@ #include "proc/stateproxy.hpp" #include "proc/frame.hpp" -namespace proc +namespace proc_interface { /** */ -} // namespace proc +} // namespace proc_interface diff --git a/src/proc/stateproxy.hpp b/src/proc/stateproxy.hpp index 1e6a861cd..02e0914b4 100644 --- a/src/proc/stateproxy.hpp +++ b/src/proc/stateproxy.hpp @@ -21,14 +21,14 @@ */ -#ifndef PROC_STATEPROXY_H -#define PROC_STATEPROXY_H +#ifndef PROC_INTERFACE_STATEPROXY_H +#define PROC_INTERFACE_STATEPROXY_H #include "proc/frame.hpp" -namespace proc +namespace proc_interface { @@ -41,5 +41,5 @@ namespace proc -} // namespace proc +} // namespace proc_interface #endif diff --git a/uml/cinelerra3/128005 b/uml/cinelerra3/128005 index e48b8d387..0d1ddaf0c 100644 --- a/uml/cinelerra3/128005 +++ b/uml/cinelerra3/128005 @@ -1,14 +1,14 @@ -format 38 +format 40 "design" // design - revision 7 - modified_by 61 "ct" + revision 9 + modified_by 5 "hiv" // class settings //class diagram settings draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default //use case diagram settings package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default //sequence diagram settings - show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default //collaboration diagram settings show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default //object diagram settings @@ -40,11 +40,32 @@ Not a real code package, rather a container for design drafts, specifications, d size A4 end + component 129925 "CommonLib" + provided_classes + class_ref 134917 // Time + end + end + component 128005 "Builder" stereotype "subsystem" + provided_classes + class_ref 132741 // StateProxy + end + required_classes + class_ref 128261 // Fixture + class_ref 128005 // Session + end end component 128133 "Session" + stereotype "subsystem" + provided_classes + class_ref 128133 // EDL + class_ref 128261 // Fixture + class_ref 128517 // MObject + class_ref 134661 // ParamProvider + class_ref 128005 // Session + end component 128389 "EDL" stereotype "entity" end @@ -56,10 +77,14 @@ Not a real code package, rather a container for design drafts, specifications, d component 128261 "Controller" stereotype "subsystem" + provided_classes + class_ref 130565 // BuilderFacade + end simplerelation 128261 -_-> on component_ref 128005 // Builder end + end component 128645 "AssetManagement" @@ -69,10 +94,23 @@ Not a real code package, rather a container for design drafts, specifications, d end component 128901 "Engine" + required_classes + class_ref 132741 // StateProxy + end simplerelation 128133 -_-> on component_ref 129029 // Frame (Stream) Provider end + + component 130053 "ProcNode" + stereotype "entity" + provided_classes + class_ref 134533 // Parameter + end + required_classes + class_ref 134661 // ParamProvider + end + end end component 129029 "Frame (Stream) Provider" @@ -86,6 +124,38 @@ Not a real code package, rather a container for design drafts, specifications, d end component 129285 "RenderPathManager" + provided_classes + class_ref 130437 // PathManager + end + end + + end + + componentview 128133 "interfaces" + //component diagram settings + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + draw_component_as_icon default show_component_req_prov default show_component_rea default + componentdiagram 130053 "proc-components" + package_name_in_tab default show_context default auto_label_position default draw_all_relations no shadow default + draw_component_as_icon default show_component_req_prov default show_component_rea default + size A3 + end + + component 129541 "ControllerFacade" + provided_classes + class_ref 130309 // ControllerFacade + end + required_classes + class_ref 130565 // BuilderFacade + class_ref 130437 // PathManager + end + end + + component 129797 "ConManager" + stereotype "component" + required_classes + class_ref 134661 // ParamProvider + end end end diff --git a/uml/cinelerra3/128645 b/uml/cinelerra3/128645 index 92ee080bb..523b89109 100644 --- a/uml/cinelerra3/128645 +++ b/uml/cinelerra3/128645 @@ -1,6 +1,6 @@ format 40 "codegen" // design::codegen - revision 16 + revision 17 modified_by 5 "hiv" // class settings //class diagram settings @@ -42,57 +42,57 @@ format 40 artifact 128005 "Cinelerra3" stereotype "executable" associated_artifacts - artifact_ref 129413 // clip - artifact_ref 129797 // fixedplacement - artifact_ref 133765 // frame - artifact_ref 130821 // assembler - artifact_ref 133637 // glrender - artifact_ref 134149 // glbuf - artifact_ref 131205 // tool - artifact_ref 133893 // aframe - artifact_ref 131845 // renderstate - artifact_ref 130949 // stateproxy - artifact_ref 132229 // exitnode - artifact_ref 134021 // vframe - artifact_ref 133381 // arender - artifact_ref 128773 // fixture - artifact_ref 128901 // track - artifact_ref 128261 // mobject - artifact_ref 134661 // interpolator - artifact_ref 128645 // edl - artifact_ref 134405 // parameter - artifact_ref 130565 // toolfactory - artifact_ref 132869 // projector - artifact_ref 133253 // openglpipe - artifact_ref 129669 // meta - artifact_ref 131077 // buildable - artifact_ref 131461 // nodecreatertool - artifact_ref 130693 // conmanager - artifact_ref 129925 // relativeplacement - artifact_ref 129541 // effect - artifact_ref 132997 // mask - artifact_ref 128133 // main - artifact_ref 132101 // processor - artifact_ref 131333 // segmentationtool - artifact_ref 130053 // allocation - artifact_ref 130437 // builderfacade - artifact_ref 131589 // controllerfacade - artifact_ref 131717 // pathmanager artifact_ref 133509 // vrender - artifact_ref 128517 // session - artifact_ref 133125 // pluginadapter - artifact_ref 132613 // pipe - artifact_ref 134277 // source - artifact_ref 129029 // placement - artifact_ref 130309 // auto - artifact_ref 131973 // renderengine - artifact_ref 132741 // hub - artifact_ref 132485 // trafo - artifact_ref 129157 // explicitplacement - artifact_ref 132357 // procnode + artifact_ref 130565 // toolfactory + artifact_ref 133765 // frame artifact_ref 129285 // abstractmo - artifact_ref 134533 // paramprovider + artifact_ref 131333 // segmentationtool + artifact_ref 128901 // track + artifact_ref 131973 // renderengine + artifact_ref 129925 // relativeplacement + artifact_ref 130949 // stateproxy + artifact_ref 133125 // pluginadapter + artifact_ref 133253 // glpipe + artifact_ref 133637 // glrender + artifact_ref 129413 // clip artifact_ref 130181 // label + artifact_ref 130437 // builderfacade + artifact_ref 134661 // interpolator + artifact_ref 132485 // trafo + artifact_ref 132997 // mask + artifact_ref 134021 // vframe + artifact_ref 134277 // source + artifact_ref 131077 // buildable + artifact_ref 131205 // tool + artifact_ref 131717 // pathmanager + artifact_ref 134405 // parameter + artifact_ref 129797 // fixedplacement + artifact_ref 132357 // procnode + artifact_ref 132101 // processor + artifact_ref 128773 // fixture + artifact_ref 130309 // auto + artifact_ref 130693 // conmanager + artifact_ref 131845 // renderstate + artifact_ref 128517 // session + artifact_ref 132869 // projector + artifact_ref 130821 // assembler + artifact_ref 134533 // paramprovider + artifact_ref 130053 // allocation + artifact_ref 128261 // mobject + artifact_ref 132741 // hub + artifact_ref 129541 // effect + artifact_ref 132229 // exitnode + artifact_ref 132613 // link + artifact_ref 129669 // meta + artifact_ref 134149 // glbuf + artifact_ref 131589 // controllerfacade + artifact_ref 128645 // edl + artifact_ref 129157 // explicitplacement + artifact_ref 128133 // main + artifact_ref 133381 // arender + artifact_ref 129029 // placement + artifact_ref 131461 // nodecreatertool + artifact_ref 133893 // aframe end comment "the main executable to be built" simplerelation 128517 diff --git a/uml/cinelerra3/128901 b/uml/cinelerra3/128901 index 1e45d5953..c3a70f751 100644 --- a/uml/cinelerra3/128901 +++ b/uml/cinelerra3/128901 @@ -1,6 +1,6 @@ format 40 "Builder" // ProcessingLayer::MObject::Builder - revision 11 + revision 12 modified_by 5 "hiv" // class settings //class diagram settings diff --git a/uml/cinelerra3/129285.diagram b/uml/cinelerra3/129285.diagram index 7acde9bcb..b4b7dc366 100644 --- a/uml/cinelerra3/129285.diagram +++ b/uml/cinelerra3/129285.diagram @@ -46,7 +46,7 @@ classcanvas 130565 class_ref 134277 // SegmentationTool end classcanvas 130949 class_ref 134405 // NodeCreatorTool draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 384 469 2004 + xyz 371 469 2004 end note 134277 "{ provided_tool.treat(this); }" xyzwh 182 191 2000 159 39 @@ -101,7 +101,7 @@ relationcanvas 134789 relation_ref 137221 // multiplicity_a_pos 590 418 3000 no_multiplicity_b line 131461 -_-_ from ref 130565 z 1999 to point 301 409 - line 132101 z 1999 to point 260 405 + line 132101 z 1999 to point 264 407 line 132229 z 1999 to ref 128005 line 131589 -_-_ from ref 130565 z 1999 to point 301 429 diff --git a/uml/cinelerra3/129669 b/uml/cinelerra3/129669 index a753b18fa..6ab555985 100644 --- a/uml/cinelerra3/129669 +++ b/uml/cinelerra3/129669 @@ -1,6 +1,6 @@ format 40 "proc" // design::codegen::proc - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "proc" cpp_src_dir "proc" - cpp_namespace "proc" + cpp_namespace "proc_interface" comment "sourcecode package All classes belonging to the (middle) processing layer" diff --git a/uml/cinelerra3/129797.diagram b/uml/cinelerra3/129797.diagram index a195e0182..7c7216678 100644 --- a/uml/cinelerra3/129797.diagram +++ b/uml/cinelerra3/129797.diagram @@ -1,4 +1,4 @@ -format 38 +format 40 artifactcanvas 128005 artifact_ref 128005 // Cinelerra3 color midred @@ -36,8 +36,6 @@ packagecanvas 129285 artifactcanvas 129413 artifact_ref 128133 // main color lightred xyz 281 45 2020 -iconcanvas 131077 deploymentdiagram_ref 129925 // src - xyz 201 159 2005 containcanvas 129797 from ref 128005 z 1999 to ref 129413 simplerelationcanvas 130053 simplerelation_ref 128517 geometry VH diff --git a/uml/cinelerra3/130053.diagram b/uml/cinelerra3/130053.diagram new file mode 100644 index 000000000..36438c6a4 --- /dev/null +++ b/uml/cinelerra3/130053.diagram @@ -0,0 +1,135 @@ +format 40 + +packagecanvas 128005 + package_ref 129413 // common + show_context_mode namespace color lightblue xyzwh 689 3 1994 277 166 +note 128389 "namespace" + xyzwh 709 29 2010 86 36 +packagecanvas 128517 + package_ref 129669 // proc + show_context_mode namespace color lightblue xyzwh 62 107 1994 310 200 +note 128645 "namespace" + xyzwh 81 141 2005 85 35 +componentcanvas 128901 component_ref 129541 // ControllerFacade + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 183 219 2005 156 63 +packagecanvas 129157 + package_ref 130181 // mobject + show_context_mode namespace xyzwh 16 370 1965 946 835 +packagecanvas 129285 + package_ref 130437 // session + show_context_mode namespace xyzwh 503 439 1980 440 296 +packagecanvas 129413 + package_ref 130693 // controller + show_context_mode namespace xyzwh 41 428 1990 385 315 +componentcanvas 129541 component_ref 128261 // Controller + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 88 546 2010 151 63 +arrowjunctioncanvas 131973 class_ref 130565 // BuilderFacade + xyz 316 456 2000 label_xy 230 507 +arrowjunctioncanvas 132229 class_ref 130565 // BuilderFacade + xyz 313 344 2000 label_xy 239 327 +packagecanvas 132485 + package_ref 130565 // builder + show_context_mode namespace xyzwh 36 770 1970 465 385 +componentcanvas 132869 component_ref 129925 // CommonLib + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 789 89 2005 156 63 +arrowjunctioncanvas 132997 class_ref 134917 // Time + xyz 830 211 2000 label_xy 828 233 +arrowjunctioncanvas 133253 class_ref 130309 // ControllerFacade + xyz 480 158 2000 label_xy 448 179 +componentcanvas 133509 component_ref 128133 // Session + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 694 526 2005 156 63 +arrowjunctioncanvas 134533 class_ref 128133 // EDL + xyz 591 603 2000 label_xy 590 624 +arrowjunctioncanvas 134789 class_ref 128261 // Fixture + xyz 596 639 2000 label_xy 589 660 +arrowjunctioncanvas 135045 class_ref 128517 // MObject + xyz 610 798 2000 label_xy 601 819 +arrowjunctioncanvas 135301 class_ref 134661 // ParamProvider + xyz 684 1094 2000 label_xy 658 1115 +componentcanvas 135685 component_ref 128005 // Builder + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 136 954 2005 151 63 +arrowjunctioncanvas 135813 class_ref 128005 // Session + xyz 571 765 2000 label_xy 562 787 +arrowjunctioncanvas 136197 class_ref 132741 // StateProxy + xyz 535 978 2000 label_xy 517 999 +arrowjunctioncanvas 136453 class_ref 128005 // Session + xyz 526 801 2000 label_xy 517 823 +packagecanvas 136709 + package_ref 130309 // engine + show_context_mode namespace xyzwh 16 1309 1994 561 265 +componentcanvas 136837 component_ref 128901 // Engine + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 103 1402 2005 156 63 +arrowjunctioncanvas 136965 class_ref 132741 // StateProxy + xyz 535 1224 2000 label_xy 517 1245 +componentcanvas 137349 component_ref 130053 // ProcNode + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 377 1494 2000 123 63 +arrowjunctioncanvas 137477 class_ref 134533 // Parameter + xyz 623 1379 2000 label_xy 607 1400 +arrowjunctioncanvas 137733 class_ref 134661 // ParamProvider + xyz 684 1368 2000 label_xy 658 1389 +componentcanvas 138373 component_ref 129797 // ConManager + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 136 1070 2005 156 63 +arrowjunctioncanvas 138501 class_ref 134661 // ParamProvider + xyz 586 1094 2000 label_xy 560 1115 +componentcanvas 138757 component_ref 129285 // RenderPathManager + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 89 644 2000 156 63 +arrowjunctioncanvas 138885 class_ref 130437 // PathManager + xyz 350 346 2000 label_xy 368 322 +arrowjunctioncanvas 139397 class_ref 130437 // PathManager + xyz 350 458 2000 label_xy 328 479 +arrowjunctioncanvas 140549 class_ref 128261 // Fixture + xyz 494 749 2000 label_xy 487 770 +line 132101 ---O + from ref 129541 z 1999 to point 301 541 + line 139269 z 1999 to ref 131973 +line 132357 ---( + from ref 128901 z 1999 to point 321 311 + line 139909 z 1999 to ref 132229 +line 133125 ---O + from ref 132869 z 1999 to ref 132997 +line 133381 ---O + from ref 128901 z 1999 to ref 133253 +line 134661 ---O + from ref 133509 z 1999 to ref 134533 +line 134917 ---O + from ref 133509 z 1999 to ref 134789 +line 135173 ---O + from ref 133509 z 1999 to ref 135045 +line 135429 ---O + from ref 133509 z 1999 to point 689 914 + line 138245 z 1999 to ref 135301 +line 135941 ---O + from ref 133509 z 1999 to ref 135813 +line 136325 ---O + from ref 135685 z 1999 to ref 136197 +line 136581 ---( + from ref 135685 z 1999 to ref 136453 +line 137093 ---( + from ref 136837 z 1999 to point 540 1302 + line 137221 z 1999 to ref 136965 +line 137605 ---O + from ref 137349 z 1999 to ref 137477 +line 137861 ---( + from ref 137349 z 1999 to point 689 1522 + line 137989 z 1999 to ref 137733 +line 138629 ---( + from ref 138373 z 1999 to ref 138501 +line 139013 ---( + from ref 128901 z 1999 to point 355 289 + line 139141 z 1999 to ref 138885 +line 139525 ---O geometry HV + from ref 138757 z 1999 to point 355 672 + line 139781 z 1999 to ref 139397 +line 140677 ---( + from ref 135685 z 1999 to ref 140549 +preferred_whz 0 0 0.8 +end diff --git a/uml/cinelerra3/130181 b/uml/cinelerra3/130181 index 982375a30..c20af94e1 100644 --- a/uml/cinelerra3/130181 +++ b/uml/cinelerra3/130181 @@ -1,6 +1,6 @@ format 40 "mobject" // design::codegen::proc::mobject - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "proc/mobject" cpp_src_dir "proc/mobject" - cpp_namespace "proc::mobject" + cpp_namespace "mobject" comment "sourcecode package MObject Subsystem diff --git a/uml/cinelerra3/130309 b/uml/cinelerra3/130309 index 25cc7e26a..f5c27c9a0 100644 --- a/uml/cinelerra3/130309 +++ b/uml/cinelerra3/130309 @@ -1,6 +1,6 @@ format 40 "engine" // design::codegen::proc::engine - revision 7 + revision 8 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "proc/engine" cpp_src_dir "proc/engine" - cpp_namespace "proc::engine" + cpp_namespace "engine" comment "sourcecode package The Core Render Engine" diff --git a/uml/cinelerra3/130437 b/uml/cinelerra3/130437 index 95197fe72..d1f52243d 100644 --- a/uml/cinelerra3/130437 +++ b/uml/cinelerra3/130437 @@ -1,6 +1,6 @@ format 40 "session" // design::codegen::proc::mobject::session - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "proc/mobject/session" cpp_src_dir "proc/mobject/session" - cpp_namespace "proc::mobject::session" + cpp_namespace "mobject::session" comment "sourcecode package Everything concerning the EDL and Session, within the MObject Subsystem" diff --git a/uml/cinelerra3/130565 b/uml/cinelerra3/130565 index adf896c2b..5da60b0f9 100644 --- a/uml/cinelerra3/130565 +++ b/uml/cinelerra3/130565 @@ -1,6 +1,6 @@ format 40 "builder" // design::codegen::proc::mobject::builder - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "proc/mobject/builder" cpp_src_dir "proc/mobject/builder" - cpp_namespace "proc::mobject::builder" + cpp_namespace "mobject::builder" comment "sourcecode package The Builder creating the Render Engine, diff --git a/uml/cinelerra3/130693 b/uml/cinelerra3/130693 index 6545b047c..71f67f571 100644 --- a/uml/cinelerra3/130693 +++ b/uml/cinelerra3/130693 @@ -1,6 +1,6 @@ format 40 "controller" // design::codegen::proc::mobject::controller - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "proc/mobject/controller" cpp_src_dir "proc/mobject/controller" - cpp_namespace "proc::mobject::controller" + cpp_namespace "mobject::controller" comment "sourcecode package The Processing and Render Controller, diff --git a/uml/cinelerra3/5.session b/uml/cinelerra3/5.session index ebe675d1e..65a46ae7d 100644 --- a/uml/cinelerra3/5.session +++ b/uml/cinelerra3/5.session @@ -1,13 +1,9 @@ window_sizes 1104 756 270 824 557 120 -diagrams - active classdiagram_ref 128133 // Session structure - 824 557 100 4 120 0 -end show_stereotypes selected - package_ref 129 // cinelerra3 +package_ref 129 // cinelerra3 open - package_ref 128645 // codegen +package_ref 129669 // proc end end diff --git a/uml/cinelerra3/cinelerra3.prj b/uml/cinelerra3/cinelerra3.prj index 141c837b0..7c1c4f1f6 100644 --- a/uml/cinelerra3/cinelerra3.prj +++ b/uml/cinelerra3/cinelerra3.prj @@ -1,6 +1,6 @@ format 40 "cinelerra3" - revision 25 + revision 26 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 06c63b227..2c79b42c5 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -846,6 +846,11 @@ For this Cinelerra3 design, we could consider making GOP just another raw media &rarr;see in [[Wikipedia|http://en.wikipedia.org/wiki/Group_of_pictures]]
+
+
This wiki page is the entry point to some detail notes covering some technical decisions, details and problems encountered in the course of the implementation of the Cinelerra Renderengine, the Builder and the related parts.
+
+* [[Packages, Interfaces and Namespaces|InterfaceNamespaces]]
+
/***
 ''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''
@@ -1011,6 +1016,182 @@ config.formatters.push( {
 //}}}
 
+
+
/***
+|''Name:''|InlineJavascriptPlugin|
+|''Source:''|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
+|''Author:''|Eric Shulman - ELS Design Studios|
+|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
+|''~CoreVersion:''|2.0.10|
+
+Insert Javascript executable code directly into your tiddler content. Lets you ''call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
+!!!!!Usage
+<<<
+When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.
+
+''Deferred execution from an 'onClick' link''
+By including a label="..." parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.
+
+''External script source files:''
+You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
+
+''Display script source in tiddler output''
+By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.
+
+''Defining javascript functions and libraries:''
+Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).
+
+To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.
+
+Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.
+
+''Creating dynamic tiddler content''
+An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
+* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
+* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
+* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.
+
+If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.
+
+//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//
+
+''Accessing the ~TiddlyWiki DOM''
+The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.
+
+Access to this DOM element allows you to create scripts that can:
+* vary their actions based upon the specific location in which they are embedded
+* access 'tiddler-relative' information (use findContainingTiddler(place))
+* perform direct DOM manipulations (when returning wikified text is not enough)
+<<<
+!!!!!Examples
+<<<
+an "alert" message box:
+><script show>
+ alert('InlineJavascriptPlugin: this is a demonstration message');
+</script>
+dynamic output:
+><script show>
+ return (new Date()).toString();
+</script>
+wikified dynamic output:
+><script show>
+ return "link to current user: [["+config.options.txtUserName+"]]";
+</script>
+dynamic output using 'place' to get size information for current tiddler:
+><script show>
+ if (!window.story) window.story=window;
+ var title=story.findContainingTiddler(place).id.substr(7);
+ return title+" is using "+store.getTiddlerText(title).length+" bytes";
+</script>
+creating an 'onclick' button/link that runs a script:
+><script label="click here" show>
+ if (!window.story) window.story=window;
+ alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
+</script>
+loading a script from a source url:
+>http://www.TiddlyTools.com/demo.js contains:
+>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
+>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
+><script src="demo.js" show>
+ return "loading demo.js..."
+</script>
+><script label="click to execute demo() function" show>
+ demo()
+</script>
+<<<
+!!!!!Installation
+<<<
+import (or copy/paste) the following tiddlers into your document:
+''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
+<<<
+!!!!!Revision History
+<<<
+''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
+''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
+''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
+''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
+''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
+''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
+''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access 
+''2005.11.08 [1.0.0]'' initial release
+<<<
+!!!!!Credits
+<<<
+This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
+<<<
+!!!!!Code
+***/
+//{{{
+version.extensions.inlineJavascript= {major: 1, minor: 5, revision: 1, date: new Date(2006,6,1)};
+
+config.formatters.push( {
+ name: "inlineJavascript",
+ match: "\\<script",
+ lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
+
+ handler: function(w) {
+ var lookaheadRegExp = new RegExp(this.lookahead,"mg");
+ lookaheadRegExp.lastIndex = w.matchStart;
+ var lookaheadMatch = lookaheadRegExp.exec(w.source)
+ if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
+ if (lookaheadMatch[1]) { // load a script library
+ // make script tag, set src, add to body to execute, then remove for cleanup
+ var script = document.createElement("script"); script.src = lookaheadMatch[1];
+ document.body.appendChild(script); document.body.removeChild(script);
+ }
+ if (lookaheadMatch[4]) { // there is script code
+ if (lookaheadMatch[3]) // show inline script code in tiddler output
+ wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
+ if (lookaheadMatch[2]) { // create a link to an 'onclick' script
+ // add a link, define click handler, save code in link (pass 'place'), set link attributes
+ var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
+ link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
+ link.code="function _out(place){"+lookaheadMatch[4]+"};_out(this);"
+ link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";
+ }
+ else { // run inline script code
+ var code="function _out(place){"+lookaheadMatch[4]+"};_out(w.output);"
+ code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
+ try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
+ if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
+ }
+ }
+ w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
+ }
+ }
+} )
+//}}}
+
+
+
Because we rely on strong decoupling and separation into self contained components, there is not much need for a common quasi-global namespace. Operations needing the cooperation of another subsystem will be delegated or even dispatched, consequently implementation code needs only the service acces points from "direct cooperation partner" subsystems. Hierarchical scopes besides classes are needed only when multiple subsystems share a set of common abstractions. Interface and Implementation use separate namespaces.
+
+!common definitions
+# surely there will be the need to use some macros (albeit code written in C++ can successfully avoid macros to some extent)
+# there will be one global ''Application State'' representation (and some application services)
+# we have some lib facilities, especially a common [[Time]] abstraction
+For these we have one special (bilingual) header file __cinelerra.h__, which places in its C++ part some declarations into __namespace cinelerra__. These declarations should be pulled into the specific namespaces or (still better) into the implementation //on demand//. There is no nesting (we deliberately don't want an symbol appearing //automatically// in every part of the system).
+
+!subsystem interface and facade
+These large scale interfaces reside in special namespaces "~XXX_interface" (where XXX is the subsystem). The accompanning //definitions// depend on the implementation namespace and are placed in the top-level source folder of the corresponding subsystem.
+
+ &rarr; Example: [[Interfaces/Namespaces of the Session Subsystem(s)|InterfacesSession]]
+
+!contract checks and test code
+From experiences with other middle scale projects, I prefer having the test code in a separate tree (because test code easily doubles the number of source files). But of course it should be placed into the same namespace as the code being checked, or (better?) into a nested namespace "test". It is esp. desirable to have good coverage on the contracts of the subsystem interfaces and mayor components (while it is not always feasible or advisable to cover every implementation detail).
+
+
+
+
+
* Subdir src/proc contains Interface within namespace proc_interface
+* Subdir src/proc/mobject contains commonly used entities (namespace mobject)
+** nested namespace controller
+** nested namespace builder
+** nested namespace session
+* Subdir src/proc/engine (namespace engine) uses directly the (local) interface components StateProxy and ParamProvider; triggering of the render process is initiated by the controller and can be requested via the controller facade. Normally, the playback/render controller located in the backend will just use this interface and won't be aware of the build process at all.
+
+[img[Example: Interfaces/Namespaces of the ~Session-Subsystems|uml/fig130053.png]]
+
+
All sorts of "things" to be placed and manipulated by the user in the EDL. This interface abstracts the details and just provides
 * a duration
@@ -1031,10 +1212,11 @@ This Design strives to achieve a StrongSeparation between the low-level Structur
 [img[Classess related to the EDL|uml/fig128133.png]]
 
-
+
''[[Cinelerra3|index.html]]''
 [[RenderEngine]]
 [[MObjects]]
+[[Implementation|ImplementationDetails]]
 [[Admin]]
 <<fullscreen>>
@@ -1666,6 +1848,216 @@ Users accustomed with modern GUI applications typically expect that //everything
a given Render Engine configuration is a list of Processors. Each Processor in turn contains a Graph of ProcNode.s to do the acutal data processing. In order to cary out any calculations, the Processor needs to be called with a StateProxy containing the state information for this RenderProcess
 
+
+
/***
+|''Name:''|RSSReaderPlugin|
+|''Description:''|This plugin provides a RSSReader for TiddlyWiki|
+|''Version:''|1.1.1|
+|''Date:''|Apr 21, 2007|
+|''Source:''|http://tiddlywiki.bidix.info/#RSSReaderPlugin|
+|''Documentation:''|http://tiddlywiki.bidix.info/#RSSReaderPluginDoc|
+|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
+|''Credit:''|BramChen for RssNewsMacro|
+|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
+|''~CoreVersion:''|2.2.0|
+|''OptionalRequires:''|http://www.tiddlytools.com/#NestedSlidersPlugin|
+***/
+//{{{
+version.extensions.RSSReaderPlugin = {
+	major: 1, minor: 1, revision: 1,
+	date: new Date("Apr 21, 2007"),
+	source: "http://TiddlyWiki.bidix.info/#RSSReaderPlugin",
+	author: "BidiX",
+	coreVersion: '2.2.0'
+};
+
+config.macros.rssReader = {
+	dateFormat: "DDD, DD MMM YYYY",
+	itemStyle: "display: block;border: 1px solid black;padding: 5px;margin: 5px;", //useed  '@@'+itemStyle+itemText+'@@'
+	msg:{
+		permissionDenied: "Permission to read preferences was denied.",
+		noRSSFeed: "No RSS Feed at this address %0",
+		urlNotAccessible: " Access to %0 is not allowed"
+	},
+	cache: [], 	// url => XMLHttpRequest.responseXML
+	desc: "noDesc",
+	
+	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
+		var desc = params[0];
+		var feedURL = params[1];
+		var toFilter = (params[2] ? true : false);
+		var filterString = (toFilter?(params[2].substr(0,1) == ' '? tiddler.title:params[2]):'');
+		var place = createTiddlyElement(place, "div", "RSSReader");
+		wikify("^^<<rssFeedUpdate "+feedURL+" [[" + tiddler.title + "]]>>^^\n",place);
+		if (this.cache[feedURL]) {
+			this.displayRssFeed(this.cache[feedURL], feedURL, place, desc, toFilter, filterString);
+		}
+		else {
+			var r = loadRemoteFile(feedURL,config.macros.rssReader.processResponse, [place, desc, toFilter, filterString]);
+			if (typeof r == "string")
+				displayMessage(r);
+		}
+		
+	},
+
+	// callback for loadRemoteFile 
+	// params : [place, desc, toFilter, filterString]
+	processResponse: function(status, params, responseText, url, xhr) { // feedURL, place, desc, toFilter, filterString) {	
+		if (window.netscape){
+			try {
+				if (document.location.protocol.indexOf("http") == -1) {
+					netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
+				}
+			}
+			catch (e) { displayMessage(e.description?e.description:e.toString()); }
+		}
+		if (xhr.status == httpStatus.NotFound)
+		 {
+			displayMessage(config.macros.rssReader.noRSSFeed.format([url]));
+			return;
+		}
+		if (!status)
+		 {
+			displayMessage(config.macros.rssReader.noRSSFeed.format([url]));
+			return;
+		}
+		if (xhr.responseXML) {
+			// response is interpreted as XML
+			config.macros.rssReader.cache[url] = xhr.responseXML;
+			config.macros.rssReader.displayRssFeed(xhr.responseXML, params[0], url, params[1], params[2], params[3]);
+		}
+		else {
+			if (responseText.substr(0,5) == "<?xml") {
+				// response exists but not return as XML -> try to parse it 
+				var dom = (new DOMParser()).parseFromString(responseText, "text/xml"); 
+				if (dom) {
+					// parsing successful so use it
+					config.macros.rssReader.cache[url] = dom;
+					config.macros.rssReader.displayRssFeed(dom, params[0], url, params[1], params[2], params[3]);
+					return;
+				}
+			}
+			// no XML display as html 
+			wikify("<html>" + responseText + "</html>", params[0]);
+			displayMessage(config.macros.rssReader.msg.noRSSFeed.format([url]));
+		}
+	},
+
+	// explore down the DOM tree
+	displayRssFeed: function(xml, place, feedURL, desc, toFilter, filterString){
+		// Channel
+		var chanelNode = xml.getElementsByTagName('channel').item(0);
+		var chanelTitleElement = (chanelNode ? chanelNode.getElementsByTagName('title').item(0) : null);
+		var chanelTitle = "";
+		if ((chanelTitleElement) && (chanelTitleElement.firstChild)) 
+			chanelTitle = chanelTitleElement.firstChild.nodeValue;
+		var chanelLinkElement = (chanelNode ? chanelNode.getElementsByTagName('link').item(0) : null);
+		var chanelLink = "";
+		if (chanelLinkElement) 
+			chanelLink = chanelLinkElement.firstChild.nodeValue;
+		var titleTxt = "!![["+chanelTitle+"|"+chanelLink+"]]\n";
+		var title = createTiddlyElement(place,"div",null,"ChanelTitle",null);
+		wikify(titleTxt,title);
+		// ItemList
+		var itemList = xml.getElementsByTagName('item');
+		var article = createTiddlyElement(place,"ul",null,null,null);
+		var lastDate;
+		var re;
+		if (toFilter) 
+			re = new RegExp(filterString.escapeRegExp());
+		for (var i=0; i<itemList.length; i++){
+			var titleElm = itemList[i].getElementsByTagName('title').item(0);
+			var titleText = (titleElm ? titleElm.firstChild.nodeValue : '');
+			if (toFilter && ! titleText.match(re)) {
+				continue;
+			}
+			var descText = '';
+			descElem = itemList[i].getElementsByTagName('description').item(0);
+			if (descElem){
+				try{
+					for (var ii=0; ii<descElem.childNodes.length; ii++) {
+						descText += descElem.childNodes[ii].nodeValue;
+					}
+				}
+				catch(e){}
+				descText = descText.replace(/<br \/>/g,'\n');
+				if (desc == "asHtml")
+					descText = "<html>"+descText+"</html>";
+			}
+			var linkElm = itemList[i].getElementsByTagName("link").item(0);
+			var linkURL = linkElm.firstChild.nodeValue;
+			var pubElm = itemList[i].getElementsByTagName('pubDate').item(0);
+			var pubDate;
+			if (!pubElm) {
+				pubElm = itemList[i].getElementsByTagName('date').item(0); // for del.icio.us
+				if (pubElm) {
+					pubDate = pubElm.firstChild.nodeValue;
+					pubDate = this.formatDateString(this.dateFormat, pubDate);
+					}
+					else {
+						pubDate = '0';
+					}
+				}
+			else {
+				pubDate = (pubElm ? pubElm.firstChild.nodeValue : 0);
+				pubDate = this.formatDate(this.dateFormat, pubDate);
+			}
+			titleText = titleText.replace(/\[|\]/g,'');
+			var rssText = '*'+'[[' + titleText + '|' + linkURL + ']]' + '' ;
+			if ((desc != "noDesc") && descText){
+				rssText = rssText.replace(/\n/g,' ');
+				descText = '@@'+this.itemStyle+descText + '@@\n';				
+				if (version.extensions.nestedSliders){
+					descText = '+++[...]' + descText + '===';
+				}
+				rssText = rssText + descText;
+			}
+			var story;
+			if ((lastDate != pubDate) && ( pubDate != '0')) {
+				story = createTiddlyElement(article,"li",null,"RSSItem",pubDate);
+				lastDate = pubDate;
+			}
+			else {
+				lastDate = pubDate;
+			}
+			story = createTiddlyElement(article,"div",null,"RSSItem",null);
+			wikify(rssText,story);
+		}
+	},
+	
+	formatDate: function(template, date){
+		var dateString = new Date(date);
+		// template = template.replace(/hh|mm|ss/g,'');
+		return dateString.formatString(template);
+	},
+	
+	formatDateString: function(template, date){
+		var dateString = new Date(date.substr(0,4), date.substr(5,2) - 1, date.substr(8,2)
+			);
+		return dateString.formatString(template);
+	}
+	
+};
+
+config.macros.rssFeedUpdate = {
+	label: "Update",
+	prompt: "Clear the cache and redisplay this RssFeed",
+	handler: function(place,macroName,params) {
+		var feedURL = params[0];
+		var tiddlerTitle = params[1];
+		createTiddlyButton(place, this.label, this.prompt, 
+			function () {
+				if (config.macros.rssReader.cache[feedURL]) {
+					config.macros.rssReader.cache[feedURL] = null; 
+			}
+			story.refreshTiddler(tiddlerTitle,null, true);
+		return false;});
+	}
+};
+
+//}}}
+
+
The Render Engine is the part of the application doing the actual video calculations. Its operations are guided by the Objects and Parameters edited by the user in [[the EDL|EDL]] and it retrieves the raw audio and video data from the [[Data backend|backend.html]]. Because the inner workings of the Render Engine are closely related to the structures used in the EDL, this design covers [[this aspect|MObjects]] as well.
 
@@ -1686,11 +2078,11 @@ The design of Cinelerra 2 basically follows this design, but __fails because of
 &rarr; [[Overview]] of Subsystems and Components, and DesignGoals
 &rarr; [[An Introduction|WalkThrough]] discussing the key features
 &rarr; [[Overview Render Engine|OverviewRenderEngine]]
-&rarr; BuildProcess
-&rarr; RenderProcess
+&rarr; BuildProcess and RenderProcess
 &rarr; [[Two Examples|Examples]] (Object diagrams) 
 &rarr; how [[Automation]] works  {{red{to be defined in more detail}}}
 &rarr; [[Problems|ProblemsTodo]] {{red{to be solved}}}
+&rarr; [[Implementation Details|ImplementationDetails]] {{red{WIP}}}