diff --git a/doc/devel/uml/class128005.html b/doc/devel/uml/class128005.html index 9ee1b55a0..fabe77cf9 100644 --- a/doc/devel/uml/class128005.html +++ b/doc/devel/uml/class128005.html @@ -4,21 +4,22 @@ -Class Session +Class SessionImpl -
Class Session
+
Class SessionImpl

-

Declaration :

Artifact : session, Component(s) : Session

+

Declaration :

Implementation class for the Session interface

Artifact : sessionimpl, Component(s) : Session

-
Relation edls (<directional aggregation>)

Declaration :

+
Relation edls (<directional aggregation by value>)

Declaration :

Relation fixture (<unidirectional association>)

Declaration :

+

All public operations : currEDL , getFixture

diff --git a/doc/devel/uml/class128645.html b/doc/devel/uml/class128645.html index a00dfada6..b87a32e2c 100644 --- a/doc/devel/uml/class128645.html +++ b/doc/devel/uml/class128645.html @@ -16,7 +16,7 @@ -

Declaration :

Directly inherited by : Allocation DirectPlacement ExplicitPlacement RelativePlacement

+

Declaration :

Directly inherited by : Allocation ExplicitPlacement FixedPlacement RelativePlacement

Artifact : placement

Relation subject (<association>)

Declaration :

diff --git a/doc/devel/uml/class128901.html b/doc/devel/uml/class128901.html index 554e5a32c..a4c14a225 100644 --- a/doc/devel/uml/class128901.html +++ b/doc/devel/uml/class128901.html @@ -16,11 +16,12 @@ -

Declaration :

Artifact : clip

+

Declaration :

Directly inherited by : CompoundClip SimpleClip

+

Artifact : clip

Attribut start
-

Declaration :

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

startpos in source

-
Relation source (<unidirectional association>)

Declaration :

  • Uml : # source : Clip, multiplicity : 1
  • C++ : protected: const Clip* source

the media source this clip referes to

+

Declaration :

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

startpos in source

+
Relation source (<unidirectional association>)

Declaration :

  • Uml : # source : Media, multiplicity : 1
  • C++ : protected: Media* source

the media source this clip referes to

All public operations : apply

diff --git a/doc/devel/uml/class129285.html b/doc/devel/uml/class129285.html index 9278b48ae..0091fcd2d 100644 --- a/doc/devel/uml/class129285.html +++ b/doc/devel/uml/class129285.html @@ -4,19 +4,19 @@ -Class DirectPlacement +Class FixedPlacement -
Class DirectPlacement
+
Class FixedPlacement

-

Declaration :

Artifact : fixedplacement

+

Declaration :

Artifact : fixedplacement

All public operations : resolve

diff --git a/doc/devel/uml/class129797.html b/doc/devel/uml/class129797.html index 7af02f3ea..a68f76325 100644 --- a/doc/devel/uml/class129797.html +++ b/doc/devel/uml/class129797.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class ExplicitPlacement : public Placement
  • Java : public interface ExplicitPlacement

Directly inherited by : DirectPlacement

+

Declaration :

  • C++ : class ExplicitPlacement : public Placement
  • Java : public interface ExplicitPlacement

Directly inherited by : FixedPlacement

Artifact : explicitplacement

Attribut time
diff --git a/doc/devel/uml/class135557.html b/doc/devel/uml/class135557.html index fdcef57fa..cb97dca6f 100644 --- a/doc/devel/uml/class135557.html +++ b/doc/devel/uml/class135557.html @@ -17,7 +17,7 @@

Declaration :

Directly inherited by : Config External Invalid Logic State

-

Artifact : error

+

Artifact : error, Component(s) : CommonLib

Operation what

Declaration :

  • Uml : + what() : const char*
  • C++ : public: virtual const char* what () const
Operation rootCause

Declaration :

  • Uml : + rootCause() : std::exception
  • C++ : public: std::exception rootCause ()

If this exception was caused by a chain of further exceptions,
return the first one registered in this throw sequence.
This works only, if every exceptions thrown as a consequence
of another exception is propperly constructed by passing
the original exception to the constructor

diff --git a/doc/devel/uml/class136581.html b/doc/devel/uml/class136581.html index b81f1f7ef..f9cfcc755 100644 --- a/doc/devel/uml/class136581.html +++ b/doc/devel/uml/class136581.html @@ -17,11 +17,13 @@

Declaration :

  • C++ : class AssetManager

Facade for the Asset subsystem

Artifact : assetmanager

- -
Operation register

Declaration :

  • Uml : static, + register(inout name : string, inout category : string, inout org : string, inout uint : version) : long, exceptions : Invalid
  • C++ : public: static long register (string & name, string & category, string & org, version& uint) throw (Invalid)

registers an asset object in the internal DB, providing its unique key

+ +
Operation getID

Declaration :

  • Uml : static, + getID(in idi : Asset) :
  • C++ : public: static getID ()
Operation getAsset

Declaration :

  • Uml : + getAsset(in id : long) : KIND, exceptions : Invalid
  • C++ : public: template<class KIND> KIND getAsset (long & id) throw (Invalid)

find and return corresponging object

Operation known

Declaration :

  • Uml : + known(in id : long) : bool
  • C++ : public: bool known (long id)

@return true if the given id is registered in the internal asset DB

-
Operation remove

Declaration :

  • Uml : + remove(in id : long) : void, exceptions : Invalid, State
  • C++ : public: void remove (long id) throw (Invalid, State)

remove the given asset <i>together with all its dependants</i> from the internal DB

-

All public operations : getAsset , known , register , remove

+
Operation remove

Declaration :

  • Uml : + remove(in id : long) : void, exceptions : Invalid, State
  • C++ : public: void remove (long id) throw (Invalid, State)

remove the given asset <i>together with all its dependants</i> from the internal DB

+
Operation reg

Declaration :

  • Uml : static, # reg(inout name : string, inout category : string, inout org : string, inout uint : version) : long, exceptions : Invalid
  • C++ : protected: static long reg (string & name, string & category, string & org, version& uint) throw (Invalid)

registers an asset object in the internal DB, providing its unique key

+
Relation registry (<unidirectional association>)

Declaration :

  • Uml : # registry : DB, multiplicity : 1
  • C++ : protected: DB* registry

@internal Table or DB holding all registered asset instances.

+

All public operations : getAsset , getID , known , remove

diff --git a/doc/devel/uml/class136709.html b/doc/devel/uml/class136709.html index c7f46adb3..1117fdbef 100644 --- a/doc/devel/uml/class136709.html +++ b/doc/devel/uml/class136709.html @@ -16,9 +16,11 @@ -

Declaration :

  • C++ : class Media : public Asset

Directly inherited by : Clip Preview

+

Declaration :

  • C++ : class Media : public Asset

Directly inherited by : Clip CompoundMedia Preview

key abstraction: media-like assets

Artifact : media

-
-

All public operations : enable , getDependant , getParents , isActive

+ +
Operation createClip

Declaration :

  • Uml : + createClip() : Clip
  • C++ : public: Clip createClip ()

create a (possibly compound) Clip refering to this media, ready to be added to the EDL.

+
Operation howtoProc

Declaration :

@return descriptor how to build a render pipeline corresponding to this media

+

All public operations : createClip , enable , getDependant , getParents , howtoProc , isActive

diff --git a/doc/devel/uml/class136965.html b/doc/devel/uml/class136965.html index d2f992c0a..d666bf3f2 100644 --- a/doc/devel/uml/class136965.html +++ b/doc/devel/uml/class136965.html @@ -16,7 +16,7 @@ -

Declaration :

  • C++ : class Struct : public Asset

Directly inherited by : OutPort Track

+

Declaration :

  • C++ : class Struct : public Asset

Directly inherited by : OutPort ProcPatt Track

key abstraction: structural asset

Artifact : struct

All public operations : enable , getDependant , getParents , isActive

diff --git a/doc/devel/uml/class137349.html b/doc/devel/uml/class137349.html index 2b1885473..7d1b67bef 100644 --- a/doc/devel/uml/class137349.html +++ b/doc/devel/uml/class137349.html @@ -19,6 +19,6 @@

Declaration :

  • C++ : class Clip : public Media

bookkeeping (asset) view of a media clip.

Artifact : clip

Relation source (<unidirectional association>)

Declaration :

  • Uml : # source : Media, multiplicity : 1
  • C++ : protected: const Media* source

media source of this clip

-

All public operations : enable , getDependant , getParents , isActive

+

All public operations : createClip , enable , getDependant , getParents , howtoProc , isActive

diff --git a/doc/devel/uml/class137477.html b/doc/devel/uml/class137477.html index 4e36b6db4..18188f2f5 100644 --- a/doc/devel/uml/class137477.html +++ b/doc/devel/uml/class137477.html @@ -18,6 +18,6 @@

Declaration :

  • C++ : class Unknown : public Preview

placeholder for unknown or unavailable media source

Artifact : unknown

-

All public operations : enable , getDependant , getParents , isActive

+

All public operations : createClip , enable , getDependant , getParents , howtoProc , isActive

diff --git a/doc/devel/uml/class137605.html b/doc/devel/uml/class137605.html index e154ffd5f..7ba8853f4 100644 --- a/doc/devel/uml/class137605.html +++ b/doc/devel/uml/class137605.html @@ -19,6 +19,6 @@

Declaration :

  • C++ : class Preview : public Media

Directly inherited by : Unknown

alternative version of the media data, probably with lower resolution

Artifact : preview

-

All public operations : enable , getDependant , getParents , isActive

+

All public operations : createClip , enable , getDependant , getParents , howtoProc , isActive

diff --git a/doc/devel/uml/class137989.html b/doc/devel/uml/class137989.html index 5ee601cc6..6c5bf6158 100644 --- a/doc/devel/uml/class137989.html +++ b/doc/devel/uml/class137989.html @@ -17,7 +17,8 @@

Declaration :

  • C++ : class Track : public Struct

structural asset holding the configuration of a track in the EDL

Artifact : track

-
+ +
Relation wiringTemplate (<unidirectional association>)

Declaration :

  • Uml : # wiringTemplate : ProcPatt, multiplicity : 1
  • C++ : protected: ProcPatt* wiringTemplate

All public operations : enable , getDependant , getParents , isActive

diff --git a/doc/devel/uml/class138373.html b/doc/devel/uml/class138373.html new file mode 100644 index 000000000..59b8657a5 --- /dev/null +++ b/doc/devel/uml/class138373.html @@ -0,0 +1,20 @@ + + + + + + +Class DB + + + + + +
Class DB
+

+ + + + +

Declaration :

  • C++ : class DB

Implementation of the registry holding all Asset instances known to the Asset Manager subsystem. As of 8/2007 implemented by a hashtable.

Artifact : db

+ diff --git a/doc/devel/uml/class138501.html b/doc/devel/uml/class138501.html new file mode 100644 index 000000000..fd0b56e89 --- /dev/null +++ b/doc/devel/uml/class138501.html @@ -0,0 +1,24 @@ + + + + + + +Class CompoundMedia + + + + + +
Class CompoundMedia
+

+ + + + +

Declaration :

  • C++ : class CompoundMedia : public Media

compound of several elementary media tracks,
e.g. the individual media streams found in one media file

Artifact : compoundmedia

+ +
Relation tracks (<directional aggregation>)

Declaration :

  • Uml : # tracks : Media, multiplicity : 1..*
  • C++ : protected: vector<Media *> tracks

elementary media assets comprising this compound

+

All public operations : createClip , enable , getDependant , getParents , howtoProc , isActive

+ + diff --git a/doc/devel/uml/class138629.html b/doc/devel/uml/class138629.html new file mode 100644 index 000000000..9bc8209f7 --- /dev/null +++ b/doc/devel/uml/class138629.html @@ -0,0 +1,24 @@ + + + + + + +Class CompoundClip + + + + + +
Class CompoundClip
+

+ + + + +

Declaration :

  • C++ : class CompoundClip : public Clip

Clip MObject which is actually a compound of several elementary clips,
e.g. the several streams found within multichannels media.

Artifact : compoundclip, Diagram : Session structure

+ +
Relation components (<directional aggregation>)

Declaration :

  • Uml : # components : Clip, multiplicity : 1..*
  • C++ : protected: Clip* components
+

All public operations : apply

+ + diff --git a/doc/devel/uml/class138757.html b/doc/devel/uml/class138757.html new file mode 100644 index 000000000..d4594382d --- /dev/null +++ b/doc/devel/uml/class138757.html @@ -0,0 +1,24 @@ + + + + + + +Class ProcPatt + + + + + +
Class ProcPatt
+

+ + + + +

Declaration :

  • C++ : class ProcPatt : public Struct

special type of structural Asset representing information how to build some part of the render engine's processing nodes network.

Artifact : procpatt

+ +
Relation instructions (<directional aggregation by value>)

Declaration :

+

All public operations : enable , getDependant , getParents , isActive

+ + diff --git a/doc/devel/uml/class138885.html b/doc/devel/uml/class138885.html new file mode 100644 index 000000000..987c50371 --- /dev/null +++ b/doc/devel/uml/class138885.html @@ -0,0 +1,23 @@ + + + + + + +Class SimpleClip + + + + + +
Class SimpleClip
+

+ + + + +

Declaration :

  • C++ : class SimpleClip : public Clip

Elementary clip consisting of only one media stream

Artifact : simpleclip

+
+

All public operations : apply

+ + diff --git a/doc/devel/uml/class139013.html b/doc/devel/uml/class139013.html new file mode 100644 index 000000000..9c8b83182 --- /dev/null +++ b/doc/devel/uml/class139013.html @@ -0,0 +1,21 @@ + + + + + + +Class BuildInstruct + + + + + +
Class BuildInstruct
+

+ + + + +

Declaration :

  • C++ : class BuildInstruct

Directly inherited by : DoAttach DoRecurse

+

(Interface) building instructions to be executed by the Builder on the render node network under construction.

Artifact : buildinstruct

+ diff --git a/doc/devel/uml/class139141.html b/doc/devel/uml/class139141.html new file mode 100644 index 000000000..e1b79bcb6 --- /dev/null +++ b/doc/devel/uml/class139141.html @@ -0,0 +1,25 @@ + + + + + + +Class DoAttach + + + + + +
Class DoAttach
+

+ + + + +

Declaration :

Artifact : buildinstruct

+ +
Relation nodes (<directional aggregation>)

Declaration :

  • Uml : + nodes : Proc, multiplicity : 1..*
  • C++ : public: const Proc* nodes
+
Attribut point
+

Declaration :

  • Uml : + point : string
  • C++ : public: const string point

identifying the point where the nodes should be attached

+ + diff --git a/doc/devel/uml/class139269.html b/doc/devel/uml/class139269.html new file mode 100644 index 000000000..4ec293ab8 --- /dev/null +++ b/doc/devel/uml/class139269.html @@ -0,0 +1,23 @@ + + + + + + +Class DoRecurse + + + + + +
Class DoRecurse
+

+ + + + +

Declaration :

Artifact : buildinstruct

+ +
Relation subPattern (<unidirectional association>)

Declaration :

  • Uml : # subPattern : ProcPatt, multiplicity : 1
  • C++ : protected: const ProcPatt* subPattern
+ + diff --git a/doc/devel/uml/class139397.html b/doc/devel/uml/class139397.html new file mode 100644 index 000000000..1bfe82fbf --- /dev/null +++ b/doc/devel/uml/class139397.html @@ -0,0 +1,22 @@ + + + + + + +Class MediaFactory + + + + + +
Class MediaFactory
+

+ + + + +

Declaration :

  • C++ : class MediaFactory

Depends on BackendLayer

Depends on BackendLayer

specialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well

Artifact : media

+
+ + diff --git a/doc/devel/uml/class139525.html b/doc/devel/uml/class139525.html new file mode 100644 index 000000000..603d8d16b --- /dev/null +++ b/doc/devel/uml/class139525.html @@ -0,0 +1,20 @@ + + + + + + +Class MediaAccessFacade + + + + + +
Class MediaAccessFacade
+

+ + + + +

Declaration :

  • C++ : class MediaAccessFacade

provides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions

Artifact : mediaaccessfacade, Component(s) : Media Access

+ diff --git a/doc/devel/uml/class139653.html b/doc/devel/uml/class139653.html new file mode 100644 index 000000000..cfdc8392a --- /dev/null +++ b/doc/devel/uml/class139653.html @@ -0,0 +1,27 @@ + + + + + + +Class Session + + + + + +
Class Session
+

+ + + + +

Declaration :

  • C++ : class Session

Directly inherited by : SessionImpl

+

Primary Interface for all editing tasks.
The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered.

Artifact : session

+ +
Operation currEDL

Declaration :

  • Uml : + currEDL() : EDL
  • C++ : public: EDL currEDL ()

The EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands.

+
Operation getFixture

Declaration :

  • Uml : + getFixture() : Fixture&
  • C++ : public: Fixture& getFixture ()

While the session can be comprised of several EDLs,
there is only one Fixture, which represents the actual
configuration of all Objects to be rendered

+
Relation current (<unidirectional association>)

Declaration :

Standard access path to get at the current session via the Session Manager, which acts as a "PImpl" smart pointer

+

All public operations : currEDL , getFixture

+ + diff --git a/doc/devel/uml/class139781.html b/doc/devel/uml/class139781.html new file mode 100644 index 000000000..60bd83878 --- /dev/null +++ b/doc/devel/uml/class139781.html @@ -0,0 +1,27 @@ + + + + + + +Class SessManager + + + + + +
Class SessManager
+

+ + + + +

Declaration :

  • C++ : class SessManager

Artifact : sessmanager

+ +
Operation clear

Declaration :

  • Uml : + clear() : void
  • C++ : public: void clear ()

clear current session contents
without resetting overall session config.
Afterwards, the session will contain only one
empty EDL, while all Assets are retained.

+
Operation reset

Declaration :

  • Uml : + reset() : void
  • C++ : public: void reset ()

reset all session config and
start with a pristine default session.

+
Operation load

Declaration :

  • Uml : + load() : void
  • C++ : public: void load ()

replace the current session by a new
session loaded from serialized state.

+
Operation save

Declaration :

  • Uml : + save() : void
  • C++ : public: void save ()

create a complete, serialized representation
of the current session config and contents.
@todo how to serialize, prameters, return value?

+

All public operations : clear , load , reset , save

+ + diff --git a/doc/devel/uml/classdiagrams.html b/doc/devel/uml/classdiagrams.html index 8c55bf4b0..63f1a4fcf 100644 --- a/doc/devel/uml/classdiagrams.html +++ b/doc/devel/uml/classdiagrams.html @@ -23,9 +23,12 @@ File MappingShows whats used to access Frames HierarchyCinelerra Exception hierarchy In Memory Database +interface components Media-Asset Relations +Proc-Asset Relations Render Entities Session structure +Struct-Asset Relations diff --git a/doc/devel/uml/classes.html b/doc/devel/uml/classes.html index cfbf35142..39a63ddb4 100644 --- a/doc/devel/uml/classes.html +++ b/doc/devel/uml/classes.html @@ -27,18 +27,23 @@ AutoAutomation data for some parameter (i.e. a time varying function) Buildableinterface BuilderFacadeboundaryProvides 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 +BuildInstruct(Interface) building instructions to be executed by the Builder on the render node network under construction. Categorytree like classification of Assets Clipbookkeeping (asset) view of a media clip. Clip Codecdescription of some media data decoder or encoder facility CodecAdapter +CompoundClipClip MObject which is actually a compound of several elementary clips,
e.g. the several streams found within multichannels media. +CompoundMediacompound of several elementary media tracks,
e.g. the individual media streams found in one media file ConditionI provided a reworked Condition class in my cinelerra2 repository Config ConManagerConnection 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 Constraint ControllerFacadeboundaryProvides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings. Datasetmeta asset describing a collection of control data -DirectPlacement +DBImplementation of the registry holding all Asset instances known to the Asset Manager subsystem. As of 8/2007 implemented by a hashtable. +DoAttach +DoRecurse EDL EffectEffect or media processing component Effect @@ -54,6 +59,7 @@ FileMapCache FileProviderThis is the Factory for Files, whenever something wants to use some file (or temporary storage), This Factory will hand out some smart/shared pointer to a File object which will be used to retrieve Frames. FileReference +FixedPlacement Fixture FrameFrames are just a low level lump of continous memory, most parts are opaque. Frames are memory sensitive, they will be small constant sized structures which can be efficently managed in a pool. FrameinterfaceTODO: how to relate to Cehteh's Frame entity in the Backend?
The latter is the fundamental Frame entity, wheras this Object rather represents a buffer set containing frame date @@ -72,6 +78,8 @@ Logic Mask Mediakey abstraction: media-like assets +MediaAccessFacadeboundaryprovides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions +MediaFactoryspecialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well Metakey abstraction: metadata and organisational asset Meta MObjectinterface @@ -88,6 +96,7 @@ Prockey abstraction: data processing asset Processor ProcNodeinterfaceKey abstraction of the Render Engine: A Data processing Node +ProcPattspecial type of structural Asset representing information how to build some part of the render engine's processing nodes network. ProjectorSpecial video processing node used to scale and translate image data. RelativePlacement RelTypeenumthe possible kinds of RelativePlacements @@ -96,7 +105,10 @@ Scheduler Segment SegmentationToolTool 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. -Session +SessionPrimary Interface for all editing tasks.
The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered. +SessionImplImplementation class for the Session interface +SessManager +SimpleClipElementary clip consisting of only one media stream SmartPointerauxiliary SourceSource Node: represents a media source to pull data from. State diff --git a/doc/devel/uml/classes_list.html b/doc/devel/uml/classes_list.html index 78eefaa82..44865f171 100644 --- a/doc/devel/uml/classes_list.html +++ b/doc/devel/uml/classes_list.html @@ -28,18 +28,23 @@ Auto
Buildable
BuilderFacade
+BuildInstruct
Category
Clip
Clip
Codec
CodecAdapter
+CompoundClip
+CompoundMedia
Condition
Config
ConManager
Constraint
ControllerFacade
Dataset
-DirectPlacement
+DB
+DoAttach
+DoRecurse
EDL
Effect
Effect
@@ -55,6 +60,7 @@ FileMapCache
FileProvider
FileReference
+FixedPlacement
Fixture
Frame
Frame
@@ -73,6 +79,8 @@ Logic
Mask
Media
+MediaAccessFacade
+MediaFactory
Meta
Meta
MObject
@@ -89,6 +97,7 @@ Proc
Processor
ProcNode
+ProcPatt
Projector
RelativePlacement
RelType
@@ -97,7 +106,10 @@ Scheduler
Segment
SegmentationTool
-Session
+Session
+SessionImpl
+SessManager
+SimpleClip
SmartPointer
Source
State
diff --git a/doc/devel/uml/componentdiagrams.html b/doc/devel/uml/componentdiagrams.html index 15a1086a2..967828869 100644 --- a/doc/devel/uml/componentdiagrams.html +++ b/doc/devel/uml/componentdiagrams.html @@ -16,6 +16,7 @@ +
backend-components
OverviewThis drawing shows the top level compoents and relations
proc-components
diff --git a/doc/devel/uml/fig128005.png b/doc/devel/uml/fig128005.png index 68d6a056f..7290793c8 100644 Binary files a/doc/devel/uml/fig128005.png and b/doc/devel/uml/fig128005.png differ diff --git a/doc/devel/uml/fig128133.png b/doc/devel/uml/fig128133.png index 9a1680254..70b2dd611 100644 Binary files a/doc/devel/uml/fig128133.png and b/doc/devel/uml/fig128133.png differ diff --git a/doc/devel/uml/fig130309.png b/doc/devel/uml/fig130309.png index 436fda8d2..e2c7d6313 100644 Binary files a/doc/devel/uml/fig130309.png and b/doc/devel/uml/fig130309.png differ diff --git a/doc/devel/uml/fig130437.png b/doc/devel/uml/fig130437.png index 90aae3a8d..3a504a003 100644 Binary files a/doc/devel/uml/fig130437.png and b/doc/devel/uml/fig130437.png differ diff --git a/doc/devel/uml/fig130693.png b/doc/devel/uml/fig130693.png new file mode 100644 index 000000000..81351d39b Binary files /dev/null and b/doc/devel/uml/fig130693.png differ diff --git a/doc/devel/uml/fig130821.png b/doc/devel/uml/fig130821.png new file mode 100644 index 000000000..8f9dab369 Binary files /dev/null and b/doc/devel/uml/fig130821.png differ diff --git a/doc/devel/uml/fig130949.png b/doc/devel/uml/fig130949.png new file mode 100644 index 000000000..c86283700 Binary files /dev/null and b/doc/devel/uml/fig130949.png differ diff --git a/doc/devel/uml/fig131077.png b/doc/devel/uml/fig131077.png new file mode 100644 index 000000000..eb1cfb2cf Binary files /dev/null and b/doc/devel/uml/fig131077.png differ diff --git a/doc/devel/uml/fig131205.png b/doc/devel/uml/fig131205.png new file mode 100644 index 000000000..04fc181b7 Binary files /dev/null and b/doc/devel/uml/fig131205.png differ diff --git a/doc/devel/uml/index.html b/doc/devel/uml/index.html index fc5d82659..95d9a7166 100644 --- a/doc/devel/uml/index.html +++ b/doc/devel/uml/index.html @@ -29,14 +29,14 @@ Documentation

Overview



This drawing shows the top level compoents and relations

Component CommonLib
-

provided classes : Time

+

provided classes : Error, Time

Component Builder

provided classes : StateProxy

-

required classes : Fixture, Session

+

required classes : Fixture, SessionImpl

Component Session
-

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

+

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

Component EDL
@@ -73,6 +73,11 @@ Documentation
Component RenderPathManager

provided classes : PathManager

+ +
Component MediaFactory
+

required classes : MediaAccessFacade

+ +
Component AssetDB

1.2 Component View interfaces

@@ -87,6 +92,12 @@ Documentation
Component ConManager

required classes : ParamProvider

+ +

+

backend-components



+ +
Component Media Access
+

provided classes : MediaAccessFacade

1.3 Package codegen

@@ -101,7 +112,7 @@ Documentation
Artifact Cinelerra3

Depends on common

Depends on gui

Depends on proc

Depends on backend

the main executable to be built

-

executable associated with : link, parameter, renderengine, allocation, vframe, arender, renderstate, label, glbuf, procnode, stateproxy, hub, buildable, abstractmo, nodecreatertool, projector, interpolator, edl, fixture, glpipe, vrender, exitnode, pathmanager, track, paramprovider, mask, main, conmanager, clip, meta, fixedplacement, relativeplacement, mobject, source, frame, placement, session, builderfacade, toolfactory, controllerfacade, processor, pluginadapter, effect, tool, segmentationtool, aframe, assembler, trafo, explicitplacement, auto, glrender

+

executable associated with : exitnode, pathmanager, track, paramprovider, mask, main, conmanager, clip, meta, fixedplacement, relativeplacement, vrender, mobject, source, frame, placement, sessionimpl, builderfacade, controllerfacade, processor, pluginadapter, effect, tool, segmentationtool, aframe, assembler, trafo, explicitplacement, auto, glrender, link, parameter, renderengine, allocation, vframe, toolfactory, arender, renderstate, label, glbuf, procnode, stateproxy, hub, buildable, abstractmo, nodecreatertool, projector, interpolator, edl, fixture, glpipe

Artifact main

Artifact source

