Merge from branch 'ichthyo/builder': Basic Placement handling, create Clip

Merge branch 'builder'
This commit is contained in:
Fischlurch 2007-11-27 00:55:25 +01:00
commit 47eeaaaf43
107 changed files with 2789 additions and 657 deletions

View file

@ -20,8 +20,7 @@
<p>Artifact : <a href="index.html#refartifact128261"><b>mobject</b></a>, Component(s) : <a href="index.html#refcomponent128133"><b>Session</b></a></p><div class="sub">
<a name="refattribute128517"></a>
<table><tr><td><div class="element">Attribut <b>length</b></div></td></tr></table>
<p>Declaration :</p><ul><li>Uml : # length : <a href="class134917.html#refclass134917"><b>Time</b></a></li><li>C++ : protected: <a href="class134917.html#refclass134917"><b>Time</b></a> length</li></ul><p>TODO: how to represent time intervals?<br /></p><a name="refrelation129029"></a>
<table><tr><td><div class="element">Relation <b>placement (&lt;association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # placement : <a href="class128645.html#refclass128645"><b>Placement</b></a>, multiplicity : 1..*</li><li>C++ : protected: list&lt;<a href="class128645.html#refclass128645"><b>Placement</b></a> *&gt; placement</li></ul></div>
<p>Declaration :</p><ul><li>Uml : # length : <a href="class134917.html#refclass134917"><b>Time</b></a></li><li>C++ : protected: <a href="class134917.html#refclass134917"><b>Time</b></a> length</li></ul><p>TODO: how to represent time intervals?<br /></p></div>
<p>All public operations : <a href="class134021.html#refoperation129669"><b>apply</b></a> </p>
</body>
</html>

View file

@ -16,11 +16,13 @@
<!-- ============================================================= -->
<a name="refclass128645"></a>
<p>Declaration :</p><ul><li>C++ : class Placement </li><li>Java : public interface Placement </li></ul><p>Directly inherited by : <a href="class129541.html#refclass129541"><b>Allocation</b></a> <a href="class129797.html#refclass129797"><b>ExplicitPlacement</b></a> <a href="class129285.html#refclass129285"><b>FixedPlacement</b></a> <a href="class129413.html#refclass129413"><b>RelativePlacement</b></a> </p>
<p>Artifact : <a href="index.html#refartifact129029"><b>placement</b></a></p><div class="sub">
<a name="refrelation129157"></a>
<table><tr><td><div class="element">Relation <b>subject (&lt;association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # subject : <a href="class128517.html#refclass128517"><b>MObject</b></a>, multiplicity : 1</li><li>C++ : protected: <a href="class128517.html#refclass128517"><b>MObject</b></a>* subject</li></ul><a name="refoperation128005"></a>
<table><tr><td><div class="element">Operation <b>resolve</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + resolve() : ExplicitPlacement [ProcessingLayer::MObject]&amp;</li><li>C++ : public: ExplicitPlacement [ProcessingLayer::MObject]&amp; resolve () </li></ul><p>create an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.<br /></p></div>
<p>All public operations : <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class Placement </li><li>Java : public interface Placement </li></ul><p>Directly inherited by : <a href="class129797.html#refclass129797"><b>ExplicitPlacement</b></a> </p>
<p>used to specify the position of a MObject in the EDL. This can be done in various ways (absolute, relative). <br />Placement at the same time acts as (refcounting) smart pointer for accessing the MObject.<br /></p><p>Artifact : <a href="index.html#refartifact129029"><b>placement</b></a></p><div class="sub">
<a name="refoperation128005"></a>
<table><tr><td><div class="element">Operation <b>resolve</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + resolve() : ExplicitPlacement [ProcessingLayer::MObject]&amp;</li><li>C++ : public: ExplicitPlacement [ProcessingLayer::MObject]&amp; resolve () </li></ul><p>create an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.<br /></p><a name="refrelation144901"></a>
<table><tr><td><div class="element">Relation <b>subject (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # subject : <a href="class128517.html#refclass128517"><b>MObject</b></a>, multiplicity : 1</li><li>C++ : protected: <a href="class128517.html#refclass128517"><b>MObject</b></a>* subject</li></ul><p>Placement acts as smart pointer<br /></p><a name="refoperation134277"></a>
<table><tr><td><div class="element">Operation <b>chain</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + chain(in style : ) : </li><li>C++ : public: chain (const &amp; style) </li></ul><p>create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object.<br /></p><a name="refrelation145413"></a>
<table><tr><td><div class="element">Relation <b>chain (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # chain : <a href="class139909.html#refclass139909"><b>LocatingPin</b></a>, multiplicity : 1</li><li>C++ : protected: <a href="class139909.html#refclass139909"><b>LocatingPin</b></a>* chain</li></ul><p>Chain of additional Placements further constraining the position of this MObject<br /></p></div>
<p>All public operations : <a href="class128645.html#refoperation134277"><b>chain</b></a> , <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -4,20 +4,19 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class FixedPlacement</title>
<title>Class FixedLocation</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class FixedPlacement</div>
<div class = "title">Class FixedLocation</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass129285"></a>
<p>Declaration :</p><ul><li>C++ : class FixedPlacement : public <a href="class128645.html#refclass128645"><b>Placement</b></a>, public <a href="class129797.html#refclass129797"><b>ExplicitPlacement</b></a> </li></ul><p>Artifact : <a href="index.html#refartifact129797"><b>fixedplacement</b></a></p><div class="sub">
<p>Declaration :</p><ul><li>C++ : class FixedLocation : public <a href="class139909.html#refclass139909"><b>LocatingPin</b></a> </li></ul><p>Artifact : <a href="index.html#refartifact129797"><b>fixedlocation</b></a></p><div class="sub">
</div>
<p>All public operations : <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -4,19 +4,19 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class RelativePlacement</title>
<title>Class RelativeLocation</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class RelativePlacement</div>
<div class = "title">Class RelativeLocation</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass129413"></a>
<p>Declaration :</p><ul><li>C++ : class RelativePlacement : public <a href="class128645.html#refclass128645"><b>Placement</b></a> </li></ul><p>Artifact : <a href="index.html#refartifact129925"><b>relativeplacement</b></a></p><div class="sub">
<p>Declaration :</p><ul><li>C++ : class RelativeLocation : public <a href="class139909.html#refclass139909"><b>LocatingPin</b></a> </li></ul><p>Artifact : <a href="index.html#refartifact129925"><b>relativelocation</b></a></p><div class="sub">
<a name="refrelation130565"></a>
<table><tr><td><div class="element">Relation <b>anchor (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # anchor : <a href="class128517.html#refclass128517"><b>MObject</b></a>, multiplicity : 1</li><li>C++ : protected: <a href="class128517.html#refclass128517"><b>MObject</b></a>* anchor</li></ul><a name="refattribute128133"></a>
<table><tr><td><div class="element">Attribut <b>relType</b></div></td></tr></table>
@ -24,6 +24,5 @@
<table><tr><td><div class="element">Attribut <b>offset</b></div></td></tr></table>
<p>Declaration :</p><ul><li>Uml : # offset : <a href="class134917.html#refclass134917"><b>Time</b></a></li><li>C++ : protected: <a href="class134917.html#refclass134917"><b>Time</b></a> offset</li></ul><p>Offset the actual position by this (time) value relative to the anchor point. TODO: Representation?<br /></p><table><tr><td><div class="element">Class <b><a href="class133893.html#refclass133893"><b>RelType</b></a></b></div></td></tr></table>
</div>
<p>All public operations : <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -16,12 +16,12 @@
<!-- ============================================================= -->
<a name="refclass129541"></a>
<p>Declaration :</p><ul><li>C++ : class Allocation : public <a href="class128645.html#refclass128645"><b>Placement</b></a> </li></ul><p>Directly inherited by : <a href="class130181.html#refclass130181"><b>Constraint</b></a> <a href="class130053.html#refclass130053"><b>Wish</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class Allocation : public <a href="class139909.html#refclass139909"><b>LocatingPin</b></a> </li></ul><p>Directly inherited by : <a href="class130181.html#refclass130181"><b>Constraint</b></a> <a href="class130053.html#refclass130053"><b>Wish</b></a> </p>
<p>a directive to place a MObject in a specific way<br /></p><p>Artifact : <a href="index.html#refartifact130053"><b>allocation</b></a></p><div class="sub">
<a name="refattribute128773"></a>
<table><tr><td><div class="element">Attribut <b>repr</b></div></td></tr></table>
<p>Declaration :</p><ul><li>Uml : # repr : string</li><li>C++ : protected: string repr</li></ul><p>human readable representation of the condition characterizing this allocaton, e.g. "t &gt;= 10"<br /></p><a name="refoperation131205"></a>
<table><tr><td><div class="element">Operation <b>get_repr</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + get_repr() : string</li><li>C++ : public: inline const string getRepr () const </li></ul></div>
<p>All public operations : <a href="class129541.html#refoperation131205"><b>get_repr</b></a> , <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
<p>All public operations : <a href="class129541.html#refoperation131205"><b>get_repr</b></a> </p>
</body>
</html>

View file

@ -16,14 +16,13 @@
<!-- ============================================================= -->
<a name="refclass129797"></a>
<p>Declaration :</p><ul><li>C++ : class ExplicitPlacement : public <a href="class128645.html#refclass128645"><b>Placement</b></a> </li><li>Java : public interface ExplicitPlacement </li></ul><p>Directly inherited by : <a href="class129285.html#refclass129285"><b>FixedPlacement</b></a> </p>
<p>Artifact : <a href="index.html#refartifact129157"><b>explicitplacement</b></a></p><div class="sub">
<p>Declaration :</p><ul><li>C++ : class ExplicitPlacement : public <a href="class128645.html#refclass128645"><b>Placement</b></a> </li><li>Java : public interface ExplicitPlacement </li></ul><p>Artifact : <a href="index.html#refartifact129157"><b>explicitplacement</b></a></p><div class="sub">
<a name="refattribute128261"></a>
<table><tr><td><div class="element">Attribut <b>time</b></div></td></tr></table>
<p>Declaration :</p><ul><li>Uml : # time : <a href="class134917.html#refclass134917"><b>Time</b></a></li><li>C++ : protected: <a href="class134917.html#refclass134917"><b>Time</b></a> time</li></ul><a name="refattribute128389"></a>
<table><tr><td><div class="element">Attribut <b>track</b></div></td></tr></table>
<p>Declaration :</p><ul><li>Uml : # track : Track [ProcessingLayer::MObject] *</li><li>C++ : protected: Track [ProcessingLayer::MObject] * track</li></ul><a name="refrelation131845"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class128389.html#refclass128389"><b>Track</b></a></li><li>C++ : protected: <a href="class128389.html#refclass128389"><b>Track</b></a>* </li></ul></div>
<p>All public operations : <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
<p>All public operations : <a href="class128645.html#refoperation134277"><b>chain</b></a> , <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -18,6 +18,6 @@
<a name="refclass130053"></a>
<p>Declaration :</p><ul><li>C++ : class Wish : public <a href="class129541.html#refclass129541"><b>Allocation</b></a> </li></ul><div class="sub">
</div>
<p>All public operations : <a href="class129541.html#refoperation131205"><b>get_repr</b></a> , <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
<p>All public operations : <a href="class129541.html#refoperation131205"><b>get_repr</b></a> </p>
</body>
</html>

View file

@ -18,6 +18,6 @@
<a name="refclass130181"></a>
<p>Declaration :</p><ul><li>C++ : class Constraint : public <a href="class129541.html#refclass129541"><b>Allocation</b></a> </li></ul><div class="sub">
</div>
<p>All public operations : <a href="class129541.html#refoperation131205"><b>get_repr</b></a> , <a href="class128645.html#refoperation128005"><b>resolve</b></a> </p>
<p>All public operations : <a href="class129541.html#refoperation131205"><b>get_repr</b></a> </p>
</body>
</html>

View file

@ -16,7 +16,7 @@
<!-- ============================================================= -->
<a name="refclass133893"></a>
<p>Declaration :</p><ul><li>C++ : enum RelType </li><li>Java : public enum RelType </li></ul><p>the possible kinds of RelativePlacements<br /></p><p>nested in <a href="class129413.html#refclass129413"><b>RelativePlacement</b></a></p>
<p>Declaration :</p><ul><li>C++ : enum RelType </li><li>Java : public enum RelType </li></ul><p>the possible kinds of RelativePlacements<br /></p><p>nested in <a href="class129413.html#refclass129413"><b>RelativeLocation</b></a></p>
<div class="sub">
<p>Items :</p><ul>
<li>SAMETIME</li>

View file

@ -16,7 +16,7 @@
<!-- ============================================================= -->
<a name="refclass136709"></a>
<p>Declaration :</p><ul><li>C++ : class Media : public <a href="class136453.html#refclass136453"><b>Asset</b></a> </li></ul><p>Directly inherited by : <a href="class137349.html#refclass137349"><b>Clip</b></a> <a href="class138501.html#refclass138501"><b>CompoundMedia</b></a> <a href="class137605.html#refclass137605"><b>Preview</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class Media : public <a href="class136453.html#refclass136453"><b>Asset</b></a> </li></ul><p>Directly inherited by : <a href="class137349.html#refclass137349"><b>Clip</b></a> <a href="class138501.html#refclass138501"><b>CompoundMedia</b></a> <a href="class137477.html#refclass137477"><b>Unknown</b></a> </p>
<p>key abstraction: media-like assets<br /></p><p>Artifact : <a href="index.html#refartifact136453"><b>media</b></a></p><div class="sub">
<a name="refoperation133253"></a>
<table><tr><td><div class="element">Operation <b>createClip</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + createClip() : <a href="class128901.html#refclass128901"><b>Clip</b></a></li><li>C++ : public: <a href="class128901.html#refclass128901"><b>Clip</b></a> createClip () </li></ul><p>create a (possibly compound) Clip refering to this media, ready to be added to the EDL.<br /></p><a name="refoperation133381"></a>

View file

@ -16,7 +16,8 @@
<!-- ============================================================= -->
<a name="refclass137477"></a>
<p>Declaration :</p><ul><li>C++ : class Unknown : public <a href="class137605.html#refclass137605"><b>Preview</b></a> </li></ul><p>placeholder for unknown or unavailable media source<br /></p><p>Artifact : <a href="index.html#refartifact137093"><b>unknown</b></a></p><div class="sub">
<p>Declaration :</p><ul><li>C++ : class Unknown : public <a href="class136709.html#refclass136709"><b>Media</b></a> </li></ul><p>Directly inherited by : <a href="class137605.html#refclass137605"><b>Preview</b></a> </p>
<p>placeholder for unknown or unavailable media source<br /></p><p>Artifact : <a href="index.html#refartifact137093"><b>unknown</b></a></p><div class="sub">
</div>
<p>All public operations : <a href="class136709.html#refoperation133253"><b>createClip</b></a> , <a href="class136453.html#refoperation132997"><b>enable</b></a> , <a href="class136453.html#refoperation132229"><b>getDependant</b></a> , <a href="class136453.html#refoperation132101"><b>getParents</b></a> , <a href="class136709.html#refoperation133381"><b>howtoProc</b></a> , <a href="class136453.html#refoperation132869"><b>isActive</b></a> </p>
</body>

View file

@ -16,8 +16,7 @@
<!-- ============================================================= -->
<a name="refclass137605"></a>
<p>Declaration :</p><ul><li>C++ : class Preview : public <a href="class136709.html#refclass136709"><b>Media</b></a> </li></ul><p>Directly inherited by : <a href="class137477.html#refclass137477"><b>Unknown</b></a> </p>
<p>alternative version of the media data, probably with lower resolution<br /></p><p>Artifact : <a href="index.html#refartifact136965"><b>preview</b></a></p><div class="sub">
<p>Declaration :</p><ul><li>C++ : class Preview : public <a href="class137477.html#refclass137477"><b>Unknown</b></a> </li></ul><p>alternative version of the media data, probably with lower resolution<br /></p><p>Artifact : <a href="index.html#refartifact136965"><b>preview</b></a></p><div class="sub">
</div>
<p>All public operations : <a href="class136709.html#refoperation133253"><b>createClip</b></a> , <a href="class136453.html#refoperation132997"><b>enable</b></a> , <a href="class136453.html#refoperation132229"><b>getDependant</b></a> , <a href="class136453.html#refoperation132101"><b>getParents</b></a> , <a href="class136709.html#refoperation133381"><b>howtoProc</b></a> , <a href="class136453.html#refoperation132869"><b>isActive</b></a> </p>
</body>

View file

@ -0,0 +1,24 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class LocatingPin</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class LocatingPin</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass139909"></a>
<p>Declaration :</p><ul><li>C++ : class LocatingPin </li></ul><p>Directly inherited by : <a href="class129541.html#refclass129541"><b>Allocation</b></a> <a href="class129285.html#refclass129285"><b>FixedLocation</b></a> <a href="class129413.html#refclass129413"><b>RelativeLocation</b></a> </p>
<p>An element with value semantics, which actually implements the placement of some MObject by positioning it in some way.<br /></p><p>Artifact : <a href="index.html#refartifact139013"><b>locatingpin</b></a></p><div class="sub">
<a name="refrelation146053"></a>
<table><tr><td><div class="element">Relation <b>next (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # next : <a href="class139909.html#refclass139909"><b>LocatingPin</b></a></li><li>C++ : protected: <a href="class139909.html#refclass139909"><b>LocatingPin</b></a>* next</li></ul><p>next additional LocatingPin, if any<br /></p></div>
</body>
</html>

View file

@ -59,7 +59,7 @@
<tr bgcolor=#f0f0f0><td><a href="class128437.html#refclass128437" target = "projectFrame"><b>FileMapCache</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refclass129333" target = "projectFrame"><b>FileProvider</b></a></td><td></td><td>This 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.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128778.html#refclass128778" target = "projectFrame"><b>FileReference</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedPlacement</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedLocation</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128261.html#refclass128261" target = "projectFrame"><b>Fixture</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128821.html#refclass128821" target = "projectFrame"><b>Frame</b></a></td><td></td><td>Frames 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.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133253.html#refclass133253" target = "projectFrame"><b>Frame</b></a></td><td>interface</td><td>TODO: how to relate to Cehteh's Frame entity in the Backend?<br />The latter is the fundamental Frame entity, wheras this Object rather represents a buffer set containing frame date</td></tr>
@ -73,6 +73,7 @@
<tr bgcolor=#f0f0f0><td><a href="class136069.html#refclass136069" target = "projectFrame"><b>Invalid</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129669.html#refclass129669" target = "projectFrame"><b>Label</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131973.html#refclass131973" target = "projectFrame"><b>Link</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139909.html#refclass139909" target = "projectFrame"><b>LocatingPin</b></a></td><td></td><td>An element with value semantics, which actually implements the placement of some MObject by positioning it in some way.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128522.html#refclass128522" target = "projectFrame"><b>Lock</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128650.html#refclass128650" target = "projectFrame"><b>Lock</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135685.html#refclass135685" target = "projectFrame"><b>Logic</b></a></td><td></td><td></td></tr>
@ -89,7 +90,7 @@
<tr bgcolor=#f0f0f0><td><a href="class134533.html#refclass134533" target = "projectFrame"><b>Parameter</b></a></td><td></td><td>Descriptor and access object for a plugin parameter. Parameters may be provided with values from the session, and this values may be automated.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134661.html#refclass134661" target = "projectFrame"><b>ParamProvider</b></a></td><td>interface</td><td>A facility to get the actual value of a plugin/effect parameter</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130437.html#refclass130437" target = "projectFrame"><b>PathManager</b></a></td><td></td><td>While building a render engine, this Strategy class decides on the actual render strategy in accordance to the current controller settings (system state)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128645.html#refclass128645" target = "projectFrame"><b>Placement</b></a></td><td>interface</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128645.html#refclass128645" target = "projectFrame"><b>Placement</b></a></td><td>interface</td><td>used to specify the position of a MObject in the EDL. This can be done in various ways (absolute, relative). <br />Placement at the same time acts as (refcounting) smart pointer for accessing the MObject.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132485.html#refclass132485" target = "projectFrame"><b>PluginAdapter</b></a></td><td></td><td>Adapter used to integrage an effects processor in the render pipeline</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129077.html#refclass129077" target = "projectFrame"><b>Prefetch</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137605.html#refclass137605" target = "projectFrame"><b>Preview</b></a></td><td></td><td>alternative version of the media data, probably with lower resolution</td></tr>
@ -98,7 +99,7 @@
<tr bgcolor=#f0f0f0><td><a href="class131717.html#refclass131717" target = "projectFrame"><b>ProcNode</b></a></td><td>interface</td><td>Key abstraction of the Render Engine: A Data processing Node</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138757.html#refclass138757" target = "projectFrame"><b>ProcPatt</b></a></td><td></td><td>special type of structural Asset representing information how to build some part of the render engine's processing nodes network.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132229.html#refclass132229" target = "projectFrame"><b>Projector</b></a></td><td></td><td>Special video processing node used to scale and translate image data.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativePlacement</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativeLocation</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a></td><td>enum</td><td>the possible kinds of RelativePlacements</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131333.html#refclass131333" target = "projectFrame"><b>RenderEngine</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130949.html#refclass130949" target = "projectFrame"><b>RenderState</b></a></td><td></td><td>Encapsulates 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.</td></tr>

View file

@ -60,7 +60,7 @@
<a href="class128437.html#refclass128437" target = "projectFrame"><b>FileMapCache</b></a><br />
<a href="class129333.html#refclass129333" target = "projectFrame"><b>FileProvider</b></a><br />
<a href="class128778.html#refclass128778" target = "projectFrame"><b>FileReference</b></a><br />
<a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedPlacement</b></a><br />
<a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedLocation</b></a><br />
<a href="class128261.html#refclass128261" target = "projectFrame"><b>Fixture</b></a><br />
<a href="class128821.html#refclass128821" target = "projectFrame"><b>Frame</b></a><br />
<a href="class133253.html#refclass133253" target = "projectFrame"><b>Frame</b></a><br />
@ -74,6 +74,7 @@
<a href="class136069.html#refclass136069" target = "projectFrame"><b>Invalid</b></a><br />
<a href="class129669.html#refclass129669" target = "projectFrame"><b>Label</b></a><br />
<a href="class131973.html#refclass131973" target = "projectFrame"><b>Link</b></a><br />
<a href="class139909.html#refclass139909" target = "projectFrame"><b>LocatingPin</b></a><br />
<a href="class128522.html#refclass128522" target = "projectFrame"><b>Lock</b></a><br />
<a href="class128650.html#refclass128650" target = "projectFrame"><b>Lock</b></a><br />
<a href="class135685.html#refclass135685" target = "projectFrame"><b>Logic</b></a><br />
@ -99,7 +100,7 @@
<a href="class131717.html#refclass131717" target = "projectFrame"><b>ProcNode</b></a><br />
<a href="class138757.html#refclass138757" target = "projectFrame"><b>ProcPatt</b></a><br />
<a href="class132229.html#refclass132229" target = "projectFrame"><b>Projector</b></a><br />
<a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativePlacement</b></a><br />
<a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativeLocation</b></a><br />
<a href="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a><br />
<a href="class131333.html#refclass131333" target = "projectFrame"><b>RenderEngine</b></a><br />
<a href="class130949.html#refclass130949" target = "projectFrame"><b>RenderState</b></a><br />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 41 KiB

BIN
doc/devel/uml/fig131333.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

View file

@ -112,7 +112,7 @@ Documentation</title>
<a name="refartifact128005"></a>
<table><tr><td><div class="element">Artifact <b>Cinelerra3</b></div></td></tr></table>
<p>Depends on <a href="index.html#refpackage129413"><b>common</b></a></p><p>Depends on <a href="index.html#refpackage129797"><b>gui</b></a></p><p>Depends on <a href="index.html#refpackage129669"><b>proc</b></a></p><p>Depends on <a href="index.html#refpackage129541"><b>backend</b></a></p><p>the main executable to be built<br /></p>
<p><i>executable</i> associated with : <a href="index.html#refartifact132229"><b>exitnode</b></a>, <a href="index.html#refartifact131717"><b>pathmanager</b></a>, <a href="index.html#refartifact128901"><b>track</b></a>, <a href="index.html#refartifact134533"><b>paramprovider</b></a>, <a href="index.html#refartifact132997"><b>mask</b></a>, <a href="index.html#refartifact128133"><b>main</b></a>, <a href="index.html#refartifact130693"><b>conmanager</b></a>, <a href="index.html#refartifact129413"><b>clip</b></a>, <a href="index.html#refartifact129669"><b>meta</b></a>, <a href="index.html#refartifact129797"><b>fixedplacement</b></a>, <a href="index.html#refartifact129925"><b>relativeplacement</b></a>, <a href="index.html#refartifact133509"><b>vrender</b></a>, <a href="index.html#refartifact128261"><b>mobject</b></a>, <a href="index.html#refartifact134277"><b>source</b></a>, <a href="index.html#refartifact133765"><b>frame</b></a>, <a href="index.html#refartifact129029"><b>placement</b></a>, <a href="index.html#refartifact128517"><b>sessionimpl</b></a>, <a href="index.html#refartifact130437"><b>builderfacade</b></a>, <a href="index.html#refartifact131589"><b>controllerfacade</b></a>, <a href="index.html#refartifact132101"><b>processor</b></a>, <a href="index.html#refartifact133125"><b>pluginadapter</b></a>, <a href="index.html#refartifact129541"><b>effect</b></a>, <a href="index.html#refartifact131205"><b>tool</b></a>, <a href="index.html#refartifact131333"><b>segmentationtool</b></a>, <a href="index.html#refartifact133893"><b>aframe</b></a>, <a href="index.html#refartifact130821"><b>assembler</b></a>, <a href="index.html#refartifact132485"><b>trafo</b></a>, <a href="index.html#refartifact129157"><b>explicitplacement</b></a>, <a href="index.html#refartifact130309"><b>auto</b></a>, <a href="index.html#refartifact133637"><b>glrender</b></a>, <a href="index.html#refartifact132613"><b>link</b></a>, <a href="index.html#refartifact134405"><b>parameter</b></a>, <a href="index.html#refartifact131973"><b>renderengine</b></a>, <a href="index.html#refartifact130053"><b>allocation</b></a>, <a href="index.html#refartifact134021"><b>vframe</b></a>, <a href="index.html#refartifact130565"><b>toolfactory</b></a>, <a href="index.html#refartifact133381"><b>arender</b></a>, <a href="index.html#refartifact131845"><b>renderstate</b></a>, <a href="index.html#refartifact130181"><b>label</b></a>, <a href="index.html#refartifact134149"><b>glbuf</b></a>, <a href="index.html#refartifact132357"><b>procnode</b></a>, <a href="index.html#refartifact130949"><b>stateproxy</b></a>, <a href="index.html#refartifact132741"><b>hub</b></a>, <a href="index.html#refartifact131077"><b>buildable</b></a>, <a href="index.html#refartifact129285"><b>abstractmo</b></a>, <a href="index.html#refartifact131461"><b>nodecreatertool</b></a>, <a href="index.html#refartifact132869"><b>projector</b></a>, <a href="index.html#refartifact134661"><b>interpolator</b></a>, <a href="index.html#refartifact128645"><b>edl</b></a>, <a href="index.html#refartifact128773"><b>fixture</b></a>, <a href="index.html#refartifact133253"><b>glpipe</b></a></p>
<p><i>executable</i> associated with : <a href="index.html#refartifact129029"><b>placement</b></a>, <a href="index.html#refartifact128517"><b>sessionimpl</b></a>, <a href="index.html#refartifact130437"><b>builderfacade</b></a>, <a href="index.html#refartifact131589"><b>controllerfacade</b></a>, <a href="index.html#refartifact132101"><b>processor</b></a>, <a href="index.html#refartifact133125"><b>pluginadapter</b></a>, <a href="index.html#refartifact129541"><b>effect</b></a>, <a href="index.html#refartifact131205"><b>tool</b></a>, <a href="index.html#refartifact131333"><b>segmentationtool</b></a>, <a href="index.html#refartifact133893"><b>aframe</b></a>, <a href="index.html#refartifact130821"><b>assembler</b></a>, <a href="index.html#refartifact132485"><b>trafo</b></a>, <a href="index.html#refartifact129157"><b>explicitplacement</b></a>, <a href="index.html#refartifact130309"><b>auto</b></a>, <a href="index.html#refartifact133637"><b>glrender</b></a>, <a href="index.html#refartifact132613"><b>link</b></a>, <a href="index.html#refartifact134405"><b>parameter</b></a>, <a href="index.html#refartifact131973"><b>renderengine</b></a>, <a href="index.html#refartifact130053"><b>allocation</b></a>, <a href="index.html#refartifact134021"><b>vframe</b></a>, <a href="index.html#refartifact130565"><b>toolfactory</b></a>, <a href="index.html#refartifact133381"><b>arender</b></a>, <a href="index.html#refartifact131845"><b>renderstate</b></a>, <a href="index.html#refartifact130181"><b>label</b></a>, <a href="index.html#refartifact134149"><b>glbuf</b></a>, <a href="index.html#refartifact132357"><b>procnode</b></a>, <a href="index.html#refartifact130949"><b>stateproxy</b></a>, <a href="index.html#refartifact132741"><b>hub</b></a>, <a href="index.html#refartifact131077"><b>buildable</b></a>, <a href="index.html#refartifact129285"><b>abstractmo</b></a>, <a href="index.html#refartifact131461"><b>nodecreatertool</b></a>, <a href="index.html#refartifact132869"><b>projector</b></a>, <a href="index.html#refartifact134661"><b>interpolator</b></a>, <a href="index.html#refartifact128645"><b>edl</b></a>, <a href="index.html#refartifact128773"><b>fixture</b></a>, <a href="index.html#refartifact133253"><b>glpipe</b></a>, <a href="index.html#refartifact132229"><b>exitnode</b></a>, <a href="index.html#refartifact131717"><b>pathmanager</b></a>, <a href="index.html#refartifact128901"><b>track</b></a>, <a href="index.html#refartifact134533"><b>paramprovider</b></a>, <a href="index.html#refartifact132997"><b>mask</b></a>, <a href="index.html#refartifact128133"><b>main</b></a>, <a href="index.html#refartifact130693"><b>conmanager</b></a>, <a href="index.html#refartifact129413"><b>clip</b></a>, <a href="index.html#refartifact129669"><b>meta</b></a>, <a href="index.html#refartifact129797"><b>fixedlocation</b></a>, <a href="index.html#refartifact129925"><b>relativelocation</b></a>, <a href="index.html#refartifact133509"><b>vrender</b></a>, <a href="index.html#refartifact128261"><b>mobject</b></a>, <a href="index.html#refartifact134277"><b>source</b></a>, <a href="index.html#refartifact133765"><b>frame</b></a></p>
<a name="refartifact128133"></a>
<table><tr><td><div class="element">Artifact <b>main</b></div></td></tr></table>
<p>Artifact <i>source</i></p>
@ -378,13 +378,18 @@ Documentation</title>
<table><tr><td><div class="element">Artifact <b>meta</b></div></td></tr></table>
<p>abstract base class of all MObjects representing meta data or processing instructions<br /></p>
<p>Artifact <i>source</i> associated with : <a href="class129157.html#refclass129157"><b>Meta</b></a></p>
<a name="refartifact139013"></a>
<table><tr><td><div class="element">Artifact <b>locatingpin</b></div></td></tr></table>
<p>Chaining and constraining the Placement of a Media Object<br /></p>
<p>Artifact <i>source</i> associated with : <a href="class139909.html#refclass139909"><b>LocatingPin</b></a></p>
<a name="refartifact129797"></a>
<table><tr><td><div class="element">Artifact <b>fixedplacement</b></div></td></tr></table>
<p>Artifact <i>source</i> associated with : <a href="class129285.html#refclass129285"><b>FixedPlacement</b></a></p>
<table><tr><td><div class="element">Artifact <b>fixedlocation</b></div></td></tr></table>
<p>implements fixed placement of a MObject<br /></p>
<p>Artifact <i>source</i> associated with : <a href="class129285.html#refclass129285"><b>FixedLocation</b></a></p>
<a name="refartifact129925"></a>
<table><tr><td><div class="element">Artifact <b>relativeplacement</b></div></td></tr></table>
<table><tr><td><div class="element">Artifact <b>relativelocation</b></div></td></tr></table>
<p>Placement implemnetaion providing various ways of attaching a MObject to another one<br /></p>
<p>Artifact <i>source</i> associated with : <a href="class129413.html#refclass129413"><b>RelativePlacement</b></a></p>
<p>Artifact <i>source</i> associated with : <a href="class129413.html#refclass129413"><b>RelativeLocation</b></a></p>
<a name="refartifact130053"></a>
<table><tr><td><div class="element">Artifact <b>allocation</b></div></td></tr></table>
<p>Artifact <i>source</i> associated with : <a href="class129541.html#refclass129541"><b>Allocation</b></a></p>
@ -632,8 +637,8 @@ Documentation</title>
<table><tr><td><div class="element">Class <b><a href="class138629.html#refclass138629"><b>CompoundClip</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129029.html#refclass129029"><b>Effect</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129157.html#refclass129157"><b>Meta</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129285.html#refclass129285"><b>FixedPlacement</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129413.html#refclass129413"><b>RelativePlacement</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129285.html#refclass129285"><b>FixedLocation</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129413.html#refclass129413"><b>RelativeLocation</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129541.html#refclass129541"><b>Allocation</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129669.html#refclass129669"><b>Label</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class129925.html#refclass129925"><b>Auto</b></a></b></div></td></tr></table>
@ -642,6 +647,7 @@ Documentation</title>
<table><tr><td><div class="element">Class <b><a href="class134533.html#refclass134533"><b>Parameter</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class134661.html#refclass134661"><b>ParamProvider</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class134789.html#refclass134789"><b>Interpolator</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class139909.html#refclass139909"><b>LocatingPin</b></a></b></div></td></tr></table>
</div>
<a name="refpackage128901"></a>
<h3 class ="package">2.2.2 Package Builder</h3>
@ -795,6 +801,23 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<table><tr><td><div class="element">Class <b><a href="class130949.html#refclass130949"><b>RenderState</b></a></b></div></td></tr></table>
</div>
</div>
<a name="refuse case view128261"></a>
<h3 class ="view">2.2.4 Use Case View config examples</h3>
<div class="sub">
<a name="refobject diagram131333"></a>
<p align="center"><img src="fig131333.png" alt="" /></p>
<p align="center"><b>multichannel clip</b></p><p><br /></p><p><br /></p>
<a name="refclass instance134661"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class137349.html#refclass137349"><b>Clip</b></a></p><a name="refclass instance134789"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class138501.html#refclass138501"><b>CompoundMedia</b></a></p><a name="refclass instance134917"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class136709.html#refclass136709"><b>Media</b></a></p><a name="refclass instance135045"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class136709.html#refclass136709"><b>Media</b></a></p><a name="refclass instance135173"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class136709.html#refclass136709"><b>Media</b></a></p><a name="refclass instance135301"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class138629.html#refclass138629"><b>CompoundClip</b></a></p><a name="refclass instance135429"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class138885.html#refclass138885"><b>SimpleClip</b></a></p><a name="refclass instance135557"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class138885.html#refclass138885"><b>SimpleClip</b></a></p><a name="refclass instance135685"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class138885.html#refclass138885"><b>SimpleClip</b></a></p><a name="refclass instance135813"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class128645.html#refclass128645"><b>Placement</b></a></p></div>
</div>
<a name="refpackage128389"></a>
<h2 class ="package">2.3 Package RenderEngine</h2>
@ -905,34 +928,25 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<table><tr><td><div class="element">Class instance <b>vid_A</div></td></tr></table><p>type :<a href="class128901.html#refclass128901"><b>Clip</b></a></p><p>attributes :<ul>
<li><a href="class128517.html#refattribute128517"><b>length</b></a> = 5</li>
<li><a href="class128901.html#refattribute128645"><b>start</b></a> = 100</li>
</ul></p><p>relations :<ul>
<li><a href="class128517.html#refrelation129029"><b>placement</b></a> = <a href="index.html#refclass instance130053"><b>class instance</b></a></li>
</ul></p><a name="refclass instance130053"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129413.html#refclass129413"><b>RelativePlacement</b></a></p><p>attributes :<ul>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129413.html#refclass129413"><b>RelativeLocation</b></a></p><p>attributes :<ul>
<li><a href="class129413.html#refattribute128133"><b>relType</b></a> = SAMETIME</li>
</ul></p><p>relations :<ul>
<li><a href="class129413.html#refrelation130565"><b>anchor</b></a> = <a href="index.html#refclass instance129669"><b>refPoint</b></a></li>
<li><a href="class128645.html#refrelation129157"><b>subject</b></a> = <a href="index.html#refclass instance129925"><b>vid_A</b></a></li>
</ul></p><a name="refclass instance130181"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129029.html#refclass129029"><b>Effect</b></a></p><p>attributes :<ul>
<li><a href="class128517.html#refattribute128517"><b>length</b></a> = 3</li>
<li><a href="class129029.html#refattribute128901"><b>plugID</b></a> = "Hue"</li>
</ul></p><p>relations :<ul>
<li><a href="class128517.html#refrelation129029"><b>placement</b></a> = <a href="index.html#refclass instance130309"><b>class instance</b></a></li>
</ul></p><a name="refclass instance130309"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129413.html#refclass129413"><b>RelativePlacement</b></a></p><p>attributes :<ul>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129413.html#refclass129413"><b>RelativeLocation</b></a></p><p>attributes :<ul>
<li><a href="class129413.html#refattribute129029"><b>offset</b></a> = +3</li>
<li><a href="class129413.html#refattribute128133"><b>relType</b></a> = ATTACH</li>
</ul></p><p>relations :<ul>
<li><a href="class129413.html#refrelation130565"><b>anchor</b></a> = <a href="index.html#refclass instance129925"><b>vid_A</b></a></li>
<li><a href="class128645.html#refrelation129157"><b>subject</b></a> = <a href="index.html#refclass instance130437"><b>class instance</b></a></li>
<li><a href="class128645.html#refrelation129157"><b>subject</b></a> = <a href="index.html#refclass instance130181"><b>class instance</b></a></li>
</ul></p><a name="refclass instance130437"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129029.html#refclass129029"><b>Effect</b></a></p><p>attributes :<ul>
<li><a href="class128517.html#refattribute128517"><b>length</b></a> = 3</li>
<li><a href="class129029.html#refattribute128901"><b>plugID</b></a> = "Hue"</li>
</ul></p><p>relations :<ul>
<li><a href="class128517.html#refrelation129029"><b>placement</b></a> = <a href="index.html#refclass instance130309"><b>class instance</b></a></li>
</ul></p><a name="refclass instance130565"></a>
<table><tr><td><div class="element">Class instance <b></div></td></tr></table><p>type :<a href="class129797.html#refclass129797"><b>ExplicitPlacement</b></a></p><p>attributes :<ul>
<li><a href="class129797.html#refattribute128261"><b>time</b></a> = 5</li>

View file

@ -49,12 +49,12 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128901" target = "projectFrame"><b>Assets</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute129285" target = "projectFrame"><b>ATTACH</b></a></td><td>attribute</td><td>attach subject to anchor (e.g. an effect to a clip)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132101" target = "projectFrame"><b>au1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128773" target = "projectFrame"><b>aud_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131845" target = "projectFrame"><b>aud_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128773" target = "projectFrame"><b>aud_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131205" target = "projectFrame"><b>audio</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130821" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128901" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128389" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128901" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact130309" target = "projectFrame"><b>auto</b></a></td><td>artifact</td><td>Media Object holding automation data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129925.html#refclass129925" target = "projectFrame"><b>Auto</b></a></td><td>class</td><td>Automation data for some parameter (i.e. a time varying function)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram129669" target = "projectFrame"><b>Automation Entities</b></a></td><td>class diagram</td><td></td></tr>

View file

@ -23,32 +23,44 @@
<tr bgcolor=#f0f0f0><td><a href="class137221.html#refclass137221" target = "projectFrame"><b>Category</b></a></td><td>class</td><td>tree like classification of Assets</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact135941" target = "projectFrame"><b>category</b></a></td><td>artifact</td><td>tree like classification of Assets</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130309" target = "projectFrame"><b>cause</b></a></td><td>attribute</td><td>a copy of the first exception encountered in this exception chain</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation145413" target = "projectFrame"><b>chain</b></a></td><td>relation</td><td>Chain of additional Placements further constraining the position of this MObject</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134277" target = "projectFrame"><b>chain</b></a></td><td>operation</td><td>create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129633" target = "projectFrame"><b>checked_in</b></a></td><td>relation</td><td>checked_in objects are subject of cache aging and must be not in use</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129290" target = "projectFrame"><b>checked_out</b></a></td><td>relation</td><td>this list keeps all mappings which are in use, and thus prevents them from Cache aging</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128005" target = "projectFrame"><b>Cinelerra3</b></a></td><td>artifact</td><td>the main executable to be built</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129" target = "projectFrame"><b>cinelerra3</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135557" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135685" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135813" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135301" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135173" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135045" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134917" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134789" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134661" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135429" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129541" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129797" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130053" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130181" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130309" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129029" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130309" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130437" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130565" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130693" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131589" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128261" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132229" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132357" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132485" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128133" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133509" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128005" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128133" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128261" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129285" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133765" target = "projectFrame"><b>clear</b></a></td><td>operation</td><td>clear current session contents <br />without resetting overall session config.<br />Afterwards, the session will contain only one <br />empty EDL, while all Assets are retained.<br /></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137349.html#refclass137349" target = "projectFrame"><b>Clip</b></a></td><td>class</td><td>bookkeeping (asset) view of a media clip.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129413" target = "projectFrame"><b>clip</b></a></td><td>artifact</td><td>a Media Clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact136325" target = "projectFrame"><b>clip</b></a></td><td>artifact</td><td>bookkeeping (asset) view of a media clip.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129413" target = "projectFrame"><b>clip</b></a></td><td>artifact</td><td>a Media Clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128901.html#refclass128901" target = "projectFrame"><b>Clip</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128901" target = "projectFrame"><b>clips</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137861.html#refclass137861" target = "projectFrame"><b>Codec</b></a></td><td>class</td><td>description of some media data decoder or encoder facility</td></tr>
@ -67,6 +79,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact138245" target = "projectFrame"><b>compoundmedia</b></a></td><td>artifact</td><td>a special clip as a compound of several elementary media tracks,<br />e.g. the individual media streams found in one media file</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128266.html#refclass128266" target = "projectFrame"><b>Condition</b></a></td><td>class</td><td>I provided a reworked Condition class in my cinelerra2 repository</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135813.html#refclass135813" target = "projectFrame"><b>Config</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case view128261" target = "projectFrame"><b>config examples</b></a></td><td>use case view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128773" target = "projectFrame"><b>configure</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity128133" target = "projectFrame"><b>configure Render</b></a></td><td>activity</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action128645" target = "projectFrame"><b>configure Tools</b></a></td><td>opaque activity action</td><td></td></tr>
@ -76,8 +89,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action129029" target = "projectFrame"><b>connect</b></a></td><td>opaque activity action</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130181.html#refclass130181" target = "projectFrame"><b>Constraint</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128261" target = "projectFrame"><b>Controller</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130693" target = "projectFrame"><b>controller</b></a></td><td>package</td><td>sourcecode package<br /><br />The Processing and Render Controller,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129029" target = "projectFrame"><b>Controller</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130693" target = "projectFrame"><b>controller</b></a></td><td>package</td><td>sourcecode package<br /><br />The Processing and Render Controller,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128645" target = "projectFrame"><b>Controller Entities</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128389" target = "projectFrame"><b>Controller Workings</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130309.html#refclass130309" target = "projectFrame"><b>ControllerFacade</b></a></td><td>class</td><td>Provides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.</td></tr>

View file

@ -29,12 +29,12 @@
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refclass129333" target = "projectFrame"><b>FileProvider</b></a></td><td>class</td><td>This 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.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128778.html#refclass128778" target = "projectFrame"><b>FileReference</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129034" target = "projectFrame"><b>files</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129797" target = "projectFrame"><b>fixedplacement</b></a></td><td>artifact</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedPlacement</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129797" target = "projectFrame"><b>fixedlocation</b></a></td><td>artifact</td><td>implements fixed placement of a MObject</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedLocation</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity object128005" target = "projectFrame"><b>Fixture</b></a></td><td>activity object</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128773" target = "projectFrame"><b>fixture</b></a></td><td>artifact</td><td>the (low level) representation of the EDL with concrete placement data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128517" target = "projectFrame"><b>Fixture</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128261.html#refclass128261" target = "projectFrame"><b>Fixture</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128517" target = "projectFrame"><b>Fixture</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128261" target = "projectFrame"><b>fixture</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reffork activity node129029" target = "projectFrame"><b>fork activity node</b></a></td><td>fork activity node</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128821.html#refclass128821" target = "projectFrame"><b>Frame</b></a></td><td>class</td><td>Frames 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.</td></tr>

View file

@ -20,9 +20,9 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130437" target = "projectFrame"><b>id</b></a></td><td>attribute</td><td>Asset primary key.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128309" target = "projectFrame"><b>In Memory Database</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity action pin128133" target = "projectFrame"><b>inFixture</b></a></td><td>activity action pin</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131461" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134149" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132869" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131461" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131461" target = "projectFrame"><b>instance</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation143621" target = "projectFrame"><b>instructions</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view129029" target = "projectFrame"><b>Interface</b></a></td><td>class view</td><td></td></tr>

View file

@ -25,6 +25,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132613" target = "projectFrame"><b>link</b></a></td><td>artifact</td><td>forwarding, adapting or connecting ProcNode</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134021" target = "projectFrame"><b>load</b></a></td><td>operation</td><td>replace the current session by a new<br />session loaded from serialized state.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128005" target = "projectFrame"><b>load Media</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact139013" target = "projectFrame"><b>locatingpin</b></a></td><td>artifact</td><td>Chaining and constraining the Placement of a Media Object</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139909.html#refclass139909" target = "projectFrame"><b>LocatingPin</b></a></td><td>class</td><td>An element with value semantics, which actually implements the placement of some MObject by positioning it in some way.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128522.html#refclass128522" target = "projectFrame"><b>Lock</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128650.html#refclass128650" target = "projectFrame"><b>Lock</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135685.html#refclass135685" target = "projectFrame"><b>Logic</b></a></td><td>class</td><td></td></tr>

View file

@ -32,13 +32,14 @@
<tr bgcolor=#f0f0f0><td><a href="class139397.html#refclass139397" target = "projectFrame"><b>MediaFactory</b></a></td><td>class</td><td>specialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refmerge activity node128773" target = "projectFrame"><b>merge activity node</b></a></td><td>merge activity node</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137093.html#refclass137093" target = "projectFrame"><b>Meta</b></a></td><td>class</td><td>key abstraction: metadata and organisational asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact136837" target = "projectFrame"><b>meta</b></a></td><td>artifact</td><td>key abstraction: metadata and organisational asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129669" target = "projectFrame"><b>meta</b></a></td><td>artifact</td><td>abstract base class of all MObjects representing meta data or processing instructions</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact136837" target = "projectFrame"><b>meta</b></a></td><td>artifact</td><td>key abstraction: metadata and organisational asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129157.html#refclass129157" target = "projectFrame"><b>Meta</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128261" target = "projectFrame"><b>mobject</b></a></td><td>artifact</td><td>Key Abstraction: A Media Object in the Session</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130181" target = "projectFrame"><b>mobject</b></a></td><td>package</td><td>sourcecode package<br /><br />MObject Subsystem<br />including the Session (EDL), Builder and Processing Controller</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128261" target = "projectFrame"><b>MObject</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128517.html#refclass128517" target = "projectFrame"><b>MObject</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram131333" target = "projectFrame"><b>multichannel clip</b></a></td><td>object diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128394.html#refclass128394" target = "projectFrame"><b>Mutex</b></a></td><td>class</td><td>I provided a reworked Mutex class in my cinelerra2 repository</td></tr>
</table>
</body>

View file

@ -18,6 +18,7 @@
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130565" target = "projectFrame"><b>name</b></a></td><td>attribute</td><td>element ID, comprehensible but sanitized. The tuple (category, name, org) is unique.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation146053" target = "projectFrame"><b>next</b></a></td><td>relation</td><td>next additional LocatingPin, if any</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact131461" target = "projectFrame"><b>nodecreatertool</b></a></td><td>artifact</td><td>central Tool implementing the Renderengine building</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refclass134405" target = "projectFrame"><b>NodeCreatorTool</b></a></td><td>class</td><td>This Tool implementation plays the central role in the buld process: given a MObject from Session, it is able to attach ProcNodes to the render engine under construction such as to reflect the properties of the MObject in the actual render.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation144133" target = "projectFrame"><b>nodes</b></a></td><td>relation</td><td></td></tr>

View file

@ -20,8 +20,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute129029" target = "projectFrame"><b>offset</b></a></td><td>attribute</td><td>Offset the actual position by this (time) value relative to the anchor point. TODO: Representation?</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130821" target = "projectFrame"><b>org</b></a></td><td>attribute</td><td>origin 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".</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133125" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131333" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134405" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131333" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138117.html#refclass138117" target = "projectFrame"><b>OutPort</b></a></td><td>class</td><td>structural asset corresponding to some port generating media output</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137605" target = "projectFrame"><b>outport</b></a></td><td>artifact</td><td>structural asset corresponding to some port generating media output</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation132613" target = "projectFrame"><b>output</b></a></td><td>relation</td><td></td></tr>

View file

@ -26,8 +26,7 @@
<tr bgcolor=#f0f0f0><td><a href="class130437.html#refclass130437" target = "projectFrame"><b>PathManager</b></a></td><td>class</td><td>While building a render engine, this Strategy class decides on the actual render strategy in accordance to the current controller settings (system state)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact131717" target = "projectFrame"><b>pathmanager</b></a></td><td>artifact</td><td>Manager for deciding the actual render strategy</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129029" target = "projectFrame"><b>placement</b></a></td><td>artifact</td><td>Key Abstraction: a way to place and locate a Media Object</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129029" target = "projectFrame"><b>placement</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128645.html#refclass128645" target = "projectFrame"><b>Placement</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128645.html#refclass128645" target = "projectFrame"><b>Placement</b></a></td><td>class</td><td>used to specify the position of a MObject in the EDL. This can be done in various ways (absolute, relative). <br />Placement at the same time acts as (refcounting) smart pointer for accessing the MObject.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation129413" target = "projectFrame"><b>play</b></a></td><td>operation</td><td>TODO: will probably be handled differently (see Cehteh)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refnode128261" target = "projectFrame"><b>playlist</b></a></td><td>node</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128901" target = "projectFrame"><b>plugID</b></a></td><td>attribute</td><td>Identifier of the Plugin to be used</td></tr>

View file

@ -20,10 +20,10 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129669" target = "projectFrame"><b>refPoint</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132357" target = "projectFrame"><b>reg</b></a></td><td>operation</td><td>registers an asset object in the internal DB, providing its unique key</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation142085" target = "projectFrame"><b>registry</b></a></td><td>relation</td><td>@internal Table or DB holding all registered asset instances.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129925" target = "projectFrame"><b>relativeplacement</b></a></td><td>artifact</td><td>Placement implemnetaion providing various ways of attaching a MObject to another one</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativePlacement</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128133" target = "projectFrame"><b>relType</b></a></td><td>attribute</td><td>the kind of relation denoted by this Placement</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129925" target = "projectFrame"><b>relativelocation</b></a></td><td>artifact</td><td>Placement implemnetaion providing various ways of attaching a MObject to another one</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativeLocation</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a></td><td>class</td><td>the possible kinds of RelativePlacements</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128133" target = "projectFrame"><b>relType</b></a></td><td>attribute</td><td>the kind of relation denoted by this Placement</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132741" target = "projectFrame"><b>remove</b></a></td><td>operation</td><td>remove the given asset &lt;i&gt;together with all its dependants&lt;/i&gt; from the internal DB</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128389" target = "projectFrame"><b>Render Entities</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity parameter128005" target = "projectFrame"><b>Render Request</b></a></td><td>activity parameter</td><td></td></tr>

View file

@ -62,7 +62,7 @@
<tr bgcolor=#f0f0f0><td><a href="class136965.html#refclass136965" target = "projectFrame"><b>Struct</b></a></td><td>class</td><td>key abstraction: structural asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact136709" target = "projectFrame"><b>struct</b></a></td><td>artifact</td><td>key abstraction: structural asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131205" target = "projectFrame"><b>Struct-Asset Relations</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129157" target = "projectFrame"><b>subject</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation144901" target = "projectFrame"><b>subject</b></a></td><td>relation</td><td>Placement acts as smart pointer</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation144005" target = "projectFrame"><b>subPattern</b></a></td><td>relation</td><td></td></tr>
</table>
</body>

View file

@ -32,20 +32,20 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact130565" target = "projectFrame"><b>toolfactory</b></a></td><td>artifact</td><td>supply of Tool implementations for the Builder</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137989.html#refclass137989" target = "projectFrame"><b>Track</b></a></td><td>class</td><td>structural asset holding the configuration of a track in the EDL</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128389" target = "projectFrame"><b>track</b></a></td><td>attribute</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137477" target = "projectFrame"><b>track</b></a></td><td>artifact</td><td>structural asset holding the configuration of a track in the EDL</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128901" target = "projectFrame"><b>track</b></a></td><td>artifact</td><td>descriptor for one track in the Session</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137477" target = "projectFrame"><b>track</b></a></td><td>artifact</td><td>structural asset holding the configuration of a track in the EDL</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128389.html#refclass128389" target = "projectFrame"><b>Track</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation142341" target = "projectFrame"><b>tracks</b></a></td><td>relation</td><td>elementary media assets comprising this compound</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128645" target = "projectFrame"><b>tracks</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129541" target = "projectFrame"><b>tracks</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131845.html#refclass131845" target = "projectFrame"><b>Trafo</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132485" target = "projectFrame"><b>trafo</b></a></td><td>artifact</td><td>transforming processing Node </td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130565" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130693" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130309" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130565" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130437" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130181" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation129925" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130181" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130053" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation129797" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td>This operation is to be overloaded for the specific MObject subclasses to be treated.</td></tr>
</table>

View file

@ -25,18 +25,18 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129925" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129413" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134021" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131717" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128645" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133765" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131717" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134533" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133765" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131077" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132741" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132997" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130949" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133637" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129157" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134277" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128517" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130949" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134277" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132997" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132997.html#refclass132997" target = "projectFrame"><b>VRender</b></a></td><td>class</td><td>Representation of a Video render process. (Encapsulates the video buffers for the actual calculations)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact133509" target = "projectFrame"><b>vrender</b></a></td><td>artifact</td><td>Representation of a Video render process</td></tr>
</table>

View file

@ -20,6 +20,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram128901" target = "projectFrame"><b>EDL Example2</b></a></td><td></td><td>More 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</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram129029" target = "projectFrame"><b>Engine Example1</b></a></td><td></td><td>Example1 (from EDL) continued: here the RenderEngine to be created by the Builder from the Input shown in Example1</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram129157" target = "projectFrame"><b>Engine Example2</b></a></td><td></td><td>Example2 (from EDL) continued: notably in this RenderEngine the Effect has been partitioned into 2 segments with constant configuration.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram131333" target = "projectFrame"><b>multichannel clip</b></a></td><td></td><td></td></tr>
</table>
</body>
</html>

View file

@ -21,6 +21,7 @@
<tr bgcolor=#f0f0f0><td><a href="class131077.html#refoperation128901"><b>build</b></a></td><td><a href="class131077.html#refclass131077"><b>Assembler</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130565.html#refoperation128517"><b>buildEngine</b></a></td><td><a href="class130565.html#refclass130565"><b>BuilderFacade</b></a></td><td>Main Operation of the Builder: create a render engine for a given part of the timeline</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130437.html#refoperation128261"><b>buildProcessor</b></a></td><td><a href="class130437.html#refclass130437"><b>PathManager</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128645.html#refoperation134277"><b>chain</b></a></td><td><a href="class128645.html#refclass128645"><b>Placement</b></a></td><td>create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139781.html#refoperation133765"><b>clear</b></a></td><td><a href="class139781.html#refclass139781"><b>SessManager</b></a></td><td>clear current session contents <br />without resetting overall session config.<br />Afterwards, the session will contain only one <br />empty EDL, while all Assets are retained.<br /></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130693.html#refoperation128773"><b>configure</b></a></td><td><a href="class130693.html#refclass130693"><b>ToolFactory</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136709.html#refoperation133253"><b>createClip</b></a></td><td><a href="class136709.html#refclass136709"><b>Media</b></a></td><td>create a (possibly compound) Clip refering to this media, ready to be added to the EDL.</td></tr>

View file

@ -47,7 +47,7 @@ namespace cinelerra
/* == several Policies usable in conjunction with cinelerra::Singleton == */
/**
* Policy for creating the Singleton instance statically
* Policy placing the Singleton instance into a statically allocated buffer
*/
template<class S>
struct StaticCreate

View file

@ -22,10 +22,16 @@
#include "common/time.hpp"
#include <limits>
namespace cinelerra
{
// TODO: dummy values; should be adjusted when switching to the real time implementation provided by the backend
const Time Time::MAX = +std::numeric_limits<long>::max();
const Time Time::MIN = -std::numeric_limits<long>::max();
} // namespace cinelerra

View file

@ -24,6 +24,7 @@
#ifndef CINELERRA_TIME_H
#define CINELERRA_TIME_H
#include <boost/operators.hpp>
namespace cinelerra
@ -38,13 +39,22 @@ namespace cinelerra
* elaborate timehandling functions in the backend and the goal
* is for class Time to be just a thin wrapper!
*/
class Time
class Time : boost::totally_ordered<Time>
{
int dummy;
long dummy;
public:
Time(int dum=0) : dummy(dum) {}
operator int () { return dummy; }
Time(long dum=0) : dummy(dum) {}
operator long () { return dummy; }
bool operator< (const Time& ot) const { return dummy < ot.dummy; }
bool operator== (const Time& ot) const { return dummy == ot.dummy; }
static const Time MAX ;
static const Time MIN ;
};
} // namespace cinelerra
#endif

View file

@ -96,10 +96,24 @@ namespace util
* in any sequencial container */
template <typename SEQ>
inline bool
contains (SEQ& cont, typename SEQ::value_type& val)
contains (SEQ& cont, typename SEQ::const_reference val)
{
typename SEQ::iterator end = cont.end();
return end != std::find(cont.begin(),end, val);
typename SEQ::const_iterator begin = cont.begin();
typename SEQ::const_iterator end = cont.end();
return end != std::find(begin,end, val);
}
/** shortcut for removing all copies of an Element
* in any sequencial collection */
template <typename SEQ>
inline typename SEQ::iterator
removeall (SEQ& coll, typename SEQ::value_type& val)
{
typename SEQ::iterator collEnd = coll.end();
return coll.erase (std::remove (coll.begin(), collEnd, val),
collEnd
);
}
@ -112,7 +126,23 @@ namespace util
{
return std::for_each (c.begin(),c.end(), doIt);
}
/** shortcut for testing all elements of a collection
* with the given predicate.
*/
template <typename SEQ, typename Oper>
inline bool
and_all (SEQ& coll, Oper predicate)
{
typename SEQ::const_iterator e = coll.end();
typename SEQ::const_iterator i = coll.begin();
while (i!=e && predicate(*i)) ++i;
return i==e;
}
/** produce an identifier based on the given string.
@ -149,10 +179,12 @@ namespace util
} // namespace util
/* some common macro definitions */
/** supress "warning: unused variable" on vars, which
* are introduced into a scope because of some sideeffect, i.e. Locking
/* === some common macro definitions === */
/** supress "warning: unused variable" on vars, which are
* introduced into a scope because of some sideeffect, i.e. Locking
*/
#define SIDEEFFECT __attribute__ ((unused));
@ -160,5 +192,9 @@ namespace util
#define STRINGIFY(TOKEN) __STRNGFY(TOKEN)
#define __STRNGFY(TOKEN) #TOKEN
/** shortcut for subclass test, intended for assertions only.
* @note it is considered bad style to use such in non-assertion code,
* and we probably will enforce this design rule in future. */
#define INSTANCEOF(CLASS, EXPR) (dynamic_cast<const CLASS*> (EXPR))
#endif /*UTIL_HPP_*/

View file

@ -49,6 +49,7 @@
/* declare flags used throughout the code base... */
NOBUG_DECLARE_FLAG(config);
NOBUG_DECLARE_FLAG(oper);
NOBUG_DECLARE_FLAG(test);
NOBUG_DECLARE_FLAG(singleton);
NOBUG_DECLARE_FLAG(assetmem);
@ -76,6 +77,7 @@
/* flags used throughout the code base... */
NOBUG_CPP_DEFINE_FLAG(config);
NOBUG_CPP_DEFINE_FLAG(oper);
NOBUG_CPP_DEFINE_FLAG(test);
NOBUG_CPP_DEFINE_FLAG_LIMIT(singleton, LOG_WARNING);
NOBUG_CPP_DEFINE_FLAG_LIMIT(assetmem, LOG_WARNING);

View file

@ -25,10 +25,18 @@
#include "proc/assetmanager.hpp"
#include "common/util.hpp"
#include <boost/function.hpp>
#include <boost/format.hpp>
#include <boost/bind.hpp>
using boost::bind;
using boost::format;
using boost::function;
using util::contains;
using util::removeall;
using util::for_each;
using util::and_all;
using util::cStr;
@ -45,9 +53,10 @@ namespace asset
* concrete subclasses are created via specialized Factories
*/
Asset::Asset (const Ident& idi)
: ident(idi), id(AssetManager::reg (this, idi))
{ TRACE (assetmem, "ctor Asset(id=%lu) : adr=%x %s", size_t(id), this, cStr(this->ident) );
}
: ident(idi), id(AssetManager::reg (this, idi)), enabled(true)
{
TRACE (assetmem, "ctor Asset(id=%lu) : adr=%x %s", size_t(id), this, cStr(this->ident) );
}
Asset::~Asset ()
{
@ -68,63 +77,105 @@ namespace asset
return str (id_tuple % ident.name % ident.category % ident.org % ident.version);
}
/** List 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
*/
vector<PAsset>
Asset::getParents () const
function<bool(const PAsset&)> check_isActive
= bind ( &Asset::isActive
, bind (&PAsset::get, _1 )
);
bool
all_parents_enabled (const vector<PAsset>& parents)
{
UNIMPLEMENTED ("Asset dependencies.");
return and_all (parents, check_isActive);
}
/** All 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.
*/
vector<PAsset>
Asset::getDependant () const
{
UNIMPLEMENTED ("Asset dependencies.");
}
/**
* weather this asset is swithced on and consequently included
* whether this asset is swithced on and consequently included
* in the fixture and participates in rendering.
*/
bool
Asset::isActive () const
{
UNIMPLEMENTED ("enable/disable Assets.");
return this->enabled
&& all_parents_enabled (parents);
}
/**
* change the enablement status of this asset.
* @note the corresponding #isActive predicate may depend
* on the enablement status of parent assets as well.
*/
void
Asset::enable () throw(cinelerra::error::State)
propagate_down (PAsset child, bool on)
{
UNIMPLEMENTED ("enable/disable Assets.");
child->enable(on);
}
/**change the enablement status of this asset. */
bool
Asset::enable (bool on) throw(cinelerra::error::State)
{
if (on == this->enabled)
return true;
if (on && !all_parents_enabled (parents))
return false;
// can indeed to do the toggle...
this->enabled = on;
for_each (dependants, bind (&propagate_down, _1 ,on));
return true;
}
/** release all links to other Asset objects held internally. */
void
Asset::unregister (PAsset& other) ///< @internal
{
other->unlink (this->id);
}
/** release all links to other <i>dependant</i>
* asset objects held internally and advise all parent
* assets to do so with the link to this asset.
* @note we don't release upward links to parent assets,
* thus effectively keeping the parents alive, because
* frequently these accessible parent assets are part
* of our own contract. (e.g. media for clip assets)
*/
void
Asset::unlink ()
{
UNIMPLEMENTED ("deleting Assets.");
function<void(PAsset&)> forget_me = bind(&Asset::unregister, this,_1);
for_each (parents, forget_me);
dependants.clear();
}
/** variant dropping only the links to the given Asset */
void
Asset::unlink (IDA target)
{
UNIMPLEMENTED ("deleting Assets.");
PAsset asset (AssetManager::instance().getAsset (target));
removeall (dependants,asset);
removeall (parents,asset);
}
void
Asset::defineDependency (PAsset parent)
{
PAsset p_this (AssetManager::getPtr(*this));
REQUIRE (!contains (parent->dependants, p_this));
REQUIRE (!contains (this->parents, parent));
parents.push_back (parent);
parent->dependants.push_back(p_this);
}
void
Asset::defineDependency (Asset& parent)
{
PAsset p_parent (AssetManager::getPtr(parent));
ASSERT (p_parent);
defineDependency (p_parent);
}

View file

@ -98,12 +98,15 @@ namespace asset
const size_t hash;
ID (size_t id) : hash(id) {}
ID (const KIND& asset) : hash(asset.getID()) {}
operator size_t() const { return hash; }
operator size_t() const { return hash; }
};
class DB;
class Asset;
class AssetManager;
typedef const ID<Asset>& IDA;
typedef shared_ptr<Asset> PAsset;
typedef shared_ptr<const Asset> PcAsset;
@ -210,6 +213,11 @@ namespace asset
/** user visible qualification of the thing, unit or concept represented by this asset.
* perferably "in one line". To be localized. */
const string longDesc;
vector<PAsset> parents;
vector<PAsset> dependants;
bool enabled;
@ -237,7 +245,17 @@ namespace asset
* Asset, leaving all other links intact. Usable for propagating */
virtual void unlink (IDA target);
/** establish a connection between this and the given parent asset,
* denoting we are in some way dependant on the parent. */
void defineDependency (PAsset parent);
void defineDependency (Asset& parent);
friend class AssetManager;
friend class DB;
private:
void unregister (PAsset& other);
@ -245,15 +263,13 @@ namespace asset
/** List 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
*/
vector<shared_ptr<Asset> >
getParents () const;
const vector<PAsset>& getParents () const { return parents; }
/** All 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.
*/
vector<shared_ptr<Asset> >
getDependant () const;
const vector<PAsset>& getDependant () const { return dependants; }
/** weather this asset is swithced on and consequently
* included in the fixture and participates in rendering
@ -263,16 +279,15 @@ namespace asset
/** change the enabled status of this asset.
* Note the corresponding #isActive predicate may
* depend on the enablement status of parent assets as well
* @return \c false if the state could not be changed
* due to parent objects being disabled
*/
void enable () throw(cinelerra::error::State);
bool enable (bool on=true) throw(cinelerra::error::State);
};
/** shorthand for refcounting Asset pointers */
typedef shared_ptr<Asset> PAsset;
/** ordering of Asset smart ptrs based on Ident tuple.
* @todo currently supporting only smart_ptr<Asset>. */
inline bool operator== (const PAsset& a1, const PAsset& a2) { return a1 && a2 && ( 0==a1->ident.compare(a2->ident));}
@ -294,7 +309,7 @@ namespace asset
/** convienient for debugging */
inline string str (const PAsset& a)
inline string str (PcAsset& a)
{
if (a)
return string (*a.get());

View file

@ -78,6 +78,7 @@ namespace asset
bool hasKind (Kind refKind) const { return kind_ == refKind; }
bool isWithin (const Category&) const;
void setPath (const string & newpath) { this->path_ = newpath; }
operator string () const;

View file

@ -22,11 +22,104 @@
#include "proc/asset/clip.hpp"
#include "proc/mobject/session/mobjectfactory.hpp" ////TODO: avoidable?
using std::tr1::static_pointer_cast;
namespace asset
{
/** */
namespace
{
/** @internal derive a sensible asset ident tuple
* when creating a asset::Clip based on some asset::Media
* @todo getting this one correct is important for handling creation
* of multiple clip instances from one media. Means we
* have still to figure out a sensible concept...
*/
const Asset::Ident
createClipIdent (const Media& mediaref)
{
string name (mediaref.ident.name + "-clip"); // TODO something sensible here; append number, sanitize etc.
Category category (mediaref.ident.category);
category.setPath(CLIP_SUBFOLDER);
return Asset::Ident (name, category,
mediaref.ident.org,
mediaref.ident.version );
}
Media::PClipMO
createClipMO (const Clip& thisClipAsset, const Media& mediaChannel)
{
return mobject::MObject::create (thisClipAsset,mediaChannel);
}
}
Clip::Clip (Media& mediaref)
: Media (createClipIdent (mediaref),
mediaref.getFilename(),
mediaref.getLength())
, source_ (mediaref)
, clipMO_ (createClipMO (*this, source_))
{
this->defineDependency (mediaref);
}
/** Specialisation of the asset::Media interface method,
* just returning the already existing Clip-MO. Every
* asset::Clip internally holds a Clip-MO, which has
* been created alongside. This Clip-MO may have several
* Placements or no placement at all (meaning it need not
* be placed within the EDL)
*/
Media::PClipMO
Clip::createClip () const
{
return clipMO_;
}
/** in spite of asset::Clip being a concrete subclass (and not an asset subinterface),
* we need to create the following explicit specialisation for asset::Clip#getClipAsset.
* Basically, it's a "shared-ptr-from-this"-function.
*/
template<>
shared_ptr<Clip>
AssetManager::getPtr (const Clip& asset)
{
ENSURE (instance().known(asset.id),
"unregistered asset instance encountered.");
return static_pointer_cast<Clip,Asset>
(instance().getAsset (asset.id));
}
/** return this wrapped into a shared ptr,
* because it's already the desired asset::Clip
*/
Media::PClip
Clip::getClipAsset ()
{
return AssetManager::getPtr(*this);
}
/** specialisation delegating the decision to
* the media asset referred by this clip
*/
Media::PMedia
Clip::checkCompound ()
{
return source_.checkCompound(); ////////////////////////TODO better interface!!!
}

View file

@ -35,12 +35,28 @@ namespace asset
*/
class Clip : public Media
{
/** media source of this clip */
const Media& source_;
/** the corresponding (dependant) clip-MO */
PClipMO clipMO_;
public:
virtual PClipMO createClip () const;
protected:
/**media source of this clip */
const Media* source;
Clip (Media& mediaref);
friend class MediaFactory;
virtual PClip getClipAsset ();
virtual PMedia checkCompound ();
};
typedef shared_ptr<const asset::Clip> PClipAsset;
const string CLIP_SUBFOLDER = "clips"; // TODO: handling of hard-wired constants....
} // namespace asset

View file

@ -44,7 +44,7 @@ namespace asset
{
protected:
/** elementary media assets comprising this compound */
vector<Media *> tracks;
vector<Media *> tracks; // TODO: shouldn't we use shared_ptr here???
};

View file

@ -26,6 +26,7 @@
#include "proc/asset.hpp"
#include "common/error.hpp"
#include <tr1/unordered_map>
#include <boost/utility.hpp>
@ -83,8 +84,8 @@ namespace asset
{
IdHashtable table;
DB () : table() {}
~DB () {}
DB () : table() { }
~DB () {clear();}
friend class cinelerra::singleton::StaticCreate<DB>;
@ -92,7 +93,8 @@ namespace asset
public:
template<class KIND>
void put (ID<KIND> hash, shared_ptr<KIND>& ptr) { table[hash] = static_pointer_cast (ptr); }
void put (ID<Asset> hash, PAsset& ptr) { table[hash] = ptr; }
void put (ID<Asset> hash, PAsset& ptr) { table[hash] = ptr; }
bool del (ID<Asset> hash) { return table.erase (hash); }
template<class KIND>
shared_ptr<KIND>
@ -101,10 +103,41 @@ namespace asset
return dynamic_pointer_cast<KIND,Asset> (find (hash));
}
/** removes all registered assets and does something similar
* to Asset::unlink() on each to break cyclic dependencies
* (we can't use the real unlink()-function, because this
* will propagate, including calls to the AssetManager.
* As the destructor of DB needs to call clear(), this
* could result in segfaults. This doesn't seem to be
* a problem, though, because we register and process
* \i all assets and the net effect is just breaking
* any cyclic dependencies)
*/
void
clear () throw()
{
try
{
IdHashtable::const_iterator i = table.begin();
IdHashtable::const_iterator e = table.end();
for ( ; i!=e ; ++i )
i->second->dependants.clear();
table.clear();
}
catch (cinelerra::Error& EX)
{
WARN (oper, "Problems while clearing Asset registry: %s", EX.what());
}
catch (...)
{
ERROR (oper, "Serious trouble while clearing Asset registry.");
} }
/** intended for diagnostics */
void
asList (list<PAsset>& output) const
asList (list<PcAsset>& output) const
{
IdHashtable::const_iterator i = table.begin();
IdHashtable::const_iterator e = table.end();

View file

@ -26,16 +26,21 @@
#include "proc/asset/clip.hpp"
#include "proc/asset/unknown.hpp"
#include "proc/mobject/session/clip.hpp"
#include "proc/mobject/session/mobjectfactory.hpp"
#include "common/util.hpp"
#include "nobugcfg.h"
#include <boost/regex.hpp>
#include <boost/format.hpp>
using util::isnil;
using boost::format;
using boost::regex;
using boost::smatch;
using boost::regex_search;
using std::tr1::dynamic_pointer_cast;
namespace asset
@ -62,22 +67,45 @@ namespace asset
typedef shared_ptr<mobject::session::Clip> PClip;
typedef shared_ptr<asset::ProcPatt> PProcPatt;
PClip
Media::PClipMO
Media::createClip ()
{
UNIMPLEMENTED ("create clip from media asset");
PClip clip; //TODO:null
PClip clipAsset (getClipAsset());
PClipMO clipMO = clipAsset->createClip();
ENSURE (clip);
return clip;
ENSURE (clipMO->isValid());
return clipMO;
}
PProcPatt
Media::howtoProc ()
/** @internal used to either create an asset::Clip denoting the whole media,
* or to get the right reference to some already existing asset::Clip,
* especially when this media is part of a compound (multichannel) media.
*/
Media::PClip
Media::getClipAsset ()
{
if (PMedia parent = this->checkCompound())
return parent->getClipAsset();
else
return Media::create(*this);
}
Media::PMedia
Media::checkCompound() const
{
vector<PAsset> parents = this->getParents();
PMedia parent;
if ( !isnil (parents)) // primary parent is a media asset?
parent = dynamic_pointer_cast<Media,Asset> (parents[0]);
return parent;
}
Media::PProcPatt
Media::howtoProc () const
{
UNIMPLEMENTED ("calculate and return processing pattern for media asset");
PProcPatt ppatt; //TODO:null
@ -87,6 +115,13 @@ namespace asset
}
cinelerra::Time
Media::getLength() const
{
return len_;
}
MediaFactory Media::create; ///< storage for the static MediaFactory instance
@ -120,7 +155,10 @@ namespace asset
{
if (isnil (key.name)) key.name=extractName(file);
TODO ("file exists?");
pM = new Media (key,file);
TODO ("extract media file properties");
Time length(25);
TODO ("detecting and wiring multichannel compound media!");
pM = new Media (key,file,length);
}
ASSERT (pM);
ENSURE (key.category.hasKind (VIDEO) || key.category.hasKind(AUDIO));
@ -170,6 +208,34 @@ namespace asset
if (!file) file = "";
return operator() (key, string(file));
}
/** Factory method for creating a Clip asset based
* on the given Media asset. This asset::Clip can be used
* to create clip in the EDL covering the whole length of
* this media.
* @note creates a dependency between media and new clip
* @throw Invalid if the given media asset is not top-level,
* but rather part or a multichannel (compound) media
*/
shared_ptr<asset::Clip>
MediaFactory::operator() (asset::Media& mediaref) throw(cinelerra::error::Invalid)
{
if (mediaref.checkCompound())
throw cinelerra::error::Invalid (str(format("Attempt to create a asset::Clip from the media %s, "
"which is not toplevel but rather part or a compound "
"(multichannel) media. Found parent Media %s.")
% string(mediaref)
% string(*mediaref.checkCompound()))
,CINELERRA_ERROR_PART_OF_COMPOUND
);
asset::Clip* pC = new asset::Clip (mediaref);
return AssetManager::instance().getPtr (*pC);
}
CINELERRA_ERROR_DEFINE (PART_OF_COMPOUND, "part of compound used as toplevel element");
} // namespace asset

View file

@ -37,11 +37,11 @@
#include "proc/asset.hpp"
#include "common/factory.hpp"
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/session/clip.hpp"
namespace mobject { namespace session { class Clip; }}
namespace asset
{
@ -50,6 +50,8 @@ namespace asset
class MediaFactory;
class ProcPatt;
using cinelerra::Time;
template<>
class ID<Media> : public ID<Asset>
@ -67,8 +69,15 @@ namespace asset
class Media : public Asset
{
string filename_;
const Time len_;
public:
typedef shared_ptr<Media> PMedia;
typedef shared_ptr<asset::Clip> PClip;
typedef shared_ptr<asset::ProcPatt> PProcPatt;
typedef mobject::session::PClipMO PClipMO;
static MediaFactory create;
const string& getFilename () const { return filename_; }
@ -77,12 +86,42 @@ namespace asset
return static_cast<const ID<Media>& > (Asset::getID());
}
shared_ptr<mobject::session::Clip> createClip ();
shared_ptr<asset::ProcPatt> howtoProc ();
/** Service Access Point for getting a processing template
* describing how to build the render nodes network
* necessary for this Media or Clip. This includes
* Codecs and postprocessing (stretching, deinterlacing...)
*/
PProcPatt howtoProc () const;
/** Service Access Point for creating a Clip entity usable within
* the EDL/Session from a given Media or Clip Asset. As a sideeffect,
* a corresponding asset::Clip is created as well if necessary.
* It is OK to use and throw away the returned Clip-MO, because
* it can be regenerated from the corresponding asset::Clip
* @return a Placement smart ptr owning the new Clip MObject
*/
PClipMO createClip ();
/** @return the overall length of the media represented by this asset */
virtual Time getLength () const;
protected:
Media (const Asset::Ident& idi, const string& file) : Asset(idi), filename_(file) {}
Media (const Asset::Ident& idi, const string& file, Time length)
: Asset(idi), filename_(file), len_(length) {}
friend class MediaFactory;
/** get or create the correct asset::Clip
* corresponding to this media */
virtual PClip getClipAsset ();
/** predicate to decide if this asset::Media
* is part of a compound (multichannel) media.
* @return pointer to parent, or \code null
*/
virtual PMedia checkCompound () const;
friend class asset::Clip; ////////////////////////TODO better interface!!!
};
@ -110,9 +149,14 @@ namespace asset
PType operator() (Asset::Ident& key, const char* file); ///< convienience overload using C-String
PType operator() (const char* file, const Category& cat);
PType operator() (const char* file, asset::Kind);
shared_ptr<asset::Clip>
operator() (asset::Media& mediaref) throw(cinelerra::error::Invalid);
};
CINELERRA_ERROR_DECLARE (PART_OF_COMPOUND);

View file

@ -25,6 +25,44 @@
namespace asset
{
namespace
{
/** @internal derive a sensible asset ident tuple when creating
* a proxy placeholder media based on some existing asset::Media
* @todo getting this one right is important for the handling
* of "proxy editing"....
*/
const Asset::Ident
createProxyIdent (const Asset::Ident& mediaref)
{
string name (mediaref.name + "-proxy"); // TODO something sensible here; append number, sanitize etc.
Category category (mediaref.category);
TODO ("put it in another subfolder within the same category??");
return Asset::Ident (name, category,
mediaref.org,
mediaref.version );
}
}
/** create a preview placeholder ("proxy media") for the given
* media asset. The name of the created media asset is derived
* by decorating the original media's name.
* @note creates a dependency between the media and this proxy
*/
Preview::Preview (Media& mediaref)
: Unknown (createProxyIdent (mediaref.ident),
mediaref.getFilename(),
mediaref.getLength())
{
this->defineDependency (mediaref);
UNIMPLEMENTED ("do something to setup proxy media");
}

View file

@ -24,7 +24,7 @@
#ifndef ASSET_PREVIEW_H
#define ASSET_PREVIEW_H
#include "proc/asset/media.hpp"
#include "proc/asset/unknown.hpp"
@ -32,12 +32,13 @@ namespace asset
{
/**
* alternative version of the media data, probably with lower resolution
* special placeholder denoting an alternative version of the media data,
* typically with lower resolution ("proxy media")
*/
class Preview : public Media
class Preview : public Unknown
{
protected:
Preview (const Asset::Ident& idi) : Media(idi,"") {}
Preview (Media& mediaref);
friend class MediaFactory;
};

View file

@ -22,12 +22,46 @@
#include "proc/asset/unknown.hpp"
#include <boost/format.hpp>
using boost::format;
namespace asset
{
/** */
/** create a placeholder for a media with the given identity.
* the denoted original media (identity) can be accessed later
* on using the Unknown::getOrg() function.
* @note we don't depend on the refered media...
*/
Unknown::Unknown (const Asset::Ident& idi, string name, Time length)
: Media (idi, name, length)
{
TODO ("implement some sensible behaviour for the »unknown media« placeholder...");
}
/** using the information stored in this placeholder asset,
* try to access the "real" media it stands for.
*/
Media::PMedia
Unknown::getOrg() throw(cinelerra::error::Invalid)
{
UNIMPLEMENTED ("how to get at the original media from a »Unknown« placeholder");
if (1==0)
throw cinelerra::error::Invalid (str(format("Unable to locate original media "
"for ID=%s, filename=\"%s\".")
% string(this->ident)
% string(this->getFilename()))
,CINELERRA_ERROR_ORIG_NOT_FOUND
);
}
CINELERRA_ERROR_DEFINE (ORIG_NOT_FOUND, "Media refered by placeholder not found");
} // namespace asset

View file

@ -24,24 +24,35 @@
#ifndef ASSET_UNKNOWN_H
#define ASSET_UNKNOWN_H
#include "proc/asset/preview.hpp"
#include "proc/asset/media.hpp"
namespace asset
{
const cinelerra::Time DUMMY_TIME (25); ///< @todo solve konfig management
/**
* Placeholder Asset for unknown or unavailable media source.
* @todo maybe do special handling of the media length, allowing
* it to support existing clips even if the media length
* is not known?
*/
class Unknown : public Preview
class Unknown : public Media
{
protected:
Unknown (const Asset::Ident& idi) : Preview(idi) {}
Unknown (const Asset::Ident& idi, string name="", Time length=DUMMY_TIME);
friend class MediaFactory;
public:
virtual Media::PMedia getOrg() throw(cinelerra::error::Invalid);
};
CINELERRA_ERROR_DECLARE (ORIG_NOT_FOUND);

View file

@ -33,6 +33,8 @@
#include <boost/format.hpp>
#include <boost/bind.hpp>
using std::tr1::static_pointer_cast;
using boost::function;
using boost::format;
using boost::bind;
//using boost::lambda::_1;
@ -46,7 +48,7 @@ namespace asset
{
/**
* AssetManager error responses, cause by querying
* AssetManager error responses, caused by querying
* invalid Asset IDs from the internal DB.
*/
class IDErr : public cinelerra::error::Invalid
@ -126,10 +128,9 @@ namespace asset
}
/**
* find and return the object registered with the given ID.
* @throws Invalid if nothing is found or if the actual KIND
* of the stored object differs and can't be casted.
/** find and return the object registered with the given ID.
* @throws Invalid if nothing is found or if the actual KIND
* of the stored object differs and can't be casted.
*/
template<class KIND>
shared_ptr<KIND>
@ -144,6 +145,23 @@ namespace asset
else
throw UnknownID (id);
}
/** convienience shortcut for fetching the registered shared_ptr
* which is in charge of the given asset instance. By querying
* directly asset.id (of type ID<Asset>), the call to registry.get()
* can bypass the dynamic cast, because the type of the asset
* is explicitely given by type KIND.
*/
template<class KIND>
shared_ptr<KIND>
AssetManager::getPtr (const KIND& asset)
{
ENSURE (instance().known(asset.id),
"unregistered asset instance encountered.");
return static_pointer_cast<KIND,Asset>
(instance().registry.get (asset.id));
}
/**
@ -169,33 +187,36 @@ namespace asset
void
AssetManager::detach_child (PAsset& pA, IDA id)
recursive_call (AssetManager* instance, PAsset& pA)
{
instance->remove (pA->getID());
}
function<void(PAsset&)>
detach_child_recursively () ///< @return a functor recursively invoking remove(child)
{
pA->unlink(id);
return bind( &recursive_call, &AssetManager::instance(), _1 );
}
/**
* remove the given asset <i>together with all its dependants</i> from the internal DB
* remove the given asset from the internal DB
* <i>together with all its dependants</i>
*/
void
AssetManager::remove (IDA id)
throw(cinelerra::error::Invalid,
cinelerra::error::State)
{
UNIMPLEMENTED ("remove Asset with all dependecies");
PAsset pA = getAsset (id);
vector<PAsset> par = pA->getParents();
boost::function<void(PAsset&)> func = bind(&detach_child, _1,id );
for_each (par, func); // ,boost::lambda::var(id)));
PAsset asset = getAsset (id);
for_each (asset->dependants, detach_child_recursively());
asset->unlink();
registry.del(id);
}
list<PAsset>
list<PcAsset>
AssetManager::listContent() const
{
list<PAsset> res;
list<PcAsset> res;
registry.asList (res);
res.sort();
return res;
@ -212,6 +233,7 @@ namespace asset
/************************************************************/
#include "proc/asset/media.hpp"
#include "proc/asset/clip.hpp"
#include "proc/asset/proc.hpp"
#include "proc/asset/struct.hpp"
#include "proc/asset/meta.hpp"
@ -229,4 +251,9 @@ namespace asset
template shared_ptr<Struct> AssetManager::getAsset (const ID<Struct>& id) throw(cinelerra::error::Invalid);
template shared_ptr<Meta> AssetManager::getAsset (const ID<Meta>& id) throw(cinelerra::error::Invalid);
template shared_ptr<Asset> AssetManager::getPtr (const Asset& asset);
template shared_ptr<Media> AssetManager::getPtr (const Media& asset);
template shared_ptr<Clip> AssetManager::getPtr (const Clip& asset);
} // namespace asset

View file

@ -71,6 +71,9 @@ namespace asset
/** provide the unique ID for given Asset::Ident tuple */
static ID<Asset> getID (const Asset::Ident&);
/** retrieve the registerd shared_ptr for any asset */
template<class KIND>
static shared_ptr<KIND> getPtr (const KIND& asset);
/** find and return corresponging object */
template<class KIND>
@ -85,11 +88,10 @@ namespace asset
/**remove the given asset from the internal DB.
* <i>together with all its dependants</i> */
void remove (IDA id) throw(cinelerra::error::Invalid,
cinelerra::error::State);
void remove (IDA id) ;
/** extract a sorted list of all registered Assets */
list<PAsset> listContent() const;
list<PcAsset> listContent() const;
@ -101,8 +103,8 @@ namespace asset
static ID<KIND> reg (KIND* obj, const Asset::Ident& idi)
throw(cinelerra::error::Invalid);
/** deleter function used by the Asset smart pointers to delet Asset objects */
static void destroy (Asset* m) { delete m; }
/** deleter function used by the Asset smart pointers to delete Asset objects */
static void destroy (Asset* aa) { delete aa; }
friend Asset::Asset (const Asset::Ident& idi);
@ -110,9 +112,6 @@ namespace asset
friend class cinelerra::singleton::StaticCreate<AssetManager>;
private:
static void detach_child (PAsset&, IDA);
};

View file

@ -1,33 +0,0 @@
/*
ExplicitPlacement - special Placement yielding an absolute location (Time,Track)-location for a MObject
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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/explicitplacement.hpp"
namespace mobject
{
/** */
} // namespace mobject

View file

@ -1,5 +1,5 @@
/*
EXPLICITPLACEMENT.hpp - special Placement yielding an absolute location (Time,Track)-location for a MObject
EXPLICITPLACEMENT.hpp - special Placement yielding an absolute location (Time,Track) for a MObject
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -31,18 +31,53 @@
namespace mobject
{
namespace session{ class Track; }
// TODO: need Garbage Collector for this class!!!!!
class ExplicitPlacement : public Placement
/**
* Special kind of Placement, where the location of the
* MObject has been nailed down to a fixed position.
* The Session allways contains one special EDL, which
* actually is a snapshot of all EDLs contents fixed
* and reduced to simple positions. This so called Fixture
* contains only ExplicitPlacement objects and is processed
* by the Builder to create the render engine node network.
*
* @see Placement#resolve factory method for deriving an ExplicitPlacement
*/
class ExplicitPlacement : public Placement<MObject>
{
public:
const Time time;
const Track track;
typedef std::pair<Time,Track> SolutionData; //TODO (ichthyo consideres better passing of solution by subclass)
/** no need to resolve any further, as this ExplicitPlacement
* already \i is the result of a resolve()-call.
*/
virtual
ExplicitPlacement resolve () const
{
return *this;
}
protected:
Time time;
Track* track;
/* @todo ichthyo considers a much more elegant implementation utilizing a subclass
* of FixedLocation, which would serve as Placement::LocatingSolution, and
* would be used as LocatingPin::chain subobject as well, so that it could
* be initialized directly here in the ExplicitPlacement ctor.
* (ichthyo: siehe Trac #100)
*/
ExplicitPlacement (const Placement<MObject>& base, const SolutionData found)
: Placement<MObject>(base),
time(found.first), track(found.second)
{ };
friend ExplicitPlacement Placement<MObject>::resolve () const;
private:
/** copying prohibited, ExplicitPlacement is effectively const! */
ExplicitPlacement& operator= (const ExplicitPlacement&);
};

View file

@ -22,12 +22,15 @@
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/placement.hpp"
#include "proc/mobject/session/mobjectfactory.hpp"
namespace mobject
{
/** */
/** Storage for the (single, static) MObject factory object.
*/
session::MObjectFactory MObject::create;
} // namespace mobject

View file

@ -29,6 +29,7 @@
#include "cinelerra.h"
#include "proc/mobject/buildable.hpp"
#include "proc/mobject/placement.hpp"
#include "proc/asset.hpp" // TODO finally not needed?
@ -37,13 +38,16 @@ 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::PAsset; //TODO: only temporarily
using proc_interface::AssetManager;
namespace mobject
{
class Placement;
namespace session
{
class MObjectFactory;
}
/**
@ -60,17 +64,24 @@ namespace mobject
// TODO: how to represent time intervals best?
Time length;
MObject() {}
virtual ~MObject() {};
friend class session::MObjectFactory;
public:
virtual shared_ptr<Placement>& getPlacement () =0;
virtual PAsset getMedia () =0; ///< @todo solve the reference/Interface problem concerning Placements, then push down
static session::MObjectFactory create;
/** MObject self-test (usable for asserting) */
virtual bool isValid() const =0;
virtual Time& getLength() =0; ///< @todo how to deal with the time/length field??
};
typedef shared_ptr<MObject> PMO;

View file

@ -28,30 +28,19 @@ 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.
* TODO: need GC!!!!!!!!!!!
/** @note we know we need only this single
* specialisation, because we define
* the Placements of more specific
* MObject kinds to be subclasses
* of Placement<MObject>, so they
* will inherit this function.
*/
ExplicitPlacement&
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");
}
template<>
ExplicitPlacement
Placement<MObject>::resolve () const
{
return ExplicitPlacement (*this, chain.resolve());
}

View file

@ -21,74 +21,142 @@
*/
/** @file placement.hpp
** Placements are at the very core of all editing operations,
** because they act as handles to access the media objects to be manipulated.
** Moreover, Placements are the actual content of the EDL(s) and Fixture and thus
** are small objects with value semantics. Many editing tasks include locating some
** Placement in the EDL or directly take a ref to a Placement.
**
** Placements are <b>refcounting smart pointers</b>: By acting on the Placement object,
** we can change parameters of the way the media object is placed (e.g. adjust an offset),
** while by dereferencing the Placement object, we access the "real" media object.
** Usually, any MObject is created by a factory and immediately wrapped into a Placement,
** which takes ownership of the MObject.
**
** Besides being a handle, Placements define the logical position where some MObject is
** supposed to be located within the EDL or Fixture. The way in which this placing happens
** is controlled and parametrized by a collection (chain) of LocatingPin objects. By adding
** to this chain, the position of the MObject is increasingly constrained. The simplest
** case of such constraining is to add a FixedLocation, thus placing the MObject at one
** absolute position (time, track).
**
** Placements are templated on the type of the actual MObject they refer to, so, sometimes
** we rather use a Placement<Clip> to be able to use the more specific methods of the
** session::Clip interface. But <i>please note the following detail:</i> this type
** labeling and downcasting is the <i>only</i> difference between these subclasses,
** besides that, they can be replaced literally by one another (slicing is accepted).
**
** @see ExplicitPlacement
** @see LocatingPin interface for controlling the positioning parameters
**
*/
#ifndef MOBJECT_PLACEMENT_H
#define MOBJECT_PLACEMENT_H
#include "common/time.hpp"
#include "common/factory.hpp"
#include "cinelerra.h"
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/session/locatingpin.hpp"
#include "proc/mobject/session/track.hpp"
#include <tr1/memory>
using std::tr1::shared_ptr;
namespace mobject
{
namespace session{ class MObjectFactory; }
class Placement;
class ExplicitPlacement;
class PlacementFactory;
class Placement
/**
* A refcounting Handle to an MObject of type MO,
* used to constrain or explicitly specify the
* location where the MObject is supposed to
* be within the Session/EDL
*/
template<class MO>
class Placement : protected shared_ptr<MO>
{
protected:
typedef cinelerra::Time Time;
typedef session::Track Track;
typedef session::Track* Track;
public:
MObject* subject;
/**
* styles of placement.
/** smart pointer: accessing the MObject,
* which is subject to placement.
* @note we don't provide operator*
*/
enum Style
{
FIXED,
RELATIVE
};
virtual MO *
operator-> () const
{
ENSURE (*this);
return shared_ptr<MO>::operator-> ();
}
static PlacementFactory create;
virtual ~Placement() {};
/** resolve the network of placement and
/** interface for defining the kind of placement
* to employ, and for controling any additional
* constraints and properties.
*/
session::LocatingPin chain;
/** combine and resolve all constraints defined
* by the various LocatingPin (\see #chain) and
* provide the resulting (explicit) placement.
*/
ExplicitPlacement& resolve () ;
virtual ExplicitPlacement resolve () const;
protected:
Placement ();
friend class PlacementFactory;
Placement (MO & subject, void (*moKiller)(MO*))
: shared_ptr<MO> (&subject, moKiller) {};
friend class session::MObjectFactory;
};
typedef shared_ptr<Placement> PPla;
typedef Placement<MObject> PMO;
/**
* Factory specialized for creating Media Asset objects.
*/
class PlacementFactory : public cinelerra::Factory<Placement>
{
public:
typedef shared_ptr<Placement> PType;
typedef cinelerra::Time Time;
PType operator() (Placement::Style, Time, PMO subject);
/* === defining specialisations to be subclasses === */
#define DEFINE_SPECIALIZED_PLACEMENT(SUBCLASS) \
template<> \
class Placement<SUBCLASS> : public Placement<MObject> \
{ \
protected: \
Placement (SUBCLASS & m, void (*moKiller)(MObject*)) \
: Placement<MObject>::Placement (m, moKiller) \
{ }; \
friend class session::MObjectFactory; \
\
public: \
virtual SUBCLASS* \
operator-> () const \
{ \
ENSURE (INSTANCEOF (SUBCLASS, this->get())); \
return static_cast<SUBCLASS*> \
(shared_ptr<MObject>::operator-> ()); \
} \
};
/* a note to the maintainer: please don't add any fields or methods to
* these subclasses which aren't also present in Placement<MObject>!
* Placements are frequently treated like values and thus slicing
* will happen, which in this special case is acceptable.
*/
} // namespace mobject

View file

@ -84,9 +84,9 @@ namespace mobject
public:
static session::SessManager& current;
virtual bool isValid () = 0;
virtual void add (PPla& placement) = 0;
virtual bool remove (PPla& placement) = 0;
virtual bool isValid () = 0;
virtual void add (PMO& placement) = 0;
virtual bool remove (PMO& placement) = 0;
/// @deprecated Ichthyo doubts it is good design to hand out the EDL??
virtual session::EDL& currEDL () = 0;

View file

@ -34,21 +34,20 @@ namespace mobject
{
/**
* abstract base class of all MObjects for providing common services.
* @todo seems that we don't need this intermediate class...
*/
class AbstractMO : public MObject
{
////////////// TODO: work out common services to provide!!!!
shared_ptr<Placement> placement_;
public:
/* some dummy implementations used to make the code compile... */
virtual shared_ptr<Placement>& 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)
}
virtual Time& getLength() { return length; }
};

View file

@ -1,5 +1,5 @@
/*
Allocation - directive to place a MObject in a specific way
Allocation - objective to place a MObject in a specific way
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -28,7 +28,14 @@ namespace mobject
namespace session
{
/** */
/** @todo probably a placeholder and to be pushed down....*/
void
Allocation::intersect (LocatingSolution& solution) const
{
LocatingPin::intersect (solution);
TODO ("work out how the Allocation types solve for the position...");
}

View file

@ -1,5 +1,5 @@
/*
ALLOCATION.hpp - directive to place a MObject in a specific way
ALLOCATION.hpp - objective to place a MObject in a specific way
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -26,7 +26,7 @@
#include <string>
#include "proc/mobject/placement.hpp"
#include "proc/mobject/session/locatingpin.hpp"
using std::string;
@ -39,18 +39,23 @@ namespace mobject
/**
* a directive to place a MObject in a specific way
* Interface (abstract): any objective, constraint or wish
* of placing a MObject in a specific way.
*/
class Allocation : public Placement
class Allocation : public LocatingPin
{
protected:
/** human readable representation of the condition
* characterizing this allocaton, e.g. "t >= 10"
*/
string repr;
virtual void intersect (LocatingSolution&) const;
public:
const string& getRepr () const { return repr; }
const string& getRepr () const { return repr; }
virtual Allocation* clone () const = 0;
};

View file

@ -22,13 +22,63 @@
#include "proc/mobject/session/clip.hpp"
#include "proc/assetmanager.hpp"
#include "proc/asset/media.hpp"
#include "proc/asset/clip.hpp"
namespace mobject
{
namespace session
{
/** */
/** new clip-MO linked with the given asset::Clip.
* Initially, this clip will cover the whole source media length.
*/
Clip::Clip (const asset::Clip& clipDef, const Media& mediaDef)
: start_(0),
mediaDef_(mediaDef),
clipDef_(clipDef)
{
setupLength();
}
/** implementing the common MObject self test.
* Length definition is consitent, underlying
* media def is accessible etc. */
bool
Clip::isValid () const
{
TODO ("check consistency of clip length def, implies accessing the underlying media def");
return length > 0;
}
void
Clip::setupLength()
{
TODO ("really calculate the length of a clip and set length field");
this->length = mediaDef_.getLength();
}
PMedia
Clip::getMedia () const
{
return asset::AssetManager::getPtr (mediaDef_);
}
PClipAsset
Clip::findClipAsset () const
{
return asset::AssetManager::getPtr (clipDef_);
}

View file

@ -27,11 +27,19 @@
#include "proc/mobject/session/abstractmo.hpp"
namespace asset
{
class Media;
class Clip;
}
namespace mobject
{
namespace session
{
using asset::Media;
typedef shared_ptr<Media> PMedia;
typedef shared_ptr<asset::Clip> PClipAsset;
/**
@ -42,23 +50,48 @@ namespace mobject
* into the ouput. The actual media type of a clip will be derived
* at runtime by resolving this reference to the underlying Asset.
*
* TODO: define how to denote Time positions /lengths. This is tricky,
* because it depends on the actual media type, and we wand to encapsulate
* @todo define how to denote Time positions /lengths. This is tricky,
* because it depends on the actual media type, and we want to encapsulate
* all these details as much as possible.
*/
class Clip : public AbstractMO
{
protected:
/** startpos in source */
Time start;
Time start_;
//TODO: where to put the duration ???
const Media & mediaDef_;
const asset::Clip & clipDef_;
Clip (const asset::Clip&, const Media&);
friend class MObjectFactory;
virtual void setupLength();
public:
virtual bool isValid() const;
/** access the underlying media asset */
PMedia getMedia () const;
/** locate the corresponding asset
* representing this clip or the whole
* compound in case of a multichannel clip
*/
PClipAsset findClipAsset () const;
};
typedef Placement<Clip> PClipMO;
} // namespace mobject::session
/** Placement<Clip> defined to be subclass of Placement<MObject> */
DEFINE_SPECIALIZED_PLACEMENT (session::Clip);
} // namespace mobject
#endif

View file

@ -35,13 +35,13 @@ namespace mobject
* to have this on the interface
*/
bool
EDL::contains (const PPla& placement)
EDL::contains (const PMO& placement)
{
UNIMPLEMENTED ("test if a given placement is contained within this EDL");
}
PPla&
PMO&
EDL::find (const string& id)
{
UNIMPLEMENTED ("serch for a given 'thing' within the EDL");

View file

@ -48,8 +48,8 @@ namespace mobject
vector<MObject *> clips;
public:
bool contains (const PPla& placement);
PPla& find (const string& id); ///< @todo how to refer to clips? using asset IDs??
bool contains (const PMO& placement);
PMO& find (const string& id); ///< @todo how to refer to clips? using asset IDs??
vector<PAsset>& getTracks () { return tracks; } ///< @todo use track assets correct, make const!
size_t size ()

View file

@ -50,5 +50,8 @@ namespace mobject
} // namespace mobject::session
/** Placement<Effect> defined to be subclass of Placement<MObject> */
DEFINE_SPECIALIZED_PLACEMENT (session::Effect);
} // namespace mobject
#endif

View file

@ -1,5 +1,5 @@
/*
${Name} - ???????????? needed any longer?
FixedLocation - directly positioning a MObject to a fixed location
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -21,14 +21,36 @@
* *****************************************************/
#include "proc/mobject/session/fixedplacement.hpp"
#include "proc/mobject/session/fixedlocation.hpp"
namespace mobject
{
namespace session
{
FixedLocation*
FixedLocation::clone () const
{
return new FixedLocation (*this);
}
/** */
void
FixedLocation::intersect (LocatingSolution& solution) const
{
LocatingPin::intersect (solution);
TODO ("either set position or make overconstrained");
if (solution.minTime <= this->time_)
solution.minTime = this->time_;
else
solution.impo = true;
if (solution.maxTime >= this->time_)
solution.maxTime = this->time_;
else
solution.impo = true;
}

View file

@ -0,0 +1,68 @@
/*
FIXEDLOCATION.hpp - directly positioning a MObject to a fixed location
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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_FIXEDLOCATION_H
#define MOBJECT_SESSION_FIXEDLOCATION_H
#include "proc/mobject/session/locatingpin.hpp"
namespace mobject
{
class ExplicitPlacement; //TODO trac #100
namespace session
{
/**
* The most common case of positioning a MObject
* in the EDL: directly specifying a constant position.
* @todo use a subclass to represent the LocatingSolution?
* would solve the construction of a ExplicitPlacement
* much more natural. (ichthyo: siehe trac #100)
*/
class FixedLocation : public LocatingPin
{
Time time_;
Track track_;
friend class ExplicitPlacement; //TODO trac #100
protected:
FixedLocation (Time ti, Track tra) : time_(ti), track_(tra) {};
friend class LocatingPin;
virtual void intersect (LocatingSolution&) const;
public:
virtual FixedLocation* clone () const;
};
} // namespace mobject::session
} // namespace mobject
#endif

View file

@ -0,0 +1,201 @@
/*
LocatingPin - Chaining and constraining the Placement of a Media Object
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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/placement.hpp"
#include "proc/mobject/session/locatingpin.hpp"
#include "proc/mobject/session/fixedlocation.hpp"
#include "proc/mobject/session/relativelocation.hpp"
namespace mobject
{
namespace session
{
inline LocatingPin*
cloneChain (const scoped_ptr<LocatingPin>& chain)
{
if (!chain)
return 0;
else
return chain->clone();
}
/** it's OK to copy a LocainngPin,
* causing duplication of any chained lPins
*/
LocatingPin::LocatingPin (const LocatingPin& other)
: next_(cloneChain (other.next_))
{ }
LocatingPin&
LocatingPin::operator= (const LocatingPin& other)
{
if (this != &other)
this->next_.reset (cloneChain (other.next_));
return *this;
}
LocatingPin*
LocatingPin::clone () const
{
return new LocatingPin(*this);
}
LocatingPin&
LocatingPin::addChain (LocatingPin* newLp) ///< @note we take ownership of newLp
{
REQUIRE (newLp);
REQUIRE (!newLp->next_, "can insert only single LocatingPins");
if (next_ && newLp->getPrioLevel() > next_->getPrioLevel())
return next_->addChain (newLp);
else
{
scoped_ptr<LocatingPin> tmp_next (newLp);
tmp_next->next_.swap(next_);
next_.swap(tmp_next);
return *newLp;
}
}
/** implementing the core Placement functionality.
* By combining all the chained locating pins, try
* to get at a definite position (for this chain and
* consequently for the MObject handled by the enclosing
* Placement object).
* @todo this could/should be replaced by a full-blown
* constraint solver at some point in the future
* @todo we are packing and unpacking the information (time,track)
* several times. Ichthyo considers a more elegant solution.
*/
const LocatingPin::SolutionData
LocatingPin::resolve () const
{
LocatingSolution solution;
resolve (solution);
return SolutionData (solution.getTime(), solution.getTrack());
}
bool
LocatingPin::isOverdetermined () const
{
LocatingSolution solution;
resolve (solution);
return solution.is_impossible();
}
void
LocatingPin::resolve (LocatingSolution& solution) const
{
if (!solution.still_to_solve())
return;
this->intersect (solution);
if (next_ && solution.still_to_solve())
next_->resolve(solution);
}
void
LocatingPin::intersect (LocatingSolution& solution) const
{
REQUIRE (solution.still_to_solve());
// base class Implementation is NOP...
}
/** get some time value which could stand in for this
* solution. This doesn't imply this value is a solution,
* It's just a value we can use. At the moment (10/07),
* LocatingSolution is implemented as interval, and
* we return the lower bound here.
*/
LocatingPin::Time
LocatingPin::LocatingSolution::getTime()
{
return minTime;
}
LocatingPin::Track
LocatingPin::LocatingSolution::getTrack()
{
UNIMPLEMENTED ("get effective Track number of Solution");
}
bool
LocatingPin::LocatingSolution::is_definite() ///< found a solution?
{
return (minTime == maxTime && minTrack == maxTrack);
}
bool
LocatingPin::LocatingSolution::is_impossible()
{
if (minTime > maxTime) impo = true;
TODO ("track???");
return impo;
}
bool
LocatingPin::LocatingSolution::still_to_solve ()
{
return !(is_definite() || is_impossible());
}
/* === Factory functions for adding LocatingPins === */
FixedLocation&
LocatingPin::operator() (Time start, Track track)
{
return static_cast<FixedLocation&>
(addChain (new FixedLocation (start, track)));
}
RelativeLocation&
LocatingPin::operator() (PMO refObj, Time offset)
{
return static_cast<RelativeLocation&>
(addChain (new RelativeLocation (refObj, offset)));
}
} // namespace mobject::session
} // namespace mobject

