Merge from branch 'ichthyo/builder': Basic Placement handling, create Clip
Merge branch 'builder'
|
|
@ -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 (<association>)</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<<a href="class128645.html#refclass128645"><b>Placement</b></a> *> 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>
|
||||
|
|
|
|||
|
|
@ -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 (<association>)</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]&</li><li>C++ : public: ExplicitPlacement [ProcessingLayer::MObject]& 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]&</li><li>C++ : public: ExplicitPlacement [ProcessingLayer::MObject]& 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 (<unidirectional association>)</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 & 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 (<unidirectional association>)</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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 (<unidirectional association>)</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>
|
||||
|
|
|
|||
|
|
@ -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 >= 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>
|
||||
|
|
|
|||
|
|
@ -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><unidirectional association></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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
24
doc/devel/uml/class139909.html
Normal 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 (<unidirectional association>)</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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 />
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 41 KiB |
BIN
doc/devel/uml/fig131333.png
Normal file
|
After Width: | Height: | Size: 9 KiB |
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 <i>together with all its dependants</i> 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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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_*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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!!!
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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???
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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&);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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...");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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_);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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 ()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
68
src/proc/mobject/session/fixedlocation.hpp
Normal 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
|
||||
201
src/proc/mobject/session/locatingpin.cpp
Normal 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
|
||||
156
src/proc/mobject/session/locatingpin.hpp
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
75
src/proc/mobject/session/mobjectfactory.cpp
Normal 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
|
||||
|
|
@ -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);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
123
tests/components/proc/asset/testasset.cpp
Normal 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
|
||||
80
tests/components/proc/asset/testasset.hpp
Normal 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
|
||||
105
tests/components/proc/mobject/placementbasictest.cpp
Normal 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
|
||||
|
|
@ -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??
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||