@@ -139,11 +150,17 @@ Documentation

1.3.3 Package backend

sourcecode package

Data backend classes here...

1.3.3.1 Deployment View gen

+
+ +
Artifact mediaaccessfacade
+

functions for querying media file and channels.

+

Artifact source associated with : MediaAccessFacade

+

1.3.4 Package proc

@@ -197,7 +214,7 @@ Documentation
Artifact media

key abstraction: media-like assets

-

Artifact source associated with : Media

+

Artifact source associated with : Media, MediaFactory

Artifact proc

key abstraction: media-like assets

@@ -214,6 +231,10 @@ Documentation
Artifact clip

bookkeeping (asset) view of a media clip.

Artifact source associated with : Clip

+ +
Artifact compoundmedia
+

a special clip as a compound of several elementary media tracks,
e.g. the individual media streams found in one media file

+

Artifact source associated with : CompoundMedia

Artifact preview

alternative version of the media data, probably with lower resolution

@@ -238,6 +259,18 @@ Documentation
Artifact track

structural asset holding the configuration of a track in the EDL

Artifact source associated with : Track

+ +
Artifact procpatt
+

template for building some render processing network

+

Artifact source associated with : ProcPatt

+ +
Artifact buildinstruct
+

Instructions for building some configuration of render nodes.

+

Artifact source associated with : BuildInstruct, DoRecurse, DoAttach

+ +
Artifact db
+

registry holding known Asset instances.

+

Artifact source associated with : DB

@@ -250,6 +283,10 @@ Documentation

1.3.4.3.1 Deployment View gen

defines source files to be generated by BOUML

+ +
Artifact session
+

Interface: the session edited by the user

+

Artifact source associated with : Session

Artifact mobject

Key Abstraction: A Media Object in the Session

@@ -294,9 +331,13 @@ Documentation

defines source files to be generated by BOUML

-
Artifact session
-

holds the complete session to be edited by the user

-

Artifact source associated with : Session

+
Artifact sessionimpl
+

holds the complete session data to be edited by the user

+

Artifact source associated with : SessionImpl

+ +
Artifact sessmanager
+

global session access and lifecycle

+

Artifact source associated with : SessManager

Artifact edl

the (high level) Edit Decision List within the current Session

@@ -321,6 +362,14 @@ Documentation
Artifact clip

a Media Clip

Artifact source associated with : Clip

+ +
Artifact simpleclip
+

Elementary clip (single media stream only)

+

Artifact source associated with : SimpleClip

+ +
Artifact compoundclip
+

compound of several clips (multichannel)

+

Artifact source associated with : CompoundClip

Artifact effect

EDL representation of a pluggable and automatable effect.

@@ -331,7 +380,7 @@ Documentation

Artifact source associated with : Meta

Artifact fixedplacement
-

Artifact source associated with : DirectPlacement

+

Artifact source associated with : FixedPlacement

Artifact relativeplacement

Placement implemnetaion providing various ways of attaching a MObject to another one

@@ -517,7 +566,7 @@ Documentation

2 Package ProcessingLayer

-

2.1 Package AssetManager

+

2.1 Package Asset

2.1.1 Class View Assets

@@ -528,9 +577,17 @@ Documentation

Media-Asset Relations



+ +

+

Proc-Asset Relations



+ +

+

Struct-Asset Relations



Class Asset
Class Media
+
+
Class Proc
Class Struct
Class Meta
@@ -542,7 +599,12 @@ Documentation
Class Codec
Class Track
Class OutPort
+
Class ProcPatt
Class Dataset
+
Class DB
+
+
Class DoAttach
+
Class DoRecurse
@@ -554,7 +616,9 @@ Documentation

Session structure



-
Class Session
+
Class Session
+
+
Class EDL
Class Fixture
Class Segment
@@ -564,9 +628,11 @@ Documentation
Class Clip
+
+
Class Effect
Class Meta
-
+
Class Label
@@ -970,11 +1036,36 @@ reuse exiting Engine

Selection :

Transformation

3 Package BackendLayer

+ +

3.1 Class View Interface

+
+ +

+

interface components



+
+
+ +

3.2 Use Case View usage

+
+ +

+

backend use cases



+ +

3.2.1 Use Case load Media

+
+
+ +

3.2.2 Use Case access File

+ +

3.2.3 Use Case detect Channels

+ +

3.2.4 Use Case access Channel

+
-

3.1 Package design

+

3.3 Package design

-

3.1.1 Class View Backend Components

+

3.3.1 Class View Backend Components

@@ -995,15 +1086,15 @@ reuse exiting Engine