View file

@ -0,0 +1,156 @@
/*
LOCATINGPIN.hpp - Chaining and constraining the Placement of a Media Object
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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 locatingpin.hpp
** Implementing the Placement mechanics. The various specifications how
** some MObject is to be placed (logically) within the EDL are given by small
** LocatingPin objects forming a chain. For resolving the actual position, at the
** moment (10/07) we use a preliminary implementation to support the most common
** Placement types (fixed and relative). It is comprised of the nested LocatingSolution
** and the functions FixedLocation#resolve(LocatingSolution&) and
** RelativeLocation#resolve(LocatingSolution&) etc. If this is to be extended,
** we'll need a real spatial discrete constraint solver (and this probably will be
** some library implementation, because the problem is anything but trivial).
**
*/
#ifndef MOBJECT_SESSION_LOCATINGPIN_H
#define MOBJECT_SESSION_LOCATINGPIN_H
#include "cinelerra.h"
#include <utility>
#include <boost/scoped_ptr.hpp>
using boost::scoped_ptr;
namespace mobject
{
class MObject;
template<class MO> class Placement;
typedef Placement<MObject> PMO;
namespace session
{
class FixedLocation;
class RelativeLocation;
class Track; //TODO
/**
* Positioning specification, possibliy chained
* to further specifications. The base class LocatingPin
* is a "no-op" specification which doesn't constrain the
* possible locations and thus can be embedded into pristine
* Placement by default. The Functor operators provide a
* way to add concrete positioning specifications, thereby
* defining the position of the MObject to be placed.
*
* @note to the implementer of subclasses: LocatingPins are
* copyable and need to handle cloning (incl the chain)
*/
class LocatingPin
{
protected:
typedef cinelerra::Time Time;
typedef session::Track* Track;
typedef std::pair<Time,Track> SolutionData; //TODO (ichthyo consideres better passing of solution by subclass)
struct LocatingSolution;
/** next additional Pin, if any */
scoped_ptr<LocatingPin> next_;
/** order to consider when resolving. 0=highest */
virtual int getPrioLevel () const { return 0; }
LocatingPin& addChain (LocatingPin*);
void resolve (LocatingSolution&) const;
virtual void intersect (LocatingSolution&) const;
public:
const SolutionData resolve () const;
bool isOverdetermined () const;
/* Factory functions for adding LocatingPins */
FixedLocation& operator() (Time start, Track track=0);
RelativeLocation& operator() (PMO refObj, Time offset=0);
LocatingPin (const LocatingPin&);
LocatingPin& operator= (const LocatingPin&);
virtual LocatingPin* clone () const;
virtual ~LocatingPin() {};
protected:
LocatingPin () {};
friend class Placement<MObject>;
/**
* @internal helper for the (preliminary)
* position resolve() implementation.
* @todo we can't sensibly reason about tracks,
* because at the moment (10/07) we lack a track implementation...
* @todo shouldn't we use a range-restriction LocatingPin (subclass)
* to represent the to-be-found solution? (ichthyo: siehe Trac #100)
*/
struct LocatingSolution
{
Time minTime;
Time maxTime;
Track minTrack;
Track maxTrack;
bool impo;
LocatingSolution ()
: minTime(Time::MAX), // TODO: better implementation of "unspecified..."
maxTime(Time::MIN),
minTrack(0), // TODO
maxTrack(0),
impo(false)
{ }
Time getTime ();
Track getTrack ();
bool is_definite ();
bool is_impossible ();
bool still_to_solve ();
};
};
} // namespace mobject::session
} // namespace mobject
#endif

View file

@ -48,6 +48,9 @@ namespace mobject
} // namespace mobject::session
/** Placement<Meta> defined to be subclass of Placement<MObject> */
DEFINE_SPECIALIZED_PLACEMENT (session::Meta);
} // namespace mobject
#endif

View file

@ -0,0 +1,75 @@
/*
MObjectFactory - creating concrete MObject subclass instances
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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/mobjectfactory.hpp"
#include "proc/mobject/session/clip.hpp"
#include "proc/mobject/session/effect.hpp"
#include "proc/asset/clip.hpp"
#include "proc/asset/effect.hpp"
namespace mobject
{
namespace session
{
/** creating a Clip-MObject to be placed within
* the EDL, based on a clip asset, which typically
* is obtained by calling the createClip()-function
* on some asset::Media. The newly created Clip-MO is
* internally linked with this media Asset and wrapped
* into a Placement, which takes ownership. So, when the
* render engine gets across this Clip-MO, it is able to
* obtain the media information contained in the corresponding
* media asset. Note this will create a single track clip.
* @param mediaDef the actual asset::Media to be used
* created Clip could be a compound (multichannel) clip
* comprised of several SimpleClip subobjects.
*/
Placement<Clip>
MObjectFactory::operator() (const asset::Clip& clipRef, const asset::Media& mediaDef)
{
return Placement<Clip> (*new Clip (clipRef,mediaDef), &deleterFunc);
}
/** variant of the Clip-MO factory function, creating
* a multichannel (compound) clip.
* @todo work out the details of multichannel handling
*/
Placement<Clip>
MObjectFactory::operator() (const asset::Clip& clipRef, vector<const Media*> mediaTracks)
{
UNIMPLEMENTED ("build multichannel compound clip-MO");
}
/** */
Placement<Effect>
MObjectFactory::operator() (asset::Effect processorDef)
{
UNIMPLEMENTED ("fabricate effect-MO");
}
} // namespace mobject::session
} // namespace mobject