Selection :

    Transformation
    -

    3.1.1.1 Activity get frame

    +

    3.3.1.1 Activity get frame

    Pre Condition :

      Post Condition :

        -

        3.2 Component View Cache

        +

        3.4 Component View Cache

        -

        3.3 Component View FileMapping

        +

        3.5 Component View FileMapping

        4 Package GUI

        diff --git a/doc/devel/uml/index_60.html b/doc/devel/uml/index_60.html index cc286ecf2..0a78be5d0 100644 --- a/doc/devel/uml/index_60.html +++ b/doc/devel/uml/index_60.html @@ -17,8 +17,8 @@ - + @@ -28,10 +28,10 @@ - - + + diff --git a/doc/devel/uml/index_65.html b/doc/devel/uml/index_65.html index aba7859ea..28aa29de6 100644 --- a/doc/devel/uml/index_65.html +++ b/doc/devel/uml/index_65.html @@ -19,6 +19,8 @@ + + @@ -38,20 +40,21 @@ + + - - + - - + + diff --git a/doc/devel/uml/index_66.html b/doc/devel/uml/index_66.html index 13b6639cd..5ed3d76c4 100644 --- a/doc/devel/uml/index_66.html +++ b/doc/devel/uml/index_66.html @@ -19,6 +19,8 @@ + + @@ -39,6 +41,8 @@ + +
        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
        <flow>transition
        <flow>transition
        <flow>transition
        NameKindDescription
        abstractmoartifactabstract base class for all Media Objects
        AbstractMOclass
        access Channeluse case
        access Fileuse case
        activity finalactivity final
        activity finalactivity final
        AFrameclass
        AssetclassSuperinterface describing especially the bookeeping properties of Assets
        assetartifactSuperinterface: bookeeping view of "things" present in the session
        assetpackagesourcecode package

        Asset Management
        Assetpackage
        Asset Kindsclass diagram
        AssetDBcomponent
        AssetManagementcomponent
        AssetManagerclassFacade for the Asset subsystem
        assetmanagerartifactFacade for the Asset subsystem
        AssetManagerpackage
        Assetsclass view
        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
        audio1class instance
        audio1class instance
        audio1class instance
        autoartifactMedia Object holding automation data
        AutoclassAutomation data for some parameter (i.e. a time varying function)
        Automation Entitiesclass diagram
        NameKindDescription
        backendpackagesourcecode package

        Data backend classes here...
        Backend Componentsclass view
        backend use casesuse case diagram
        backend-componentscomponent diagram
        BackendLayerpackage
        buildoperation
        build flowactivity diagram
        BuilderFacadeclassProvides 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
        builderfacadeartifactFacade and service access point for the Builder Subsystem
        building the Engineactivity
        BuildInstructclass(Interface) building instructions to be executed by the Builder on the render node network under construction.
        buildinstructartifactInstructions for building some configuration of render nodes.
        buildProcessoroperation
        diff --git a/doc/devel/uml/index_67.html b/doc/devel/uml/index_67.html index 2db26987f..dc1b39579 100644 --- a/doc/devel/uml/index_67.html +++ b/doc/devel/uml/index_67.html @@ -27,24 +27,25 @@ checked_outrelationthis list keeps all mappings which are in use, and thus prevents them from Cache aging Cinelerra3artifactthe main executable to be built cinelerra3package -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 +class instanceclass instance +class instanceclass instance +class instanceclass instance +class instanceclass instance +class instanceclass instance +class instanceclass instance +class instanceclass instance +clearoperationclear current session contents
        without resetting overall session config.
        Afterwards, the session will contain only one
        empty EDL, while all Assets are retained.
        Clipclassbookkeeping (asset) view of a media clip. clipartifacta Media Clip clipartifactbookkeeping (asset) view of a media clip. @@ -59,6 +60,11 @@ CommonLibcomponent CommonLibpackage complete Render Engineactivity object +componentsrelation +compoundclipartifactcompound of several clips (multichannel) +CompoundClipclassClip MObject which is actually a compound of several elementary clips,
        e.g. the several streams found within multichannels media. +CompoundMediaclasscompound of several elementary media tracks,
        e.g. the individual media streams found in one media file +compoundmediaartifacta special clip as a compound of several elementary media tracks,
        e.g. the individual media streams found in one media file ConditionclassI provided a reworked Condition class in my cinelerra2 repository Configclass configureoperation @@ -70,14 +76,17 @@ connectopaque activity action Constraintclass Controllercomponent -Controllerpackage controllerpackagesourcecode package

        The Processing and Render Controller,
        located within the MObject Subsystem +Controllerpackage 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 +createClipoperationcreate a (possibly compound) Clip refering to this media, ready to be added to the EDL. +currEDLoperationThe EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands. +currentrelationStandard access path to get at the current session via the Session Manager, which acts as a "PImpl" smart pointer currFramerelation diff --git a/doc/devel/uml/index_68.html b/doc/devel/uml/index_68.html index d35b2ba3d..cdeda3e68 100644 --- a/doc/devel/uml/index_68.html +++ b/doc/devel/uml/index_68.html @@ -20,16 +20,20 @@ Datasetclassmeta asset describing a collection of control data datasetartifactmeta asset describing a collection of control data datasrcrelationThe predecessor in a processing pipeline, i.e. a source to get data to be processed +DBclassImplementation of the registry holding all Asset instances known to the Asset Manager subsystem. As of 8/2007 implemented by a hashtable. +dbartifactregistry holding known Asset instances. define segmentopaque activity action descriptorrelationtype of this frame descriptorrelation designpackage designpackageAll things concering the big picture.
        Not a real code package, rather a container for design drafts, specifications, decisions. +detect Channelsuse case determine Render Paramsexpansion region determine Render Paramsopaque activity action devnullclass instance -DirectPlacementclass Dispatchercomponent +DoAttachclass +DoRecurseclass diff --git a/doc/devel/uml/index_69.html b/doc/devel/uml/index_69.html index caf706b98..20380e20a 100644 --- a/doc/devel/uml/index_69.html +++ b/doc/devel/uml/index_69.html @@ -24,8 +24,8 @@ 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 EffectclassEffect or media processing component -effectartifactEffect or media processing component effectartifactEDL representation of a pluggable and automatable effect. +effectartifactEffect or media processing component Effectclass elementsrelationrelevant MObjects comprising this segment. TODO: actually necessary?? enableoperationchange the enabled status of this asset. Note the corresponding #isActive predicate may depend on the enablement status of parent assets as well diff --git a/doc/devel/uml/index_70.html b/doc/devel/uml/index_70.html index e83866113..94fe56f77 100644 --- a/doc/devel/uml/index_70.html +++ b/doc/devel/uml/index_70.html @@ -30,10 +30,11 @@ FileReferenceclass filesrelation fixedplacementartifact +FixedPlacementclass Fixtureactivity object fixtureartifactthe (low level) representation of the EDL with concrete placement data -Fixtureclass Fixturecomponent +Fixtureclass fixturerelation fork activity nodefork activity node FrameclassFrames are just a low level lump of continous memory, most parts are opaque. Frames are memory sensitive, they will be small constant sized structures which can be efficently managed in a pool. diff --git a/doc/devel/uml/index_71.html b/doc/devel/uml/index_71.html index be8d16dcd..23b81058d 100644 --- a/doc/devel/uml/index_71.html +++ b/doc/devel/uml/index_71.html @@ -35,7 +35,9 @@ getAutomationoperation getConnectionoperationTODO getDependantoperationAll the other assets requiring this asset to be functional. For example, all the clips depending on a given media file. May be empty. The dependency relation is transitive. +getFixtureoperationWhile the session can be comprised of several EDLs,
        there is only one Fixture, which represents the actual
        configuration of all Objects to be rendered getFrameoperationmode = READ, WRITE, ... +getIDoperation getParentsoperationList of entities this asset depends on or requires to be functional. May be empty. The head of this list can be considered the primary prerequisite getPlaylistForRenderoperation getStateProxyoperation diff --git a/doc/devel/uml/index_72.html b/doc/devel/uml/index_72.html index 7273d52e0..58b669cd2 100644 --- a/doc/devel/uml/index_72.html +++ b/doc/devel/uml/index_72.html @@ -21,6 +21,7 @@ handlesrelation 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. Hierarchyclass diagramCinelerra Exception hierarchy +howtoProcoperation@return descriptor how to build a render pipeline corresponding to this media Hubclass hubartifactspecial ProcNode used to build data distributing connections HUEclass instance diff --git a/doc/devel/uml/index_73.html b/doc/devel/uml/index_73.html index f6ab37369..0f82f3fd9 100644 --- a/doc/devel/uml/index_73.html +++ b/doc/devel/uml/index_73.html @@ -20,10 +20,13 @@ idattributeAsset primary key. In Memory Databaseclass diagram inFixtureactivity action pin -inputclass instance -inputclass instance inputclass instance +inputclass instance +inputclass instance instanceoperation +instructionsrelation +Interfaceclass view +interface componentsclass diagram 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 diff --git a/doc/devel/uml/index_76.html b/doc/devel/uml/index_76.html index ddbe5c66d..8fa1f472c 100644 --- a/doc/devel/uml/index_76.html +++ b/doc/devel/uml/index_76.html @@ -23,6 +23,8 @@ lengthattributeduration (span) of this timeline segment. Linkclass linkartifactforwarding, adapting or connecting ProcNode +loadoperationreplace the current session by a new
        session loaded from serialized state. +load Mediause case Lockclass Lockclass Logicclass diff --git a/doc/devel/uml/index_77.html b/doc/devel/uml/index_77.html index 1219f0f58..d83661f51 100644 --- a/doc/devel/uml/index_77.html +++ b/doc/devel/uml/index_77.html @@ -24,11 +24,16 @@ maskartifactVideo ProcNode for masking regions of the image (automatable) Mediaclasskey abstraction: media-like assets mediaartifactkey abstraction: media-like assets +Media Accesscomponent Media-Asset Relationsclass diagram +mediaaccessfacadeartifactfunctions for querying media file and channels. +MediaAccessFacadeclassprovides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions +MediaFactorycomponent +MediaFactoryclassspecialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well merge activity nodemerge activity node Metaclasskey abstraction: metadata and organisational asset -metaartifactabstract base class of all MObjects representing meta data or processing instructions metaartifactkey abstraction: metadata and organisational asset +metaartifactabstract base class of all MObjects representing meta data or processing instructions Metaclass mobjectartifactKey Abstraction: A Media Object in the Session mobjectpackagesourcecode package

        MObject Subsystem
        including the Session (EDL), Builder and Processing Controller diff --git a/doc/devel/uml/index_78.html b/doc/devel/uml/index_78.html index 876afc08d..d4d5daa81 100644 --- a/doc/devel/uml/index_78.html +++ b/doc/devel/uml/index_78.html @@ -20,6 +20,7 @@ nameattributeelement ID, comprehensible but sanitized. The tuple (category, name, org) is unique. nodecreatertoolartifactcentral Tool implementing the Renderengine building NodeCreatorToolclassThis 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. +nodesrelation diff --git a/doc/devel/uml/index_79.html b/doc/devel/uml/index_79.html index 2a52fbc5c..863a630ae 100644 --- a/doc/devel/uml/index_79.html +++ b/doc/devel/uml/index_79.html @@ -19,9 +19,9 @@ NameKindDescription offsetattributeOffset the actual position by this (time) value relative to the anchor point. TODO: Representation? orgattributeorigin or authorship id. Can be a project abbreviation, a package id or just the authors nickname or UID. This allows for the compnent name to be more generic (e.g. "blur"). Default for all assets provided by the core cinelerra-3 codebase is "cin3". -ouputclass instance -ouputclass instance ouputclass instance +ouputclass instance +ouputclass instance OutPortclassstructural asset corresponding to some port generating media output outportartifactstructural asset corresponding to some port generating media output outputrelation diff --git a/doc/devel/uml/index_80.html b/doc/devel/uml/index_80.html index 2a0a4cf37..d7038cb97 100644 --- a/doc/devel/uml/index_80.html +++ b/doc/devel/uml/index_80.html @@ -34,6 +34,7 @@ PluginAdapterclassAdapter used to integrage an effects processor in the render pipeline pluginadapterartifactAdapter for integrating various Effect processors in the render pipeline pnodenode +pointattributeidentifying the point where the nodes should be attached Posix Threads Abstractionclass viewC++ wrapers for pthreads Prefetchclass Previewclassalternative version of the media data, probably with lower resolution @@ -43,6 +44,7 @@ procnode procartifactkey abstraction: media-like assets procattributeholds the Processor (Render Engine Element) to be built by the current build step +Proc-Asset Relationsclass diagram proc-componentscomponent diagram ProcessingLayerpackage Processorclass @@ -50,6 +52,8 @@ ProcNodecomponent ProcNodeclassKey abstraction of the Render Engine: A Data processing Node procnodeartifactKey abstraction of the Render Engine: a Processing Node +ProcPattclassspecial type of structural Asset representing information how to build some part of the render engine's processing nodes network. +procpattartifacttemplate for building some render processing network ProjectorclassSpecial video processing node used to scale and translate image data. projectorartifactvideo ProcNode for scaling and translating image data providerrelation diff --git a/doc/devel/uml/index_82.html b/doc/devel/uml/index_82.html index 84c63934b..40cc37dd5 100644 --- a/doc/devel/uml/index_82.html +++ b/doc/devel/uml/index_82.html @@ -18,7 +18,8 @@ - + + @@ -35,6 +36,7 @@ +
        NameKindDescription
        refPointclass instance
        registeroperationregisters an asset object in the internal DB, providing its unique key
        regoperationregisters an asset object in the internal DB, providing its unique key
        registryrelation@internal Table or DB holding all registered asset instances.
        relativeplacementartifactPlacement implemnetaion providing various ways of attaching a MObject to another one
        RelativePlacementclass
        relTypeattributethe kind of relation denoted by this Placement
        RenderStateclassEncapsulates the logic used to get a "current render process" in accordance to the currentyl 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.
        renderstateartifactrenderengine state manager
        reprattributehuman readable representation of the condition characterizing this allocaton, e.g. "t >= 10"
        resetoperationreset all session config and
        start with a pristine default session.
        resolveoperationcreate an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.
        rootCauseoperationIf this exception was caused by a chain of further exceptions,
        return the first one registered in this throw sequence.
        This works only, if every exceptions thrown as a consequence
        of another exception is propperly constructed by passing
        the original exception to the constructor
        diff --git a/doc/devel/uml/index_83.html b/doc/devel/uml/index_83.html index dc307832f..847982657 100644 --- a/doc/devel/uml/index_83.html +++ b/doc/devel/uml/index_83.html @@ -18,6 +18,7 @@ + @@ -29,18 +30,24 @@ - - + - + + + + + + + + + - @@ -54,7 +61,9 @@ + +
        NameKindDescription
        SAMETIMEattributeplace subject at the sime time as the anchor
        saveoperationcreate a complete, serialized representation
        of the current session config and contents.
        @todo how to serialize, prameters, return value?
        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
        segmentsrelationthe partitioning of the Timeline to be created by this tool.
        Service Componentsclass view
        Sessioncomponent
        sessionartifactholds the complete session to be edited by the user
        Sessionclass view
        sessionartifactInterface: the session edited by the user
        sessionpackagesourcecode package

        Everything concerning the EDL and Session, within the MObject Subsystem
        Sessionclass
        Sessionclass view
        SessionclassPrimary Interface for all editing tasks.
        The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered.
        Session structureclass diagram
        sessionimplartifactholds the complete session data to be edited by the user
        SessionImplclassImplementation class for the Session interface
        sessmanagerartifactglobal session access and lifecycle
        SessManagerclass
        setup Build Paramsopaque activity action
        setup StateProxyopaque activity action
        shortDescattributeuser visible Name-ID. To be localized.
        simpleclipartifactElementary clip (single media stream only)
        SimpleClipclassElementary clip consisting of only one media stream
        SmartPointerclass
        SmartPointersclass view
        sourcerelationthe media source this clip referes to
        sourcerelationmedia source of this clip
        sourcerelationthe media source this clip referes to
        SourceclassSource Node: represents a media source to pull data from.
        sourceartifactRepresentation of a Media source
        Source Overviewdeployment diagram
        std::exceptionclass
        Structclasskey abstraction: structural asset
        structartifactkey abstraction: structural asset
        Struct-Asset Relationsclass diagram
        subjectrelation
        subPatternrelation
        diff --git a/doc/devel/uml/index_84.html b/doc/devel/uml/index_84.html index 044cdcb55..98fe8201c 100644 --- a/doc/devel/uml/index_84.html +++ b/doc/devel/uml/index_84.html @@ -35,17 +35,18 @@ trackartifactstructural asset holding the configuration of a track in the EDL trackartifactdescriptor for one track in the Session Trackclass +tracksrelationelementary media assets comprising this compound tracksrelation tracksrelation Trafoclass trafoartifacttransforming processing Node treatoperation +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_85.html b/doc/devel/uml/index_85.html index b5f26dfb9..6075e15d1 100644 --- a/doc/devel/uml/index_85.html +++ b/doc/devel/uml/index_85.html @@ -19,6 +19,7 @@ NameKindDescription Unknownclassplaceholder for unknown or unavailable media source unknownartifactplaceholder for unknown or unavailable media source +usageuse case view useFileoperationAnnounces that the application intends to use this file with mode (READ|WRITE|READWRITE) useTemporaryStorageoperationProvides a pool for interminate frames diff --git a/doc/devel/uml/index_86.html b/doc/devel/uml/index_86.html index 1ca19fe37..4eb1f6d88 100644 --- a/doc/devel/uml/index_86.html +++ b/doc/devel/uml/index_86.html @@ -20,23 +20,23 @@ versionattributeversion number of the thing or concept represented by this asset. Of each unique tuple (name, category, org) there will be only one version in the whole system. Version 0 is reserved for internal purposes. Versions are considered to be ordered, and any higher version is supposed to be fully backwards compatible to all previous versions. VFrameclass vframeartifacta buffer and render process holding a Video frame -vid1class instance vid1class instance +vid1class instance +vid_Aclass instance vid_Aclass instance vid_aclass instance -vid_Aclass instance -vid_Aclass instance vid_aclass instance -videoclass instance -videoclass instance +vid_Aclass instance videoclass instance +videoclass instance videoclass instance +videoclass instance +video1class instance +video1class 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/doc/devel/uml/index_87.html b/doc/devel/uml/index_87.html index 4af6e38d9..cdf4db578 100644 --- a/doc/devel/uml/index_87.html +++ b/doc/devel/uml/index_87.html @@ -19,6 +19,7 @@ NameKindDescription whatoperation whatoperationthe base class of all exceptions thrown by the standard library +wiringTemplaterelation Wishclass write_bufferrelation WriteBufferclass diff --git a/doc/devel/uml/navig.html b/doc/devel/uml/navig.html index 2bdbe6770..1d6f86b34 100644 --- a/doc/devel/uml/navig.html +++ b/doc/devel/uml/navig.html @@ -9,7 +9,7 @@


        -

        -Top- -Classes- -Public Operations- -Public properties- -Packages- -Activities- -Class Diagrams- -Object Diagrams- -Activity Diagrams- -Collaboration Diagrams- -Component Diagrams- -Deployment Diagrams-

        +

        -Top- -Classes- -Public Operations- -Public properties- -Packages- -Use Cases- -Activities- -Class Diagrams- -Object Diagrams- -Activity Diagrams- -Use Case Diagrams- -Collaboration Diagrams- -Component Diagrams- -Deployment Diagrams-

        < A B C D E F G H I K L M N O P R S T U V W

        diff --git a/doc/devel/uml/packages.html b/doc/devel/uml/packages.html index 80440f99d..0a87e3bd1 100644 --- a/doc/devel/uml/packages.html +++ b/doc/devel/uml/packages.html @@ -17,7 +17,7 @@ - + diff --git a/doc/devel/uml/public_operations.html b/doc/devel/uml/public_operations.html index 45b6f8e10..3143920e2 100644 --- a/doc/devel/uml/public_operations.html +++ b/doc/devel/uml/public_operations.html @@ -21,7 +21,10 @@ + + + @@ -29,27 +32,32 @@ + + + + - + + - + diff --git a/doc/devel/uml/public_properties.html b/doc/devel/uml/public_properties.html index 5c6c3f844..6790afee8 100644 --- a/doc/devel/uml/public_properties.html +++ b/doc/devel/uml/public_properties.html @@ -18,9 +18,12 @@
        assetsrcsourcecode package

        Asset Management
        AssetManager
        Asset
        backendsrcsourcecode package

        Data backend classes here...
        BackendLayer
        Builder
        buildAssembler
        buildEngineBuilderFacadeMain Operation of the Builder: create a render engine for a given part of the timeline
        buildProcessorPathManager
        clearSessManagerclear current session contents
        without resetting overall session config.
        Afterwards, the session will contain only one
        empty EDL, while all Assets are retained.
        configureToolFactory
        createClipMediacreate a (possibly compound) Clip refering to this media, ready to be added to the EDL.
        currEDLSessionThe EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands.
        enableAssetchange the enabled status of this asset. Note the corresponding #isActive predicate may depend on the enablement status of parent assets as well
        getAppconfigaccess the configuation value for a given key.
        @return empty string for unknown keys, else the corresponding configuration value
        get_reprAllocation
        getAutomationFixture
        getConnectionConManagerTODO
        getDependantAssetAll the other assets requiring this asset to be functional. For example, all the clips depending on a given media file. May be empty. The dependency relation is transitive.
        getFixtureSessionWhile the session can be comprised of several EDLs,
        there is only one Fixture, which represents the actual
        configuration of all Objects to be rendered
        getFrameFilemode = READ, WRITE, ...
        getIDAssetManager
        getParentsAssetList of entities this asset depends on or requires to be functional. May be empty. The head of this list can be considered the primary prerequisite
        getPlaylistForRenderFixture
        getStateProxyRenderState
        getValueAuto
        getValueParameter
        getValueParamProvider
        howtoProcMedia@return descriptor how to build a render pipeline corresponding to this media
        isActiveAssetweather this asset is swithced on and consequently included in the fixture and participates in rendering
        knownAssetManager@return true if the given id is registered in the internal asset DB
        loadSessManagerreplace the current session by a new
        session loaded from serialized state.
        playRenderEngineTODO: will probably be handled differently (see Cehteh)
        registerAssetManagerregisters an asset object in the internal DB, providing its unique key
        removeAssetManagerremove the given asset <i>together with all its dependants</i> from the internal DB
        resetSessManagerreset all session config and
        start with a pristine default session.
        resolvePlacementcreate an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.
        rootCauseErrorIf this exception was caused by a chain of further exceptions,
        return the first one registered in this throw sequence.
        This works only, if every exceptions thrown as a consequence
        of another exception is propperly constructed by passing
        the original exception to the constructor
        saveSessManagercreate a complete, serialized representation
        of the current session config and contents.
        @todo how to serialize, prameters, return value?
        treatNodeCreatorTool
        treatNodeCreatorTool
        treatNodeCreatorTool
        treatNodeCreatorTool
        treatSegmentationTool
        treatSegmentationTool
        treatSegmentationTool
        treatSegmentationTool
        treatToolThis operation is to be overloaded for the specific MObject subclasses to be treated.
        useFileFileProviderAnnounces that the application intends to use this file with mode (READ|WRITE|READWRITE)
        useTemporaryStorageFileProviderProvides a pool for interminate frames
        + + +
        PropertyClassDescription
        categoryAssetprimary tree like classification of the asset
        currentSessionStandard access path to get at the current session via the Session Manager, which acts as a "PImpl" smart pointer
        idAssetAsset primary key.
        nameAssetelement ID, comprehensible but sanitized. The tuple (category, name, org) is unique.
        nodesDoAttach
        orgAssetorigin or authorship id. Can be a project abbreviation, a package id or just the authors nickname or UID. This allows for the compnent name to be more generic (e.g. "blur"). Default for all assets provided by the core cinelerra-3 codebase is "cin3".
        pointDoAttachidentifying the point where the nodes should be attached
        versionAssetversion number of the thing or concept represented by this asset. Of each unique tuple (name, category, org) there will be only one version in the whole system. Version 0 is reserved for internal purposes. Versions are considered to be ordered, and any higher version is supposed to be fully backwards compatible to all previous versions.
        diff --git a/doc/devel/uml/usecasediagrams.html b/doc/devel/uml/usecasediagrams.html new file mode 100644 index 000000000..62cd42a0e --- /dev/null +++ b/doc/devel/uml/usecasediagrams.html @@ -0,0 +1,22 @@ + + + + + + +Use Case Diagram Index + + + + + +
        Use Case Diagram Index
        +

        + + + + + +
        backend use cases
        + + diff --git a/doc/devel/uml/usecases.html b/doc/devel/uml/usecases.html new file mode 100644 index 000000000..d55241488 --- /dev/null +++ b/doc/devel/uml/usecases.html @@ -0,0 +1,25 @@ + + + + + + +Use Cases Index + + + + + +
        Use Cases Index
        +

        + + + + + + + + +
        access Channel
        access File
        detect Channels
        load Media
        + + diff --git a/src/backend/mediaaccessfacade.cpp b/src/backend/mediaaccessfacade.cpp new file mode 100644 index 000000000..9c86f82dc --- /dev/null +++ b/src/backend/mediaaccessfacade.cpp @@ -0,0 +1,63 @@ +/* + MediaAccessFacade - functions for querying media file and channels. + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "backend/mediaaccessfacade.hpp" + +#include "common/util.hpp" + +using util::isnil; +using cinelerra::error::Invalid; + +namespace backend_interface + { + + /** storage for the SingletonFactory + * (actually a cinelerra::test::MockInjector) */ + Singleton MediaAccessFacade::instance; + + + typedef MediaAccessFacade::FileHandle FileHandle; + typedef MediaAccessFacade::ChanHandle ChanHandle; + + FileHandle + MediaAccessFacade::queryFile (const char* name) throw(Invalid) + { + if (isnil (name)) + throw Invalid ("empty filename passed to MediaAccessFacade."); + + UNIMPLEMENTED ("delegate to backend: query accessability of file"); + return 0; + } + + + ChanDesc + MediaAccessFacade::queryChannel (FileHandle fhandle, uint chanNo) throw() + { + UNIMPLEMENTED ("delegate to backend: query channel information"); + ChanDesc nix; + return nix; + } + + + +} // namespace backend_interface diff --git a/src/backend/mediaaccessfacade.hpp b/src/backend/mediaaccessfacade.hpp new file mode 100644 index 000000000..faac58b63 --- /dev/null +++ b/src/backend/mediaaccessfacade.hpp @@ -0,0 +1,112 @@ +/* + MEDIAACCESSFACADE.hpp - functions for querying media file and channels. + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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 BACKEND_INTERFACE_MEDIAACCESSFACADE_H +#define BACKEND_INTERFACE_MEDIAACCESSFACADE_H + + +#include "common/singleton.hpp" +#include "common/error.hpp" + + + +namespace backend_interface + { + + struct ChanDesc; + + /****************************************************************** + * Interface to the backend layer: + * provides functions for querying (opening) a media file, + * detecting the channels or streams found within this file etc. + * Implemention delegating to the actual backend functions. + * + * convention: data passed by pointer is owned by the originator; + * it should be copied if needed byond the control flow + * of the invoked function. + */ + struct MediaAccessFacade + { + typedef void* FileHandle; + typedef void* ChanHandle; + + static Singleton instance; + + /** request for testing the denoted files accessability + * @param name path and filename of the media file. + * @throw invalid when passing empty filename + * @return opaque handle usable for querying channel + * information from this file, NULL if the + * file is not acessible. + */ + virtual FileHandle queryFile (const char* name) throw(cinelerra::error::Invalid); + + /** request for information about the n-th channel + * of the file refered by FileHandle. + * @return ChanDesc which may contain \c NULL values if + * the file doesn't contain this much channels. + * @todo throw or return NULL-ChanDesc if Filehandle is invalid? + */ + virtual ChanDesc queryChannel (FileHandle, uint chanNo) throw(); + + virtual ~MediaAccessFacade () {} + }; + + + /** + * Description of one channel found in a + * media file; result of querying the channel. + */ + struct ChanDesc + { + /** identifier which can be used to create a name + * for the media asset corresponding to this channel. + * May be NULL or empty and need not be unique. + */ + const char* chanID; + + /** identifier characterizing the access method (or codec) + * needed to get at the media data. This should be rather + * a high level description of the media stream type, + * e.g. "H264" -- anyhow, it will be used to find a + * codec asset for this channel. + */ + const char* codecID; + + /** opaque handle, which will be used later to open this + * channel and retrieve some frames from it + */ + MediaAccessFacade::ChanHandle handle; + + ChanDesc (const char* chanName=0, const char* codec=0, + MediaAccessFacade::ChanHandle h=0) + : chanID(chanName), + codecID(codec), + handle(h) + { } + }; + + + +} // namespace backend_interface +#endif diff --git a/src/common/multithread.hpp b/src/common/multithread.hpp index 9451ada05..c4a070104 100644 --- a/src/common/multithread.hpp +++ b/src/common/multithread.hpp @@ -25,6 +25,7 @@ #ifndef CINELERRA_MULTITHREAD_H #define CINELERRA_MULTITHREAD_H +#include "nobugcfg.h" namespace cinelerra diff --git a/src/common/singleton.hpp b/src/common/singleton.hpp index 5c9018f78..28100784d 100644 --- a/src/common/singleton.hpp +++ b/src/common/singleton.hpp @@ -1,5 +1,5 @@ /* - SINGLETON.hpp - template for implementing the singleton pattern + SINGLETON.hpp - configuration header for singleton factory Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -17,140 +17,36 @@ 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. - -==================================================================== -This code is heavily inspired by - The Loki Library (loki-lib/trunk/include/loki/Singleton.h) - Copyright (c) 2001 by Andrei Alexandrescu - This Loki code accompanies the book: - Alexandrescu, Andrei. "Modern C++ Design: Generic Programming - and Design Patterns Applied". - Copyright (c) 2001. Addison-Wesley. ISBN 0201704315 */ +/** @file singleton.hpp + ** Factory for creating Singleton instances. + ** This configuration header just pulls in some other implementation headers in + ** the right order. The basic class template for creating singletons resides in + ** singletonfactory.hpp, besides we need policy classes defining how to create + ** the singleton objects, how to manage lifecycle and multithreading. Finally, + ** we want to preconfigure singleton factories for some important facilities; + ** e.g. sometimes we want to include a hook for injecting Test Mock instances. + ** + ** You'll find the default Policies in singletonfactory.hpp and the default + ** definition of type cinelerra::singleton in singletonpreconfigure.hpp + ** + ** @see SingletonFactory + ** @see singleton::StaticCreate + ** @see singleton::AutoDestroy + ** @see singletontest.hpp + ** @see singletontestmocktest.hpp + */ #ifndef CINELERRA_SINGLETON_H #define CINELERRA_SINGLETON_H -#include "common/singletonpolicies.hpp" ///< several Policies usable together with singleton - -#include "common/util.hpp" -#include "nobugcfg.h" - -#include +#include "common/singletonpolicies.hpp" +#include "common/singletonfactory.hpp" +#include "common/singletonpreconfigure.hpp" -namespace cinelerra - { - - /** - * A configurable Template for implementing Singletons. - * Actually this is a Functor object, which could be placed into a static field - * of the Singleton (target) class or used directly. - * @note internally uses static fields, so all functor instances share pInstance_ - */ - template - < class SI, // the class to make Singleton - template class Create = singleton::Static, // how to create/destroy the instance - template class Life = singleton::Automatic, // how to manage Singleton Lifecycle - template class Threading = singleton::IgnoreThreadsafety //TODO use Multithreaded!!! - > - class Singleton - { - typedef typename Threading::VolatileType SType; - typedef typename Threading::Lock ThreadLock; - static SType* pInstance_; - static bool isDead_; - - public: - /** Interface to be used by Singleton's clients. - * Manages internally the instance creation, lifecycle - * and access handling in a multithreaded context. - * @return "the" single instance of class S - */ - SI& operator() () - { - if (!pInstance_) - { - ThreadLock guard SIDEEFFECT; - if (!pInstance_) - { - if (isDead_) - { - Life::onDeadReference(); - isDead_ = false; - } - pInstance_ = Create::create(); - Life::scheduleDelete (&destroy); - } } - ENSURE (pInstance_); - ENSURE (!isDead_); - return *pInstance_; - } - - private: - /** @internal helper used to delegate destroying the single instance - * to the Create policy, at the same time allowing the Life policy - * to control the point in the Application lifecycle when the - * destruction of this instance occures. - */ - static void destroy() - { - REQUIRE (!isDead_); - Create::destroy (pInstance_); - pInstance_ = 0; - isDead_ = true; - } - }; - - - // Storage for Singleton's static fields... - template - < class SI, - template class C, - template class L, - template class T - > - typename Singleton::SType* - Singleton::pInstance_; - - template - < class SI, - template class C, - template class L, - template class T - > - bool Singleton::isDead_; - - - -///// TODO: get rid of the static fields? -///// is tricky because of invoking the destructors. If we rely on instance vars, -///// the object may already have been released when the runtime system calls the -///// destructors of static objects at shutdown. - - /** @internal used to link together the Create policy and Life policy. - * @return a functor object for invoking this->destroy() */ -/* singleton::DelFunc getDeleter() - { - return boost::bind (&Singleton::destroy, - this); - } -*/ - -/* template - class DelFunc - { - typedef void (T::*Fp)(void); - T* t_; - Fp fun_; - public: - DelFunc (T* t, Fp f) : t_(t), fun_(f) {} - void operator() () { (t_->*fun_)(); } - }; -*/ -} // namespace cinelerra #endif diff --git a/src/common/singletonfactory.hpp b/src/common/singletonfactory.hpp new file mode 100644 index 000000000..b2143ef7a --- /dev/null +++ b/src/common/singletonfactory.hpp @@ -0,0 +1,160 @@ +/* + SINGLETONFACTORY.hpp - template for implementing the singleton pattern + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +==================================================================== +This code is heavily inspired by + The Loki Library (loki-lib/trunk/include/loki/Singleton.h) + Copyright (c) 2001 by Andrei Alexandrescu + This Loki code accompanies the book: + Alexandrescu, Andrei. "Modern C++ Design: Generic Programming + and Design Patterns Applied". + Copyright (c) 2001. Addison-Wesley. ISBN 0201704315 + +*/ + + + +#ifndef CINELERRA_SINGLETONFACTORY_H +#define CINELERRA_SINGLETONFACTORY_H + + +#include "common/singletonpolicies.hpp" ///< several Policies usable together with SingletonFactory + +#include "common/util.hpp" +#include "nobugcfg.h" + +//#include + + +namespace cinelerra + { + + /** + * A configurable Template for implementing Singletons. + * Actually this is a Functor object, which could be placed into a static field + * of the Singleton (target) class or used directly. + * @note internally uses static fields, so all functor instances share pInstance_ + */ + template + < class SI, // the class to make Singleton + template class Create = singleton::StaticCreate, // how to create/destroy the instance + template class Life = singleton::AutoDestroy, // how to manage Singleton Lifecycle + template class Threading = singleton::IgnoreThreadsafety //TODO use Multithreaded!!! + > + class SingletonFactory + { + typedef typename Threading::VolatileType SType; + typedef typename Threading::Lock ThreadLock; + static SType* pInstance_; + static bool isDead_; + + public: + /** Interface to be used by SingletonFactory's clients. + * Manages internally the instance creation, lifecycle + * and access handling in a multithreaded context. + * @return "the" single instance of class S + */ + SI& operator() () + { + if (!pInstance_) + { + ThreadLock guard SIDEEFFECT; + if (!pInstance_) + { + if (isDead_) + { + Life::onDeadReference(); + isDead_ = false; + } + pInstance_ = Create::create(); + Life::scheduleDelete (&destroy); + } } + ENSURE (pInstance_); + ENSURE (!isDead_); + return *pInstance_; + } + + private: + /** @internal helper used to delegate destroying the single instance + * to the Create policy, at the same time allowing the Life policy + * to control the point in the Application lifecycle when the + * destruction of this instance occures. + */ + static void destroy() + { + TRACE (singleton, "Singleton: triggering destruction"); + + REQUIRE (!isDead_); + Create::destroy (pInstance_); + pInstance_ = 0; + isDead_ = true; + } + }; + + + // Storage for SingletonFactory's static fields... + template + < class SI, + template class C, + template class L, + template class T + > + typename SingletonFactory::SType* + SingletonFactory::pInstance_; + + template + < class SI, + template class C, + template class L, + template class T + > + bool SingletonFactory::isDead_; + + + +///// TODO: get rid of the static fields? +///// is tricky because of invoking the destructors. If we rely on instance vars, +///// the object may already have been released when the runtime system calls the +///// destructors of static objects at shutdown. +///// It seems this would either cost us much of the flexibility or get complicated +///// to a point where we could as well implement our own Depenency Injection Manager. + + /** @internal used to link together the Create policy and Life policy. + * @return a functor object for invoking this->destroy() */ +/* SingletonFactory::DelFunc getDeleter() + { + return boost::bind (&SingletonFactory::destroy, + this); + } +*/ + +/* template + class DelFunc + { + typedef void (T::*Fp)(void); + T* t_; + Fp fun_; + public: + DelFunc (T* t, Fp f) : t_(t), fun_(f) {} + void operator() () { (t_->*fun_)(); } + }; +*/ +} // namespace cinelerra +#endif diff --git a/src/common/singletonpolicies.hpp b/src/common/singletonpolicies.hpp index a5d499c12..5f5624990 100644 --- a/src/common/singletonpolicies.hpp +++ b/src/common/singletonpolicies.hpp @@ -50,12 +50,12 @@ namespace cinelerra * Policy for creating the Singleton instance statically */ template - struct Static + struct StaticCreate { static S* create () { #ifdef DEBUG - static uint callCount (0); + static uint callCount = 0; ASSERT ( 0 == callCount++ ); #endif static char buff[sizeof(S)]; @@ -72,11 +72,13 @@ namespace cinelerra * Policy for creating the Singleton instance heap allocated */ template - struct Heap + struct HeapCreate { static S* create () { return new S; } static void destroy (S* pS) { delete pS; } }; + + @@ -87,7 +89,7 @@ namespace cinelerra * Policy relying on the compiler/runtime system for Singleton Lifecycle */ template - struct Automatic + struct AutoDestroy { /** implements the Singleton removal by calling * the provided deleter function(s) at application shutdown, diff --git a/src/common/singletonpreconfigure.hpp b/src/common/singletonpreconfigure.hpp new file mode 100644 index 000000000..3ffa46c64 --- /dev/null +++ b/src/common/singletonpreconfigure.hpp @@ -0,0 +1,112 @@ +/* + SINGLETONPRECONFIGURE - declare the configuration of some Singleton types in advance + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +*/ + +/** @file singletonpreconfigure.hpp + ** Preconfiguration of some Singleton types, done by template specialisation. + ** Typically the client code just includes singleton.h and uses the Singleton + ** type. But in some cases, we want to configure specific (dependency injection) + ** behaviour at a central location. At some point, we may well have a full blown + ** Dependency Manager, but for the moment using just some specialized Singleton + ** type for some instances seems sufficient. + ** + ** One Reason why one wants special Singleton behaviour is Testing: Without + ** altering the executable, for running some Tests we need to inject a Test Mock + ** in place of some Service Object, so we can verify the behaviour of the code + ** using this Service. For this, we mix cinelerra::test::MockInjector + ** into the actual Singleton type. + ** + ** @note we declare the specialisations into the target namespace + ** + ** @see SingletonFactory + ** @see singletontestmocktest.hpp + */ + + +#ifndef CINELERRA_SINGLETONPRECONFIGURE_H +#define CINELERRA_SINGLETONPRECONFIGURE_H + +#include "common/test/mockinjector.hpp" + + +namespace cinelerra + { + /** + * Default Singleton configuration + * @note all Policy template parameters taking default values + */ + template + class Singleton + : public SingletonFactory + { } + ; + + + /* ********************************************************************** */ + /* Forward declarations of all Classes we want to specialize the template */ + /* ********************************************************************** */ + + namespace test + { + class TestSingletonO; + using cinelerra::Singleton; + + } // namespace test +} // namespace cinelerra + +namespace backend_interface + { + class MediaAccessFacade; + using cinelerra::Singleton; + +} // namespace backend_interface + + + + + + /* ************************** */ + /* Specialisation Definitions */ + /* ************************** */ + +namespace cinelerra + { + + using test::MockInjector; + + + template<> + class Singleton + : public MockInjector + { }; + + + template<> + class Singleton + : public MockInjector + { }; + +} // namespace cinelerra + + + + +#endif diff --git a/src/common/test/mockinjector.hpp b/src/common/test/mockinjector.hpp new file mode 100644 index 000000000..2bd20f25a --- /dev/null +++ b/src/common/test/mockinjector.hpp @@ -0,0 +1,94 @@ +/* + MOCKINJECTOR.hpp - replacement singleton factory for injecting Test-Mock objects + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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_TEST_MOCKINJECTOR_H +#define CINELERRA_TEST_MOCKINJECTOR_H + + +#include "common/singletonfactory.hpp" + +#include + + +namespace cinelerra + { + namespace test + { + using boost::scoped_ptr; + + /** + * Special SingletonFactory allowing to inject some instance of the Singleton + * class, thus shaddowing "the" (default) Singleton instance temporarily. + * This allows installing a Mock Subclass of the Singleton for running tests, + * while the Singleton can be used as usual in production code. + * @note we use the default policies or SingletonFactory + */ + template + class MockInjector : public SingletonFactory + { + scoped_ptr mock_; + + public: + /** Overwriting the normal Singleton creation Interface + * to return some mock if defined, falling back to the + * default Singleton creation behaviour else. + */ + SI& operator() () + { + if (mock_) + return *mock_; + else + return SingletonFactory::operator() (); + } + + void injectSubclass (SI* mockobj) + { + TRACE_IF (mockobj, singleton, "Singleton: installing Mock object"); + TRACE_IF (!mockobj, singleton, "Singleton: removing Mock object"); + mock_.reset (mockobj); + } + + + MockInjector () {}; + + /** @note MockInjector singleton factory objects can be copied, + * but the copy will start out with clean internal state, + * i.e. exhibiting normal SingletonFactory behaviour + * without mock object. + */ + MockInjector (const MockInjector& other) + : SingletonFactory(other), mock_(0) { } + + MockInjector& operator= (const MockInjector& other) + { + return SingletonFactory::operator= (other); + } + }; + + + + } // namespace test + +} // namespace cinelerra +#endif diff --git a/src/common/test/suite.cpp b/src/common/test/suite.cpp index b2cfcfea8..8239141f6 100644 --- a/src/common/test/suite.cpp +++ b/src/common/test/suite.cpp @@ -203,7 +203,14 @@ namespace test std::cout << "TEST \""<second); VALID (test, i->first); - (*test)()->run(noCmdline); // run it to insert test generated output + try + { + (*test)()->run(noCmdline); // run it to insert test generated output + } + catch (...) + { + std::cout << "PLANNED ============= " << cinelerra_error() << "\n"; + } std::cout << "END\n"; } } diff --git a/src/common/time.hpp b/src/common/time.hpp index 3b8db7cfb..e434d27ed 100644 --- a/src/common/time.hpp +++ b/src/common/time.hpp @@ -33,10 +33,18 @@ namespace cinelerra /** * denotes a temporal position (time point), based on timeline start. * - * investigate posix.4 realtime timers, wrap these here + * @todo currently (9/07) this is a dummy implementation to find out + * what interface the Proc layer needs. Cehteh has already written + * elaborate timehandling functions in the backend and the goal + * is for class Time to be just a thin wrapper! */ class Time - {}; + { + int dummy; + public: + Time(int dum=0) : dummy(dum) {} + operator int () { return dummy; } + }; } // namespace cinelerra #endif diff --git a/src/common/util.hpp b/src/common/util.hpp index 82b29439e..3d74d4ed8 100644 --- a/src/common/util.hpp +++ b/src/common/util.hpp @@ -24,8 +24,10 @@ #ifndef UTIL_HPP_ #define UTIL_HPP_ +#include #include #include +#include #include "nobugcfg.h" ///////////////////TODO: just temporarily!!!! @@ -59,7 +61,6 @@ namespace util return !pContainer || pContainer->empty(); } - template <> inline bool isnil (const char* pCStr) { @@ -83,6 +84,24 @@ namespace util return map.find(key) != map.end(); } + /** shortcut for set value containment test */ + template + inline bool + contains (std::set& set, const T& val) + { + return set.end() != set.find (val); + } + + /** shortcut for brute-force containment test + * in any sequencial container */ + template + inline bool + contains (SEQ& cont, typename SEQ::value_type& val) + { + typename SEQ::iterator end = cont.end(); + return end != std::find(cont.begin(),end, val); + } + /** shortcut for operating on all elements of a container. * Isn't this already defined somewhere? It's so obvious.. diff --git a/src/nobugcfg.h b/src/nobugcfg.h index bca0108b4..c16a569c0 100644 --- a/src/nobugcfg.h +++ b/src/nobugcfg.h @@ -50,6 +50,7 @@ /* declare flags used throughout the code base... */ NOBUG_DECLARE_FLAG(config); NOBUG_DECLARE_FLAG(test); + NOBUG_DECLARE_FLAG(singleton); NOBUG_DECLARE_FLAG(assetmem); NOBUG_DECLARE_FLAG(mobjectmem); @@ -76,7 +77,8 @@ /* flags used throughout the code base... */ NOBUG_CPP_DEFINE_FLAG(config); NOBUG_CPP_DEFINE_FLAG(test); - NOBUG_CPP_DEFINE_FLAG_LIMIT(assetmem, LOG_WARNING); + NOBUG_CPP_DEFINE_FLAG_LIMIT(singleton, LOG_WARNING); + NOBUG_CPP_DEFINE_FLAG_LIMIT(assetmem, LOG_WARNING); NOBUG_CPP_DEFINE_FLAG_LIMIT(mobjectmem, LOG_WARNING); #include "common/error.hpp" diff --git a/src/proc/asset/buildinstruct.cpp b/src/proc/asset/buildinstruct.cpp new file mode 100644 index 000000000..b344d9ddf --- /dev/null +++ b/src/proc/asset/buildinstruct.cpp @@ -0,0 +1,35 @@ +/* + BuildInstruct - Instructions for building some configuration of render nodes. + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/asset/buildinstruct.hpp" +#include "proc/asset/procpatt.hpp" +#include "proc/asset/proc.hpp" + +namespace asset + { + + /** */ + + + +} // namespace asset diff --git a/src/proc/asset/buildinstruct.hpp b/src/proc/asset/buildinstruct.hpp new file mode 100644 index 000000000..5aef64eb4 --- /dev/null +++ b/src/proc/asset/buildinstruct.hpp @@ -0,0 +1,71 @@ +/* + BUILDINSTRUCT.hpp - Instructions for building some configuration of render nodes. + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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 ASSET_BUILDINSTRUCT_H +#define ASSET_BUILDINSTRUCT_H + +#include + +using std::string; + + + +namespace asset + { + + class Proc; + class ProcPatt; + + + /** + * (Interface) building instructions to be executed by the Builder + * on the render node network under construction. + */ + class BuildInstruct + { + }; + + + + class DoRecurse : public BuildInstruct + { + protected: + const ProcPatt* subPattern; + + }; + + + class DoAttach : public BuildInstruct + { + public: + const Proc* nodes; + + /** identifying the point where the nodes should be attached */ + const string point; + + }; + + + +} // namespace asset +#endif diff --git a/src/proc/asset/compoundmedia.cpp b/src/proc/asset/compoundmedia.cpp new file mode 100644 index 000000000..5cabaee22 --- /dev/null +++ b/src/proc/asset/compoundmedia.cpp @@ -0,0 +1,33 @@ +/* + CompoundMedia - multichannel media + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/asset/compoundmedia.hpp" + +namespace asset + { + + /** */ + + + +} // namespace asset diff --git a/src/proc/asset/compoundmedia.hpp b/src/proc/asset/compoundmedia.hpp new file mode 100644 index 000000000..62e4f4de0 --- /dev/null +++ b/src/proc/asset/compoundmedia.hpp @@ -0,0 +1,54 @@ +/* + COMPOUNDMEDIA.hpp - multichannel media + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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 ASSET_COMPOUNDMEDIA_H +#define ASSET_COMPOUNDMEDIA_H + +#include "proc/asset/media.hpp" + +#include + +using std::vector; + + + +namespace asset + { + + + /** + * compound of several elementary media tracks, + * e.g. the individual media streams found in one media file + */ + class CompoundMedia : public Media + { + protected: + /** elementary media assets comprising this compound */ + vector tracks; + + }; + + + +} // namespace asset +#endif diff --git a/src/proc/asset/db.hpp b/src/proc/asset/db.hpp index b9faa0a42..d2fd0d02f 100644 --- a/src/proc/asset/db.hpp +++ b/src/proc/asset/db.hpp @@ -86,7 +86,7 @@ namespace asset DB () : table() {} ~DB () {} - friend class cinelerra::singleton::Static; + friend class cinelerra::singleton::StaticCreate; public: diff --git a/src/proc/asset/media.cpp b/src/proc/asset/media.cpp index 437b30998..6be2d4f3b 100644 --- a/src/proc/asset/media.cpp +++ b/src/proc/asset/media.cpp @@ -25,6 +25,7 @@ #include "proc/asset/media.hpp" #include "proc/asset/clip.hpp" #include "proc/asset/unknown.hpp" +#include "proc/mobject/session/clip.hpp" #include "common/util.hpp" #include "nobugcfg.h" @@ -58,7 +59,34 @@ namespace asset } } - + + + + typedef shared_ptr PClip; + typedef shared_ptr PProcPatt; + + + PClip + Media::createClip () + { + UNIMPLEMENTED ("create clip from media asset"); + PClip clip; //TODO:null + + ENSURE (clip); + return clip; + } + + PProcPatt + Media::howtoProc () + { + UNIMPLEMENTED ("calculate and return processing pattern for media asset"); + PProcPatt ppatt; //TODO:null + + ENSURE (ppatt); + return ppatt; + } + + MediaFactory Media::create; ///< storage for the static MediaFactory instance diff --git a/src/proc/asset/media.hpp b/src/proc/asset/media.hpp index 350ba86f2..8349e1d69 100644 --- a/src/proc/asset/media.hpp +++ b/src/proc/asset/media.hpp @@ -22,8 +22,8 @@ /** @file media.hpp - ** Media data is a specific Kind of Asset. - ** For the different Kinds of Assets, we use sub-intefaces inheriting + ** Media data is a specific kind of Asset. + ** For the different kinds of Assets, we use sub-intefaces inheriting ** from the general Asset interface. To be able to get asset::Media instances ** directly from the AssetManager, we define a specialization of the Asset ID. ** @@ -40,11 +40,15 @@ +namespace mobject { namespace session { class Clip; }} + namespace asset { + class Clip; class Media; class MediaFactory; + class ProcPatt; template<> @@ -73,6 +77,9 @@ namespace asset return static_cast& > (Asset::getID()); } + shared_ptr createClip (); + shared_ptr howtoProc (); + protected: Media (const Asset::Ident& idi, const string& file) : Asset(idi), filename_(file) {} friend class MediaFactory; @@ -89,7 +96,7 @@ namespace asset /** - * Factory specialized for createing Media Asset objects. + * Factory specialized for creating Media Asset objects. */ class MediaFactory : public cinelerra::Factory { diff --git a/src/proc/asset/procpatt.cpp b/src/proc/asset/procpatt.cpp new file mode 100644 index 000000000..e1404e028 --- /dev/null +++ b/src/proc/asset/procpatt.cpp @@ -0,0 +1,34 @@ +/* + ProcPatt - template for building some render processing network + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/asset/procpatt.hpp" +#include "proc/asset/buildinstruct.hpp" + +namespace asset + { + + /** */ + + + +} // namespace asset diff --git a/src/proc/asset/procpatt.hpp b/src/proc/asset/procpatt.hpp new file mode 100644 index 000000000..9cf9db9d7 --- /dev/null +++ b/src/proc/asset/procpatt.hpp @@ -0,0 +1,56 @@ +/* + PROCPATT.hpp - template for building some render processing network + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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 ASSET_PROCPATT_H +#define ASSET_PROCPATT_H + +#include "proc/asset/struct.hpp" + +#include + +using std::vector; + + + +namespace asset + { + + class BuildInstruct; + + + /** + * special type of structural Asset + * representing information how to build some part + * of the render engine's processing nodes network. + */ + class ProcPatt : public Struct + { + protected: + const vector instructions; + + }; + + + +} // namespace asset +#endif diff --git a/src/proc/assetmanager.hpp b/src/proc/assetmanager.hpp index c677f6ef4..8afd1a53a 100644 --- a/src/proc/assetmanager.hpp +++ b/src/proc/assetmanager.hpp @@ -108,7 +108,7 @@ namespace asset AssetManager (); - friend class cinelerra::singleton::Static; + friend class cinelerra::singleton::StaticCreate; private: diff --git a/src/proc/mobject/mobject.hpp b/src/proc/mobject/mobject.hpp index 02a3345bc..b670d1e47 100644 --- a/src/proc/mobject/mobject.hpp +++ b/src/proc/mobject/mobject.hpp @@ -25,13 +25,20 @@ #define MOBJECT_MOBJECT_H #include +#include #include "cinelerra.h" #include "proc/mobject/buildable.hpp" +#include "proc/asset.hpp" // TODO finally not needed? using std::list; +using std::tr1::shared_ptr; +#include "proc/assetmanager.hpp" +using proc_interface::IDA; // TODO finally not needed? +using proc_interface::PAsset; //TODO: only temporarily +using proc_interface::AssetManager; namespace mobject { @@ -52,10 +59,18 @@ namespace mobject // TODO: how to represent time intervals best? Time length; - - list placement; + + virtual ~MObject() {}; + + public: + virtual shared_ptr& getPlacement () =0; + virtual PAsset getMedia () =0; ///< @todo solve the reference/Interface problem concerning Placements, then push down + virtual Time& getLength() =0; ///< @todo how to deal with the time/length field?? }; + + + typedef shared_ptr PMO; diff --git a/src/proc/mobject/placement.cpp b/src/proc/mobject/placement.cpp index eccd34e80..a887eb771 100644 --- a/src/proc/mobject/placement.cpp +++ b/src/proc/mobject/placement.cpp @@ -28,6 +28,9 @@ namespace mobject { + /** factory for creating the corretct Placement subclass */ + PlacementFactory Placement::create; + /** create an actual (explicit) placement while trying to * satisfy the network of adjacent objects and placements. @@ -37,6 +40,18 @@ namespace mobject Placement::resolve () { } + + + + /** implements the logic for selecting the correct + * Placement subclass. + * @return smart ptr owning the created placement object + */ + PlacementFactory::PType + PlacementFactory::operator() (Placement::Style, Time, PMO subject) + { + UNIMPLEMENTED ("create correct Placement subclass"); + } diff --git a/src/proc/mobject/placement.hpp b/src/proc/mobject/placement.hpp index c486c9573..1293b9745 100644 --- a/src/proc/mobject/placement.hpp +++ b/src/proc/mobject/placement.hpp @@ -24,6 +24,8 @@ #ifndef MOBJECT_PLACEMENT_H #define MOBJECT_PLACEMENT_H +#include "common/time.hpp" +#include "common/factory.hpp" #include "proc/mobject/mobject.hpp" #include "proc/mobject/session/track.hpp" @@ -32,7 +34,9 @@ namespace mobject { + class Placement; class ExplicitPlacement; + class PlacementFactory; class Placement @@ -41,14 +45,48 @@ namespace mobject typedef cinelerra::Time Time; typedef session::Track Track; - MObject* subject; - public: + MObject* subject; + + /** + * styles of placement. + */ + enum Style + { + FIXED, + RELATIVE + }; + + static PlacementFactory create; + /** resolve the network of placement and * provide the resulting (explicit) placement. */ ExplicitPlacement& resolve () ; + + protected: + Placement (); + friend class PlacementFactory; + }; + + + typedef shared_ptr PPla; + + + + + /** + * Factory specialized for creating Media Asset objects. + */ + class PlacementFactory : public cinelerra::Factory + { + public: + typedef shared_ptr PType; + typedef cinelerra::Time Time; + + PType operator() (Placement::Style, Time, PMO subject); + }; diff --git a/src/proc/mobject/session.hpp b/src/proc/mobject/session.hpp new file mode 100644 index 000000000..b83affe14 --- /dev/null +++ b/src/proc/mobject/session.hpp @@ -0,0 +1,145 @@ +/* + SESSION.hpp - holds the complete session to be edited by the user + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +*/ + + +/** @file session.hpp + ** Primary Interface to the current Session. + ** The Interface Session is abstract and only accessible via the + ** static field Session::current, which actually refers to a SessManager + ** singleton instance. The latter acts as smart ptr-to-Impl. + ** + */ + + +#ifndef MOBJECT_SESSION_H +#define MOBJECT_SESSION_H + +#include "proc/mobject/placement.hpp" +#include "common/singleton.hpp" + +#include +#include + + + +namespace mobject + { + namespace session + { + class SessManager; + class EDL; + class Fixture; + typedef std::tr1::shared_ptr PFix; + } + + typedef session::SessManager& PSess; ///< acts as a "PImpl" smart ptr + + + /** + * 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. + * + * Opening a Session has effectively global consequences, + * because the Session defines the available Assets, and some + * kinds of Assets define default behaviour. Thus, access to + * the Session is similar to a Singleton instance. + * + * @note Any client should be aware that the Session can be closed, + * replaced and loaded. The only way to accees the Session is + * via a "PImpl" smart pointer session::PSess (which indeed is + * a reference to the SessManager and is accessible as the static + * field Session::current). You will never be able to get a direct + * pointer or reference to the Session object. + * + */ + class Session : private boost::noncopyable + { + protected: + Session () throw(); + virtual ~Session () = 0; + + public: + static session::SessManager& current; + + virtual bool isValid () = 0; + virtual void add (PPla& placement) = 0; + virtual bool remove (PPla& placement) = 0; + + /// @deprecated Ichthyo doubts it is good design to hand out the EDL?? + virtual session::EDL& currEDL () = 0; + + virtual session::PFix& getFixture () = 0; + virtual void rebuildFixture () = 0; + + }; + + + namespace session + { + + /** + * creation, access and Session lifecycle Interface. + * An instance is accessible via Session::current + */ + class SessManager : private boost::noncopyable + { + public: + /** clear current session contents + * without resetting overall session config. + * Afterwards, the session will contain only one + * empty EDL, while all Assets are retained. + */ + virtual void clear () =0; + + /** reset all session config and + * start with a pristine default session. + */ + virtual void reset () =0; + + /** replace the current session by a new + * session loaded from serialized state. + */ + virtual void load () =0; + + /** create a complete, serialized representation + * of the current session config and contents. + * @todo how to serialize, prameters, return value? + */ + virtual void save () =0; + + /** access to the current session object instance. + * This is the sole access path available for clients. + * @note there is no operator* + */ + virtual Session* operator-> () throw() =0; + + virtual ~SessManager() {}; + }; + + } // namespace mobject::session + +} // namespace mobject +#endif diff --git a/src/proc/mobject/session/abstractmo.hpp b/src/proc/mobject/session/abstractmo.hpp index 560e4e7b6..3ea6da648 100644 --- a/src/proc/mobject/session/abstractmo.hpp +++ b/src/proc/mobject/session/abstractmo.hpp @@ -37,7 +37,19 @@ namespace mobject class AbstractMO : public MObject { ////////////// TODO: work out common services to provide!!!! - }; + shared_ptr placement_; + + public: + /* some dummy implementations used to make the code compile... */ + + virtual shared_ptr& getPlacement () { return placement_; } + virtual Time& getLength() { return length; } + virtual PAsset getMedia () + { + UNIMPLEMENTED ("how to relate MObjects and media assets..."); + return AssetManager::instance().getAsset(IDA(0)); // KABOOM! (just to make it compile) + } + }; diff --git a/src/proc/mobject/session/compoundclip.cpp b/src/proc/mobject/session/compoundclip.cpp new file mode 100644 index 000000000..e5bea5744 --- /dev/null +++ b/src/proc/mobject/session/compoundclip.cpp @@ -0,0 +1,38 @@ +/* + CompoundClip - compound of several clips (multichannel) + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/mobject/session/compoundclip.hpp" + +namespace mobject + { + + namespace session + { + + /** */ + + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/session.hpp b/src/proc/mobject/session/compoundclip.hpp similarity index 65% rename from src/proc/mobject/session/session.hpp rename to src/proc/mobject/session/compoundclip.hpp index e63730eb0..ee2fc5785 100644 --- a/src/proc/mobject/session/session.hpp +++ b/src/proc/mobject/session/compoundclip.hpp @@ -1,5 +1,5 @@ /* - SESSION.hpp - holds the complete session to be edited by the user + COMPOUNDCLIP.hpp - compound of several clips (multichannel) Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,37 +21,32 @@ */ -#ifndef MOBJECT_SESSION_SESSION_H -#define MOBJECT_SESSION_SESSION_H +#ifndef MOBJECT_SESSION_COMPOUNDCLIP_H +#define MOBJECT_SESSION_COMPOUNDCLIP_H + +#include "proc/mobject/session/clip.hpp" namespace mobject { + 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. + * Clip MObject which is actually a compound of several elementary clips, + * e.g. the several streams found within multichannels media. */ - class Session + class CompoundClip : public Clip { protected: - EDL& edl; - Fixture& fixture; + Clip* components; }; - - - + + } // namespace mobject::session } // namespace mobject diff --git a/src/proc/mobject/session/edl.cpp b/src/proc/mobject/session/edl.cpp index 8fc76bb0c..4b577e059 100644 --- a/src/proc/mobject/session/edl.cpp +++ b/src/proc/mobject/session/edl.cpp @@ -23,6 +23,7 @@ #include "proc/mobject/session/edl.hpp" #include "proc/mobject/session/track.hpp" +#include "proc/mobject/placement.hpp" #include "proc/mobject/mobject.hpp" namespace mobject @@ -30,7 +31,22 @@ namespace mobject namespace session { - /** */ + /** @deprecated not sure if it is a good idea + * to have this on the interface + */ + bool + EDL::contains (const PPla& placement) + { + UNIMPLEMENTED ("test if a given placement is contained within this EDL"); + } + + + PPla& + EDL::find (const string& id) + { + UNIMPLEMENTED ("serch for a given 'thing' within the EDL"); + } + diff --git a/src/proc/mobject/session/edl.hpp b/src/proc/mobject/session/edl.hpp index 31b0319a4..24a7a136f 100644 --- a/src/proc/mobject/session/edl.hpp +++ b/src/proc/mobject/session/edl.hpp @@ -24,26 +24,39 @@ #ifndef MOBJECT_SESSION_EDL_H #define MOBJECT_SESSION_EDL_H -#include +#include +#include #include "proc/mobject/mobject.hpp" -#include "proc/mobject/session/track.hpp" +#include "proc/mobject/placement.hpp" +#include "proc/asset/track.hpp" +using proc_interface::PAsset; // TODO better methot to refer to a track? -using std::list; +using std::vector; +using std::string; namespace mobject { namespace session { - class EDL { protected: - list tracks; - list clips; + vector tracks; + vector clips; + public: + bool contains (const PPla& placement); + PPla& find (const string& id); ///< @todo how to refer to clips? using asset IDs?? + + vector& getTracks () { return tracks; } ///< @todo use track assets correct, make const! + size_t size () + { + UNIMPLEMENTED ("what ist the 'size' of an EDL?"); + return 0; + } }; diff --git a/src/proc/mobject/session/fixture.cpp b/src/proc/mobject/session/fixture.cpp index 73fa72e7e..ed1682168 100644 --- a/src/proc/mobject/session/fixture.cpp +++ b/src/proc/mobject/session/fixture.cpp @@ -1,5 +1,5 @@ /* - Fixture - the (low level) representation of the EDL with concrete placement data + Fixture - the (low level) representation of the EDL with explicit placement data Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -22,6 +22,7 @@ #include "proc/mobject/session/fixture.hpp" +#include "nobugcfg.h" namespace mobject { @@ -33,7 +34,7 @@ namespace mobject list & Fixture::getPlaylistForRender () { - abort();/////////////////////TODO + UNIMPLEMENTED ("get Playlist For Render"); } @@ -43,7 +44,8 @@ namespace mobject Auto* Fixture::getAutomation () { - return 0;/////////////////////TODO + UNIMPLEMENTED ("getAutomation from Fixture"); + return 0; } diff --git a/src/proc/mobject/session/fixture.hpp b/src/proc/mobject/session/fixture.hpp index eebdc87af..4467abd8b 100644 --- a/src/proc/mobject/session/fixture.hpp +++ b/src/proc/mobject/session/fixture.hpp @@ -1,5 +1,5 @@ /* - FIXTURE.hpp - the (low level) representation of the EDL with concrete placement data + FIXTURE.hpp - the (low level) representation of the EDL with explicit placement data Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -25,6 +25,7 @@ #define MOBJECT_SESSION_FIXTURE_H #include +#include #include "proc/mobject/session/edl.hpp" #include "proc/mobject/session/track.hpp" @@ -33,6 +34,7 @@ using std::list; +using std::tr1::shared_ptr; @@ -52,8 +54,12 @@ namespace mobject public: list & getPlaylistForRender () ; - Auto* getAutomation () ; /////TODO: just a placeholder at the moment!!! + Auto* getAutomation () ; ///< @todo: just a placeholder at the moment!!! }; + + + + typedef shared_ptr PFix; diff --git a/src/proc/mobject/session/session.cpp b/src/proc/mobject/session/session.cpp index 1bb585d3e..136347bf5 100644 --- a/src/proc/mobject/session/session.cpp +++ b/src/proc/mobject/session/session.cpp @@ -21,19 +21,46 @@ * *****************************************************/ -#include "proc/mobject/session/session.hpp" -#include "proc/mobject/session/edl.hpp" -#include "proc/mobject/session/fixture.hpp" +/** @file session.cpp + ** Actual connection between the Session interface and its Implementation. + ** Holds the storage for the SessionManager implementation (singleton) + ** + ** @see session::SessionImpl + ** @see session::SessionManagerImpl + ** + */ + + +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/sessionimpl.hpp" + +#include "common/singleton.hpp" + + +using cinelerra::Singleton; +using mobject::session::SessManager; +using mobject::session::SessManagerImpl; namespace mobject { - namespace session - { - /** */ + /** the sole acces point for all client code to the system-wide + * "current session". Implemented as smart pointer to singleton + * implementation object, where the smart pointer is actually + * the SessionManager (which is singleton as well...). + * + * Consequently, if you want to talk to the session manager, + * you use dot-notation, while you access the session object + * via arrow notaion (e.g. \code Session::current->getFixture() ) + */ + SessManager& Session::current = Singleton()(); + + + + + Session::Session () throw() { } + Session::~Session () { } - } // namespace mobject::session - } // namespace mobject diff --git a/src/proc/mobject/session/sessionimpl.cpp b/src/proc/mobject/session/sessionimpl.cpp new file mode 100644 index 000000000..056732116 --- /dev/null +++ b/src/proc/mobject/session/sessionimpl.cpp @@ -0,0 +1,116 @@ +/* + SessionImpl - holds the complete session data to be edited by the user + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/mobject/session/sessionimpl.hpp" +#include "proc/mobject/placement.hpp" +#include "common/error.hpp" + +namespace mobject + { + namespace session + { + + /** create a new empty session with default values. + * @note any exception arising while creating this + * default session will inevitably halt the + * system (and this is desirable) + */ + SessionImpl::SessionImpl () throw() + : Session(), + focusEDL_(0), + edls(1), + fixture(new Fixture) + { + } + + + /** @internal used by SessionManager#clear + * discard all EDL content, without + * touching global configuration. + */ + void + SessionImpl::clear () + { + try + { + edls.clear(); + edls.resize(1); + focusEDL_ = 0; + } + catch (...) + { + focusEDL_ = 0; + throw cinelerra::error::Fatal ("unexpected exception while clearing EDLs"); + } + } + + + bool + SessionImpl::isValid () + { + UNIMPLEMENTED ("session self test"); + return false; // TODO + } + + + void + SessionImpl::add (PPla& placement) + { + UNIMPLEMENTED ("add Placement to the current EDL"); + } + + + bool + SessionImpl::remove (PPla& placement) + { + UNIMPLEMENTED ("search and remove a given Placement from current EDL"); + return false; // TODO + } + + /// @deprecated should not grant direct access to EDL objects + EDL& + SessionImpl::currEDL () + { + ASSERT (focusEDL_ < edls.size()); + return edls[focusEDL_]; + } + + + PFix& + SessionImpl::getFixture () + { + return fixture; + } + + + void + SessionImpl::rebuildFixture () + { + UNIMPLEMENTED ("rebuild Fixture"); + } + + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/sessionimpl.hpp b/src/proc/mobject/session/sessionimpl.hpp new file mode 100644 index 000000000..658f5d56a --- /dev/null +++ b/src/proc/mobject/session/sessionimpl.hpp @@ -0,0 +1,103 @@ +/* + SESSIONIMPL.hpp - holds the complete session data to be edited by the user + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +*/ + + +/** @file sessionimpl.hpp + ** Session and SessionManager Implemention classes. + ** These are primary Interfaces and we hide all implementaion complexities, + ** + */ + + +#ifndef MOBJECT_SESSION_SESSIONIMPL_H +#define MOBJECT_SESSION_SESSIONIMPL_H + +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/edl.hpp" +#include "proc/mobject/session/fixture.hpp" + +#include +#include + +using std::vector; + + + +namespace mobject + { + namespace session + { + + + /** + * Implementation class for the Session interface + */ + class SessionImpl : public mobject::Session + { + protected: + uint focusEDL_; + vector edls; + PFix fixture; + + SessionImpl () throw(); + friend class SessManagerImpl; + + void clear (); + + public: + virtual bool isValid (); + virtual void add (PPla& placement); + virtual bool remove (PPla& placement); + + virtual EDL& currEDL (); + + virtual PFix& getFixture (); + virtual void rebuildFixture (); + + }; + + + /** + * Session manager implementation class holding the + * actual smart pointer to the current Session impl. + */ + class SessManagerImpl : public SessManager + { + boost::scoped_ptr pImpl_; + + SessManagerImpl() throw(); + friend class cinelerra::singleton::StaticCreate; + + public: + virtual void clear () ; + virtual void reset () ; + virtual void load () ; + virtual void save () ; + virtual Session* operator-> () throw() { return pImpl_.get(); } + }; + + + + } // namespace mobject::session + +} // namespace mobject +#endif diff --git a/src/proc/mobject/session/sessmanagerimpl.cpp b/src/proc/mobject/session/sessmanagerimpl.cpp new file mode 100644 index 000000000..85998b8c6 --- /dev/null +++ b/src/proc/mobject/session/sessmanagerimpl.cpp @@ -0,0 +1,114 @@ +/* + SessManagerImpl - global session access and lifecycle + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +/** @file sessmanagerimpl.cpp + ** Implemention of the Session management functions. + ** The Class SessManager is declared alongside with mobject::Session, + ** because it serves as smart ptr-to-Impl at the same time. Effectively, + ** the session manager owns the current session object and only grants + ** access via his overloaded operator->() . Because there is no operator*(), + ** no one can get at the address of the current session object. (correct?) + ** + ** @see sessionimpl.hpp + ** @see mobject::Session#current + ** @see mobject::session::SessionManager_test + ** + */ + + +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/sessionimpl.hpp" + +using boost::scoped_ptr; + + + +namespace mobject + { + namespace session + { + + /** Besides creating the single system-wide Session manger instance, + * creates an empty default Session as well. + * @note any exceptions arising in the course of this will halt + * the system (and this behaviour is desirable). + */ + SessManagerImpl::SessManagerImpl () throw() + : pImpl_ (new SessionImpl) + { + } + + /** @note no transactional behaviour. + * may succeed partial. + */ + void + SessManagerImpl::clear () + { + pImpl_->clear(); + } + + + /** @note this operation is atomic and either succeeds or + * failes completely, in which case the current session + * remains unaltered. + * @todo for this to work, we need to change the implementation of + * AssetManager so support this kind of transactional switch! + */ + void + SessManagerImpl::reset () + { + scoped_ptr tmp (new SessionImpl); + + TODO ("reset the assets registered with AssetManager"); + // Ichthyo-intern: ticket #95 + + pImpl_.swap (tmp); + } + + + void + SessManagerImpl::load () + { + UNIMPLEMENTED ("load serialized session"); + } + + + /** \par Implementation details + * We intend to have several switchable object serialisers. + * One of these serializers should genarate a comprehensible + * text based representation suitable for checking into + * SCM systems. + * Sessions can be saved into one single file or be splitted + * to several files (master file and edl files) + */ + void + SessManagerImpl::save () + { + UNIMPLEMENTED ("save session (serialized)"); + } + + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/simpleclip.cpp b/src/proc/mobject/session/simpleclip.cpp new file mode 100644 index 000000000..0797ed1de --- /dev/null +++ b/src/proc/mobject/session/simpleclip.cpp @@ -0,0 +1,38 @@ +/* + SimpleClip - Elementary clip (single media stream only) + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/mobject/session/simpleclip.hpp" + +namespace mobject + { + + namespace session + { + + /** */ + + + + } // namespace mobject::session + +} // namespace mobject diff --git a/src/proc/mobject/session/simpleclip.hpp b/src/proc/mobject/session/simpleclip.hpp new file mode 100644 index 000000000..f462eff94 --- /dev/null +++ b/src/proc/mobject/session/simpleclip.hpp @@ -0,0 +1,50 @@ +/* + SIMPLECLIP.hpp - Elementary clip (single media stream only) + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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 MOBJECT_SESSION_SIMPLECLIP_H +#define MOBJECT_SESSION_SIMPLECLIP_H + +#include "proc/mobject/session/clip.hpp" + + + +namespace mobject + { + + namespace session + { + + + /** + * Elementary clip consisting of only one media stream + */ + class SimpleClip : public Clip + { + }; + + + + } // namespace mobject::session + +} // namespace mobject +#endif diff --git a/tests/50components.tests b/tests/50components.tests index 9b134ed6c..7435f21b0 100644 --- a/tests/50components.tests +++ b/tests/50components.tests @@ -103,6 +103,49 @@ out: dtor ~TargetObj(12) successfull END +TEST "SanitizedIdentifier_test" SanitizedIdentifier_test < 'Word' +out: 'a Sentence' --> 'a_Sentence' +out: 'trailing Withespace +out: ' --> 'trailing_Withespace' +out: 'with a lot +out: of Whitespace' --> 'with_a_lot_of_Whitespace' +out: 'with"much (punctuation)[]!' --> 'withmuch_(punctuation)' +out: 'ยง&ฮฉ%โ‚ฌ leading garbarge' --> 'leading_garbarge' +out: 'mixed ฮฉ garbarge' --> 'mixed_garbarge' +out: 'Bรครครครคh!!' --> 'Bh' +out: 'ยง&ฮฉ%โ‚ฌ' --> '' +END + + +TEST "SingletonTestMock_test" SingletonTestMock_test < Testgroup=ALL @@ -139,30 +182,3 @@ out: --> remaining=SingleTestID spam --eggs END -TEST "SanitizedIdentifier_test" SanitizedIdentifier_test < 'Word' -out: 'a Sentence' --> 'a_Sentence' -out: 'trailing Withespace -out: ' --> 'trailing_Withespace' -out: 'with a lot -out: of Whitespace' --> 'with_a_lot_of_Whitespace' -out: 'with"much (punctuation)[]!' --> 'withmuch_(punctuation)' -out: 'ยง&ฮฉ%โ‚ฌ leading garbarge' --> 'leading_garbarge' -out: 'mixed ฮฉ garbarge' --> 'mixed_garbarge' -out: 'Bรครครครคh!!' --> 'Bh' -out: 'ยง&ฮฉ%โ‚ฌ' --> '' -END - - -TEST "Singleton_test" Singleton_test 23 < + + 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. + +* *****************************************************/ + + +/** @file mediaacessmock.cpp + ** Mock implementation of the Interface normally used to query media file + ** informations from the data backend. The Mock implementation instead holds + ** a map of fixed response which will be deliverd when querying some magic + ** filenames. + ** + ** @see mediaaccessmocktest.cpp validating the Mock + ** @see MediaAccessFactory the real thing + ** + */ + + +#include "backend/mediaaccessmock.hpp" + +#include "common/util.hpp" +#include "nobugcfg.h" + +#include +#include +#include + +using cinelerra::error::Invalid; +using util::for_each; +using util::isnil; +using std::cout; +using std::string; +using std::vector; +using std::map; + + +namespace backend_interface + { + namespace test + { + typedef MediaAccessFacade::FileHandle FileHandle; + typedef MediaAccessFacade::ChanHandle ChanHandle; + + + namespace // implementation deatils + { + typedef vector Response; + const ChanDesc NULLResponse; + + struct TestCases : map + { + TestCases () + { + // ------------------------------------------------------------------TESTCASES + (*this)["test-1"].push_back (ChanDesc ("video","ID", genH())); + + (*this)["test-2"].push_back (ChanDesc ("video","H264", genH())); + (*this)["test-2"].push_back (ChanDesc ("audio-L","PCM", genH())); + (*this)["test-2"].push_back (ChanDesc ("audio-R","PCM", genH())); + // ------------------------------------------------------------------TESTCASES + } + + bool known (string key) + { + const_iterator i = find (key); + return (i != end()); + } + private: + int _i_; + ChanHandle genH() + { + return reinterpret_cast (++_i_); + } + }; + + // instantiate TestCasses table + TestCases testCases; + + } // (end) implementation namespace + + + FileHandle + MediaAccessMock::queryFile (const char* name) throw(Invalid) + { + if (isnil (name)) + throw Invalid ("empty filename passed to MediaAccessFacade."); + + if (!testCases.known(name)) + return 0; + else + return reinterpret_cast (&testCases[name]); + } + + ChanDesc + MediaAccessMock::queryChannel (FileHandle h, uint chanNo) throw() + { + const Response* res (reinterpret_cast (h)); + + if (!res || res->size() <= chanNo) + return NULLResponse; + else + return (*res)[chanNo]; + } + + + } // namespace test + +} // namespace backend_interface diff --git a/tests/components/backend/mediaaccessmock.hpp b/tests/components/backend/mediaaccessmock.hpp new file mode 100644 index 000000000..9810773a5 --- /dev/null +++ b/tests/components/backend/mediaaccessmock.hpp @@ -0,0 +1,52 @@ +/* + MEDIAACCESSMOCK.hpp - a test (stub) target object for testing the factories + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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 BACKEND_TEST_MEDIAACCESSMOCK_H +#define BACKEND_TEST_MEDIAACCESSMOCK_H + + +#include "backend/mediaaccessfacade.hpp" + + + + +namespace backend_interface + { + namespace test + { + /** + * Mock implementation of the MediaAccessFacade. + * Provides preconfigured responses for some Test-Filenames. + */ + class MediaAccessMock : public MediaAccessFacade + { + public: + FileHandle queryFile (const char* name) throw(cinelerra::error::Invalid); + ChanDesc queryChannel (FileHandle, uint chanNo) throw(); + }; + + + } // namespace test + +} // namespace backend_interface +#endif diff --git a/tests/components/backend/mediaaccessmocktest.cpp b/tests/components/backend/mediaaccessmocktest.cpp new file mode 100644 index 000000000..5e7ef4cc4 --- /dev/null +++ b/tests/components/backend/mediaaccessmocktest.cpp @@ -0,0 +1,103 @@ +/* + MediaAccessMock(Test) - checking our Test Mock replacing the MediaAccessFacade + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "backend/mediaaccessfacade.hpp" +#include "backend/mediaaccessmock.hpp" + +#include "common/test/run.hpp" +//#include "common/util.hpp" +#include "nobugcfg.h" + +//#include +#include + +//using boost::format; +//using util::isnil; +using std::string; +using std::cout; + + +namespace backend_interface + { + namespace test + { + + + + + + /******************************************************************************** + * @test inject a Mock object replacing the backend_interface::MediaAccessFacade. + * Verify if the Mock object behaves as expected when calling the Facade. + */ + class MediaAccessMock_test : public Test + { + typedef MediaAccessFacade MAF; + + virtual void run(Arg arg) + { + MAF::instance.injectSubclass (new MediaAccessMock); + + queryScenario ("test-1"); + queryScenario ("test-2"); + + MAF::instance.injectSubclass (0); + } + + + /** perform the test: query for an (alledged) file + * and retrieve the mock answer. + */ + void queryScenario (string filename) + { + MAF& maf (MAF::instance()); + MAF::FileHandle fhandle = maf.queryFile (filename.c_str()); + if (!fhandle) + cout << "File \""<; - friend class singleton::Heap; + friend class singleton::StaticCreate; + friend class singleton::HeapCreate; }; int TargetObj::cnt = 0; @@ -74,8 +74,8 @@ namespace cinelerra * @test implement a Singleton class using our Singleton Template. * Expected results: no memory leaks. * @see cinelerra::Singleton - * @see cinelerra::singleton::Static - * @see cinelerra::singleton::Heap + * @see cinelerra::singleton::StaticCreate + * @see cinelerra::singleton::HeapCreate */ class Singleton_test : public Test { @@ -96,7 +96,7 @@ namespace cinelerra */ void testStaticallyAllocatedSingleton (uint num) { - Singleton single; + SingletonFactory single; instance = single; useInstance (num, "statically allocated"); } @@ -107,7 +107,7 @@ namespace cinelerra */ void testHeapAllocatedSingleton (uint num) { - Singleton single; + SingletonFactory single; instance = single; useInstance (num, "heap allocated"); } diff --git a/tests/components/common/singletontestmocktest.cpp b/tests/components/common/singletontestmocktest.cpp new file mode 100644 index 000000000..4e86597f9 --- /dev/null +++ b/tests/components/common/singletontestmocktest.cpp @@ -0,0 +1,218 @@ +/* + SingletonTestMock(Test) - using Singleton for injecting Test-Mocks + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + + +#include "common/test/run.hpp" +#include "common/singleton.hpp" +#include "common/util.hpp" +#include "nobugcfg.h" + +#include +#include +#include + +using boost::lexical_cast; +using boost::format; +using util::isnil; +using std::string; +using std::cout; + + +namespace cinelerra + { + namespace test + { + + + /** + * Client Class normally to be instantiated as Singleton. + * But for tests, this class should be replaced by a Mock.... + */ + class TestSingletonO + { + int callCnt; + char* typid; + format msg; + + public: + TestSingletonO(char* ty="TestSingletonO") + : callCnt (0), typid(ty), msg ("%s::doIt() call=%d\n") + { + TRACE (singleton, "ctor %s", typid); + } + virtual ~TestSingletonO() + { + TRACE (singleton, "dtor %s", typid); + } + + void doIt () + { + ++callCnt; + cout << msg % typid % callCnt; + } + int getCnt () + { + return callCnt; + } + + }; + + + /** + * Mock-1 to replace the Client Class... + */ + struct Mock_1 : TestSingletonO + { + Mock_1() : TestSingletonO("Mock_1") + {}; + }; + + /** + * Mock-2 to replace the Client Class... + */ + struct Mock_2 : TestSingletonO + { + Mock_2() : TestSingletonO("Mock_2") + {}; + }; + + + + + + + + + + + /******************************************************************* + * @test inject a Mock object into the Singleton Factory, + * to be returned and used in place of the original object. + * Expected results: Mock(s) called, no memory leaks. + * @see cinelerra::Singleton + * @see cinelerra::singleton::Static + */ + class SingletonTestMock_test : public Test + { + Singleton instance; + + virtual void run(Arg arg) + { + string scenario = isnil(arg)? "default" : arg[1]; + + if (scenario == "default") + injectBoth(); + else + if (scenario == "noMock") + noMock(); + else + if (scenario == "onlyMock") + onlyMock(); + else + if (scenario == "firstMock") + firstMock(); + } + + + /** @test complete use sequence: first access the Client Object, + * then replace it by two different mocks, and finally + * restore the original Client Object + */ + void injectBoth () + { + TestSingletonO* sing = &instance(); + sing->doIt(); + sing->doIt(); + ASSERT (sing->getCnt() == 2); + + instance.injectSubclass (new Mock_1); + sing = &instance(); + sing->doIt(); + sing->doIt(); + sing->doIt(); + sing->doIt(); + sing->doIt(); + ASSERT (sing->getCnt() == 5); + + instance.injectSubclass (new Mock_2); + sing = &instance(); + sing->doIt(); + ASSERT (sing->getCnt() == 1); + + instance.injectSubclass (0); // unshaddowing original instance + sing = &instance(); + ASSERT (sing->getCnt() == 2); + sing->doIt(); + ASSERT (sing->getCnt() == 3); + } + + + /** @test just use Singleton Factory normally without any Mock. + */ + void noMock () + { + TestSingletonO& sing = instance(); + sing.doIt(); + } + + + /** @test inject the Mock prior to using the Singleton Factory, + * thus the original Client Object shouldn't be created. + */ + void onlyMock () + { + instance.injectSubclass (new Mock_1); + TestSingletonO& sing = instance(); + sing.doIt(); + } + + + /** @test inject the Mock prior to using the Singleton Factory, + * but then reset the Mock, so following calls should + * create the original Client Object. + */ + void firstMock () + { + instance.injectSubclass (new Mock_1); + TestSingletonO* sing = &instance(); + sing->doIt(); + sing->doIt(); + ASSERT (sing->getCnt() == 2); + + instance.injectSubclass (0); + sing = &instance(); + sing->doIt(); + ASSERT (sing->getCnt() == 1); + } + }; + + + + /** Register this test class... */ + LAUNCHER (SingletonTestMock_test, "unit common"); + + + + } // namespace test + +} // namespace cinelerra diff --git a/tests/components/proc/asset/compoundmediatest.cpp b/tests/components/proc/asset/compoundmediatest.cpp new file mode 100644 index 000000000..96373d741 --- /dev/null +++ b/tests/components/proc/asset/compoundmediatest.cpp @@ -0,0 +1,106 @@ +/* + CompoundMedia(Test) - handling multichannel Media Assets + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "common/test/run.hpp" +#include "common/util.hpp" + +#include "proc/assetmanager.hpp" +#include "proc/asset/media.hpp" +#include "proc/asset/proc.hpp" + +#include "proc/asset/assetdiagnostics.hpp" + +using util::isnil; +using std::string; + + +namespace asset + { + namespace test + { + + + + + /*********************************************************************** + * Verifying the special operations available for compound media assets + * comprised of several elementary media assets. + */ + class CompoundMedia_test : public Test + { + virtual void run(Arg arg) + { + buildCompound(); + modifyCompound(); + verifyClipStructure(); + + if (!isnil (arg)) + dumpAssetManager(); + TRACE (assetmem, "leaving CreateAsset_test::run()"); + } + + + + typedef shared_ptr PM; + + /** @test building a compound media asset by using a special + * factory, normally intended for loading existing sessions. + */ + void buildCompound() + { + UNIMPLEMENTED ("create new compound media"); + } + + /** @test adding and removing elementary media. + */ + void modifyCompound() + { + UNIMPLEMENTED ("add and remove elementary media to compound media asset"); + } + + + /** @test create a (compound) clip from some compound media asset + * and verify the clip mirrors the media asset's structure + */ + void verifyClipStructure() + { + UNIMPLEMENTED ("create compound clip from compound media and verify structure"); + } + + + bool checkProperties (PM object, Asset::Ident identity, string filename) + { + return identity == object->ident + && filename == object->getFilename(); + } + }; + + + /** Register this test class... */ + LAUNCHER (CompoundMedia_test, "unit asset"); + + + + } // namespace test + +} // namespace asset diff --git a/tests/components/proc/asset/createassettest.cpp b/tests/components/proc/asset/createassettest.cpp index 00fa049f0..6074da11a 100644 --- a/tests/components/proc/asset/createassettest.cpp +++ b/tests/components/proc/asset/createassettest.cpp @@ -107,6 +107,7 @@ namespace asset NOTREACHED; } catch (cinelerra::error::Invalid& xxx) {ASSERT (xxx.getID()==CINELERRA_ERROR_UNKNOWN_ASSET_ID);} + cinelerra_error (); // reset errorflag // checking the Ident-Fields diff --git a/tests/components/proc/asset/deleteassettest.cpp b/tests/components/proc/asset/deleteassettest.cpp index f7d8d5e9b..01302aa49 100644 --- a/tests/components/proc/asset/deleteassettest.cpp +++ b/tests/components/proc/asset/deleteassettest.cpp @@ -53,6 +53,7 @@ namespace asset { virtual void run(Arg arg) { + UNIMPLEMENTED ("delete asset and update all dependencies"); } }; diff --git a/tests/components/proc/asset/dependantassetstest.cpp b/tests/components/proc/asset/dependantassetstest.cpp index 648f2defd..9b52be4c0 100644 --- a/tests/components/proc/asset/dependantassetstest.cpp +++ b/tests/components/proc/asset/dependantassetstest.cpp @@ -51,6 +51,7 @@ namespace asset { virtual void run(Arg arg) { + UNIMPLEMENTED ("handling of Asset dependencies"); } }; diff --git a/tests/components/proc/asset/makecliptest.cpp b/tests/components/proc/asset/makecliptest.cpp new file mode 100644 index 000000000..8f8c82192 --- /dev/null +++ b/tests/components/proc/asset/makecliptest.cpp @@ -0,0 +1,97 @@ +/* + MakeClip(Test) - create a Clip from a Media Asset + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "common/test/run.hpp" +#include "common/util.hpp" + +#include "proc/assetmanager.hpp" +#include "proc/asset/media.hpp" +#include "proc/mobject/session/clip.hpp" + +//#include "proc/asset/assetdiagnostics.hpp" + +using util::contains; +using util::isnil; +using std::string; + +using std::tr1::static_pointer_cast; //TODO only temporarily; + +namespace asset + { + namespace test + { + + + + + /*********************************************************************** + * @test creating a Clip MObject and an associated Clip Asset from + * a given asset::Media. + * @see asset::Media#createClip + */ + class MakeClip_test : public Test + { + typedef shared_ptr PM; + typedef shared_ptr PC; + + virtual void run (Arg arg) + { + + PM mm = asset::Media::create("test-1", VIDEO); + PC cc = mm->createClip(); + PM cm = static_pointer_cast (cc->getMedia()); //TODO: solve the reference/interface Problem on MObject, push down to Clip... + + ASSERT (cm); + ASSERT (0 < cc->getLength()); + ASSERT (cm->ident.category.hasKind (VIDEO)); + ASSERT (cm->getFilename() == mm->getFilename()); + ASSERT (cm->howtoProc() == mm->howtoProc()); + ASSERT (cm->ident.org == mm->ident.org); + ASSERT (dependencyCheck (mm,cm)); + + TRACE (assetmem, "leaving MakeClip_test::run()"); + TRACE (mobjectmem, "leaving MakeClip_test::run()"); + } + + bool dependencyCheck (PM media, PM clip) + { + TODO ("check asset dependencies, when this feature is implemented"); + return true; //TODO + + return (0 < clip->getParents().size()) + && (media == clip->getParents()[0]) +// && (contains (media->getDependant(), clip)); //TODO implement Asset dependecies + ; + } + + }; + + + /** Register this test class... */ + LAUNCHER (MakeClip_test, "function asset"); + + + + } // namespace test + +} // namespace asset diff --git a/tests/components/proc/asset/mediastructurequerytest.cpp b/tests/components/proc/asset/mediastructurequerytest.cpp new file mode 100644 index 000000000..19a352806 --- /dev/null +++ b/tests/components/proc/asset/mediastructurequerytest.cpp @@ -0,0 +1,68 @@ +/* + MediaStructureQuery(Test) - check functionallity used for creating media assets + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "common/test/run.hpp" +#include "common/util.hpp" + +#include "proc/assetmanager.hpp" +#include "proc/asset/media.hpp" +#include "proc/asset/proc.hpp" + +#include "proc/asset/assetdiagnostics.hpp" + +using util::isnil; +using std::string; + + +namespace asset + { + namespace test + { + + + + + /*********************************************************************** + * This test documents the Interface used by MediaFactory when loading + * media files for querying cinelerra's backend layer for information + * on how the media file is structured. + */ + class MediaStructureQuery_test : public Test + { + virtual void run(Arg arg) + { + UNIMPLEMENTED ("querying media file structure from backend"); + } + + + }; + + + /** Register this test class... */ + LAUNCHER (MediaStructureQuery_test, "unit asset"); + + + + } // namespace test + +} // namespace asset diff --git a/tests/components/proc/engine/sourcenodetest.cpp b/tests/components/proc/engine/sourcenodetest.cpp index e7fab2279..9bbe30f30 100644 --- a/tests/components/proc/engine/sourcenodetest.cpp +++ b/tests/components/proc/engine/sourcenodetest.cpp @@ -48,6 +48,7 @@ namespace engine { virtual void run(Arg arg) { + UNIMPLEMENTED ("render node pulling source data from backend"); } }; diff --git a/tests/components/proc/mobject/controller/rendersegmenttest.cpp b/tests/components/proc/mobject/controller/rendersegmenttest.cpp index 5ef4064f1..c0ca3259d 100644 --- a/tests/components/proc/mobject/controller/rendersegmenttest.cpp +++ b/tests/components/proc/mobject/controller/rendersegmenttest.cpp @@ -57,6 +57,7 @@ namespace mobject { virtual void run(Arg arg) { + UNIMPLEMENTED ("complete render process for a given test segment of the EDL"); } }; diff --git a/tests/components/proc/mobject/session/addcliptest.cpp b/tests/components/proc/mobject/session/addcliptest.cpp index f6cc5def1..a88b36db9 100644 --- a/tests/components/proc/mobject/session/addcliptest.cpp +++ b/tests/components/proc/mobject/session/addcliptest.cpp @@ -22,13 +22,18 @@ #include "common/test/run.hpp" -//#include "common/factory.hpp" -//#include "common/util.hpp" +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/edl.hpp" +#include "proc/mobject/session/testclip.hpp" +#include "proc/mobject/placement.hpp" +#include "common/util.hpp" //#include #include //using boost::format; +using cinelerra::Time; +using util::contains; using std::string; using std::cout; @@ -52,6 +57,13 @@ namespace mobject { virtual void run(Arg arg) { + PSess sess = Session::current; + PMO clip = TestClip::create(); + PPla pla = Placement::create(Placement::FIXED, Time(1), clip); + sess->add (pla); + + ASSERT (sess->currEDL().contains (pla)); + // TODO: Clip-Asset and Placement magic?? } }; diff --git a/tests/components/proc/mobject/session/deletecliptest.cpp b/tests/components/proc/mobject/session/deletecliptest.cpp index 4a5c01567..0275992b0 100644 --- a/tests/components/proc/mobject/session/deletecliptest.cpp +++ b/tests/components/proc/mobject/session/deletecliptest.cpp @@ -22,7 +22,10 @@ #include "common/test/run.hpp" -//#include "common/factory.hpp" +#include "proc/assetmanager.hpp" +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/edl.hpp" // TODO: really neded? +#include "proc/mobject/session/testsession1.hpp" //#include "common/util.hpp" //#include @@ -32,6 +35,9 @@ using std::string; using std::cout; +using proc_interface::AssetManager; +using proc_interface::PAsset; +using proc_interface::IDA; namespace mobject { @@ -52,6 +58,20 @@ namespace mobject { virtual void run(Arg arg) { + buildTestseesion1(); + PSess sess = Session::current; + AssetManager& aMang = AssetManager::instance(); + + PPla clipPlacement = sess->currEDL().find(SESSION1_CLIP); // global Var asigned in buildTestsession1() + PAsset clipAsset = clipPlacement->subject->getMedia(); + IDA clipAID = clipAsset->getID(); + ASSERT (clipPlacement); + + sess->remove (clipPlacement); + + ASSERT (!sess->currEDL().find(SESSION1_CLIP)); // EDL forgot the Clip/Placement + ASSERT (!aMang.known (clipAID)); // corresponding Clip Asset has disappeared + ASSERT (!clipPlacement->subject->getMedia()); // internal cross-links removed } }; diff --git a/tests/components/proc/mobject/session/rebuildfixturetest.cpp b/tests/components/proc/mobject/session/rebuildfixturetest.cpp index 01ad76b34..62c77fe11 100644 --- a/tests/components/proc/mobject/session/rebuildfixturetest.cpp +++ b/tests/components/proc/mobject/session/rebuildfixturetest.cpp @@ -22,13 +22,19 @@ #include "common/test/run.hpp" -//#include "common/factory.hpp" -//#include "common/util.hpp" +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/edl.hpp" +#include "proc/mobject/session/testsession1.hpp" +#include "common/util.hpp" //#include +#include #include //using boost::format; +using boost::bind; +using util::contains; +using util::for_each; using std::string; using std::cout; @@ -53,7 +59,28 @@ namespace mobject { virtual void run(Arg arg) { + PSess sess = Session::current; + sess.clear(); + buildTestseesion1(); + ASSERT (sess->isValid()); + sess->rebuildFixture(); + TODO ("check the fixture has been touched. e.g. by hash."); + TODO ("query all Placements of all Clips (via AssetManager). Verify explicit plac contained in Fixture."); + + UNIMPLEMENTED ("iterate over fixture"); +// TODO +// for_each (sess->getFixture(), +// bind (&check_is_from_EDL, _1, sess.getEDL())); + + TODO ("can we check the other direction, from EDL to Fixture??"); } + + static void + check_is_from_EDL (PPla explicitPlacement, EDL& edl) + { + PPla originalPlacement = explicitPlacement->subject->getPlacement(); + ASSERT (edl.contains(originalPlacement)); + } }; diff --git a/tests/components/proc/mobject/session/sessionmanagertest.cpp b/tests/components/proc/mobject/session/sessionmanagertest.cpp new file mode 100644 index 000000000..db42c9703 --- /dev/null +++ b/tests/components/proc/mobject/session/sessionmanagertest.cpp @@ -0,0 +1,136 @@ +/* + SessionManager(Test) - accessing, loading and saving the Session/EDL + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "common/test/run.hpp" +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/testsession1.hpp" +//#include "common/util.hpp" +//#include +#include + +//using boost::format; +using std::string; +using std::cout; + + +namespace mobject + { + namespace session + { + namespace test + { + + + /******************************************************************************* + * Check the session management operations provided by mobject::session::Seesion + * This includes accessing the current Session (somewhat a singleton). + * @todo load a Mock session + * @todo create a session and save (serialize) it + * @todo load a real test session + */ + class SessionManager_test : public Test + { + virtual void run(Arg arg) + { + getCurrentSession (); + clearSession(); + loadMockSession(); + + clearSession(); + buildTestseesion1(); + string serialized; + saveSession (serialized); + loadSession (serialized); + ASSERT (checkTestsession1()); + } + + /** @test accessing the current (global) session + */ + void getCurrentSession () + { + PSess sess = Session::current; + ASSERT (sess->isValid()); + } + + /** @test clear current session contents + * without resetting global session config. + * @todo implement all session content, implement + * mobject and asset deletion operations. + */ + void clearSession () + { + UNIMPLEMENTED ("clear objects in current session"); + Session::current.clear(); + } + + /** @test reset global session config and start with + * a pristine default session. + * @todo define the "global session config", implement session default ctor + */ + void resetSession () + { + UNIMPLEMENTED ("construct a pristine session"); + Session::current.reset(); + } + + /** @test use a mock session serializer to load + * a preconfigured test session. Verify + * objects are wired correctly. + * @todo implement rebuilding session, implement mock session serializer + */ + void loadMockSession () + { + UNIMPLEMENTED ("rebuild session using a mock serializer"); + } + + /** @test load serialized session using the + * real session serializer implementation. + * @param src string with serialized session data + * @todo implement real session serializer + */ + void loadSession (const string& src) + { + UNIMPLEMENTED ("loding real sesion"); + } + + /** @test serialize (save) the current session + * @param dest string recieving the generated serialized stream + * @todo implement real session serializer + */ + void saveSession (string& dest) + { + UNIMPLEMENTED ("serialize current session"); + } + }; + + + /** Register this test class... */ + LAUNCHER (SessionManager_test, "function session"); + + + + } // namespace test + + } // namespace session + +} // namespace mobject diff --git a/tests/components/proc/mobject/session/sessionstructuretest.cpp b/tests/components/proc/mobject/session/sessionstructuretest.cpp new file mode 100644 index 000000000..d2bbe5477 --- /dev/null +++ b/tests/components/proc/mobject/session/sessionstructuretest.cpp @@ -0,0 +1,81 @@ +/* + SessionStructure(Test) - verifying basic Session/EDL structure + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "common/test/run.hpp" +#include "proc/mobject/session.hpp" +#include "proc/mobject/session/edl.hpp" // TODO only temporarily needed +#include "proc/mobject/session/fixture.hpp" // TODO only temporarily needed +#include "proc/assetmanager.hpp" +//#include "common/util.hpp" +//#include +#include + +//using boost::format; +using std::string; +using std::cout; + + +namespace mobject + { + namespace session + { + namespace test + { + using proc_interface::AssetManager; + using proc_interface::PAsset; + + + /******************************************************************************* + * @test access the current session and verify the correct + * structure of the most important components: The session + * contains an EDL, we can get at the Fixture, we have at least + * one Track and the corresponding Track asset is available. + * @todo define further criteria to be checked + * @todo implement EDL, Fixture, Session#rebuildFixture, asset::Track + */ + class SessionStructure_test : public Test + { + virtual void run(Arg arg) + { + PSess sess = Session::current; + ASSERT (0 <= sess->currEDL().size()); // TODO implement + ASSERT (0 <= sess->getFixture()->size()); // TODO implement + ASSERT (0 < sess->currEDL().getTracks().size()); // TODO implement + + PAsset track = sess->currEDL().getTracks()[0]; + AssetManager& aMang = AssetManager::instance(); + ASSERT (track == aMang.getAsset (track->getID())); + } + }; + + + /** Register this test class... */ + LAUNCHER (SessionStructure_test, "unit session"); + + + + } // namespace test + + } // namespace session + +} // namespace mobject diff --git a/tests/components/proc/mobject/session/testclip.cpp b/tests/components/proc/mobject/session/testclip.cpp new file mode 100644 index 000000000..0fefffad8 --- /dev/null +++ b/tests/components/proc/mobject/session/testclip.cpp @@ -0,0 +1,67 @@ +/* + TestClip - bookkeeping (asset) view of a media clip. + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + + 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. + +* *****************************************************/ + + +#include "proc/mobject/session/testclip.hpp" +#include "backend/mediaaccessfacade.hpp" +#include "backend/mediaaccessmock.hpp" +#include "proc/asset/media.hpp" +#include "proc/asset/clip.hpp" + +namespace mobject + { + namespace session + { + namespace test + { + typedef shared_ptr PC; + typedef shared_ptr PM; + typedef backend_interface::MediaAccessFacade MAF; + using backend_interface::test::MediaAccessMock; + using asset::VIDEO; + + + /** @todo find a way to link to an existing clip object. + * Idea: use the clip's copy operation, i.e. feed it + * to mobject::session::clip copy ctor + */ + TestClip::TestClip () + { + // install Mock-Interface to cinelerra backend + MAF::instance.injectSubclass (new MediaAccessMock); + + PM media = asset::Media::create("test-2", VIDEO); // query magic filename + PC clip = media->createClip(); + //TODO how to link to *this ??? + + MAF::instance.injectSubclass (0); // remove Mock-Interface + } + + /** storage for the TestClip-Factory */ + TestClip::Factory TestClip::create; + + + } // namespace test + + } // namespace session + +} // namespace mobject diff --git a/tests/components/proc/mobject/session/testclip.hpp b/tests/components/proc/mobject/session/testclip.hpp index ec9ec8715..39ed7df17 100644 --- a/tests/components/proc/mobject/session/testclip.hpp +++ b/tests/components/proc/mobject/session/testclip.hpp @@ -26,12 +26,16 @@ #include "common/test/run.hpp" -//#include "common/factory.hpp" +#include "common/factory.hpp" + +#include "proc/mobject/session/clip.hpp" //#include "common/util.hpp" + //#include #include +using std::tr1::shared_ptr; //using boost::format; using std::string; using std::cout; @@ -41,19 +45,40 @@ namespace mobject { namespace session { - /** - * Sample or Test Clip for checking - * various EDL, session and builder operations. - * - */ - class TestClip + namespace test { - public: - }; - + + /** + * Sample or Test Clip for checking + * various EDL, session and builder operations. + * Can be used as Mock object to record invoked operations. + * + */ + class TestClip : public mobject::session::Clip /////////////TODO how this???? + { + + /** smart ptr factory allowed to invoke TestClip's ctor */ + struct Factory : cinelerra::Factory + { + typedef shared_ptr PType; + PType operator() () { return PType (new TestClip, &destroy); } + protected: + static void destroy (TestClip* tc) { delete tc; } + }; + + + TestClip (); + friend class Factory; + + public: + static Factory create; + }; + + } // namespace test + } // namespace session } // namespace mobject diff --git a/tests/components/proc/mobject/session/testsession1.hpp b/tests/components/proc/mobject/session/testsession1.hpp index 5426047be..3e6ad3d25 100644 --- a/tests/components/proc/mobject/session/testsession1.hpp +++ b/tests/components/proc/mobject/session/testsession1.hpp @@ -1,5 +1,5 @@ /* - TESTSESSION1.hpp - complete session configuration use for various tests + TESTSESSION1.hpp - complete session configuration used for various tests Copyright (C) CinelerraCV 2007, Christian Thaeter @@ -21,11 +21,11 @@ */ -#ifndef MOBJECT_SESSION_TESTCLIP_H -#define MOBJECT_SESSION_TESTCLIP_H +#ifndef MOBJECT_SESSION_TESTSESSION_H +#define MOBJECT_SESSION_TESTSESSION_H -#include "proc/mobject/session/session.hpp" +#include "proc/mobject/session.hpp" #include "common/error.hpp" //#include "common/factory.hpp" //#include "common/util.hpp" @@ -42,19 +42,33 @@ namespace mobject { namespace session { - typedef std::auto_ptr PSession; /////TODO /** * Create a Test Session configuration usable for various Tests. * This Session holds two Clips and corresponds to "Example1" - * in the UML design. + * in the UML design. All changes are done to the (global) + * current session. */ - PSession Testsession1 () + inline void + buildTestseesion1 () { UNIMPLEMENTED ("Test-Session 1"); }; + + /** + * Analyze the current (gloal) Session to verify the + * configuration of "Test-Session 1" + */ + inline bool + checkTestsession1 () + { + UNIMPLEMENTED ("Test-Session 1"); + return false; + }; + + const string SESSION1_CLIP("TODO: some sensible way to refer to a clip"); } // namespace session diff --git a/uml/cinelerra3/128005 b/uml/cinelerra3/128005 index 0d1ddaf0c..e16107985 100644 --- a/uml/cinelerra3/128005 +++ b/uml/cinelerra3/128005 @@ -1,6 +1,6 @@ format 40 "design" // design - revision 9 + revision 10 modified_by 5 "hiv" // class settings //class diagram settings @@ -42,6 +42,7 @@ Not a real code package, rather a container for design drafts, specifications, d component 129925 "CommonLib" provided_classes + class_ref 135557 // Error class_ref 134917 // Time end end @@ -84,10 +85,10 @@ Not a real code package, rather a container for design drafts, specifications, d -_-> on component_ref 128005 // Builder end - end component 128645 "AssetManagement" + stereotype "subsystem" end component 128773 "Dispatcher" @@ -129,6 +130,16 @@ Not a real code package, rather a container for design drafts, specifications, d end end + component 130181 "MediaFactory" + stereotype "component" + required_classes + class_ref 139525 // MediaAccessFacade + end + end + + component 130309 "AssetDB" + stereotype "service" + end end componentview 128133 "interfaces" @@ -157,6 +168,19 @@ Not a real code package, rather a container for design drafts, specifications, d class_ref 134661 // ParamProvider end end + + componentdiagram 130693 "backend-components" + 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 + size A4 + end + + component 130437 "Media Access" + stereotype "service" + provided_classes + class_ref 139525 // MediaAccessFacade + end + end end package_ref 128645 // codegen diff --git a/uml/cinelerra3/128005.diagram b/uml/cinelerra3/128005.diagram index cf3c8dfa1..a16e8f676 100644 --- a/uml/cinelerra3/128005.diagram +++ b/uml/cinelerra3/128005.diagram @@ -1,4 +1,4 @@ -format 38 +format 40 fragment 128005 "UI Layer" xyzwh 321 22 2000 829 100 @@ -11,8 +11,8 @@ fragment 128261 "Backend Layer" xyzwh 64 848 2000 1089 105 end packagecanvas 128389 - package_ref 128133 // AssetManager - xyzwh 561 201 2005 265 214 + package_ref 128133 // Asset + xyzwh 561 201 2005 265 241 packagecanvas 128517 package_ref 128261 // MObject xyzwh 94 201 2006 458 335 @@ -38,7 +38,7 @@ note 129541 "Structures edited by the User" xyzwh 43 269 2016 181 41 componentcanvas 129669 component_ref 128645 // AssetManagement draw_component_as_icon default show_component_req_prov default show_component_rea default - xyzwh 577 241 2010 208 159 + xyzwh 577 232 2010 217 201 componentcanvas 129797 component_ref 128773 // Dispatcher draw_component_as_icon default show_component_req_prov default show_component_rea default xyzwh 406 31 2005 193 75 @@ -59,6 +59,12 @@ note 131973 "just works, never decides" xyzwh 317 668 2015 110 59 note 132101 "codecs, stream I/O here" xyzwh 376 592 2005 166 39 +componentcanvas 132229 component_ref 130181 // MediaFactory + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 593 354 2015 158 67 +componentcanvas 132357 component_ref 130309 // AssetDB + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 629 289 2020 155 63 simplerelationcanvas 131205 simplerelation_ref 128005 from ref 130053 z 2004 to ref 130181 simplerelationcanvas 131333 simplerelation_ref 128133 diff --git a/uml/cinelerra3/128133 b/uml/cinelerra3/128133 index 61a7035be..83eaacc4c 100644 --- a/uml/cinelerra3/128133 +++ b/uml/cinelerra3/128133 @@ -1,6 +1,6 @@ format 40 "Asset" // ProcessingLayer::Asset - revision 6 + revision 13 modified_by 5 "hiv" // class settings //class diagram settings @@ -53,6 +53,16 @@ format 40 size A4 end + classdiagram 131077 "Proc-Asset Relations" + 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 + size A4 + end + + classdiagram 131205 "Struct-Asset Relations" + 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 + size A4 + end + class 136453 "Asset" abstract visibility public stereotype "interface" cpp_decl "${comment}${template}class ${name}${inherit} @@ -354,6 +364,112 @@ ${inlines} classrelation_ref 139909 // b multiplicity "" parent class_ref 136453 // Asset end + + operation 133253 "createClip" + public return_type class_ref 128901 // Clip + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "create a (possibly compound) Clip refering to this media, ready to be added to the EDL." + end + + operation 133381 "howtoProc" + public return_type class_ref 138757 // ProcPatt + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "@return descriptor how to build a render pipeline corresponding to this media" + end + + classrelation 143237 // + relation 141317 -_-> + a default + cpp default "#include in header" + classrelation_ref 143237 // + b multiplicity "" parent class_ref 138757 // ProcPatt + end + end + + class 139397 "MediaFactory" + visibility public + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "specialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well" + simplerelation 129285 + -_-> + on + package_ref 129157 // BackendLayer + end + + simplerelation 129413 + -_-> + on + package_ref 129157 // BackendLayer + end + + classrelation 144261 // + relation 142341 -_-> + a default + cpp default "#include in header" + classrelation_ref 144261 // + b multiplicity "" parent class_ref 139525 // MediaAccessFacade + end + end + + class 138501 "CompoundMedia" + visibility public + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "compound of several elementary media tracks, +e.g. the individual media streams found in one media file" + classrelation 142213 // + relation 140421 ---|> + a public + cpp default "${type}" + classrelation_ref 142213 // + b multiplicity "" parent class_ref 136709 // Media + end + + classrelation 142341 // tracks () + relation 140549 o--> + stereotype "vector" + a role_name "tracks" multiplicity "1..*" protected + comment "elementary media assets comprising this compound" + cpp default " ${comment}${static}${mutable}${volatile}${const}${stereotype}<${type} *> ${name}${value}; +" + classrelation_ref 142341 // tracks () + b multiplicity "*" parent class_ref 136709 // Media + end end class 136837 "Proc" @@ -568,6 +684,15 @@ ${inlines} classrelation_ref 141317 // b multiplicity "" parent class_ref 136965 // Struct end + + classrelation 144389 // wiringTemplate () + relation 142469 ---> + a role_name "wiringTemplate" multiplicity "1" protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; +" + classrelation_ref 144389 // wiringTemplate () + b multiplicity "" parent class_ref 138757 // ProcPatt + end end class 138117 "OutPort" @@ -591,6 +716,37 @@ ${inlines} end end + class 138757 "ProcPatt" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "special type of structural Asset representing information how to build some part of the render engine's processing nodes network." + classrelation 143109 // + relation 141189 ---|> + a public + cpp default "${type}" + classrelation_ref 143109 // + b multiplicity "" parent class_ref 136965 // Struct + end + + classrelation 143621 // instructions () + relation 141701 *--> + stereotype "vector" + a role_name "instructions" multiplicity "1..*" const_relation protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${stereotype}<${type}> ${name}${value}; +" + classrelation_ref 143621 // instructions () + b multiplicity "1" parent class_ref 139013 // BuildInstruct + end + end + class 138245 "Dataset" visibility package cpp_decl "${comment}${template}class ${name}${inherit} @@ -625,5 +781,87 @@ ${inlines} comment "Implementation of the registry holding all Asset instances known to the Asset Manager subsystem. As of 8/2007 implemented by a hashtable." end + + class 139013 "BuildInstruct" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "(Interface) building instructions to be executed by the Builder on the render node network under construction." + end + + class 139141 "DoAttach" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + classrelation 143749 // + relation 141829 ---|> + a public + cpp default "${type}" + classrelation_ref 143749 // + b multiplicity "" parent class_ref 139013 // BuildInstruct + end + + classrelation 144133 // nodes () + relation 142213 o--> + stereotype "vector" + a role_name "nodes" multiplicity "1..*" const_relation public + cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; +" + classrelation_ref 144133 // nodes () + b multiplicity "" parent class_ref 136837 // Proc + end + + attribute 131461 "point" + const_attribute public explicit_type "string" + cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; +" + java_decl "" + idl_decl "" + comment "identifying the point where the nodes should be attached" + end + end + + class 139269 "DoRecurse" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + classrelation 143877 // + relation 141957 ---|> + a public + cpp default "${type}" + classrelation_ref 143877 // + b multiplicity "" parent class_ref 139013 // BuildInstruct + end + + classrelation 144005 // subPattern () + relation 142085 ---> + a role_name "subPattern" multiplicity "1" const_relation protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; +" + classrelation_ref 144005 // subPattern () + b multiplicity "*" parent class_ref 138757 // ProcPatt + end + end end end diff --git a/uml/cinelerra3/128133.diagram b/uml/cinelerra3/128133.diagram index 32bf1532d..c0272f7ed 100644 --- a/uml/cinelerra3/128133.diagram +++ b/uml/cinelerra3/128133.diagram @@ -1,8 +1,8 @@ format 40 -classcanvas 128005 class_ref 128005 // Session +classcanvas 128005 class_ref 128005 // SessionImpl 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 30 608 2000 + xyz 19 606 2000 end classcanvas 128133 class_ref 128133 // EDL 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 @@ -38,23 +38,23 @@ classcanvas 131461 class_ref 128901 // Clip end classcanvas 131717 class_ref 129029 // Effect 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 336 361 2000 + xyz 332 361 2000 end classcanvas 131973 class_ref 129157 // Meta 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 389 368 2000 end -classcanvas 132229 class_ref 129285 // DirectPlacement +classcanvas 132229 class_ref 129285 // FixedPlacement 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 664 373 2000 + xyz 665 373 2000 end classcanvas 132869 class_ref 129413 // RelativePlacement 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 471 346 2000 + xyz 479 276 2000 end classcanvas 134149 class_ref 129541 // Allocation 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 590 359 2000 + xyz 590 373 2000 end classcanvas 134405 class_ref 129669 // Label 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 @@ -90,8 +90,20 @@ classcanvas 138629 class_ref 135173 // Segment 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 417 678 2000 end -relationcanvas 128389 relation_ref 128005 // - from ref 128005 z 1999 stereotype "<>" xyz 139 626 3000 to ref 128133 +classcanvas 139013 class_ref 138629 // CompoundClip + 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 272 466 2000 + end +classcanvas 139269 class_ref 139653 // Session + 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 23 458 2000 + end +classcanvas 139653 class_ref 139781 // SessManager + 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 101 301 2000 + end +relationcanvas 128389 relation_ref 128005 // + from ref 128005 z 1999 to ref 128133 role_a_pos 201 603 3000 no_role_b multiplicity_a_pos 205 636 3000 no_multiplicity_b relationcanvas 128517 relation_ref 128133 // @@ -112,8 +124,8 @@ relationcanvas 129157 relation_ref 128389 // multiplicity_a_pos 314 687 3000 no_multiplicity_b relationcanvas 129797 relation_ref 128645 // from ref 129413 z 1999 stereotype "<>" xyz 471 143 3000 to ref 129669 - role_a_pos 513 144 3000 role_b_pos 401 144 3000 - multiplicity_a_pos 547 177 3000 multiplicity_b_pos 401 177 3000 + role_a_pos 513 144 3000 role_b_pos 404 145 3000 + multiplicity_a_pos 547 177 3000 multiplicity_b_pos 393 145 3000 relationcanvas 130181 relation_ref 129029 // geometry HV from ref 128261 z 1999 stereotype "<>" xyz 334 914 3000 to point 339 931 @@ -149,16 +161,17 @@ relationcanvas 132485 relation_ref 129797 // no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 132997 relation_ref 129925 // - from ref 132869 z 1999 to point 486 247 + from ref 132869 z 1999 to point 529 240 line 133893 z 1999 to ref 129413 - role_a_pos 401 172 3000 no_role_b - multiplicity_a_pos 401 205 3000 multiplicity_b_pos 495 321 3000 + role_a_pos 439 215 3000 no_role_b + multiplicity_a_pos 401 197 3000 multiplicity_b_pos 515 251 3000 relationcanvas 134533 relation_ref 130309 // from ref 134405 z 1999 to ref 131973 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 135173 relation_ref 130565 // - from ref 134149 z 1999 to ref 129669 + from ref 134149 z 1999 to point 610 312 + line 140037 z 1999 to ref 129669 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 135301 relation_ref 130693 // @@ -202,4 +215,18 @@ relationcanvas 138757 relation_ref 137093 // line 138885 z 1999 to ref 135813 role_a_pos 524 717 3000 no_role_b multiplicity_a_pos 505 783 3000 no_multiplicity_b +relationcanvas 139141 relation_ref 140805 // + from ref 139013 z 1999 to ref 131461 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 139525 relation_ref 142725 // + from ref 128005 z 1999 stereotype "<>" xyz 57 558 3000 to ref 139269 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 139781 relation_ref 142853 // + geometry HV + from ref 139269 z 1999 to point 140 494 + line 139909 z 1999 to ref 139653 + role_a_pos 152 426 3000 no_role_b + multiplicity_a_pos 126 426 3000 no_multiplicity_b end diff --git a/uml/cinelerra3/128138 b/uml/cinelerra3/128138 index 33c1211c8..be431c6db 100644 --- a/uml/cinelerra3/128138 +++ b/uml/cinelerra3/128138 @@ -1,7 +1,7 @@ format 40 "design" // BackendLayer::design - revision 8 - modified_by 10 "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 @@ -318,7 +318,7 @@ ${inlines} classrelation_ref 129802 // end - classrelation 130058 // write_buffer () + classrelation 130058 // relation_ref 129418 // end end @@ -528,7 +528,7 @@ ${inlines} b role_name "write_buffer" multiplicity "0..1" protected cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " - classrelation_ref 130058 // write_buffer () + classrelation_ref 130058 // end classrelation 130314 // diff --git a/uml/cinelerra3/128261 b/uml/cinelerra3/128261 index e6d8a8100..48dbcaf73 100644 --- a/uml/cinelerra3/128261 +++ b/uml/cinelerra3/128261 @@ -1,6 +1,6 @@ format 40 "MObject" // ProcessingLayer::MObject - revision 17 + revision 22 modified_by 5 "hiv" // class settings //class diagram settings @@ -48,7 +48,65 @@ format 40 size A4 end - class 128005 "Session" + class 139653 "Session" + abstract visibility public + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "Primary Interface for all editing tasks. +The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered." + operation 133509 "currEDL" + public return_type class_ref 128133 // EDL + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "The EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands." + end + + operation 133637 "getFixture" + public explicit_return_type "Fixture&" + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "While the session can be comprised of several EDLs, +there is only one Fixture, which represents the actual +configuration of all Objects to be rendered" + end + + classrelation 144773 // current () + relation 142853 ---> + a role_name "current" multiplicity "1" class_relation public + comment "Standard access path to get at the current session via the Session Manager, which acts as a \"PImpl\" smart pointer" + cpp default " ${comment}${static}${mutable}${volatile}${const}${type}& ${name}${value}; +" + classrelation_ref 144773 // current () + b multiplicity "" parent class_ref 139781 // SessManager + end + end + + class 128005 "SessionImpl" visibility package cpp_decl "${comment}${template}class ${name}${inherit} { @@ -59,13 +117,13 @@ ${inlines} idl_decl "" explicit_switch_type "" - classrelation 128005 // edls () - relation 128005 o--> - stereotype "list" + comment "Implementation class for the Session interface" + classrelation 128005 // edls () + relation 128005 *--> a role_name "edls" multiplicity "1..*" protected - cpp default " ${comment}${static}${mutable}${volatile}${const}${type} * ${name}${value}; + cpp default " ${comment}${static}${mutable}${volatile}${const}${stereotype}<${type}> ${name}${value}; " - classrelation_ref 128005 // edls () + classrelation_ref 128005 // edls () b multiplicity "" parent class_ref 128133 // EDL end @@ -77,6 +135,99 @@ ${inlines} classrelation_ref 128261 // fixture () b multiplicity "" parent class_ref 128261 // Fixture end + + classrelation 144645 // + relation 142725 -_-|> + stereotype "PImpl" + a public + cpp default "${type}" + classrelation_ref 144645 // + b multiplicity "" parent class_ref 139653 // Session + end + end + + class 139781 "SessManager" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + operation 133765 "clear" + public explicit_return_type "void" + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "clear current session contents +without resetting overall session config. +Afterwards, the session will contain only one +empty EDL, while all Assets are retained. +" + end + + operation 133893 "reset" + public explicit_return_type "void" + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "reset all session config and +start with a pristine default session." + end + + operation 134021 "load" + public explicit_return_type "void" + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "replace the current session by a new +session loaded from serialized state." + end + + operation 134149 "save" + public explicit_return_type "void" + nparams 0 + cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}${)}${const}${volatile} ${throw}${abstract};" + cpp_def "${comment}${inline}${type} +${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} +{ + ${body} +} + +" + + + comment "create a complete, serialized representation +of the current session config and contents. +@todo how to serialize, prameters, return value?" + end end class 128133 "EDL" @@ -415,15 +566,67 @@ ${inlines} comment "startpos in source" end - classrelation 141829 // source () - relation 140037 ---> - a role_name "source" multiplicity "1" const_relation protected + classrelation 142469 // source () + relation 140677 ---> + a role_name "source" multiplicity "1" protected comment "the media source this clip referes to" cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " - classrelation_ref 141829 // source () - b multiplicity "*" parent class_ref 137349 // Clip - association_type class_ref 128901 // Clip + classrelation_ref 142469 // source () + b multiplicity "*" parent class_ref 136709 // Media + end + end + + class 138885 "SimpleClip" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "Elementary clip consisting of only one media stream" + classrelation 143365 // + relation 141445 ---|> + a public + cpp default "${type}" + classrelation_ref 143365 // + b multiplicity "" parent class_ref 128901 // Clip + end + end + + class 138629 "CompoundClip" + visibility package + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + associated_diagram classdiagram_ref 128133 // Session structure + comment "Clip MObject which is actually a compound of several elementary clips, +e.g. the several streams found within multichannels media." + classrelation 142597 // + relation 140805 ---|> + a public + cpp default "${type}" + classrelation_ref 142597 // + b multiplicity "" parent class_ref 128901 // Clip + end + + classrelation 143493 // components () + relation 141573 o--> + a role_name "components" multiplicity "1..*" protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; +" + classrelation_ref 143493 // components () + b multiplicity "*" parent class_ref 128901 // Clip end end @@ -476,7 +679,7 @@ ${inlines} end end - class 129285 "DirectPlacement" + class 129285 "FixedPlacement" visibility package cpp_decl "${comment}${template}class ${name}${inherit} { diff --git a/uml/cinelerra3/128389 b/uml/cinelerra3/128389 index 6581cb200..35d64e6bd 100644 --- a/uml/cinelerra3/128389 +++ b/uml/cinelerra3/128389 @@ -1,6 +1,6 @@ format 40 "RenderEngine" // ProcessingLayer::RenderEngine - revision 11 + revision 12 modified_by 5 "hiv" // class settings //class diagram settings @@ -563,7 +563,7 @@ ${inlines} classrelation 141701 // relation 139909 -_-> a default - cpp default "Generated" + cpp default "#include in header" classrelation_ref 141701 // b multiplicity "" parent class_ref 136709 // Media end diff --git a/uml/cinelerra3/128389.diagram b/uml/cinelerra3/128389.diagram index 7c1a670cd..b031adc09 100644 --- a/uml/cinelerra3/128389.diagram +++ b/uml/cinelerra3/128389.diagram @@ -14,11 +14,11 @@ classcanvas 128389 class_ref 131589 // ExitNode end classcanvas 128517 class_ref 131717 // ProcNode 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 462 265 2000 + xyz 462 264 2000 end classcanvas 129029 class_ref 131845 // Trafo 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 496 444 2000 + xyz 496 443 2000 end classcanvas 129157 class_ref 131973 // Link 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 @@ -38,7 +38,7 @@ classcanvas 129541 class_ref 132357 // Mask end classcanvas 129669 class_ref 132485 // PluginAdapter 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 506 622 2000 + xyz 506 621 2000 end classcanvas 129797 class_ref 132613 // GLPipe 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 @@ -82,7 +82,7 @@ classcanvas 137221 class_ref 133765 // Source end classcanvas 139781 class_ref 135045 // CodecAdapter 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 599 622 2000 + xyz 599 621 2000 end relationcanvas 128261 relation_ref 131845 // from ref 128005 z 1999 stereotype "<>" xyz 178 278 3000 to point 216 200 @@ -102,8 +102,8 @@ relationcanvas 129925 relation_ref 132101 // no_multiplicity_a no_multiplicity_b relationcanvas 130053 relation_ref 132229 // geometry VHV - from ref 129029 z 1999 to point 516 384 - line 130949 z 1999 to point 499 384 + from ref 129029 z 1999 to point 516 383 + line 130949 z 1999 to point 499 383 line 131077 z 1999 to ref 128517 no_role_a no_role_b no_multiplicity_a no_multiplicity_b @@ -198,11 +198,11 @@ relationcanvas 137989 relation_ref 134917 // no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 139397 relation_ref 135429 // - from ref 128517 z 1999 to point 432 265 - line 139525 z 1999 to point 432 295 + from ref 128517 z 1999 to point 432 264 + line 139525 z 1999 to point 432 294 line 139653 z 1999 to ref 128517 - role_a_pos 414 273 3000 no_role_b - no_multiplicity_a multiplicity_b_pos 445 292 3000 + role_a_pos 414 272 3000 no_role_b + no_multiplicity_a multiplicity_b_pos 445 291 3000 relationcanvas 139909 relation_ref 136965 // from ref 139781 z 1999 to ref 129029 no_role_a no_role_b diff --git a/uml/cinelerra3/129157 b/uml/cinelerra3/129157 index 10e4a87d1..c1920331a 100644 --- a/uml/cinelerra3/129157 +++ b/uml/cinelerra3/129157 @@ -1,14 +1,14 @@ -format 38 +format 40 "BackendLayer" // BackendLayer - revision 5 - modified_by 10 "ct" + revision 6 + 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 @@ -26,6 +26,116 @@ format 38 package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default show_infonote default drawing_language default + classview 129029 "Interface" + //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 + //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 + write_horizontally default 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 class_drawing_mode default drawing_language default draw_all_relations default shadow default + //state diagram settings + package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default + show_activities default region_horizontally default drawing_language default + //class settings + //activity diagram settings + package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default + show_infonote default drawing_language default + + classdiagram 130949 "interface components" + draw_all_relations no 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 + size A4 + end + + class 139525 "MediaAccessFacade" + visibility public stereotype "boundary" + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "${comment}${abstract}${local}interface ${name}${inherit} { +${members}}; +" + explicit_switch_type "" + + comment "provides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions" + end + end + + usecaseview 128133 "usage" + //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 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 + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + usecasediagram 130821 "backend use cases" + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + size A4 + end + + usecase 128005 "load Media" + //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 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 + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + simplerelation 129029 + -_-> + stereotype "include" + on usecase_ref 128133 // access File + end + + simplerelation 129157 + -_-> + stereotype "include" + on usecase_ref 128261 // detect Channels + comment "after accessing the file, detect the channel/stream structure" + end + end + + usecase 128133 "access File" + //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 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 + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + end + + usecase 128261 "detect Channels" + //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 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 + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + end + + usecase 128389 "access Channel" + //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 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 + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + end + end + package_ref 128138 // design componentview 128138 "Cache" diff --git a/uml/cinelerra3/129541 b/uml/cinelerra3/129541 index 71af7ea97..17dbcb447 100644 --- a/uml/cinelerra3/129541 +++ b/uml/cinelerra3/129541 @@ -1,6 +1,6 @@ format 40 "backend" // design::codegen::backend - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -29,7 +29,7 @@ format 40 stereotype "src" cpp_h_dir "backend" cpp_src_dir "backend" - cpp_namespace "data" + cpp_namespace "backend_interface" comment "sourcecode package Data backend classes here..." @@ -37,5 +37,43 @@ Data backend classes here..." //deployment diagram settings package_name_in_tab default show_context default write_horizontally 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 + artifact 138629 "mediaaccessfacade" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 139525 // MediaAccessFacade + end + comment "functions for querying media file and channels." + end end end diff --git a/uml/cinelerra3/130053 b/uml/cinelerra3/130053 index 27985ba52..73baabcbc 100644 --- a/uml/cinelerra3/130053 +++ b/uml/cinelerra3/130053 @@ -1,6 +1,6 @@ format 40 "asset" // design::codegen::proc::asset - revision 5 + revision 7 modified_by 5 "hiv" // class settings //class diagram settings @@ -151,6 +151,7 @@ ${members} ${namespace_end}" associated_classes class_ref 136709 // Media + class_ref 139397 // MediaFactory end comment "key abstraction: media-like assets" end @@ -311,6 +312,46 @@ ${namespace_end}" comment "bookkeeping (asset) view of a media clip." end + artifact 138245 "compoundmedia" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 138501 // CompoundMedia + end + comment "a special clip as a compound of several elementary media tracks, +e.g. the individual media streams found in one media file" + end + artifact 136965 "preview" stereotype "source" cpp_h "/* @@ -545,6 +586,86 @@ ${namespace_end}" comment "structural asset holding the configuration of a track in the EDL" end + artifact 137989 "procpatt" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 138757 // ProcPatt + end + comment "template for building some render processing network" + end + + artifact 138117 "buildinstruct" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 139013 // BuildInstruct + class_ref 139269 // DoRecurse + class_ref 139141 // DoAttach + end + comment "Instructions for building some configuration of render nodes." + end + artifact 137861 "db" stereotype "source" cpp_h "/* diff --git a/uml/cinelerra3/130053.diagram b/uml/cinelerra3/130053.diagram index 36438c6a4..da938cd73 100644 --- a/uml/cinelerra3/130053.diagram +++ b/uml/cinelerra3/130053.diagram @@ -88,6 +88,8 @@ 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 +arrowjunctioncanvas 140805 class_ref 135557 // Error + xyz 790 194 2000 label_xy 787 215 line 132101 ---O from ref 129541 z 1999 to point 301 541 line 139269 z 1999 to ref 131973 @@ -131,5 +133,7 @@ line 139525 ---O geometry HV line 139781 z 1999 to ref 139397 line 140677 ---( from ref 135685 z 1999 to ref 140549 +line 140933 ---O + from ref 132869 z 1999 to ref 140805 preferred_whz 0 0 0.8 end diff --git a/uml/cinelerra3/130181 b/uml/cinelerra3/130181 index 0bb6e6de6..2204811cd 100644 --- a/uml/cinelerra3/130181 +++ b/uml/cinelerra3/130181 @@ -1,6 +1,6 @@ format 40 "mobject" // design::codegen::proc::mobject - revision 7 + revision 8 modified_by 5 "hiv" // class settings //class diagram settings @@ -39,6 +39,45 @@ including the Session (EDL), Builder and Processing Controller" package_name_in_tab default show_context default write_horizontally 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 comment "defines source files to be generated by BOUML" + artifact 138757 "session" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 139653 // Session + end + comment "Interface: the session edited by the user" + end + artifact 128261 "mobject" stereotype "source" cpp_h "/* diff --git a/uml/cinelerra3/130309.diagram b/uml/cinelerra3/130309.diagram index cf03630ad..d9d44ae03 100644 --- a/uml/cinelerra3/130309.diagram +++ b/uml/cinelerra3/130309.diagram @@ -10,101 +10,127 @@ classcanvas 128133 class_ref 136581 // AssetManager end packagecanvas 128517 package_ref 128133 // Asset - show_context_mode namespace xyzwh 217 182 1994 575 534 + show_context_mode namespace xyzwh 214 182 1994 610 571 classcanvas 128645 class_ref 136709 // Media 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 273 347 2005 + xyz 258 330 2005 end classcanvas 128773 class_ref 136837 // Proc 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 428 347 2005 + xyz 502 330 2005 end classcanvas 128901 class_ref 136965 // Struct 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 603 347 2005 + xyz 654 330 2005 end classcanvas 129029 class_ref 137093 // Meta 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 723 347 2005 + xyz 760 330 2005 end classcanvas 130821 class_ref 137221 // Category 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 277 233 2004 + xyz 276 233 2004 end classcanvas 131077 class_ref 137349 // Clip 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 236 445 2000 + xyz 318 445 2000 end classcanvas 131333 class_ref 137477 // Unknown 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 303 529 2000 + xyz 381 529 2000 end classcanvas 131461 class_ref 137605 // Preview 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 308 445 2005 + xyz 386 445 2005 end classcanvas 131973 class_ref 137733 // Effect 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 402 445 2000 + xyz 476 445 2000 end classcanvas 132101 class_ref 137861 // Codec 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 463 445 2000 + xyz 537 445 2000 end classcanvas 132485 class_ref 137989 // Track 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 563 445 2000 + xyz 614 445 2000 end classcanvas 132613 class_ref 138117 // OutPort 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 626 445 2000 + xyz 677 445 2000 end classcanvas 132997 class_ref 138245 // Dataset 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 719 445 2000 + xyz 756 445 2000 end classcanvas 133253 class_ref 138373 // DB 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 486 233 2000 + xyz 485 233 2000 + end +classcanvas 133765 class_ref 138501 // CompoundMedia + 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 244 529 2005 + end +classcanvas 135813 class_ref 138757 // ProcPatt + 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 637 506 2000 + end +classcanvas 136709 class_ref 139141 // DoAttach + 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 566 688 2000 + end +classcanvas 136837 class_ref 139013 // BuildInstruct + 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 604 620 2000 + end +classcanvas 136965 class_ref 139269 // DoRecurse + 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 638 688 2000 end relationcanvas 129157 relation_ref 138117 // geometry VHV - from ref 128645 z 1999 to point 293 315 - line 129797 z 1999 to point 138 315 + from ref 128645 z 1999 to point 292 307 + line 129797 z 1999 to point 138 307 line 129925 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 129285 relation_ref 138245 // geometry VHV - from ref 128773 z 1999 to point 448 315 - line 130053 z 1999 to point 138 315 + from ref 128773 z 1999 to point 522 307 + line 130053 z 1999 to point 138 307 line 130181 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 129413 relation_ref 138373 // geometry VHV - from ref 128901 z 1999 to point 623 315 - line 130309 z 1999 to point 138 315 + from ref 128901 z 1999 to point 674 307 + line 130309 z 1999 to point 138 307 line 130437 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 129541 relation_ref 138501 // geometry VHV - from ref 129029 z 1999 to point 743 315 - line 130565 z 1999 to point 138 315 + from ref 129029 z 1999 to point 780 307 + line 130565 z 1999 to point 138 307 line 130693 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 130949 relation_ref 138629 // from ref 128005 z 1999 to ref 130821 - role_a_pos 223 229 3000 no_role_b - multiplicity_a_pos 260 250 3000 multiplicity_b_pos 194 194 3000 + role_a_pos 222 217 3000 no_role_b + multiplicity_a_pos 259 250 3000 multiplicity_b_pos 194 194 3000 relationcanvas 131205 relation_ref 138757 // - from ref 131077 z 1999 to ref 128645 + geometry VHV + from ref 131077 z 1999 to point 338 423 + line 134277 z 1999 to point 292 423 + line 134405 z 1999 to ref 128645 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 131717 relation_ref 139013 // - from ref 131461 z 2004 to ref 128645 + geometry VHV + from ref 131461 z 2004 to point 410 423 + line 134021 z 2004 to point 292 423 + line 134149 z 2004 to ref 128645 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 131845 relation_ref 139141 // @@ -133,10 +159,54 @@ relationcanvas 133125 relation_ref 139781 // no_multiplicity_a no_multiplicity_b relationcanvas 133381 relation_ref 140293 // geometry HV - from ref 128133 z 1999 to point 506 93 + from ref 128133 z 1999 to point 505 93 line 133637 z 1999 to ref 133253 - role_a_pos 518 208 3000 no_role_b - multiplicity_a_pos 492 208 3000 multiplicity_b_pos 386 104 3000 + role_a_pos 517 208 3000 no_role_b + multiplicity_a_pos 491 208 3000 multiplicity_b_pos 386 104 3000 +relationcanvas 134533 relation_ref 140421 // + from ref 133765 z 2004 to ref 128645 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 134917 relation_ref 140549 // + from ref 133765 z 2004 stereotype "<>" xyz 228 493 3000 to point 225 545 + line 135301 z 2004 to point 225 365 + line 135173 z 2004 to ref 128645 + role_a_pos 216 343 3000 no_role_b + multiplicity_a_pos 231 376 3000 multiplicity_b_pos 229 556 3000 +relationcanvas 136069 relation_ref 141189 // + from ref 135813 z 1999 to ref 128901 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 136197 relation_ref 141317 // + from ref 128645 z 1999 to point 324 392 + line 136581 z 1999 to point 447 392 + line 136453 z 1999 to point 471 525 + line 136325 z 1999 to ref 135813 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 137093 relation_ref 141701 // + from ref 135813 z 1999 stereotype "<>" xyz 631 569 3000 to ref 136837 + role_a_pos 657 595 3000 no_role_b + multiplicity_a_pos 621 595 3000 multiplicity_b_pos 642 557 3000 +relationcanvas 137221 relation_ref 141829 // + from ref 136709 z 1999 to ref 136837 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 137349 relation_ref 141957 // + from ref 136965 z 1999 to ref 136837 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 137477 relation_ref 142085 // + from ref 136965 z 1999 to point 728 656 + line 137605 z 1999 to point 728 562 + line 137733 z 1999 to ref 135813 + role_a_pos 703 523 3000 no_role_b + multiplicity_a_pos 703 556 3000 multiplicity_b_pos 704 688 3000 +relationcanvas 137861 relation_ref 142213 // + from ref 136709 z 1999 stereotype "<>" xyz 538 659 3000 to point 595 388 + line 137989 z 1999 to ref 128773 + role_a_pos 556 343 3000 no_role_b + multiplicity_a_pos 556 376 3000 no_multiplicity_b line 128261 -_-_ geometry HV from ref 128005 z 1999 to point 331 150 line 128389 z 1999 to ref 128133 diff --git a/uml/cinelerra3/130437 b/uml/cinelerra3/130437 index d1f52243d..514cc634e 100644 --- a/uml/cinelerra3/130437 +++ b/uml/cinelerra3/130437 @@ -1,6 +1,6 @@ format 40 "session" // design::codegen::proc::mobject::session - revision 6 + revision 9 modified_by 5 "hiv" // class settings //class diagram settings @@ -38,7 +38,7 @@ Everything concerning the EDL and Session, within the MObject Subsystem" package_name_in_tab default show_context default write_horizontally 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 comment "defines source files to be generated by BOUML" - artifact 128517 "session" + artifact 128517 "sessionimpl" stereotype "source" cpp_h "/* ${NAME}.hpp - ${description} @@ -72,9 +72,48 @@ ${namespace_start} ${members} ${namespace_end}" associated_classes - class_ref 128005 // Session + class_ref 128005 // SessionImpl end - comment "holds the complete session to be edited by the user" + comment "holds the complete session data to be edited by the user" + end + + artifact 138885 "sessmanager" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 139781 // SessManager + end + comment "global session access and lifecycle" end artifact 128645 "edl" @@ -316,6 +355,84 @@ ${namespace_end}" comment "a Media Clip" end + artifact 138373 "simpleclip" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 138885 // SimpleClip + end + comment "Elementary clip (single media stream only)" + end + + artifact 138501 "compoundclip" + stereotype "source" + cpp_h "/* + ${NAME}.hpp - ${description} +@{CopyrightClaim}@{GPLHeader} +*/ + + +#ifndef ${NAMESPACE}_${NAME}_H +#define ${NAMESPACE}_${NAME}_H + +${includes} +${declarations} + + +${namespace_start} + +${definition} +${namespace_end} +#endif +" + cpp_src "/* + ${Name} - ${description} +@{CopyrightClaim}@{GPLHeader} +* *****************************************************/ + + +${includes} +${namespace_start} + + +${members} +${namespace_end}" + associated_classes + class_ref 138629 // CompoundClip + end + comment "compound of several clips (multichannel)" + end + artifact 129541 "effect" stereotype "source" cpp_h "/* @@ -428,7 +545,7 @@ ${namespace_start} ${members} ${namespace_end}" associated_classes - class_ref 129285 // DirectPlacement + class_ref 129285 // FixedPlacement end end diff --git a/uml/cinelerra3/130437.diagram b/uml/cinelerra3/130437.diagram index c10d368c7..2388a38ee 100644 --- a/uml/cinelerra3/130437.diagram +++ b/uml/cinelerra3/130437.diagram @@ -2,19 +2,19 @@ format 40 classcanvas 128005 class_ref 137349 // Clip 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 469 148 2000 + xyz 463 147 2000 end classcanvas 128133 class_ref 136709 // Media 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 545 50 2005 + xyz 527 41 2005 end classcanvas 128261 class_ref 137477 // Unknown 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 536 232 2000 + xyz 530 231 2000 end classcanvas 128389 class_ref 137605 // Preview 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 541 148 2005 + xyz 535 147 2005 end classcanvas 128901 class_ref 128901 // Clip 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 @@ -30,40 +30,84 @@ classcanvas 129157 class_ref 128773 // AbstractMO end classcanvas 130309 class_ref 131717 // ProcNode 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 271 279 2000 + xyz 265 278 2000 end classcanvas 130821 class_ref 133765 // Source 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 396 407 2000 + xyz 390 406 2000 end classcanvas 131077 class_ref 135045 // CodecAdapter 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 320 477 2000 + xyz 314 476 2000 end classcanvas 131205 class_ref 131845 // Trafo 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 317 407 2000 + xyz 311 406 2000 end classcanvas 134277 class_ref 133381 // AFrame 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 530 480 2000 + xyz 149 597 2000 end classcanvas 134405 class_ref 133509 // VFrame 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 584 480 2000 + xyz 206 597 2000 end classcanvas 134661 class_ref 133253 // Frame 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 571 355 2000 + xyz 193 472 2000 end packagecanvas 135685 package_ref 128261 // MObject - xyzwh 24 10 1994 185 313 + xyzwh 24 10 1994 187 356 packagecanvas 135813 - package_ref 128133 // AssetManager - xyzwh 454 10 1994 198 292 + package_ref 128133 // Asset + xyzwh 447 9 1994 391 570 note 136837 "the Builder implements each Clip by a source node and maybe some codec" xyzwh 53 376 2000 219 61 +classcanvas 137221 class_ref 138501 // CompoundMedia + 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 600 147 3005 + end +classcanvas 138373 class_ref 138629 // CompoundClip + 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 110 293 2000 + end +classcanvas 138885 class_ref 136965 // Struct + 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 735 49 2005 + end +classcanvas 139013 class_ref 138757 // ProcPatt + 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 728 113 2000 + end +classcanvas 140293 class_ref 138885 // SimpleClip + 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 32 293 3005 + end +classcanvas 140805 class_ref 139013 // BuildInstruct + 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 694 231 2000 + end +classcanvas 141061 class_ref 136837 // Proc + 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 598 392 2000 + end +classcanvas 141189 class_ref 139141 // DoAttach + 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 656 299 2000 + end +classcanvas 141317 class_ref 139269 // DoRecurse + 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 728 299 2000 + end +classcanvas 142725 class_ref 137733 // Effect + 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 564 480 2004 + end +classcanvas 142981 class_ref 137861 // Codec + 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 618 480 2004 + end relationcanvas 128517 relation_ref 139141 // from ref 128261 z 1999 to ref 128389 no_role_a no_role_b @@ -88,60 +132,127 @@ relationcanvas 129669 relation_ref 129285 // no_multiplicity_a no_multiplicity_b relationcanvas 132357 relation_ref 132229 // geometry VHV - from ref 131205 z 1999 to point 337 373 - line 132485 z 1999 to point 308 373 + from ref 131205 z 1999 to point 331 372 + line 132485 z 1999 to point 302 372 line 132613 z 1999 to ref 130309 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 132741 relation_ref 135429 // - from ref 130309 z 1999 to point 241 279 - line 132869 z 1999 to point 241 309 + from ref 130309 z 1999 to point 235 278 + line 132869 z 1999 to point 235 308 line 132997 z 1999 to ref 130309 - role_a_pos 223 287 3000 no_role_b - no_multiplicity_a multiplicity_b_pos 254 306 3000 + role_a_pos 217 286 3000 no_role_b + no_multiplicity_a multiplicity_b_pos 248 305 3000 relationcanvas 133125 relation_ref 136965 // from ref 131077 z 1999 to ref 131205 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 133893 relation_ref 134661 // geometry VHV - from ref 130821 z 1999 to point 418 373 - line 134021 z 1999 to point 308 373 + from ref 130821 z 1999 to point 412 372 + line 134021 z 1999 to point 302 372 line 134149 z 1999 to ref 130309 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 134789 relation_ref 133893 // geometry VHV - from ref 134277 z 1999 to point 554 447 - line 134917 z 1999 to point 608 447 + from ref 134277 z 1999 to point 173 564 + line 134917 z 1999 to point 230 564 line 135045 z 1999 to ref 134661 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 135301 relation_ref 134021 // geometry VHV - from ref 134405 z 1999 to point 608 447 - line 135429 z 1999 to point 608 447 + from ref 134405 z 1999 to point 230 564 + line 135429 z 1999 to point 230 564 line 135557 z 1999 to ref 134661 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 135941 relation_ref 139909 // - from ref 130821 z 1999 to point 433 383 - line 136069 z 1999 to point 433 68 + from ref 130821 z 1999 to point 427 382 + line 136069 z 1999 to point 427 24 line 136197 z 1999 to ref 128133 no_role_a no_role_b no_multiplicity_a no_multiplicity_b -relationcanvas 136325 relation_ref 140037 // - from ref 128901 z 1999 to point 224 231 - line 136709 z 1999 to point 370 166 - line 136581 z 1999 to ref 128005 - role_a_pos 382 147 3000 no_role_b - multiplicity_a_pos 452 177 3000 multiplicity_b_pos 150 242 3000 relationcanvas 136965 relation_ref 140165 // geometry VH - from ref 128005 z 1999 to point 489 69 + from ref 128005 z 1999 to point 483 77 line 137093 z 1999 to ref 128133 - role_a_pos 491 49 3000 no_role_b - multiplicity_a_pos 524 72 3000 multiplicity_b_pos 477 123 3000 -line 136453 -_-_ - from ref 136325 z 1998 to ref 128901 + role_a_pos 469 60 3000 no_role_b + multiplicity_a_pos 510 88 3000 multiplicity_b_pos 471 122 3000 +relationcanvas 137349 relation_ref 140421 // + from ref 137221 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 137477 relation_ref 140549 // + from ref 137221 z 1999 to point 648 76 + line 137733 z 1999 stereotype "<>" xyz 652 122 3000 to ref 128133 + role_a_pos 609 54 3000 no_role_b + multiplicity_a_pos 584 121 3000 multiplicity_b_pos 636 122 3000 +relationcanvas 137861 relation_ref 140677 // + from ref 128901 z 1999 to point 218 232 + line 138245 z 1999 to point 377 48 + line 137989 z 1999 to point 486 48 + line 138117 z 1999 to ref 128133 + role_a_pos 386 50 3000 no_role_b + multiplicity_a_pos 510 76 3000 multiplicity_b_pos 149 235 3000 +relationcanvas 138501 relation_ref 140805 // + from ref 138373 z 1999 to ref 128901 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 139141 relation_ref 141189 // + from ref 139013 z 1999 to ref 138885 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 139397 relation_ref 141317 // + from ref 128133 z 1999 to point 593 103 + line 140165 z 1999 to point 684 103 + line 139781 z 1999 to ref 139013 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 140421 relation_ref 141445 // + from ref 140293 z 1999 to ref 128901 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 140549 relation_ref 141573 // + from ref 138373 z 1999 to point 154 263 + line 140677 z 1999 to ref 128901 + role_a_pos 149 247 3000 no_role_b + multiplicity_a_pos 160 260 3000 multiplicity_b_pos 142 268 3000 +relationcanvas 140933 relation_ref 141701 // + from ref 139013 z 1999 stereotype "<>" xyz 713 174 3000 to ref 140805 + role_a_pos 748 206 3000 no_role_b + multiplicity_a_pos 712 206 3000 multiplicity_b_pos 733 164 3000 +relationcanvas 141445 relation_ref 141829 // + geometry VHV + from ref 141189 z 1999 to point 685 284 + line 141957 z 1999 to point 732 284 + line 142085 z 1999 to ref 140805 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 141573 relation_ref 141957 // + geometry VHV + from ref 141317 z 1999 to point 761 284 + line 141701 z 1999 to point 732 284 + line 141829 z 1999 to ref 140805 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 142213 relation_ref 142085 // + from ref 141317 z 1999 to point 812 270 + line 142341 z 1999 to point 812 131 + line 142469 z 1999 to ref 139013 + role_a_pos 794 109 3000 no_role_b + multiplicity_a_pos 794 142 3000 multiplicity_b_pos 794 299 3000 +relationcanvas 142597 relation_ref 142213 // + from ref 141189 z 1999 stereotype "<>" xyz 656 360 3000 to ref 141061 + role_a_pos 650 367 3000 no_role_b + multiplicity_a_pos 614 367 3000 no_multiplicity_b +relationcanvas 142853 relation_ref 139269 // + from ref 142725 z 1999 to ref 141061 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 143109 relation_ref 139397 // + from ref 142981 z 1999 to ref 141061 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b end diff --git a/uml/cinelerra3/130693.diagram b/uml/cinelerra3/130693.diagram new file mode 100644 index 000000000..1602c55a2 --- /dev/null +++ b/uml/cinelerra3/130693.diagram @@ -0,0 +1,23 @@ +format 40 + +packagecanvas 128005 + package_ref 129541 // backend + xyzwh 59 425 1994 717 262 +packagecanvas 128133 + package_ref 130053 // asset + color lightblue xyzwh 437 34 1994 342 257 +componentcanvas 128261 component_ref 130181 // MediaFactory + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 536 127 2005 155 63 +componentcanvas 128389 component_ref 130437 // Media Access + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 550 504 2005 155 63 +arrowjunctioncanvas 128517 class_ref 139525 // MediaAccessFacade + xyz 617 395 2000 label_xy 575 414 +arrowjunctioncanvas 128773 class_ref 139525 // MediaAccessFacade + xyz 616 349 2000 label_xy 574 368 +line 128645 ---O + from ref 128389 z 1999 to ref 128517 +line 128901 ---( + from ref 128261 z 1999 to ref 128773 +end diff --git a/uml/cinelerra3/130821.diagram b/uml/cinelerra3/130821.diagram new file mode 100644 index 000000000..369aa3f38 --- /dev/null +++ b/uml/cinelerra3/130821.diagram @@ -0,0 +1,37 @@ +format 40 + +packagecanvas 128005 + package_ref 128133 // Asset + xyzwh 32 26 2000 226 311 +classcanvas 128133 class_ref 139397 // MediaFactory + xyz 131 95 3005 label_xy 118 135 +usecasecanvas 128389 usecase_ref 128005 // load Media + xyzwh 340 148 3005 64 32 label_xy 346 180 +usecasecanvas 128645 usecase_ref 128133 // access File + xyzwh 537 190 3005 64 32 label_xy 540 222 +usecasecanvas 128773 usecase_ref 128261 // detect Channels + xyzwh 502 254 3005 64 32 label_xy 495 286 +subject 129413 "" + xyzwh 12 5 2005 280 676 +subject 129541 "" + xyzwh 305 6 2000 351 673 +packagecanvas 129669 + package_ref 128389 // RenderEngine + xyzwh 31 344 2010 227 327 +classcanvas 129797 class_ref 132741 // StateProxy + xyz 129 449 3005 label_xy 122 489 +usecasecanvas 129925 usecase_ref 128389 // access Channel + xyzwh 457 378 3005 64 32 label_xy 450 410 +note 130437 "using channel handle" + xyzwh 471 323 3009 128 35 +line 128517 ---> + from ref 128133 z 3004 to ref 128389 +simplerelationcanvas 129157 simplerelation_ref 129029 + from ref 128389 z 3004 stereotype "<>" xyz 452 185 3000 to ref 128645 +simplerelationcanvas 129285 simplerelation_ref 129157 + from ref 128389 z 3004 stereotype "<>" xyz 424 216 3000 to ref 128773 +line 130053 ---> + from ref 129797 z 3004 to ref 129925 +line 130309 -_-_ + from ref 128773 z 3004 to ref 129925 +end diff --git a/uml/cinelerra3/130949.diagram b/uml/cinelerra3/130949.diagram new file mode 100644 index 000000000..8b766f1c6 --- /dev/null +++ b/uml/cinelerra3/130949.diagram @@ -0,0 +1,21 @@ +format 40 + +classcanvas 128005 class_ref 139525 // MediaAccessFacade + 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 149 277 2000 + end +packagecanvas 128133 + package_ref 129157 // BackendLayer + xyzwh 49 191 1995 561 424 +packagecanvas 128261 + package_ref 128133 // Asset + xyzwh 324 29 2000 287 138 +classcanvas 128389 class_ref 139397 // MediaFactory + 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 375 83 2005 + end +relationcanvas 129285 relation_ref 142341 // + from ref 128389 z 1999 to ref 128005 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +end diff --git a/uml/cinelerra3/131077.diagram b/uml/cinelerra3/131077.diagram new file mode 100644 index 000000000..5da417c64 --- /dev/null +++ b/uml/cinelerra3/131077.diagram @@ -0,0 +1,92 @@ +format 40 + +classcanvas 128005 class_ref 139013 // BuildInstruct + 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 693 369 2000 + end +classcanvas 128133 class_ref 136837 // Proc + 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 591 79 2005 + end +classcanvas 128261 class_ref 137861 // Codec + 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 581 216 2000 + end +classcanvas 128389 class_ref 138757 // ProcPatt + 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 726 255 2000 + end +classcanvas 128517 class_ref 137733 // Effect + 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 550 152 2000 + end +classcanvas 128645 class_ref 139141 // DoAttach + 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 655 437 2000 + end +packagecanvas 128773 + package_ref 128133 // Asset + show_context_mode namespace xyzwh 406 24 1994 417 478 +packagecanvas 129669 + package_ref 128389 // RenderEngine + xyzwh 20 90 1994 330 411 +classcanvas 129797 class_ref 135045 // CodecAdapter + 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 198 348 2000 + end +classcanvas 129925 class_ref 131717 // ProcNode + 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 79 137 2000 + end +classcanvas 130053 class_ref 132485 // PluginAdapter + 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 233 285 2000 + end +classcanvas 130181 class_ref 131845 // Trafo + 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 96 238 2000 + end +relationcanvas 128901 relation_ref 142213 // + from ref 128645 z 1999 stereotype "<>" xyz 626 407 3000 to point 683 134 + line 129029 z 1999 to ref 128133 + role_a_pos 645 92 3000 no_role_b + multiplicity_a_pos 645 125 3000 no_multiplicity_b +relationcanvas 129157 relation_ref 139269 // + from ref 128517 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129285 relation_ref 139397 // + from ref 128261 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129413 relation_ref 141701 // + from ref 128389 z 1999 stereotype "<>" xyz 714 332 3000 to ref 128005 + role_a_pos 746 344 3000 no_role_b + multiplicity_a_pos 710 344 3000 multiplicity_b_pos 731 306 3000 +relationcanvas 129541 relation_ref 141829 // + from ref 128645 z 1999 to ref 128005 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 130309 relation_ref 135429 // + from ref 129925 z 1999 to point 49 137 + line 130437 z 1999 to point 49 167 + line 130565 z 1999 to ref 129925 + role_a_pos 31 145 3000 no_role_b + no_multiplicity_a multiplicity_b_pos 62 164 3000 +relationcanvas 130693 relation_ref 132229 // + from ref 130181 z 1999 to ref 129925 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 131077 relation_ref 136965 // + from ref 129797 z 1999 to ref 130181 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 131205 relation_ref 132997 // + from ref 130053 z 1999 to ref 130181 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +line 131333 -_-_ + from ref 130053 z 1999 to ref 128517 +line 131461 -_-_ + from ref 129797 z 1999 to ref 128261 +end diff --git a/uml/cinelerra3/131205.diagram b/uml/cinelerra3/131205.diagram new file mode 100644 index 000000000..02ad56b41 --- /dev/null +++ b/uml/cinelerra3/131205.diagram @@ -0,0 +1,79 @@ +format 40 + +packagecanvas 128005 + package_ref 128133 // Asset + xyzwh 328 34 1994 448 544 +classcanvas 128133 class_ref 139013 // BuildInstruct + 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 651 391 2000 + end +classcanvas 128261 class_ref 136837 // Proc + 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 481 508 2005 + end +classcanvas 128389 class_ref 138757 // ProcPatt + 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 684 277 2000 + end +classcanvas 128517 class_ref 138117 // OutPort + 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 510 196 2000 + end +classcanvas 128645 class_ref 139141 // DoAttach + 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 613 459 2000 + end +classcanvas 128773 class_ref 137989 // Track + 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 604 196 2000 + end +classcanvas 128901 class_ref 139269 // DoRecurse + 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 685 459 2000 + end +classcanvas 129029 class_ref 136965 // Struct + 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 701 101 2005 + end +relationcanvas 129157 relation_ref 139653 // + geometry VHV + from ref 128517 z 1999 to point 535 167 + line 130437 z 1999 to point 721 167 + line 130565 z 1999 to ref 129029 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129285 relation_ref 141189 // + from ref 128389 z 1999 to point 721 228 + line 130693 z 1999 to ref 129029 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129413 relation_ref 139525 // + geometry VHV + from ref 128773 z 1999 to point 624 167 + line 130181 z 1999 to point 721 167 + line 130309 z 1999 to ref 129029 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129541 relation_ref 141701 // + from ref 128389 z 1999 stereotype "<>" xyz 678 340 3000 to ref 128133 + role_a_pos 704 366 3000 no_role_b + multiplicity_a_pos 668 366 3000 multiplicity_b_pos 689 328 3000 +relationcanvas 129669 relation_ref 141829 // + from ref 128645 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129797 relation_ref 142213 // + from ref 128645 z 1999 stereotype "<>" xyz 510 628 3000 to ref 128261 + role_a_pos 535 494 3000 no_role_b + multiplicity_a_pos 535 527 3000 no_multiplicity_b +relationcanvas 130053 relation_ref 141957 // + from ref 128901 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 130821 relation_ref 142469 // + geometry VH + from ref 128773 z 1999 to point 624 296 + line 131205 z 1999 to ref 128389 + role_a_pos 587 295 3000 no_role_b + multiplicity_a_pos 667 307 3000 no_multiplicity_b +end diff --git a/uml/cinelerra3/5.session b/uml/cinelerra3/5.session index d275c7caf..6811c0673 100644 --- a/uml/cinelerra3/5.session +++ b/uml/cinelerra3/5.session @@ -1,41 +1,22 @@ window_sizes 1140 783 270 860 633 71 diagrams classdiagram_ref 130309 // Asset Kinds - 860 607 100 4 0 0 + 860 633 100 4 0 0 + active classdiagram_ref 128133 // Session structure + 860 633 100 4 120 0 classdiagram_ref 130437 // Media-Asset Relations - 688 506 100 4 0 0 - classdiagram_ref 128133 // Session structure - 688 506 100 4 60 0 + 860 633 100 4 0 0 classdiagram_ref 128389 // Render Entities 688 506 100 4 120 0 - objectdiagram_ref 128901 // EDL Example2 - 688 506 100 4 132 0 - objectdiagram_ref 128773 // EDL Example1 - 688 506 100 4 0 0 - active objectdiagram_ref 129029 // Engine Example1 - 860 633 100 4 28 0 end show_stereotypes -selected objectdiagram_ref 129029 // Engine Example1 +selected + package_ref 129 // cinelerra3 open -package_ref 128005 // design - class_ref 136453 // Asset - operation_ref 133125 // getID - operation_ref 132357 // reg - class_ref 136709 // Media - class_ref 137349 // Clip - class_ref 138501 // SpecialWish - -package_ref 128389 // RenderEngine - usecaseview_ref 128005 // Renderengine Use - class_ref 135685 // Logic - class_ref 135813 // Config - class_ref 135941 // State - class_ref 136069 // Invalid - class_ref 136197 // External - class_ref 136325 // std::exception - class_ref 135429 // Appconfig - classview_ref 128266 // SmartPointers + package_ref 128005 // design + classview_ref 128901 // Assets + class_ref 139781 // SessManager + classview_ref 129029 // Interface end end diff --git a/uml/cinelerra3/cinelerra3.prj b/uml/cinelerra3/cinelerra3.prj index 9608f43c3..48d706651 100644 --- a/uml/cinelerra3/cinelerra3.prj +++ b/uml/cinelerra3/cinelerra3.prj @@ -1,6 +1,6 @@ format 40 "cinelerra3" - revision 27 + revision 31 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 67e3684f6..294dda752 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -558,6 +558,9 @@ is how to implement the relationship between [[MObject]]s and Assets. Do we use For every Asset we generate a __Ident tuple__ and a long ID (hash) derived from this Ident tuple. The constructor of the abstract base class {{{Asset}}} takes care of this step and automatically registeres the new Asset object with the AssetManager. Typically, the factory methods for concrete Asset classes provide some shortcuts providing sensible default values for some of the Ident tuple data fields. They may take additional parameters &mdash; for example the factory method for creating {{{asset::Media}}} takes a filename (and may at some point in the future aply "magic" based on examination of the file)
        +
        +
        The Asset Manager provides an Interface to some internal Database holding all Assets in the current Session and System state. It may be a real Database at some point (and for the moment it's a Hashtable). Each [[Asset]] is registered automatically with the Asset Manager; it can be queried either by it's //identification tuple// or by it's unique ID.
        +
        Automation is treated as a function over time. It is always tied to a specific Parameter (which can thus be variable over the course of the timeline). All details //how// this function is defined are completely abstracted away. The Parameter uses a ParamProvider to get the value for a given Time (point). Typically, this will use linear or bezier interpolation over a set of keyframes internally. Parameters can be configured to have different value ranges and distribution types (on-off, stepped, continuous, bounded)
         
        @@ -738,6 +741,13 @@ This is an very important external Interface, because it links together all thre
         
         
        +
        +
        The question is where to put all the state-like information [[associated with the current session|SessionOverview]]. Because this is certainly "global", but may depend on the session or need to be configured differently when loading another session. At the moment (9/07) Ichthyo considers the following solution:
        +* represent all configuration as [[Asset]]s
        +* find a way {{red{TODO}}} how to reload the contents of the [[AssetManager]].
        +* completely hide the Session object behind a ''~PImpl'' smart pointer, so the session object can be switched when reloading.
        +* the [[Fixture]] acts as isolation layer, and all objects refered from the Fixture are refcounting smart pointers. So, even when the session gets switched, the old objects remain valid as long as needed.
        +
        RenderEngine
         
        @@ -752,12 +762,40 @@ The main tool used to implement this separation is the [[Builder Pattern|http:// Another pertinent theme is to make the basic building blocks simpler, while on the other hand gaining much more flexibility for combining these building blocks. For example we try to unfold any "internal-multi" effects into separate instances (e.g. the possibility of having an arbitrary number of single masks at any point of the pipeline instead of having one special masking facility encompassing multiple sub-masks. Similarly, we treat the Objects in the EDL in a more uniform manner and gain the possibility to [[place|Placement]] them in various ways.
        -
        +
        ''EDL'' is a short-hand for __E__dit __D__ecision __L__ist. The use of this term can be confusing; for the usual meaning see the definition in [[Wikipedia|http://en.wikipedia.org/wiki/Edit_decision_list]]
         
         Cinelerra uses this term in a related manner but with a somewhat shifted focus (and we just stick to this usage here): In Cinelerra the EDL is comprised of the whole set of clips and other media objects parametrized and placed onto the tracks by the user. It is the result of the user's //editing efforts.//
         
        -In this usage, the EDL is almost synonymous to the ''Session'', just the latter emphasizes more the state aspect, as it can be thought as a current state of the EDL contained in a file or data structure together with additional Option values and settings for the GUI. The Session is what you save and load, while the EDL rather denotes a structure of Objects placed in time.
        +In this usage, the EDL in most cases will be almost synonymous to the [[Session|SessionOverview]], just the latter emphasizes more the state aspect, as it can be thought as the current EDL contents contained in a file or data structure together with additional Option values and settings for the GUI. The Session is what you save and load, while the EDL rather denotes a structured collection of Objects placed in time.
        +
        +
        +
        +
        These are the tools provided to any client of the Proc layer for handling and manipulating the entities in the EDL. When defining such operations, //the goal should be to arrive at some uniformity in the way things are done.// Ideally, when writing client code, one should be able to guess how to achieve some desired result.
        +
        +!guiding principle
        +The approach taken to define any operation is based primarily on the ''~OO-way of doing things'': entities operate themselfs. You don't advise some manager, session or other &raquo;god class&laquo; to manipulate them. And, secondly, the scope of each operation will be as large as possible, but not larger. This often means performing quite some elementary operations &mdash; sometimes a convenience shortcut provided by the higher levels of the application may come in handy &mdash; and basically this gives rise to several different paths of doing the same thing, all of which need to be equivalent.
        +
        +!main tasks
        +* you ''create a clip'' either from a source media or from another clip (copy, maybe clone?). The new clip always reflects the full size (and other properties) of the source used for creating.
        +* you can request a clip to ''resize'', which always relates to its current dimensions.
        +* you can ''place or attach'' the clip to some point or other entity by creating a [[Placement]] from the clip.
        +* you can ''adjust'' a placement relative to some other placement, meta object (i.e. selection), label or media, and this may cause the placement to resize or even delete the clip as necessary
        +* you can perform ''adjustments'' on the whole EDL.
        +All these operations propagate to directly dependant objects and may schedule global reconfigurations.
        +
        +!state, locking, policies
        +While performing any manipulative task, the state of the object is considered inconsistent, but it is guaranteed to be consistent after any such operation, irrespective of the result. There is no automatic atomicity and, consequently each propagation is considered a separate operation.
        +
        +!!parallelism
        +At the level of fine grained operations on individual entities, there is ''no support for parallelism''. Individual entities don't lock themselves. Tasks perform locking and are to be scheduled. Thus, we need an isolation layer towards all inherently multithreaded parts of the system, like the GUI or the renderengine.
        +
        +This has some obvious and some subtle consequences. Of course, manipulating //tasks// will be queued and scheduled somewhere. But as we rely on object identity and reference semantics for the entities in the EDL, some value changes are visible to  operations going on in parallel threads (e.g. rendering) and each operation on the EDL entities //has to be aware of this.//
        +Consequently, sometimes there needs to be done a ''self-replacement by copy'' followed by manipulation of the new copy, while ongoing processes use the unaltered original object until they receive some sort of reset.
        +
        +!!undo
        +Basically, each elementary operation has to record the informations necessary to be undone. It does so by registering a Memento with some central UndoManager facility. This Memento object contains a functor pre-bound with the needed parameter values. (Besides, the UndoManager is free to implement a second level of security by taking independent state snapshots). 
        +{{red{to be defined in more detail later...}}}
         
        @@ -850,13 +888,14 @@ Some further details * and, as the created smart-pointer is a template parameter, such a custom Functor can create all sorts of Proxies, wrappers and the like
        -
        +
        a specially configured EDL
          * all MObjects have their position, length and configuration set up ready for rendering.
        - * all MObjects are associated with a ExplicitPlacement
        + * compound objects (e.g. multichannel clips) have been resolved to single non-compound basic objects.
        + * every MObject is associated with an ExplicitPlacement, which declares a fixed position (Time, Track)
          * this ~ExplicitPlacements are contained in a ordered List called the Timeline
         
        -//My intention is to create this Fixture out of the editing operations done by the user//
        +As the builder and thus render engine //only consults the fixture,// while all editing operations finally propagate to the fixture as well, we get an isolation layer between the high level part of the Proc layer (editing, object manipulation) and the render engine
         
        @@ -948,13 +987,16 @@ 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 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]]
         * [[Memory Management Issues|MemoryManagement]]
         * [[Creating and registering Assets|AssetCreation]]
         * [[Creating new Objects|ObjectCreation]]
        +* [[Multichannel Media|MultichannelMedia]]
        +* [[Editing Operations|EditingOperations]]
        +* [[Handling of the current Session|CurrentSession]]
         
         
        @@ -1301,6 +1343,19 @@ From experiences with other middle scale projects, I prefer having the test code [img[Example: Interfaces/Namespaces of the ~Session-Subsystems|uml/fig130053.png]]
        +
        +
        Opening and accessing media files on disk poses several problems, most of which belong to the domain of cinelerra's data backend. Here, we focus on the questions related to making media data available to the EDL and the render engine. Each media will be represented by an MediaAsset object, which indeed could be a compound object (in case of MultichannelMedia). Building this asset object thus includes getting informations from the real file on disk. For delegating this to the backend, we use the following query interface:
        +* {{{queryFile(char* name)}}} requests accessing the file and yields some (opaque) handle when successful.
        +* {{{queryChannel(FHandle, int)}}} will then be issued in sequence with ascending index numbers, until it returns {{{NULL}}}.
        +* the returned struct (pointer) will provide the following information:
        +** some identifier which can be used to create a name for the corresponding media (channel) asset
        +** some identifier characterizing the access method (codec) needed to get at the media data. This should be rather a high level description of the media stream type, e.g. "H264"
        +** some (opaque) handle usable for accessing this specific stream. When the render engine later on pulls data for this channel, it will pass this handle down to the backend.
        +
        +{{red{to be defined in more detail later...}}}
        +
        +{{red{how to create a test stub for this interface...?}}}
        +
        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
        @@ -1350,9 +1405,10 @@ As a //first shot// Ichthyo considers the following approach:
         
         <style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;">loading <b>Cinelerra Renderengine</b> devel doku<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
        -
        +
        The Interface asset::Media is a //key abstraction// It ties together several concepts and enables to deal with them on the interfaces in a uniform manner. Besides, as every Asset kind it belongs rather to the bookkeeping view: it holds the specific properties and parametrisation of the media source it stands for. Regarding the __inward interface__ &mdash; as used from within the [[EDL]] or the [[Render Nodes|ProcNode]], it is irrelevant if a given asset::Media object stands for a complete media source, just a clip taken from this source or if a placeholder version of the real media source is used instead.
        -[img[Asset Classess|uml/fig130437.png]]
        +[img[Asset Classess|uml/fig130437.png]] +
        Of course: Cinelerra currently leaks memory and crashes regularilly. For the newly written code, besides retaining the same performance level, a main goal is to use methods and techniques known to support the writing of quality code. So, besides the MultithreadConsiderations, a solid strategy for managing the ownership of allocated memory blocks is necessary right from start.
        @@ -1387,6 +1443,26 @@ For the case in question this seems to be the ''resource allocation is construct
         And, last but not least, doing all actual allocations is the job of the backend. Exceptions being long-lived objects, like the Session or the EDL, which are created once and don't bear the danger of causing memory pressure. Besides that, the ProcLayer code shouldn't issue "new" and "delete", rather it should use some central [[Factories]] for all allocation and freeing, so we can redirect these calls down to the backend, which may use pooling or special placement allocators or the like. The rationale is, for modern hardware/architectures, care has to be taken with heap allocations, esp. with many small objects and irregular usage patterns.
         
        +
        +
        Based on practical experiences, Ichthyo tends to consider Multichannel Media as the base case, while counting media files providing just one single media stream as exotic corner cases. This may seem counter intuitive at first sight; you should think of  it as an attempt to avoid right from start some of the common shortcomings found in many video editors, especially
        +* having to deal with keeping a "link" between audio and video clips
        +* silly limitations on the supported audio setups (e.g. mono, stereo and 5.1)
        +* unnecessary complexity when dealing with more realistic setups, esp. when dealing with dialogue scenes
        +* inability to edit stereoscopic (3D) video in a natural fashion
        +
        +!Compound Media
        +Basically, each [[media asset|MediaAsset]] is considered to be a compound of several elementary media (tracks), possibly of various different media kinds. Adding support for placeholders (''proxy clips'') at some point in future will add still more complexity (because then there will be even dependencies between some of these elementary media). To handle, edit and render compound media, we need to impose some structural limitations. But anyhow, we try to configure as much as possible already at the "asset level" and make the rest of the proc layer behave just according to the configuration given with each asset.
        +
        +So, when creating a clip out of such a compound media asset, the clip has to be a compound of elementary clips mirroring the given media asset's structure. Besides, it should be possible to //detach// and //attach// elementary clips from a compound clip. On the other hand, the [[Fixture]] created from the current state of the [[EDL]] is explicit to a great extent. So, in the Fixture we deal only with elementary clips placed to absolute positions, and thus the builder will see only simple non-compound clips and translate them into the corresponding source reading nodes.
        +
        +!Handling
        +* from a Media asset, we can get a [[Processing Pattern|ProcPatt]] describing how to build a render pipeline for this media
        +* we can create a Clip (MObject) from each Media, which will be linked back to the media asset internally.
        +* moreover, creating a Clip will create and register a Clip asset as well, and this Clip asset will be tied to the original Clip and will show up in some special Category
        +* media can be compound and the created Clips will mirror this compound structure
        +* we distinguish elementay (non-compound) Clips from compound clips by concrete subtype. The builder can only handle elementary clips, because he needs to build a separate pipeline for every output channel. So the work of splitting common effect stacks for clips with several channels needs to be done when calculating the Fixture for the current EDL. The Builder expects to be able to build the render nodes corresponding to each entity found in the Fixture one by one.
        +* the Builder gets at the ProcPatt (descriptor) of the underlying media for each clip and uses this description as a template to build the render pipeline. That is, the ProcPatt specifies the codec asset and maybe some additional effect assets (deinterlace, scale) necessary for feeding media data corresponding to this clip/media into the render nodes network.
        +
        We have to consider carefully how to handle the Creation of new class instances. Because, when done naively, it can defeat all efforts of separating subsystems, or &mdash; the other extreme &mdash; lead to a //switch-on-typeID//  programming style. We strive at a solution somewhere in the middle by utilizing __Abstract Factories__ on Interface or key abstraction classes, but providing specialized overloads for the different use cases. So in each use case we have to decide if we want to create a representant of some general concept (Interface), or if we have a direct colaboration and thus need the Factory to provide
         a more specific sub-Interface or even a concrete type.
        @@ -1997,7 +2073,7 @@ DAMAGE.
         //Note, we have yet to specify how exactly the building and rendering will work together with the backend. There are several possibilities how to structure the Playlist//
         
        -
        +
        Open issues, Things to be worked out, Problems still to be solved... 
         
         !!Parameter Handling
        @@ -2016,10 +2092,31 @@ From experience, mainly with other applications, we can draw the following concl
         How to handle the simultaneous rendering of several output streams (video, audio channels). Shall we treat the EDL as one entity containing different output channels, or should it rather be seen as a composite of several sub-~EDLs, each for only one output channel? This decision will be reflected in the overall structure of the network of render nodes: We could have a list of channel-output generating pipelines in each processor (for every segment), or we could have independently segmented lists of Processors for every output channel/type. The problem is, //it is not clear what approach to prefer at the moment//  because we are just guessing.
         
         !!Tracks, Channels, Layers
        -Closely related to this is the not-so-obvious problem how to understand the common global structures found in most audio and video editing applications. Mostly, they stem from imitating hardware recording and editing solutions, thus easing the transition for professionals grown up with analog hardware based media. But as digital media are the de-facto standard nowadays, we could have a look at all those accidental complexity introduced by sticking to the hardware tool metaphor.
        +Closely related to this is the not-so-obvious problem how to understand the common global structures found in most audio and video editing applications. Mostly, they stem from imitating hardware recording and editing solutions, thus easing the transition for professionals grown up with analogue hardware based media. But as digital media are the de-facto standard nowadays, we could rethink some of this accidental complexity introduced by sticking to the hardware tool metaphor.
         * is it really necessary to have fixed global tracks?
         * is it really helpful to feed "source tracks" into global processing busses/channels?
         Users accustomed with modern GUI applications typically expect that //everything is a object//  and can be pulled around and  manipulated individually. This seems natural at start, but raises the problem of providing a efficient workflow for handling larger projects and editing tasks. So, if we don't have a hard wired multitrack+bus architecture, we need some sort of templating to get the standard editing use case done efficiently.
        +
        +!!Compound and Multiplicity
        +Simple relations can be hard wired. But, on the contrary, it would be as naive to define a Clip as having a Video track and two audio tracks, as it would be naive to overlook the problem of holding video and corresponding audio together. And, moreover, the default case has to be processed in a //straight forward// fashion, with as few tests and decisions as possible. So, basically each component participating in getting the core processing done has to mirror the structure pattern of the other parts, so that  processing can be done without testing and forking. But this leaves us with the problem where to put the initial knowledge about the structural pattern used for building up the compound structures and &mdash; especially &mdash; the problem how to treat different kinds of structural patterns, how to detect the pattern to be applied and how to treat multiple instances of the same structural pattern.
        +
        +One example of this problem is the [[handling of multichannel media|MultichannelMedia]]. Following the above reasoning, we end with having a [["structural processing pattern"|ProcPatt]], typically one video stream with MPEG decoder and a pair of audio streams which need either to be routed to some "left" and "right" output ports, or have to be passed through a panning filter accordingly. Now the problem is: //create a new instance of this structure for each new media, or detect which media to subsume under a existing pattern instance.//
        +
        +!!Parallelism
        +We need to work out guidelines for dealing with operations going on simultaneously. Certainly, this will divide the application in several different regions. As always, the primary goal is to avoid multithread problems altogether. Typically, this can be achieved by making matters explicit: externalizing state, make the processing subsystems stateless, queue and schedule tasks, use isolation layers.
        +* the StateProxy is a key for the individual render processes state, which is managed in separate [[StateFrame]]s in the backend. The [[processing network|ProcNode]] is stateless.
        +* the [[Fixture]] provides an isolation layer between the renderengine and the Session/EDL
        +* all EditingOperations are not threadsafe intentionally, because they are [[scheduled|ProcLayerScheduler]]
        +
        +
        +
        +
        All Assets of kind asset::Proc represent //processing algorithms// in the bookkeeping view. They enable loading, browsing and maybe even parametrizing all the Effects, Plugins and Codecs available for use within the Cinelerra Session.
        +
        +Besides, they provide an important __inward interface__ for the [[ProcNode]]s, which will use these asset entries to dispatch the actual processing call when rendering. 
        +
        +{{red{todo: the naming scheme??}}}
        +
        +[img[Asset Classess|uml/fig131077.png]]
         
        @@ -2033,6 +2130,19 @@ Users accustomed with modern GUI applications typically expect that //everything
        A data processing node within the Render Engine. Its key feature is the possibility to pull from it one (freely addressable) [[Frame]] of calculated data. Further, each ~ProcNode has the ability to be wired with other nodes and [[Parameter Providers|ParamProvider]]
         
        +
        +
        This special type of [[structural Asset|StructAsset]] represents information how to build some part of the render engine's processing nodes network. It can be thought of as a template or blueprint for construction. Most notably, it is used for creating nodes reading, decoding and delivering source media material to the render network. Each [[media Asset|MediaAsset]] has associated processing patterns describing the codecs and other transformations needed to get at the media data of this asset. (and because media assets are typically compound objects, the referred ~ProcPatt will be compound too). Obviously, the possibilities opened by using processing patterns go far beyond.
        +
        +Technically, a processing pattern is a list of building instructions, which will be //executed// by the [[Builder]] on the render node network under construction. This implies the possibility to define further instruction kinds when needed in future; at the moment the relevant sorts of instructions are
        +* attach the given sequence of nodes to the specified point
        +* recursively execute a nested ~ProcPatt
        +More specifically, a sequence of nodes is given by a sequence of prototypical effect and codec assets (and from each of them we can create the corresponding render node). And the point to attach these nodes is given by an identifier &mdash; in most cases just "{{current}}", denoting the point the builder was just working at, when he treated some MObject which in turn yielded this processing pattern in question.
        +
        +Like all [[structural assets|StructAsset]], ~ProcPatt employs a special naming scheme within the asset name field, which directly mirrors its purpose and allows to bind to existing processing pattern instances when needed. The idea is letting all assets in need of a similar processing pattern refer to one shared ~ProcPatt instance. For example, within a MPEG video media asset, at some point there will be a ~ProcPatt labeled "{{{stream(mpeg)}}}". In consequence, all MPEG video will use the same pattern of node wiring. And, of course, this pattern could be changed, either globally, or by binding a single clip to some other processing pattern (for making a punctual exception from the general rule)
        +
        +//Note,// nothing has been said about how processing patterns are defined. One can expect for some //default patterns// beeing defined somewhere in the application, any session could overrule these defaults, and when there is no default, we can expect some mechanism deriving sensible fallback patterns //for every specific use case// of processing patterns. See the problem of [[Loading Media]] as an example.
        +
        +
        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
         
        @@ -2286,6 +2396,16 @@ The design of Cinelerra 2 basically follows this design, but __fails because of * see also the [[Entities involved in Rendering|RenderEntities]]
        +
        +
        The Session (sometimes also called //Project//) contains all informations and objects to be edited by the User. It can be saved and loaded. The individual Objects within the Session, i.e. Clips, Media, Effects, are contained in one (or several) collections within the Session, which we call [[EDL (Edit Decision List)|EDL]]. Moreover, the sesion contains references to all the Media files used, and it contains various default or user defined configuration. At any given time, there is //only one current session// opened within the application.
        +
        +!!!larger projects
        +For larger editing projects the simple structure of a session containing "the" timeline is not sufficient. Rather, we have several timelines, e.g. one for each scene. Or we could have several layered or nested timelines (compositional work, multimedia productions). To support these cases without making the default case more complicated, Cinelerra-3 introduces a //focus// for selecting the //current EDL,// which will receive all editing operations.
        +
        +!!!the definitive state
        +With all the structural complexities possible within such a session, we need an isolation layer to provide __one__ definitive state where all configuration has been made explicit. Thus the session manages one special object list, the [[Fixture]], which can be seen as all currently active object placed onto a single timeline.
        +
        +
        <<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options ยป" "Change TiddlyWiki advanced options">>
        @@ -2376,6 +2496,17 @@ Instead, we should try to just connect the various subsystems via Interfaces and * to shield the rendering code of all complexities of thread communication and synchronization, we use the StateProxy
        +
        +
        Structural Assets are intended mainly for internal use, but the user should be able to see and query them. By changing the parametrisation of some structural Asset, we can customize the default behaviour of Cinelerra to some extent.
        +* [[Processing Patterns|ProcPatt]] encode the information, how to get at the actual media data when rendering a clip.
        +* Tracks are one of the dimensions used for organizing the EDL. Besides, they carry parametrisation of output port, overlay mode etc.
        +* Output Ports {{red{still need to be defined...}}}
        +
        +The Asset name field of structural Assets utilizes a special naming scheme, which allows to derive the name based on the capabilities of the structural asset. For example, by default all media clips with a given media stream type (e.g. H264) will use the same [[processing Pattern|ProcPatt]] for rendering. {{red{todo: work out the details of this naming scheme??}}}
        +
        +[img[Asset Classess|uml/fig131205.png]]
        +
        +
        /*{{{*/
         /* a contrasting background so I can see where one tiddler ends and the other begins */