View file

@ -1,5 +1,5 @@
/*
FIXEDPLACEMENT.hpp - TODO: didn't we plan to rename ExplicitPlacement to DirectPlacement??
MOBJECTFACTORY.hpp - creating concrete MObject subclass instances
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -21,24 +21,42 @@
*/
#ifndef MOBJECT_SESSION_FIXEDPLACEMENT_H
#define MOBJECT_SESSION_FIXEDPLACEMENT_H
#ifndef MOBJECT_SESSION_MOBJECTFACTORY_H
#define MOBJECT_SESSION_MOBJECTFACTORY_H
#include "proc/mobject/placement.hpp"
#include "proc/mobject/explicitplacement.hpp"
#include "proc/mobject/mobject.hpp"
namespace asset
{
class Clip;
class Media;
class Effect;
}
namespace mobject
{
namespace session
{
class Clip;
class Effect;
// TODO: didn't we plan to rename ExplicitPlacement to DirectPlacement??
class DirectPlacement : public ExplicitPlacement
class MObjectFactory
{
///////////
/** custom deleter func allowing class Placement
* to take ownership of MObjct instances
*/
static void deleterFunc (MObject* o) { delete o; }
public:
Placement<Clip> operator() (const asset::Clip&, const asset::Media&);
Placement<Clip> operator() (const asset::Clip&, vector<const asset::Media*>);
Placement<Effect> operator() (const asset::Effect);
};

View file

@ -1,5 +1,5 @@
/*
RelativePlacement - Placement implemnetaion providing various ways of attaching a MObject to another one
RelativeLocation - Placement implementation attaching MObjects relative to another one
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -21,7 +21,7 @@
* *****************************************************/
#include "proc/mobject/session/relativeplacement.hpp"
#include "proc/mobject/session/relativelocation.hpp"
#include "proc/mobject/mobject.hpp"
namespace mobject
@ -29,7 +29,22 @@ namespace mobject
namespace session
{
RelativeLocation*
RelativeLocation::clone () const
{
return new RelativeLocation (*this);
}
void
RelativeLocation::intersect (LocatingSolution& solution) const
{
LocatingPin::intersect (solution);
TODO ("either set position or make overconstrained");
}
} // namespace mobject::session
} // namespace mobject

View file

@ -1,5 +1,5 @@
/*
RELATIVEPLACEMENT.hpp - Placement implemnetaion providing various ways of attaching a MObject to another one
RELATIVELOCATION.hpp - Placement implementation attaching MObjects relative to another one
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -21,10 +21,10 @@
*/
#ifndef MOBJECT_SESSION_RELATIVEPLACEMENT_H
#define MOBJECT_SESSION_RELATIVEPLACEMENT_H
#ifndef MOBJECT_SESSION_RELATIVELOCATION_H
#define MOBJECT_SESSION_RELATIVELOCATION_H
#include "proc/mobject/placement.hpp"
#include "proc/mobject/session/locatingpin.hpp"
@ -36,8 +36,10 @@ namespace mobject
class RelativePlacement : public Placement
class RelativeLocation : public LocatingPin
{
const PMO & anchor_; ////////////TODO: ooooops, this is a nasty design problem!!!
public:
/**
@ -49,14 +51,22 @@ namespace mobject
};
protected:
MObject* anchor;
RelativeLocation (const PMO& a, Time ofs) : anchor_(a), offset_(ofs) { }
friend class LocatingPin;
/** the kind of relation denoted by this Placement */
RelType relType;
/** Offset the actual position by this (time) value relative to the anchor point. */
cinelerra::Time offset;
Time offset_;
//TODO: suitable representation?
virtual void intersect (LocatingSolution&) const;
public:
virtual RelativeLocation* clone () const;
};

View file

@ -74,14 +74,14 @@ namespace mobject
void
SessionImpl::add (PPla& placement)
SessionImpl::add (PMO& placement)
{
UNIMPLEMENTED ("add Placement to the current EDL");
}
bool
SessionImpl::remove (PPla& placement)
SessionImpl::remove (PMO& placement)
{
UNIMPLEMENTED ("search and remove a given Placement from current EDL");
return false; // TODO

View file

@ -65,8 +65,8 @@ namespace mobject
public:
virtual bool isValid ();
virtual void add (PPla& placement);
virtual bool remove (PPla& placement);
virtual void add (PMO& placement);
virtual bool remove (PMO& placement);
virtual EDL& currEDL ();

View file

@ -24,7 +24,8 @@ PLANNED "DeleteAsset_test" DeleteAsset_test <<END
END
PLANNED "DependantAssets_test" DependantAssets_test <<END
TEST "DependantAssets_test" DependantAssets_test <<END
return: 0
END
@ -33,7 +34,8 @@ return: 0
END
PLANNED "MakeClip_test" MakeClip_test <<END
TEST "MakeClip_test" MakeClip_test <<END
return: 0
END

View file

@ -40,6 +40,7 @@
#include <boost/bind.hpp>
#include <iostream>
using util::contains;
using util::for_each;
using boost::format;
using boost::bind;
@ -50,7 +51,8 @@ using std::cout;
namespace asset
{
inline void dump (const PAsset& aa)
inline void
dump (PcAsset& aa)
{
if (!aa)
cout << "Asset(NULL)\n";
@ -60,12 +62,26 @@ namespace asset
cout << fmt % str(aa) % aa->getID() % aa.get() % &aa % (aa.use_count() - 1) << "\n";
} }
inline void dumpAssetManager ()
inline void
dumpAssetManager ()
{
list<PAsset> assets (AssetManager::instance().listContent());
list<PcAsset> assets (AssetManager::instance().listContent());
cout << "----all-registered-Assets----\n";
for_each (assets, bind (&dump, _1));
}
template<class C, class P>
inline bool
dependencyCheck (C child, P parent)
{
return (child == parent)
|| (0 < child->getParents().size()
&& (parent == child->getParents()[0])
&& (contains (parent->getDependant(), child)));
;
}

View file

@ -22,15 +22,15 @@
#include "common/test/run.hpp"
//#include "common/factory.hpp"
//#include "common/util.hpp"
#include "proc/asset/testasset.hpp"
#include "proc/asset/assetdiagnostics.hpp"
#include "proc/asset/media.hpp"
#include "proc/asset/clip.hpp"
#include "common/util.hpp"
//#include <boost/format.hpp>
#include <iostream>
using util::contains;
using util::isnil;
//using boost::format;
using std::string;
using std::cout;
namespace asset
@ -49,10 +49,159 @@ namespace asset
*/
class DependantAssets_test : public Test
{
virtual void run(Arg arg)
virtual void run (Arg arg)
{
UNIMPLEMENTED ("handling of Asset dependencies");
}
checkDependencyMechanics ();
checkUnlinking ();
checkEnablementPropagation ();
checkRealAssetDependencyRegistration ();
}
typedef TestAsset<Asset> TA;
typedef TA::PA PTestA;
/** @test check operation of basic asset dependency support
*/
void checkDependencyMechanics ()
{
PAsset a1 = TA::create();
ASSERT (isnil (a1->getParents()));
ASSERT (isnil (a1->getDependant()));
PTestA a2 = TA::create(a1);
ASSERT (a1 == a2->getParents()[0]); // TestAsset registered a1 as parent
ASSERT (a2 == a1->getDependant()[0]);
PAsset a3 = TA::create();
a2->set_depend(a3);
ASSERT (a3 == a2->getParents()[1]);
ASSERT (a2 == a3->getDependant()[0]);
ASSERT (!contains (a1->getDependant(), a3));
}
/** @test unlink operation removing inter asset links
*/
void checkUnlinking ()
{
PTestA a1_ = TA::create();
PAsset a1 (a1_);
PTestA a2_ = TA::create(a1);
PAsset a2 (a2_);
PAsset a3 = TA::create(a2);
ASSERT (a1 == a2->getParents()[0]);
ASSERT (a2 == a1->getDependant()[0]);
ASSERT (a2 == a3->getParents()[0]);
ASSERT (a3 == a2->getDependant()[0]);
a2_->call_unlink();
ASSERT (isnil (a2->getDependant()));
ASSERT (!contains (a1->getDependant(), a2)); // has been propagated up
ASSERT (!isnil (a2->getParents()));
ASSERT (contains (a3->getParents(), a2)); // but up-links remain intact
a2_->call_unlink(a1->getID());
a2_->set_depend(a1);
PAsset a4 = TA::create(a1);
ASSERT (a1 == a2->getParents()[0]);
ASSERT (a1 == a4->getParents()[0]);
ASSERT (a2 == a1->getDependant()[0]);
ASSERT (a4 == a1->getDependant()[1]);
a1_->call_unlink(a4->getID());
ASSERT (!contains (a1->getDependant(), a4)); // selectively removed
ASSERT ( contains (a1->getDependant(), a2));
ASSERT (a1 == a4->getParents()[0]); // no propagation
}
/** @test enabling and disabling an asset should
* propagate to dependant assets
*/
void checkEnablementPropagation ()
{
PAsset a1 = TA::create();
PTestA a2_= TA::create(a1);
PAsset a2 (a2_);
PAsset a3 = TA::create(); // not dependant
ASSERT (a1->isActive());
ASSERT (a2->isActive());
ASSERT (a3->isActive());
a1->enable(false);
ASSERT (!a1->isActive());
ASSERT (!a2->isActive());
ASSERT (a3->isActive());
a2->enable(true);
ASSERT (!a1->isActive());
ASSERT (!a2->isActive()); // ignored because parent is disabled
a1->enable(true);
ASSERT (a1->isActive());
ASSERT (a2->isActive());
a2->enable(false);
ASSERT (a1->isActive());
ASSERT (!a2->isActive()); // disabling not propagated to parent
a2->enable(true);
ASSERT (a1->isActive());
ASSERT (a2->isActive());
a3->enable(false);
ASSERT (a1->isActive());
ASSERT (a2->isActive());
ASSERT (!a3->isActive()); // no dependency...
a1->enable(false);
a3->enable();
ASSERT (!a1->isActive());
ASSERT (!a2->isActive());
ASSERT (a3->isActive());
a1->enable();
a2_->set_depend(a3); // now add a new parent dependency
a3->enable(false);
ASSERT (a1->isActive());
ASSERT (!a2->isActive()); // has been propagated via the new dependency
ASSERT (!a3->isActive());
a2->enable(true);
ASSERT (a1->isActive()); // no change because one of the parents is disbled
ASSERT (!a2->isActive());
ASSERT (!a3->isActive());
a1->enable(false);
ASSERT (!a1->isActive());
a3->enable(true);
ASSERT (!a1->isActive()); // no propagation because the disabled other parent (a1)
ASSERT (!a2->isActive());
ASSERT (a3->isActive());
a1->enable(true);
ASSERT (a1->isActive()); // but now propagation is possible
ASSERT (a2->isActive());
ASSERT (a3->isActive());
}
/** @test each real world asset subclass has to care
* for registering and deregistering any additional
* dependencies. Here we collect some more prominent
* examples (and hopfully don't fail to cover any
* important special cases...)
*/
void checkRealAssetDependencyRegistration ()
{
// -----Media and Clip--------------------------------
typedef Media::PMedia PM;
typedef Media::PClip PC;
PM mm = asset::Media::create("test-1", VIDEO);
PC cc = mm->createClip()->findClipAsset();
ASSERT (dependencyCheck (cc,mm));
}
};

View file

@ -46,7 +46,6 @@ namespace asset
* @test creating several Assets and checking object identity,
* detection of duplicates and version handling.
* @see proc_interface::AssetManager#reg
* @todo to be written; features are missing as of 9/07
*/
class IdentityOfAssets_test : public Test
{

View file

@ -27,8 +27,7 @@
#include "proc/assetmanager.hpp"
#include "proc/asset/media.hpp"
#include "proc/mobject/session/clip.hpp"
//#include "proc/asset/assetdiagnostics.hpp"
#include "proc/asset/assetdiagnostics.hpp"
using util::contains;
using util::isnil;
@ -52,37 +51,28 @@ namespace asset
class MakeClip_test : public Test
{
typedef shared_ptr<asset::Media> PM;
typedef shared_ptr<mobject::session::Clip> PC;
typedef asset::Media::PClipMO PC;
virtual void run (Arg arg)
{
PM mm = asset::Media::create("test-1", VIDEO);
PC cc = mm->createClip();
PM cm = static_pointer_cast<Media,Asset> (cc->getMedia()); //TODO: solve the reference/interface Problem on MObject, push down to Clip...
PM cm = cc->getMedia();
ASSERT (cm);
ASSERT (0 < cc->getLength());
ASSERT (cm->ident.category.hasKind (VIDEO));
ASSERT (cm->getFilename() == mm->getFilename());
ASSERT (cm->howtoProc() == mm->howtoProc());
TODO ("implement Processing Pattern!!!");
// ASSERT (cm->howtoProc() == mm->howtoProc());
ASSERT (cm->ident.org == mm->ident.org);
ASSERT (dependencyCheck (mm,cm));
ASSERT (dependencyCheck (cm,mm));
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
;
}
};

View file

@ -0,0 +1,123 @@
/*
TestClip - test clip (stub) for checking EDL/Session functionality
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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/testasset.hpp"
#include "proc/assetmanager.hpp"
using std::tr1::static_pointer_cast;
namespace asset
{
namespace test
{
namespace
{
uint counter (0);
/** @internal helper generating continuosely
* different new asset identities
*/
Asset::Ident
make_new_ident ()
{
return Asset::Ident ( str(format("TestAsset.%i") % counter)
, Category (META)
, "test"
, counter++
);
}
Asset::Ident
make_new_ident (PAsset& ref)
{
return Asset::Ident ( str(format("%s-TestAsset.%i") % ref->ident.name
% counter)
, ref->ident.category
, "test"
, counter++
);
}
}
template<class A>
TestAsset<A>::TestAsset ()
: A(make_new_ident ())
{ };
template<class A>
TestAsset<A>::TestAsset (PAsset& pRef)
: A(make_new_ident (pRef))
{
this->defineDependency(pRef);
};
/** @internal helper for the create()-Functions
* retrieving the smart ptr created automatically
* within AssetManager by the Asset base class ctor
*/
template<class A>
shared_ptr<TestAsset<A> >
TestAsset<A>::ptrFromThis ()
{
return static_pointer_cast<TestAsset<A>,Asset>
(AssetManager::instance().getAsset (this->id));
};
} // namespace test
} // namespace asset
/*********************************************************/
/* explicit template instantiations for some Asset Kinds */
/*********************************************************/
#include "proc/asset/unknown.hpp"
namespace asset
{
namespace test
{
template TestAsset<Asset>::TestAsset ();
template TestAsset<Unknown>::TestAsset ();
template TestAsset<Asset>::TestAsset (PAsset& pRef);
template TestAsset<Unknown>::TestAsset (PAsset& pRef);
template shared_ptr<TestAsset<Asset> > TestAsset<Asset>::ptrFromThis ();
template shared_ptr<TestAsset<Unknown> > TestAsset<Unknown>::ptrFromThis ();
} // namespace test
} // namespace asset

View file

@ -0,0 +1,80 @@
/*
TESTASSET.hpp - test asset (stub) for checking internal asset functionality
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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_TESTASSET_H
#define ASSET_TESTASSET_H
#include "proc/asset.hpp"
//#include "common/util.hpp"
#include <boost/format.hpp>
using std::tr1::shared_ptr;
using boost::format;
using std::string;
namespace asset
{
namespace test
{
/**
* Test(mock) asset subclass usable for hijacking a given
* asset class (template parameter) and subsequently accessing
* internal facillities for writing unit tests. Prerequisite
* for using this template is that the used asset base class
* has a (protected) ctor taking an Asset::Ident....
*/
template<class A>
class TestAsset : public A
{
TestAsset () ;
TestAsset (PAsset&); ///< declared dependant on the given Asset
static void deleter (TestAsset<A>* aa) { delete aa; }
public:
typedef shared_ptr<TestAsset<A> > PA;
static PA create () { return (new TestAsset<A> )->ptrFromThis(); }
static PA create (PAsset& pRef) { return (new TestAsset<A> (pRef))->ptrFromThis(); }
/* === interesting asset features we want to access for tests === */
void call_unlink () { this->unlink (); }
void call_unlink (IDA target) { this->unlink (target); }
void set_depend (PAsset parent) { this->defineDependency (parent); }
private:
PA ptrFromThis ();
};
} // namespace test
} // namespace asset
#endif

View file

@ -0,0 +1,105 @@
/*
PlacementBasic(Test) - basic Placement and MObject handling
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
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/asset/media.hpp"
#include "proc/mobject/session.hpp"
#include "proc/mobject/session/edl.hpp"
#include "proc/mobject/session/testclip.hpp"
#include "proc/mobject/placement.hpp"
#include "proc/mobject/explicitplacement.hpp"
#include "common/util.hpp"
#include "proc/mobject/session/mobjectfactory.hpp" ////TODO: avoidable?
//#include <boost/format.hpp>
#include <iostream>
//using boost::format;
using cinelerra::Time;
using util::contains;
using std::string;
using std::cout;
namespace mobject
{
namespace session
{
namespace test
{
using asset::VIDEO;
/*******************************************************************
* @test basic behaviour of Placements and access to MObjects.
* @see mobject::Placement
* @see mobject::MObject#create
* @see mobject::Placement#addPlacement
* @see mobject::Placement#resolve
*/
class PlacementBasic_test : public Test
{
typedef shared_ptr<asset::Media> PM;
typedef shared_ptr<asset::Clip> PCA;
virtual void
run (Arg arg)
{
// create Clip-MObject, which is wrapped into a placement (smart ptr)
PM media = asset::Media::create("test-1", VIDEO);
PCA clipAsset = Media::create(*media);
Placement<Clip> pc = MObject::create (*clipAsset, *media);
// use of the Clip-MObject interface by dereferencing the placement
PM clip_media = pc->getMedia();
ASSERT (clip_media->ident.category.hasKind (VIDEO));
// using the Placement interface
// TODO: how to handle unterdetermined Placement? Throw?
FixedLocation & fixloc = pc.chain(Time(1)); // TODO: the track??
ExplicitPlacement expla = pc.resolve();
ASSERT (expla.time == 1);
ASSERT (!expla.chain.isOverdetermined());
//ASSERT (*expla == *pc); ////////////////////////TODO: definie equality on placements
// now overconstraining with another Placement
pc.chain(Time(2));
ExplicitPlacement expla2 = pc.resolve();
ASSERT (expla2.time == 2); // the latest addition wins
ASSERT (expla2.chain.isOverdetermined());
}
};
/** Register this test class... */
LAUNCHER (PlacementBasic_test, "unit session");
} // namespace test
} // namespace session
} // namespace mobject

View file

@ -55,14 +55,14 @@ namespace mobject
*/
class AddClip_test : public Test
{
virtual void run(Arg arg)
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);
sess->add (clip);
ASSERT (sess->currEDL().contains (pla));
ASSERT (sess->currEDL().contains (clip));
// TODO: Clip-Asset and Placement magic??
}
};

View file

@ -26,6 +26,7 @@
#include "proc/mobject/session.hpp"
#include "proc/mobject/session/edl.hpp" // TODO: really neded?
#include "proc/mobject/session/testsession1.hpp"
#include "proc/mobject/session/clip.hpp" // TODO: really neded?
//#include "common/util.hpp"
//#include <boost/format.hpp>
@ -39,6 +40,9 @@ using proc_interface::AssetManager;
using proc_interface::PAsset;
using proc_interface::IDA;
using std::tr1::dynamic_pointer_cast; /// TODO only temp
namespace mobject
{
namespace session
@ -56,22 +60,28 @@ namespace mobject
*/
class DeleteClip_test : public Test
{
virtual void run(Arg arg)
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
UNIMPLEMENTED("typesafe searching for MObjects in the EDL");
///////TODO: work out how to search within EDL!!
//
// PClipMO clipPlacement = sess->currEDL().find(SESSION1_CLIP);
// // global Var asigned in buildTestsession1()
// PMedia media = clipPlacement->getMedia();
// IDA clipAID = media->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->getMedia()); // internal cross-links removed
}
};

View file

@ -57,7 +57,8 @@ namespace mobject
*/
class RebuildFixture_test : public Test
{
virtual void run(Arg arg)
virtual void
run (Arg arg)
{
PSess sess = Session::current;
sess.clear();
@ -76,10 +77,13 @@ namespace mobject
}
static void
check_is_from_EDL (PPla explicitPlacement, EDL& edl)
check_is_from_EDL (PMO explicitPlacement, EDL& edl)
{
PPla originalPlacement = explicitPlacement->subject->getPlacement();
ASSERT (edl.contains(originalPlacement));
////TODO do we still support this? can it be replaced by a directly checking predicate on ExplicitPlacement??
// PMO originalPlacement = explicitPlacement->subject->getPlacement();
// ASSERT (edl.contains(originalPlacement));
}
};

View file

@ -50,7 +50,8 @@ namespace mobject
*/
class SessionManager_test : public Test
{
virtual void run(Arg arg)
virtual void
run (Arg arg)
{
getCurrentSession ();
clearSession();
@ -66,7 +67,8 @@ namespace mobject
/** @test accessing the current (global) session
*/
void getCurrentSession ()
void
getCurrentSession ()
{
PSess sess = Session::current;
ASSERT (sess->isValid());
@ -77,7 +79,8 @@ namespace mobject
* @todo implement all session content, implement
* mobject and asset deletion operations.
*/
void clearSession ()
void
clearSession ()
{
UNIMPLEMENTED ("clear objects in current session");
Session::current.clear();
@ -87,7 +90,8 @@ namespace mobject
* a pristine default session.
* @todo define the "global session config", implement session default ctor
*/
void resetSession ()
void
resetSession ()
{
UNIMPLEMENTED ("construct a pristine session");
Session::current.reset();
@ -98,7 +102,8 @@ namespace mobject
* objects are wired correctly.
* @todo implement rebuilding session, implement mock session serializer
*/
void loadMockSession ()
void
loadMockSession ()
{
UNIMPLEMENTED ("rebuild session using a mock serializer");
}
@ -108,7 +113,8 @@ namespace mobject
* @param src string with serialized session data
* @todo implement real session serializer
*/
void loadSession (const string& src)
void
loadSession (const string& src)
{
UNIMPLEMENTED ("loding real sesion");
}
@ -117,7 +123,8 @@ namespace mobject
* @param dest string recieving the generated serialized stream
* @todo implement real session serializer
*/
void saveSession (string& dest)
void
saveSession (string& dest)
{
UNIMPLEMENTED ("serialize current session");
}

View file

@ -55,7 +55,8 @@ namespace mobject
*/
class SessionStructure_test : public Test
{
virtual void run(Arg arg)
virtual void
run (Arg arg)
{
PSess sess = Session::current;
ASSERT (0 <= sess->currEDL().size()); // TODO implement

View file

@ -1,5 +1,5 @@
/*
TestClip - bookkeeping (asset) view of a media clip.
TestClip - test clip (stub) for checking EDL/Session functionality
Copyright (C) CinelerraCV
2007, Christian Thaeter <ct@pipapo.org>
@ -26,6 +26,7 @@
#include "backend/mediaaccessmock.hpp"
#include "proc/asset/media.hpp"
#include "proc/asset/clip.hpp"
#include "common/singleton.hpp"
namespace mobject
{
@ -33,31 +34,55 @@ namespace mobject
{
namespace test
{
typedef shared_ptr<mobject::session::Clip> PC;
typedef shared_ptr<asset::Media> 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 ()
asset::Media &
createTestMedia ()
{
// 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
return *media;
}
asset::Clip &
createTestClipAsset (asset::Media& media)
{
return *(asset::Media::create(media));
}
struct Testbed
{
asset::Media & media_;
asset::Clip & clipA_;
Testbed()
: media_ (createTestMedia()),
clipA_ (createTestClipAsset(media_))
{ }
};
cinelerra::Singleton<Testbed> testbed_1; // invoke ctor when creating first TestClip...
TestClip::TestClip ()
: Clip(testbed_1().clipA_,
testbed_1().media_)
{
ASSERT (isValid());
}
/** storage for the TestClip-Factory */
TestClip::Factory TestClip::create;
} // namespace test

View file

@ -25,20 +25,15 @@
#define MOBJECT_SESSION_TESTCLIP_H
#include "common/test/run.hpp"
#include "common/factory.hpp"
#include "proc/mobject/session/clip.hpp"
//#include "common/util.hpp"
//#include <boost/format.hpp>
#include <iostream>
using std::tr1::shared_ptr;
//using boost::format;
using std::string;
using std::cout;
namespace mobject
@ -47,33 +42,42 @@ namespace mobject
{
namespace test
{
class TestPlacement;
/**
* Sample or Test Clip for checking
* various EDL, session and builder operations.
* Can be used as Mock object to record invoked operations.
* @todo make this usable as Mock object to record invoked operations.
*
*/
class TestClip : public mobject::session::Clip /////////////TODO how this????
class TestClip : public mobject::session::Clip
{
/** smart ptr factory allowed to invoke TestClip's ctor */
struct Factory : cinelerra::Factory<TestClip>
{
typedef shared_ptr<TestClip> PType;
PType operator() () { return PType (new TestClip, &destroy); }
protected:
static void destroy (TestClip* tc) { delete tc; }
};
TestClip ();
friend class Factory;
TestClip ();
static void deleter (MObject* mo) { delete (TestClip*)mo; }
friend class TestPlacement;
public:
static Factory create;
static Placement<Clip> create () ;
};
class TestPlacement : public Placement<Clip>
{
public:
TestPlacement (TestClip & subject)
: Placement<Clip> (subject, &TestClip::deleter)
{ }
};
inline Placement<Clip>
TestClip::create()
{
return TestPlacement (*new TestClip);
}

View file

@ -1,6 +1,6 @@
format 40
"Asset" // ProcessingLayer::Asset
revision 13
revision 15
modified_by 5 "hiv"
// class settings
//class diagram settings
@ -593,12 +593,12 @@ ${inlines}
explicit_switch_type ""
comment "placeholder for unknown or unavailable media source"
classrelation 140933 // <generalisation>
relation 139141 ---|>
classrelation 146181 // <generalisation>
relation 144005 ---|>
a public
cpp default "${type}"
classrelation_ref 140933 // <generalisation>
b multiplicity "" parent class_ref 137605 // Preview
classrelation_ref 146181 // <generalisation>
b multiplicity "" parent class_ref 136709 // Media
end
end
@ -614,12 +614,12 @@ ${inlines}
explicit_switch_type ""
comment "alternative version of the media data, probably with lower resolution"
classrelation 140805 // <generalisation>
relation 139013 ---|>
classrelation 146309 // <generalisation>
relation 144133 ---|>
a public
cpp default "${type}"
classrelation_ref 140805 // <generalisation>
b multiplicity "" parent class_ref 136709 // Media
classrelation_ref 146309 // <generalisation>
b multiplicity "" parent class_ref 137477 // Unknown
end
end

View file

@ -22,7 +22,7 @@ classcanvas 129413 class_ref 128517 // MObject
end
classcanvas 129669 class_ref 128645 // Placement
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 574 129 2000
xyz 634 120 2000
end
classcanvas 129925 class_ref 128389 // 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
@ -44,17 +44,17 @@ 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 // FixedPlacement
classcanvas 132229 class_ref 129285 // FixedLocation
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 665 373 2000
xyz 608 332 2005
end
classcanvas 132869 class_ref 129413 // RelativePlacement
classcanvas 132869 class_ref 129413 // RelativeLocation
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 479 276 2000
xyz 491 332 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 373 2000
xyz 568 427 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
@ -62,7 +62,7 @@ classcanvas 134405 class_ref 129669 // Label
end
classcanvas 135429 class_ref 129797 // ExplicitPlacement
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 660 233 2004
xyz 715 276 2004
end
classcanvas 135813 class_ref 129797 // ExplicitPlacement
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
@ -73,18 +73,18 @@ classcanvas 136581 class_ref 129925 // Auto
xyz 375 466 2005
end
note 136837 "Placement \"locates\" a Media Object"
xyzwh 368 83 3005 207 36
xyzwh 370 73 3005 207 36
textcanvas 136965 "the Timeline is a list of placements reduced to absolute coordinates (time, track)"
xyzwh 464 925 2000 121 90
textcanvas 137093 "Fixture is the actual assembly of various Media Objects ready to be performed"
xyzwh 39 909 2000 147 108
classcanvas 137221 class_ref 130053 // Wish
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 573 485 2000
xyz 561 532 2000
end
classcanvas 137349 class_ref 130181 // Constraint
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 623 485 2000
xyz 616 532 2000
end
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
@ -102,6 +102,10 @@ 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
classcanvas 141317 class_ref 139909 // LocatingPin
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 518 239 2000
end
relationcanvas 128389 relation_ref 128005 // <directional aggregation by value>
from ref 128005 z 1999 to ref 128133
role_a_pos 201 603 3000 no_role_b
@ -122,10 +126,6 @@ relationcanvas 129157 relation_ref 128389 // <directional aggregation by value>
line 129285 z 1999 to ref 129029
role_a_pos 338 687 3000 no_role_b
multiplicity_a_pos 314 687 3000 no_multiplicity_b
relationcanvas 129797 relation_ref 128645 // <association>
from ref 129413 z 1999 stereotype "<<list>>" xyz 471 143 3000 to ref 129669
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 // <directional aggregation by value>
geometry HV
from ref 128261 z 1999 stereotype "<<list>>" xyz 334 914 3000 to point 339 931
@ -156,34 +156,21 @@ relationcanvas 132101 relation_ref 129669 // <generalisation>
from ref 131973 z 1999 to ref 130949
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 132485 relation_ref 129797 // <generalisation>
from ref 132229 z 1999 to ref 129669
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 132997 relation_ref 129925 // <unidirectional association>
from ref 132869 z 1999 to point 529 240
line 133893 z 1999 to ref 129413
role_a_pos 439 215 3000 no_role_b
multiplicity_a_pos 401 197 3000 multiplicity_b_pos 515 251 3000
from ref 132869 z 1999 to point 455 329
line 133893 z 1999 to point 430 252
line 144389 z 1999 to ref 129413
role_a_pos 417 223 3000 no_role_b
multiplicity_a_pos 406 208 3000 multiplicity_b_pos 474 359 3000
relationcanvas 134533 relation_ref 130309 // <generalisation>
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 // <generalisation>
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 // <generalisation>
from ref 132869 z 1999 to ref 129669
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 135557 relation_ref 130821 // <realization>
from ref 132229 z 1999 to ref 135429
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 135685 relation_ref 130949 // <generalisation>
from ref 135429 z 1999 to ref 129669
geometry VHV
from ref 135429 z 1999 to point 766 245
line 141445 z 1999 to point 671 245
line 141573 z 1999 to ref 129669
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 135941 relation_ref 131077 // <directional aggregation by value>
@ -213,7 +200,7 @@ relationcanvas 138757 relation_ref 137093 // <directional aggregation>
geometry VHr
from ref 138629 z 1999 stereotype "<<list>>" xyz 479 716 3000 to point 517 714
line 138885 z 1999 to ref 135813
role_a_pos 524 717 3000 no_role_b
role_a_pos 529 783 3000 no_role_b
multiplicity_a_pos 505 783 3000 no_multiplicity_b
relationcanvas 139141 relation_ref 140805 // <generalisation>
from ref 139013 z 1999 to ref 131461
@ -229,4 +216,39 @@ relationcanvas 139781 relation_ref 142853 // <unidirectional association>
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
relationcanvas 140165 relation_ref 142981 // <unidirectional association>
from ref 129669 z 1999 to ref 129413
role_a_pos 413 151 3000 no_role_b
multiplicity_a_pos 403 151 3000 multiplicity_b_pos 589 153 3000
relationcanvas 142213 relation_ref 143237 // <unidirectional association>
from ref 129669 z 1999 to ref 141317
role_a_pos 578 200 3000 no_role_b
multiplicity_a_pos 599 233 3000 no_multiplicity_b
relationcanvas 142981 relation_ref 143493 // <generalisation>
geometry VHV
from ref 132869 z 1999 to point 539 304
line 143493 z 1999 to point 554 304
line 143621 z 1999 to ref 141317
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 143109 relation_ref 143621 // <generalisation>
geometry VHV
from ref 132229 z 1999 to point 650 304
line 143749 z 1999 to point 554 304
line 143877 z 1999 to ref 141317
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 143237 relation_ref 143749 // <generalisation>
geometry VHV unfixed
from ref 134149 z 1999 to point 599 304
line 144005 z 1999 to point 554 304
line 144133 z 1999 to ref 141317
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
relationcanvas 144517 relation_ref 143877 // <unidirectional association>
from ref 141317 z 1999 to point 488 239
line 144645 z 1999 to point 488 269
line 144773 z 1999 to ref 141317
role_a_pos 492 244 3000 no_role_b
no_multiplicity_a no_multiplicity_b
end

View file

@ -1,6 +1,6 @@
format 40
"MObject" // ProcessingLayer::MObject
revision 22
revision 27
modified_by 5 "hiv"
// class settings
//class diagram settings
@ -409,19 +409,6 @@ ${members}};
comment "TODO: how to represent time intervals?"
end
classrelation 129029 // placement (<association>)
relation 128645 ----
stereotype "list"
a role_name "placement" multiplicity "1..*" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${stereotype}<${type} *> ${name}${value};
"
classrelation_ref 129029 // placement (<association>)
b role_name "subject" multiplicity "1" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 129157 // subject (<association>)
end
classrelation 137093 // <generalisation>
relation 135557 ---|>
a public
@ -446,10 +433,8 @@ ${members}};
"
explicit_switch_type ""
classrelation 129157 // subject (<association>)
relation_ref 128645 // <association>
end
comment "used to specify the position of a MObject in the EDL. This can be done in various ways (absolute, relative).
Placement at the same time acts as (refcounting) smart pointer for accessing the MObject."
operation 128005 "resolve"
public explicit_return_type "ExplicitPlacement [ProcessingLayer::MObject]&"
nparams 0
@ -465,6 +450,43 @@ ${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl}
comment "create an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements."
end
classrelation 144901 // subject (<unidirectional association>)
relation 142981 --->
a role_name "subject" multiplicity "1" protected
comment "Placement acts as smart pointer"
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 144901 // subject (<unidirectional association>)
b multiplicity "1..*" parent class_ref 128517 // MObject
end
operation 134277 "chain"
public explicit_return_type ""
nparams 1
param in name "style" explicit_type ""
cpp_decl " ${comment}${friend}${static}${inline}${virtual}${type} ${name} ${(}const ${t0}& ${p0}${)}${const}${volatile} ${throw}${abstract};"
cpp_def "${comment}${inline}${type}
${class}::${name} ${(}const ${t0}& ${p0}${)}${const}${volatile} ${throw}${staticnl}
{
${body}
}
"
comment "create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object."
end
classrelation 145413 // chain (<unidirectional association>)
relation 143237 --->
a role_name "chain" multiplicity "1" protected
comment "Chain of additional Placements further constraining the position of this MObject"
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 145413 // chain (<unidirectional association>)
b multiplicity "" parent class_ref 139909 // LocatingPin
end
end
class 129797 "ExplicitPlacement"
@ -679,7 +701,7 @@ ${inlines}
end
end
class 129285 "FixedPlacement"
class 129285 "FixedLocation"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
@ -690,24 +712,16 @@ ${inlines}
idl_decl ""
explicit_switch_type ""
classrelation 130437 // <generalisation>
relation 129797 ---|>
classrelation 145797 // <generalisation>
relation 143621 ---|>
a public
cpp default "${type}"
classrelation_ref 130437 // <generalisation>
b multiplicity "" parent class_ref 128645 // Placement
end
classrelation 131461 // <realization>
relation 130821 -_-|>
a public
cpp default "${type}"
classrelation_ref 131461 // <realization>
b multiplicity "" parent class_ref 129797 // ExplicitPlacement
classrelation_ref 145797 // <generalisation>
b multiplicity "" parent class_ref 139909 // LocatingPin
end
end
class 129413 "RelativePlacement"
class 129413 "RelativeLocation"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
@ -737,14 +751,6 @@ ${inlines}
comment "the kind of relation denoted by this Placement"
end
classrelation 131333 // <generalisation>
relation 130693 ---|>
a public
cpp default "${type}"
classrelation_ref 131333 // <generalisation>
b multiplicity "" parent class_ref 128645 // Placement
end
attribute 129029 "offset"
protected type class_ref 134917 // Time
init_value "0"
@ -788,6 +794,14 @@ ${items}};
comment "attach subject to anchor (e.g. an effect to a clip)"
end
end
classrelation 145669 // <generalisation>
relation 143493 ---|>
a public
cpp default "${type}"
classrelation_ref 145669 // <generalisation>
b multiplicity "" parent class_ref 139909 // LocatingPin
end
end
class 129541 "Allocation"
@ -802,14 +816,6 @@ ${inlines}
explicit_switch_type ""
comment "a directive to place a MObject in a specific way"
classrelation 131205 // <generalisation>
relation 130565 ---|>
a public
cpp default "${type}"
classrelation_ref 131205 // <generalisation>
b multiplicity "" parent class_ref 128645 // Placement
end
attribute 128773 "repr"
protected explicit_type "string"
cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
@ -837,6 +843,14 @@ ${inlines}
idl_name_spec "get_${name}"
get_of_attribute attribute_ref 128773 // repr
end
classrelation 145925 // <generalisation>
relation 143749 ---|>
a public
cpp default "${type}"
classrelation_ref 145925 // <generalisation>
b multiplicity "" parent class_ref 139909 // LocatingPin
end
end
class 129669 "Label"
@ -1065,9 +1079,127 @@ ${inlines}
comment "Provides the implementation for getting the acutal value of a time varying or automated effect/plugin parameter"
end
class 139909 "LocatingPin"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
idl_decl ""
explicit_switch_type ""
comment "An element with value semantics, which actually implements the placement of some MObject by positioning it in some way."
classrelation 146053 // next (<unidirectional association>)
relation 143877 --->
a role_name "next" multiplicity "" protected
comment "next additional LocatingPin, if any"
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 146053 // next (<unidirectional association>)
b multiplicity "" parent class_ref 139909 // LocatingPin
end
end
end
package_ref 128901 // Builder
package_ref 129029 // Controller
usecaseview 128261 "config examples"
//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
objectdiagram 131333 "multichannel clip"
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
size A4
end
classinstance 134661 ""
type class_ref 137349 // Clip
attributes
end
relations
end
end
classinstance 134789 ""
type class_ref 138501 // CompoundMedia
attributes
end
relations
end
end
classinstance 134917 ""
type class_ref 136709 // Media
attributes
end
relations
end
end
classinstance 135045 ""
type class_ref 136709 // Media
attributes
end
relations
end
end
classinstance 135173 ""
type class_ref 136709 // Media
attributes
end
relations
end
end
classinstance 135301 ""
type class_ref 138629 // CompoundClip
attributes
end
relations
end
end
classinstance 135429 ""
type class_ref 138885 // SimpleClip
attributes
end
relations
end
end
classinstance 135557 ""
type class_ref 138885 // SimpleClip
attributes
end
relations
end
end
classinstance 135685 ""
type class_ref 138885 // SimpleClip
attributes
end
relations
end
end
classinstance 135813 ""
type class_ref 128645 // Placement
attributes
end
relations
end
end
end
end

View file

@ -1,6 +1,6 @@
format 40
"ProcessingLayer" // ProcessingLayer
revision 3
revision 7
modified_by 5 "hiv"
// class settings
//class diagram settings
@ -26,7 +26,7 @@ format 40
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
package_ref 128133 // AssetManager
package_ref 128133 // Asset
package_ref 128261 // MObject
@ -222,13 +222,11 @@ format 40
"100"
end
relations
relation_ref 128645 // <association>
classinstance_ref 130053 //
end
end
classinstance 130053 ""
type class_ref 129413 // RelativePlacement
type class_ref 129413 // RelativeLocation
attributes
attribute_ref 128133 // relType
"SAMETIME"
@ -248,13 +246,11 @@ format 40
"\"Hue\""
end
relations
relation_ref 128645 // <association>
classinstance_ref 130309 //
end
end
classinstance 130309 ""
type class_ref 129413 // RelativePlacement
type class_ref 129413 // RelativeLocation
attributes
attribute_ref 129029 // offset
"+3"
@ -276,8 +272,6 @@ format 40
"\"Hue\""
end
relations
relation_ref 128645 // <association>
classinstance_ref 130309 //
end
end

Some files were not shown because too many files have changed in this diff Show more