From 63fc549f8a916f89fff0b2f1b843e567549156b3 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Fri, 22 Jun 2007 08:46:15 +0200 Subject: [PATCH] added definition tiddlers for many terms used in my design --- doc/devel/uml/fig1.png | Bin 37306 -> 38242 bytes doc/devel/uml/fig2.png | Bin 50145 -> 50142 bytes doc/devel/uml/fig4.png | Bin 35631 -> 35633 bytes doc/devel/uml/fig7.png | Bin 36430 -> 36644 bytes doc/devel/uml/index.html | 6 +- doc/devel/uml/index_70.html | 2 + doc/devel/uml/index_77.html | 1 - doc/devel/uml/index_83.html | 1 - uml/cinelerra3/128005 | 6 +- uml/cinelerra3/128005.diagram | 4 +- uml/cinelerra3/128005_5.d | 73 ++++++++ uml/cinelerra3/128261 | 2 +- uml/cinelerra3/128261.diagram | 4 +- uml/cinelerra3/128261_5.d | 81 ++++++++ uml/cinelerra3/128389 | 6 +- uml/cinelerra3/128901.diagram | 4 +- uml/cinelerra3/cinelerra3.prj | 2 +- wiki/ichthyo-draft.html | 344 ++++++++++++++++++++++++---------- 18 files changed, 417 insertions(+), 119 deletions(-) create mode 100644 uml/cinelerra3/128005_5.d create mode 100644 uml/cinelerra3/128261_5.d diff --git a/doc/devel/uml/fig1.png b/doc/devel/uml/fig1.png index 337145bfffdca7ba21360e72bc678f313f84881f..c9bb3707710a802839c2b325e07b566e778dba8d 100644 GIT binary patch delta 19638 zcmce;byQW++CI81K#&pvB?Sp-k!}P8k#1>_?(SGfst70@(%rD>7EnMCknWa_O>bZm zcjEctob!G6_s6|=+%?u1ti9%1bG~cF8_)Yp>N9UH7The;lz?7^sT%~w#SPv|r%a5C z?y!^@=HjV~j#J+MxLC|0XY=m+ZNgUPm&~+J*vvohz~K+Lbd6k|jOnr^q(9bUx0A{E z^>vOiH<=C%&%~hb>uIBYlV`Grd&;Wds=ME*W6FVSM7UE;Z*fLV^A{glX_9BI-$EQH zk55!09E0z+pfc5Y)f8tDio!w>svzAMxt(| zoV)jRvNUQ{?pjg>=9PuxwV89G-A1>Tn_>(cPpWde>^fbv4W|@Lc_wJMg2mB*L^SX3 zc4Nw@(n|H^Z;5E*%Dt==F8t7Q7Y2)&mnSL8loL%_ht`KmzqY_F)^pY`a_AAVtQ!0K zNo-Os5%GN8H*g0u%^^K+#ugrSjVrS+UaV35?dV2XBrhN ztE{I!?lkqSx?KQAp-Vnq$lcXc*%Ygks6xHJ;0&*tbA<#~^bTDr;wLmix`zzR!}cA

5m%v#Sa8fNXk*K^K6QX&F93ej{qZlpMke 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 BN8kVe diff --git a/doc/devel/uml/fig2.png b/doc/devel/uml/fig2.png index 4ec6d5a3919e98b3dd73136f9264e9d6ef87e90f..ce4be60b2a413bbf2a23a311f5442aadc2692737 100644 GIT binary patch delta 11955 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 delta 11958 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

=KDT%C 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 delta 14940 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ⅈ zJX0G<1V7&7|D`iPa=V?3BDKc3K$kvQQ^OS)s#g`yf(W2raa6Z=_?{LZqSzWQi@z>X z(gNB#Mf*DJjudPeRI|qbo^ywQR;6lcYWn(hC%`9woSFi$-PF_sSZ+=hrVw|~iafo% zNT0uDw;Fw}r#IIYN=o$qY{CBi{^%IEfSAC<#s(#e)YUaW7%D?!$5~id2%vH>LWV-1 zB>@tQn!~trq(I|7Z{5E&TW+nB+Un{TRG=qx8~>n_i7T!Bt%cqMl%zlL(Ph>**GMp) z7#nZ)bW2;7^;OuE>`b4%fBBNw^$XqeLOuIkZDcAZ&9o6vj}=5`1nEq+R|nrTG(em# zn|%AT9#CcTr`=$&AJUjz{kjz{TaBJxW?yqjHz&)xhgx8q#3UqyATFPwOaWSKx^)S$ zu}8;KcA!f_=WDqI>Q~p|!1?UG_m9CSl!Qe9y1oRvghdO;pS86$Q2fr$fRTED0nz)v zg#n0qal60Nj0fiOt5nR^+I&Ycn9HIR~GprQ!_C&wNK<5a*Z+M59@C( zmRM;N$5i|;jtMY6yYsJ%jTeFF5O|-Wy`Iv#&}`e+AaHv8@UfkxCE)q3&COS5YAeMb z4^Alpx~$r++8?+WhISJ@EI&#V(1yYN1asu#`RaIkBQ@56uVn2O) z;kIvVi`VYH%&{3op_TmfA4+E-Ajj;qx~8V0_Abhhqn|hOJy$_5Mq2L~#B|m>p3S_< zXsp%>h{tU8f+vq318n*V^M$Z#mLlW+{yrux;Dq<~_7G98{O-EBySKNu=VWKc#@{S# zA8#E4U(7v0E?QC1^qjTnX>EVFK~)Cei|RdiX^jCvM!w{Lkc!^2Np*b)hI^g0& zZ0J`QlJKsGTENM?1k$aimrcO`hv(>(f6WUBUm_~1)WpQKjSVeD#g~|x)ecKR1Wzz& zb!uHusOwBP(BJOJ`4lKmq8Br4xfsQ2XkR(%Rv3 z8jL?To>VA8_Vh;EXXF7XDKl{hH6-jlUGGr|@P2rBctix|Z7d)!!kXNu{=KagXtTOH z@jX&SsjE$H`6KJdTm_lzA;6v&7UFs`F~CSsBCF5A=Pu)P=(;*93-${o(t-9UfkHPh z*jtn?_P?LKF7iMy-AY;v+(aAN12y^N@W#wDXquWttf_5}(04U&nG&!WvVtht#p zn*Qo)qog1~5BU1HxGuHT)ZT*c3(dbmo*#MK8*_T>@M&-VGsMG1X=5#PKB95<;DMgq z)bXdYDUl=9liaj*Teo|o>lm;Upl{%pf%VWa`mr#Bu(92p$BHAdX#dN{)C_9u$ri;- zZsap|cFTihbXkuOWm8j<07UDLzTRo2mrdy;Y-#=1HPFpk1BeKNoC>*=G7k?Esp|76~c#eD>DM2!@2FL9Dv!qR`FdW#wE16dG|Y1D5#mMFV(B{3pKt<0o~|7-N;?aJo@3 zhYl_-f=?9CG447sGL$rmMC;gEU$&*lga-#}4I%X?L_Fu0dgl6)D^HNF*8tZRSCW(Fr;M>yQ8yw7dd?y49wvWmmG9+h2G!Q(n;)1GUT6UZhTsVa0ldb=8B`&G_0Na~UtLP?J;e#rvMJf&L5&_i4T} zU_cJVH>{HU4Fu|~4M?!1W2G@9M0q?G3+o@}>19d$RE3R)PPX(!slm;3HPJl}a}Yb= z+b(i|+&fX@}v8~ zV~>C9eu3>nJS~OFF+(Xrq@?L;jBt;`RmkPUR;Bjvc8Qt_^_it2 z)vaee=lA{s1qH8b37wJ(7v@t0+J_IWpodEVf8X%>I5L+_I-4yv#xpK9)_4P;Y|1;1 zxv(!SRmcIks4jQ!YqyFbKQx#HoFBf;azvl;8h;RRjF;f2hv?{qq0+ ctBW`2O?U0hKKS^WgEzz8NXUy9!}WdtFKLTphyVZp diff --git a/doc/devel/uml/fig7.png b/doc/devel/uml/fig7.png index 330bb9a3ea02094453f04ffcaf9676fb750c5bcc..9192da11b0eb0719d9270f5fbdda9dfde6c88bbe 100644 GIT binary patch delta 16744 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 diff --git a/doc/devel/uml/index.html b/doc/devel/uml/index.html index 15c783bc5..7fffc372d 100644 --- a/doc/devel/uml/index.html +++ b/doc/devel/uml/index.html @@ -49,10 +49,10 @@ Documentation
Component Dispatcher
Component Engine
-

Depends on Stream Provider

+

Depends on Frame (Stream) Provider

-
Component Stream Provider
+
Component Frame (Stream) Provider

Depends on Cache

@@ -146,7 +146,7 @@ Documentation
Node pnode
-
Node mStream
+
Node Frame
Node State
diff --git a/doc/devel/uml/index_70.html b/doc/devel/uml/index_70.html index c59d89abd..c330b9cbf 100644 --- a/doc/devel/uml/index_70.html +++ b/doc/devel/uml/index_70.html @@ -20,7 +20,9 @@ Fixtureclass Fixturecomponent fixturerelation +Framenode Frameclass +Frame (Stream) Providercomponent FrameProviderclassNote: just a Placeholder for my design. Cehteh will ceratinly know much better how to organize this diff --git a/doc/devel/uml/index_77.html b/doc/devel/uml/index_77.html index fc50e0afc..4a17d4334 100644 --- a/doc/devel/uml/index_77.html +++ b/doc/devel/uml/index_77.html @@ -21,7 +21,6 @@ Metaclass MObjectpackage MObjectclass -mStreamnode diff --git a/doc/devel/uml/index_83.html b/doc/devel/uml/index_83.html index 2a62511af..9526c66f0 100644 --- a/doc/devel/uml/index_83.html +++ b/doc/devel/uml/index_83.html @@ -27,7 +27,6 @@ startattributebegin of the timerange covered by this processor Statenode StateProxyclass -Stream Providercomponent subjectrelation diff --git a/uml/cinelerra3/128005 b/uml/cinelerra3/128005 index 48da8f34d..b4a91c47a 100644 --- a/uml/cinelerra3/128005 +++ b/uml/cinelerra3/128005 @@ -1,6 +1,6 @@ format 38 "design" // design - revision 4 + revision 5 modified_by 5 "hiv" // class settings //class diagram settings @@ -71,11 +71,11 @@ Not a real code package, rather a container for design drafts, specifications, d component 128901 "Engine" simplerelation 128133 -_-> - on component_ref 129029 // Stream Provider + on component_ref 129029 // Frame (Stream) Provider end end - component 129029 "Stream Provider" + component 129029 "Frame (Stream) Provider" simplerelation 128005 -_-> on component_ref 129157 // Cache diff --git a/uml/cinelerra3/128005.diagram b/uml/cinelerra3/128005.diagram index 6dd14ad62..cf8cad386 100644 --- a/uml/cinelerra3/128005.diagram +++ b/uml/cinelerra3/128005.diagram @@ -45,7 +45,7 @@ componentcanvas 129797 component_ref 128773 // Dispatcher componentcanvas 129925 component_ref 128901 // Engine draw_component_as_icon default show_component_req_prov default show_component_rea default xyzwh 118 602 2010 235 176 -componentcanvas 130053 component_ref 129029 // Stream Provider +componentcanvas 130053 component_ref 129029 // Frame (Stream) Provider draw_component_as_icon default show_component_req_prov default show_component_rea default xyzwh 121 876 2005 229 69 componentcanvas 130181 component_ref 129157 // Cache @@ -56,7 +56,7 @@ note 131717 "Coordinates Playback and Rendering" note 131845 "border of the low-level, performance-critical part of the system" xyzwh 666 450 2006 167 84 note 131973 "just works, never decides" - xyzwh 316 668 2010 110 59 + xyzwh 317 668 2015 110 59 note 132101 "codecs, stream I/O here" xyzwh 647 904 2005 166 39 simplerelationcanvas 131205 simplerelation_ref 128005 diff --git a/uml/cinelerra3/128005_5.d b/uml/cinelerra3/128005_5.d new file mode 100644 index 000000000..cf8cad386 --- /dev/null +++ b/uml/cinelerra3/128005_5.d @@ -0,0 +1,73 @@ +format 38 + +fragment 128005 "UI Layer" + xyzwh 321 22 2000 829 100 +end +fragment 128133 "Processing Layer" + xyzwh 64 156 2000 1089 655 + separator 4833 +end +fragment 128261 "Backend Layer" + xyzwh 64 848 2000 1089 105 +end +packagecanvas 128389 + package_ref 128133 // AssetManager + xyzwh 561 201 2005 252 214 +packagecanvas 128517 + package_ref 128261 // MObject + xyzwh 94 201 2006 458 335 +packagecanvas 128645 + package_ref 128389 // RenderEngine + xyzwh 94 551 2005 458 235 +componentcanvas 128773 component_ref 128005 // Builder + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 121 419 2015 229 105 +componentcanvas 128901 component_ref 128133 // Session + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 122 243 2011 323 156 +componentcanvas 129029 component_ref 128261 // Controller + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 372 419 2011 175 105 +componentcanvas 129157 component_ref 128389 // EDL + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 288 302 2016 143 79 +componentcanvas 129285 component_ref 128517 // Fixture + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 124 319 2016 143 69 +note 129541 "Structures edited by the User" + xyzwh 43 269 2016 181 41 +componentcanvas 129669 component_ref 128645 // AssetManagement + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 577 241 2010 208 159 +componentcanvas 129797 component_ref 128773 // Dispatcher + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 406 31 2005 179 69 +componentcanvas 129925 component_ref 128901 // Engine + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 118 602 2010 235 176 +componentcanvas 130053 component_ref 129029 // Frame (Stream) Provider + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 121 876 2005 229 69 +componentcanvas 130181 component_ref 129157 // Cache + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 391 876 2005 179 69 +note 131717 "Coordinates Playback and Rendering" + xyzwh 483 494 2016 149 63 +note 131845 "border of the low-level, performance-critical part of the system" + xyzwh 666 450 2006 167 84 +note 131973 "just works, never decides" + xyzwh 317 668 2015 110 59 +note 132101 "codecs, stream I/O here" + xyzwh 647 904 2005 166 39 +simplerelationcanvas 131205 simplerelation_ref 128005 + from ref 130053 z 2004 to ref 130181 +simplerelationcanvas 131333 simplerelation_ref 128133 + from ref 129925 z 2004 to ref 130053 +line 130309 -_-_ + from ref 129797 z 2004 to ref 128901 +line 130821 -_-_ geometry HVr + from ref 129797 z 2004 to point 493 469 + line 130949 z 2004 to ref 129029 +line 131077 -_-_ + from ref 129797 z 2004 to ref 129669 +end diff --git a/uml/cinelerra3/128261 b/uml/cinelerra3/128261 index 0ca47fe6e..cd1316f5f 100644 --- a/uml/cinelerra3/128261 +++ b/uml/cinelerra3/128261 @@ -1,6 +1,6 @@ format 38 "MObject" // MObject - revision 7 + revision 8 modified_by 5 "hiv" // class settings //class diagram settings diff --git a/uml/cinelerra3/128261.diagram b/uml/cinelerra3/128261.diagram index d86a21a4f..7bc995b82 100644 --- a/uml/cinelerra3/128261.diagram +++ b/uml/cinelerra3/128261.diagram @@ -12,7 +12,7 @@ end componentcanvas 128517 component_ref 128901 // Engine draw_component_as_icon default show_component_req_prov default show_component_rea default xyzwh 95 318 2000 487 323 -componentcanvas 128645 component_ref 129029 // Stream Provider +componentcanvas 128645 component_ref 129029 // Frame (Stream) Provider draw_component_as_icon default show_component_req_prov default show_component_rea default xyzwh 254 711 2005 180 160 deploymentnodecanvas 128901 deploymentnode_ref 128005 // timeline @@ -41,7 +41,7 @@ deploymentnodecanvas 131077 deploymentnode_ref 128517 // pnode xyzwh 318 544 2005 56 36 deploymentnodecanvas 131205 deploymentnode_ref 128517 // pnode xyzwh 317 584 2005 56 36 -deploymentnodecanvas 133125 deploymentnode_ref 128645 // mStream +deploymentnodecanvas 133125 deploymentnode_ref 128645 // Frame xyzwh 309 800 2010 70 36 deploymentnodecanvas 134021 deploymentnode_ref 128517 // pnode xyzwh 442 503 2005 56 36 diff --git a/uml/cinelerra3/128261_5.d b/uml/cinelerra3/128261_5.d new file mode 100644 index 000000000..7bc995b82 --- /dev/null +++ b/uml/cinelerra3/128261_5.d @@ -0,0 +1,81 @@ +format 38 + +componentcanvas 128133 component_ref 128005 // Builder + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 117 113 2000 204 156 +componentcanvas 128261 component_ref 128261 // Controller + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 573 100 2000 166 82 +fragment 128389 "Backend Layer" + xyzwh 89 690 2000 632 188 +end +componentcanvas 128517 component_ref 128901 // Engine + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 95 318 2000 487 323 +componentcanvas 128645 component_ref 129029 // Frame (Stream) Provider + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 254 711 2005 180 160 +deploymentnodecanvas 128901 deploymentnode_ref 128005 // timeline + xyzwh 142 3 2000 323 90 +hubcanvas 129157 xyz 192 63 2005 +hubcanvas 129285 xyz 222 62 2005 +hubcanvas 129413 xyz 255 62 2005 +hubcanvas 129541 xyz 290 62 2005 +deploymentnodecanvas 130053 deploymentnode_ref 128261 // playlist + xyzwh 148 389 2005 401 80 +deploymentnodecanvas 130181 deploymentnode_ref 128389 // proc + xyzwh 178 435 2010 97 69 +deploymentnodecanvas 130309 deploymentnode_ref 128389 // proc + xyzwh 424 430 2010 97 69 +deploymentnodecanvas 130437 deploymentnode_ref 128517 // pnode + xyzwh 202 507 2005 56 36 +deploymentnodecanvas 130565 deploymentnode_ref 128517 // pnode + xyzwh 201 546 2005 56 36 +deploymentnodecanvas 130693 deploymentnode_ref 128517 // pnode + xyzwh 201 585 2005 56 36 +deploymentnodecanvas 130821 deploymentnode_ref 128517 // pnode + xyzwh 318 505 2005 56 36 +deploymentnodecanvas 130949 deploymentnode_ref 128389 // proc + xyzwh 294 433 2010 97 69 +deploymentnodecanvas 131077 deploymentnode_ref 128517 // pnode + xyzwh 318 544 2005 56 36 +deploymentnodecanvas 131205 deploymentnode_ref 128517 // pnode + xyzwh 317 584 2005 56 36 +deploymentnodecanvas 133125 deploymentnode_ref 128645 // Frame + xyzwh 309 800 2010 70 36 +deploymentnodecanvas 134021 deploymentnode_ref 128517 // pnode + xyzwh 442 503 2005 56 36 +deploymentnodecanvas 134149 deploymentnode_ref 128517 // pnode + xyzwh 411 548 2005 56 36 +deploymentnodecanvas 134277 deploymentnode_ref 128517 // pnode + xyzwh 466 548 2005 56 36 +deploymentnodecanvas 134405 deploymentnode_ref 128517 // pnode + xyzwh 467 586 2005 56 36 +componentcanvas 135045 component_ref 129285 // RenderPathManager + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 505 222 2000 165 65 +deploymentnodecanvas 136069 deploymentnode_ref 128773 // State + xyzwh 703 226 2000 83 52 +textcanvas 136325 "Render Engine carries out the actual processing by pulling output from the aprropriate processor " + xyzwh 615 363 2000 135 89 +note 136453 "Input for Builder" + xyzwh 125 83 2005 104 36 +note 136581 "Output of Builder" + xyzwh 119 350 2005 104 36 +note 136709 "optimizes" + xyzwh 616 286 2000 75 35 +packagecanvas 136837 + package_ref 129029 // Controller + xyzwh 486 68 1994 326 228 +textcanvas 136965 "Builder is instructed by Controller and transforms given timeline into a Render Engine, i.e.a network of processing nodes" + xyzwh 326 196 2005 160 101 +simplerelationcanvas 128773 simplerelation_ref 128133 + from ref 128517 z 1999 to ref 128645 +line 129925 ---- + from ref 129157 z 2004 to ref 129541 +line 133765 ---- + from ref 130949 z 2009 to ref 133125 +simplerelationcanvas 134533 simplerelation_ref 128261 geometry HVr + from ref 128261 z 1999 to point 653 188 + line 134789 z 1999 to ref 128133 +end diff --git a/uml/cinelerra3/128389 b/uml/cinelerra3/128389 index d46a3e0ee..7748a20d7 100644 --- a/uml/cinelerra3/128389 +++ b/uml/cinelerra3/128389 @@ -1,6 +1,6 @@ format 38 "RenderEngine" // RenderEngine - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -48,7 +48,7 @@ format 38 deploymentnode 128517 "pnode" end - deploymentnode 128645 "mStream" + deploymentnode 128645 "Frame" end deploymentnode 128773 "State" @@ -194,7 +194,6 @@ ${inlines} classrelation_ref 132869 // b multiplicity "" parent class_ref 131717 // ProcNode end - end class 131717 "ProcNode" @@ -296,7 +295,6 @@ ${inlines} classrelation_ref 133509 // b multiplicity "" parent class_ref 131845 // Trafo end - end class 132357 "Mask" diff --git a/uml/cinelerra3/128901.diagram b/uml/cinelerra3/128901.diagram index 9d8326da8..ea7958855 100644 --- a/uml/cinelerra3/128901.diagram +++ b/uml/cinelerra3/128901.diagram @@ -97,7 +97,7 @@ classinstance 133125 class_ref 129797 // ExplicitePlacement end note 135941 "actually the same object" xyzwh 635 341 2004 148 41 -textcanvas 136197 "Video Clip anchored at a Label, with an attached HUE effect starting 3 frames after beginn" +textcanvas 136197 "Video Clip anchored at a Label, with an attached HUE effect starting 3 frames after begin" xyzwh 524 565 2000 175 87 objectlinkcanvas 129413 norel geometry HVr @@ -153,7 +153,7 @@ objectlinkcanvas 133381 norel objectlinkcanvas 135685 rel relation_ref 128645 // from ref 132997 z 1999 to point 600 432 line 135813 z 1999 to ref 132357 - role_a_pos 612 276 3000 role_b_pos 444 540 3000 + role_a_pos 612 276 3000 role_b_pos 413 543 3000 line 134149 -_-_ from ref 131717 z 1993 to ref 132869 line 134277 -_-_ diff --git a/uml/cinelerra3/cinelerra3.prj b/uml/cinelerra3/cinelerra3.prj index c1d5d5379..3039fb175 100644 --- a/uml/cinelerra3/cinelerra3.prj +++ b/uml/cinelerra3/cinelerra3.prj @@ -1,6 +1,6 @@ format 38 "cinelerra3" - revision 6 + revision 7 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/ichthyo-draft.html b/wiki/ichthyo-draft.html index 572c95f54..39ee7072b 100644 --- a/wiki/ichthyo-draft.html +++ b/wiki/ichthyo-draft.html @@ -747,13 +747,17 @@ config.macros.timeline.handler = function(place,macroName,params,wikifier,paramS } //}}} -
+
All decisions on //how// the RenderProcess has to be carried out are concentrated in this rather complicated Builder Subsystem. The benefit of this approach is, besides decoupling of subsystems, to keep the actuall performance-intensive video processing code as simple and transparent as possible. The price, in terms of increased complexity, to pay in the Builder can be handled by making the Build Process generic to a large degree. Using a Design By Contract approach we can decompose the various decisions into small decision modules without having to trace the actual workings of the Build Process as a whole.
 
-[img[Colaborations in the Build Process|uml/fig5.png]]
+[img[Colaborations in the Build Process|uml/fig5.png]] +
-
-
This 'index.html' becomes the entry point of some tiddlywikis managed under git. There is a 'empty.html' in the same folder serving as template for generating new wikis. Please refrain from editing it.
+
+
The Builder takes some MObject/[[Placement]] information (called Timeline) and generates out of this a Render Engine configuration able to render this Objects. It does all decisions and retrieves the current configuration of all objects and plugins, so the Render Engine can just process them stright forward.
+
+The Builder is part of the [[Builder Pattern|http://en.wikipedia.org/wiki/Builder_pattern]]
+
Background: #fefefd
@@ -772,25 +776,85 @@ TertiaryMid: #99a
 TertiaryDark: #667
 Error: #f88
+
+
Here, in the context of the Render Engine, the Controller component is responsible for managing the global playback state, for triggering the build process and for activating the backend and the Render Engine configuration created by the Builder to carry out the actual rendering. So you can expect the Controller to encompass a State Machine.
+
+
RenderEngine
 
-
+
As allways, the main goal is //to cut down complexity// by the usual aproach to separate into small manageable chunks.
 
 To achieve this, here we try to separate ''Configuration'' from ''Processing''. Further, on Configuration we try to separathe the ''high level view'' (users view when editing) from the ''low level view'' (the actual configuration effective for the calculations). And finally, we try to factor out and encapsulate ''State'' in order to make State explicite.
 
 The main tool used to implement this separation is the [[Builder Pattern|http://en.wikipedia.org/wiki/Builder_pattern]]. Here especially we move all decisions and parametrization into the BuildProcess. The Nodes in this Pipeline should process Video/Audio and do nothing else. No more decisions, tests and conditional operations when running the Pipeline. Move all of this out into the configuration of the pipeline, which is done by the Builder. Make the actual processing nodes Template classes, parametrized by the color model and number of components. Make all Nodes of equal footing with each other, able to be connected freely within the limitations of the necessary input and output. Make the OpenGL rendering into alternate implementation of some operations together with an alternate signal flow (usable only if the whole Pipeline can be built up to support this changed signal flow), thus factoring out all the complexities of managing the data flow between core and hardware accelerated rendering out of the implementation of the actual processing. Introduce separate control data connections for the automation data, separating the case of true multi-channel-effects from the case where one node just gets remote controlled by another node (or two nodes using the same automation data).
 
-Another pretinent theme is to make the basic building blocks more simple, while on the other hand gaining much more flexibility for combining these building blocks. For example we try to unfold any "internal-multi" effects into separate instances (e.g. the possibility of having an arbitrary number of single masks at any point of the pipeline instead of having one special masking facility encompassing multiple sub-masks. Similarily, we treat the Objects in the EDL in a more uniform manner and gain the possibility to [[place|Placements]] them in various ways.
+Another pretinent theme is to make the basic building blocks more simple, while on the other hand gaining much more flexibility for combining these building blocks. For example we try to unfold any "internal-multi" effects into separate instances (e.g. the possibility of having an arbitrary number of single masks at any point of the pipeline instead of having one special masking facility encompassing multiple sub-masks. Similarily, we treat the Objects in the EDL in a more uniform manner and gain the possibility to [[place|Placement]] them in various ways. +
''EDL'' is a short-hand for __E__dit __D__ecision __L__ist. The use of this term can be confusing; for the usual meaning see the definition in [[Wikipedia|http://en.wikipedia.org/wiki/Edit_decision_list]]
 
 Cinelerra uses this term in a related manner but with a somewhat shifted focus (and we just stick to this usage here): In Cinelelrra the EDL is comprised of the whole set of clips and other media objects parametrized and placed onto the tracks by the user. It is the result of the user's //editing efforts.//
 
-In this usage, the EDL is almost synonymous to the ''Session'', just the latter emphasizes more the state aspect, as it can be thought as a current state of the EDL contained in a file or data structure together with additional Option values and Sestings for the GUI. The Session is what you save and load, while the EDL rather denotes a structure of Objects placed in time.
+In this usage, the EDL is almost synonymous to the ''Session'', just the latter emphasizes more the state aspect, as it can be thought as a current state of the EDL contained in a file or data structure together with additional Option values and Sestings for the GUI. The Session is what you save and load, while the EDL rather denotes a structure of Objects placed in time. + +
+
+
The &raquo;Timeline&laquo; is a sequence of ~MObjects -- here clips -- together with an ExplicitePlacement, locating each clip at a given time and track. (Note: I simplified the time format and wrote frame numbers to make it more clear)
+[img[Example1: Objects in the EDL/Fixture|uml/fig3.png]]
+
+----
+After beeing processed by the Builder, we get the following Render Engine configuration
+[img[Example1: generated Render Engine|uml/fig9.png]]
+
+
+
+
This Example showes the //high level// EDL as well. This needs to be transformed into a Fixture by some facility still to be designed. Basically, each [[Placement]] needs to be queried for this to get the corresponding ExplicitePlacement. The difficult part is to handle possible Placement constraints, e.g. one clip can't be placed at a timespan covered by another clip on the same track. In the current Cinelerra2, all of this is done directly by the GUI actions.
+
+The &raquo;Timeline&laquo; is a sequence of ~MObjects -- note: using the same Object instances -- but now with the calculated ExplicitePlacement, locating the clip at a given time and track. The effect is located absolutely in time as well, but because it is the same Instance, it has the pointer to the ~RelativePlacement, wich basically attaches the effect to the clip. This structure may look complicated, but is easy to process if we go "backward" and just rely on the information contained in the ExplicitePlacement.
+[img[Example2: Clip with Effect and generated Fixture for this EDL|uml/fig4.png]]
+
+----
+After beeing processed by the Builder, we get a Render Engine configuration.<br>
+It has to be segmented at least at every point with changes in the configuration, but some variations are possible, e.g. we could create a Render Engine for every Frame (as Cinelerra2 does) or we could optimize out some configurations (for example the effect extended beyond the end of the clip)
+[img[Example2: generated Render Engine|uml/fig10.png]]
+
+
+
+
= MObject assembly =
+To make the intended use of the classes more clear, consider the following two example Object graphs:
+* a video clip and a audio clip placed (explicitely) on two tracks &rarr;[[Example1]]
+* a video clip placed relatively, with an attached HUE effect &rarr;[[Example2]]
+
+
+
+
a special ProcNode which is used to pull the finished output of one Render Pipeline (Tree or Graph). This term is already used in the Cinelerra2 codebase. I am unsure at the moment if it is a distinct subclass or rahter a specially configured ProcNode (a general design rule tells us to err in favour of the latter if in doubt).
+
+
+
+
A special kind (subclass) of [[Placement]]. As such it is allways linked to a //Subject//, i.e. a MObject. In addition to the properties of a (unspecific) Placement, the ExplicitePlacement specifies a absoloute time and track position for locating the Subject
+
+
+
+
a specially configured EDL
+ * all MObjects have their position, length and configuration set up ready for rendering.
+ * all MObjects are associated with a ExplicitePlacement
+ * this ~ExplicitePlacements are contained in a ordered List called the Timeline
+
+//My intention is to create this Fixture out of the editing operations done by the user//
+
+
+
+
This term has //two meanings, //so care has to be taken for not confusing them.
+# in general use, a Frame means one full image of a video clip, i.e an array of rows of pixels. For interlaced footage, one Frame contains two halfimages, commonly called Fields. (Cinelerra2 confuses this terms)
+# here in this design, we use Frame as an abstraction for a buffer of raw media data to be processed. If in doubt, we should label this "Dataframe".
+#* one video Dataframe contains a single video frame
+#* one audio Dataframe contains a block of raw audio samples
+#* one OpenGL Dataframe could contain raw texture data (but I am lacking expertise for this topic)
+
/***
@@ -864,6 +928,14 @@ Slider.prototype.stop = function()
 }
 //}}}
+
+
__G__roup __of__ __P__ictures: several compressed video formats don't encode single frames. Normally, such formats are considered mere //delivery formates// but it was one of the key strenghts of Cinelrra from start to be able to do real non linear editing on such formats (like the ~MPEG2-ts unsed in HDV video). The problem of course is that the data backend needs to decode the whole GOP to be serve  single raw video frames.
+
+For this Cinelerra3 design, we could consider making GOP just another raw media data frame type and integrate this decoding into the render pipeline, similar to an effect based on several source frames for every calculated output frame.
+
+&rarr;see in [[Wikipedia|http://en.wikipedia.org/wiki/Group_of_pictures]]
+
+
/***
 ''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''
@@ -1175,12 +1247,28 @@ config.formatters.push( {
 } )
 //}}}
-
-
The MObjects Subsystem contains everything related to the [[EDL]] and the various Media Objects placed within it.
+
+
{{red{killme}}}
+
+
+
All sorts of "things" to be placed and manipulated by the user in the EDL. This interface abstracts the details and just provides
+* a duration
+* a [[Placement]]
+* {{red{and what else?}}}
+
+
+
+
The MObjects Subsystem contains everything related to the [[EDL]] and the various Media Objects placed within it. Examples for [[MObjects|MObject]] being:
+* audio/video clips
+* effects and plugins
+* special facilities like mask and projector
+* [[Automation]] sets
+* labels and other (maybe functional) markup
 
-This Design strives to achieve a StrongSeparation between the low-level Structures used to carry out the actual rendering and the high level Entities living in the EDL and being manipulated by the user. In this high level view, the Objects are grouped and located by [[Placements]], providing a flexible and open way to express different groupings, locations and ordering constraints between the Media Objects.
+This Design strives to achieve a StrongSeparation between the low-level Structures used to carry out the actual rendering and the high level Entities living in the EDL and being manipulated by the user. In this high level view, the Objects are grouped and located by [[Placements|Placement]], providing a flexible and open way to express different groupings, locations and ordering constraints between the Media Objects.
 
-[img[Classess related to the EDL|uml/fig2.png]]
+[img[Classess related to the EDL|uml/fig2.png]] +
''[[Cinelerra3|index.html]]''
@@ -1196,18 +1284,35 @@ This Design strives to achieve a StrongSeparation between the low-level Structur
 
 <style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>My TiddlyWiki</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
-
-
[img[Block Diagram|uml/fig1.png]]
+
+
Cinelerra2 introduced OpenGL support for rendering previews. I must admit, I am very unhappy with this, because
+* it just supports some hardware
+* it makes building difficult
+* it can't handle all color models Cinelerra is capable of
+* it introduces a separate codepath including some complicated copying of video data into the textures (and back?)
+* it can't be used for rendering
+
+So my judgement would be: in contrary to a realtime/gaming application, for quality video editing it is not worth the effort implementing OpenGL support in all details and with all its complexity. I would accept ~OpenGL as an option, if it could be pushed down into a Library, so it can be handled and maintained transparently and doesnt bind our limited developer manpower.
+
+But because I know the opinions on this topc are varying (users tend to be delighted if they hear "~OpenGL", because it carries notion of "fast" and "power" todays) &mdash; I try to integrate ~OpenGL as apossibility into this design of the Render Engine. Obviousely, I have the hard requirement that it //must not jeopardize the code structure.//
+
+My proposed aproach is to treat OpenGL as a separate video raw data type, requiring separete and specialized [[Processing Nodes|ProcNode]] for all calculations. Thus the Builder could connect OpenGL nodes if it is possible to cover the whole render path for preview and fall back to the normal ~ProcNodes for all relevant renders
+
-
-
Render Engine, [[Builder]] and [[Controller]] are closely related Subsystems. Actually, the [[Builder]] //creates// a newly configured Render Engine //for every// RenderProcess. Before doing so, he queries from the Session (or, to be more precise, from the [[Fixture]] within the current Session) all necessary Media Object Placement information. The [[Builder]] then derives from this information the actual assembly of ProcessingNodes comprising the Render Engine. Thus:
- * the source of the build process is a sequence of absolute (explicit) [[Placements]] called the [[Playlist]]
+
+
[img[Block Diagram|uml/fig1.png]]
+
+
+
+
Render Engine, [[Builder]] and [[Controller]] are closely related Subsystems. Actually, the [[Builder]] //creates// a newly configured Render Engine //for every// RenderProcess. Before doing so, he queries from the Session (or, to be more precise, from the [[Fixture]] within the current Session) all necessary Media Object Placement information. The [[Builder]] then derives from this information the actual assembly of [[Processing Nodes|ProcNode]] comprising the Render Engine. Thus:
+ * the source of the build process is a sequence of absolute (explicit) [[Placements|Placement]] called the [[Playlist]]
  * the [[build process|BuildProcess]] is driven, configured and controlled by the [[Controller]] subsystem component. It encompasses the actual playback configuration and State of the System.
- * the resulting Render Engine is a list of [[Processors]], each configured to calculate a segment of the timeline with uniform properties. Each of these Processors in turn is a graph of interconnected ProcessingNodes.
+ * the resulting Render Engine is a list of [[Processors]], each configured to calculate a segment of the timeline with uniform properties. Each of these Processors in turn is a graph of interconnected ProcNode.s.
 
 see also: RenderEntities
 
-[img[Overview: Components of the Renderengine|uml/fig7.png]]
+[img[Overview: Components of the Renderengine|uml/fig7.png]] +
<!--{{{-->
@@ -1236,6 +1341,27 @@ see also: RenderEntities
 <!--}}}-->
 
+
+
A ParamProvider is the counterpart for (one or many) Parameter instances. It implements the value access function made available by the Parameter object to its clients.
+
+To give a concrete example: 
+* a Fade Plugin needs the actual fade value for Frame t=xxx
+* the Plugin has a Parameter Object (from which we could query the information of this parameter beeing a continuous float function)
+* this Parameter Object provides a getValue() function, which is internally linked (i.e. by configuration) to a //Parameter Provider//
+* the actual object implementing the ParamProvider Interface could be a Automation MObject located somewhere in the EDL and would do bezier interpolation on a given keyframe set.
+* while building the Render Engine configuration actually at work, the Builder would have to setup this link between the Plugin Parameter Object and the ParamProvider; he can do so, because he sees the link between the Automation MObject and the corresponding Effect MObject
+
+
+
+
Parameters are all probably variable control values used within the Render Engine. Contrast this with configuration values, which are considered to be fixed and need an internal reset of the application state to take effect.
+
+A ''Parameter Object'' provides a descriptor of the kind of parameter, together with a function used to pull the //actual value// of this parameter. Here, //actual// has a two-fold meaning:
+* if called without a time specification, it is either a global (but variable) system or session parameter or a default value for automated Parameters. (the intention is to treat this cases uniformly)
+* if called with a time specification, it is the query for an &mdash; probably interpolated &mdash; [[Automation]] value at this absolute time. The corresponding ParamProvider should fall back transparently to a default or session value if no time varying data is available
+
+{{red{TODO: define how Automation works}}}
+
+
/***
 |<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
@@ -1734,6 +1860,34 @@ DAMAGE.
 <html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
 ***/
+
+
A Placement represents a //relation:// it is always linked to a //Subject// (this beeing a [[Media Object|MObject]]) and has the meaning to //place// this Subject in some manner, either relatively to other Media Objects, or by some Constraint or simply absolute at (time,track). The latter case is especially important and represented by a special [[Sub-Interface|ExplicitePlacement]]
+
+
+
+
Playlist is the name of a specific facility located in the [[Fixture]] (EDL): It is a ordered list of ExplicitePlacement.s of MObjects. By traversing the Playlist you get at all elements actually to be rendered; the [[Builder]] uses this Playlist to construct actual Render Engine configurations to carry out the calculations.
+
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
a data processing node within the Render Engine. Its key feature is the possibility to pull from it one (freely addressible) [[Frame]] of calculated data. Further, each ~ProcNode has the ability to be wired with other nodes and [[Parameter Providers|ParamProvider]]
+
+
+
+
a given Render Engine configuration is a list of Processors. Each Processor in turn contains a Graph of ProcNode.s to do the acutal data processing. In order to cary out any calculations, the Processor needs to be called with a StateProxy containing the state information for this RenderProcess
+
+
/***
 |''Name:''|RSSReaderPlugin|
@@ -1944,73 +2098,7 @@ config.macros.rssFeedUpdate = {
 //}}}
 
-
-
//last update: RSSReaderPlugin v 1.1.1//
-
-!Description
-This plugin provides a RSSReader for TiddlyWiki
-* It accesses asynchronously an RSSFeed
-*Depending on the chanel item format, each item could be written as :
-**simple text wikified
-**html
-
-!Usage
-{{{
-<<rssReader noDesc|asHtml|asText rssUrl ['filtering string']>>
-	noDesc: only title of item is printed
-
-	asHtml: if you know that description contain html (links, img ...), 
-		the text is enclosed with <html> </html> tags
-
- 	asText: if the description should not be interpreted as html the 
-		description is wikified
-
-	rssUrl: the rssFeed url that could be accessed. 
-	
-	'filtering string': if present, the rssfeed item title must contained 
-		this string to be displayed. 
-		If 'filering string' contained space characters only, the tiddler 
-		title is used for filtering.
-
-}}}
-
-For security reasons, if the TiddlyWiki is accessed from http, a ProxyService should be used to access an rssFeed from an other site.
-
-!examples
-| !reader | !RSSFeed type | !working from |
-| BidiXTWRSS | Description asHtml | file: or tiddlywiki.bidix.info |
-| [[Le Monde]] | Description asText | file: or tiddlywiki.bidix.info using proxy |
-| YahooNewsSport | Description asHtml | file: or tiddlywiki.bidix.info using proxy |
-| TiddlyWikiRSS | Description asHtml | file: or tiddlywiki.bidix.info using proxy |
-| [[Libération]] | noDesc | file: or tiddlywiki.bidix.info using proxy |
-| [[TestComment]] | asText and filters | file: or tiddlywiki.bidix.info using proxy |
-see : <<tag RSSFeed>> for the full list.
-
-!Revision history
-* V1.1.0 (2207/04/13)
-**No more import functions
-* V1.0.0 (2006/11/11)
-**refactoring using core loadRemoteFile function
-**import using new tiddlywiki:tiddler element
-**import and presentation preserved without EricShulman's NestedSliderPlugin
-**better display of items 
-* v0.3.0 (24/08/2006)
-** Filter on RSS item title
-** Place to display redefined for asynchronous processing
-* v0.2.2 (22/08/2006)
-**Haloscan feed has no pubDate.
-* v0.2.1 (08/05/2006)
-* v0.2.0 (01/05/2006)
-**Small adapations for del.icio.us feed
-* v0.1.1 (28/04/2006)
-**Bug : Channel without title 
-* v0.1.0 (24/04/2006)
-** initial release
-
-
-
-
-
+
The Render Engine is the part of the application doing the actual video calculations. Its operations are guided by the Objects and Parameters edited by the user in [[the EDL|EDL]] and it retrieves the raw audio and video data from the [[Data backend|backend.html]]. Because the inner workings of the Render Engine are closely related to the structures used in the EDL, this design covers [[this aspect|MObjects]] as well.
 
 The key idea of Ichthyo's Design-draft is to use the [[Builder Pattern|http://en.wikipedia.org/wiki/Builder_pattern]] for the Render Engine, thus separating completely the //building// of the Render Pipeline from //running,// i.e. doing the actual Render. The Nodes in this Pipeline should process Video/Audio and do nothing else. No more decisions, tests and conditional operations when running the Pipeline. Move all of this out into the configuration of the pipeline, which is done by the Builder.
@@ -2022,37 +2110,59 @@ The design of Cinelerra 2 basically follows this design, but __fails because of
 # far too much back-coupling to the internals of the [[EDL]], forcing a overly rigid structure on the latter
 
 !Try to learn from this
-* build up an NodeAbstraction powerful enough to express //all necessary Operations// without the need to recure on the actual object type
+* build up an [[Node Abstraction|ProcNode]] powerful enough to express //all necessary Operations// without the need to recure on the actual object type
 * need to redesign the internals of the EDL in a far more open manner. See MObjects
 * strive at a StrongSeparation between EDL and Render Engine
 
 !!see also
 &rarr; [[Overview]] of Subsystems and Components, and DesignGoals
-&rarr; [[An Introduction|WalkThrough]] discussing the key features {{red{TODO}}}
+&rarr; [[An Introduction|WalkThrough]] discussing the key features
 &rarr; [[Overview Render Engine|OverviewRenderEngine]]
 &rarr; BuildProcess
 &rarr; RenderProcess
-&rarr; [[Two Examples|Examples]] (Object diagrams) {{red{TODO: write explanation for the drawings in UML}}}
+&rarr; [[Two Examples|Examples]] (Object diagrams) +&rarr; how [[Automation]] works {{red{to be defined}}} +
-
-
The Render Engine only carries out the low-level and performance critical tasks. All configuration and decision concerns are to be handled by [[Builder]] and [[Controller]]. While the actual connection of the Render Nodes can be highly complex, basically each Segment of the Timeline with uniform characteristics is handled by one Processor, which is a graph of ProcessingNodes discharging into a ExitNode. The Render Engine Components as such are //stateless// themselves; for the actual calculations they are combined with a StateProxy object generated by and connected internally to the [[Controller]], while at the same time holding the Data Buffers (Frames) for the actual calculations.
+
+
The Render Engine only carries out the low-level and performance critical tasks. All configuration and decision concerns are to be handled by [[Builder]] and [[Controller]]. While the actual connection of the Render Nodes can be highly complex, basically each Segment of the Timeline with uniform characteristics is handled by one Processor, which is a graph of [[Processing Nodes|ProcNode]] discharging into a ExitNode. The Render Engine Components as such are //stateless// themselves; for the actual calculations they are combined with a StateProxy object generated by and connected internally to the [[Controller]], while at the same time holding the Data Buffers (Frames) for the actual calculations.
 
-[img[Entities comprising the Render Engine|uml/fig8.png]]
+[img[Entities comprising the Render Engine|uml/fig8.png]] +
-
-
''TODO'' describe the Render Process.
+
+
{{red{TODO: describe the Render Process.}}}
 
- * see also the [[Entities invoved in Rendering|RenderEntities]]
+ * see also the [[Entities invoved in Rendering|RenderEntities]] +
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
+
+
{{red{killme}}}
+
some aspects of Cinelerra-3 design
Draft
+
+
{{red{killme}}}
+
/***
 
@@ -2111,6 +2221,26 @@ if (oldText.indexOf("SplashScreen")==-1)
 }
 //}}}
+
+
An Object representing a //Render Process// and containing associated state information.
+* it is created in the Controller subsystem while initiating the BuildProcess
+* it is passed on to the generated Render Engine, which in turn passes it down to the individual Processors
+* moreover, it contains methods to communicate with other state relevant parts of the system, thereby shielding the rendering code from any complexities of Thread communication if necessary. (thus the name Proxy)
+
+
+
+
This design lays great emphasis on separating all those components and subsystems, which are considered not to have a //natural link// of their underlying concepts. This often means putting some additional constraints on the implementation, so basically we need to rely on the actual implementation to live up to this goal. In many cases it may seem to be more natural to "just access the necessary information". But on the long run this coupling of not-directly related components makes the whole codebase monolithic and introduces lots of //accidental complexity.//
+
+Instead, we should try to just connect the various subsystems via Interfaces and &mdash; instead of just using some information, rather use some service to be located on an Interface to query other components for this information. The best aproach of course is allway to avoid the dependency alltogether.
+
+!Examples
+* There is a separation between the __high level [[EDL]] view__ and the [[Fixture]]: the latter only accesses the MObjects and the Placement Interfaces.
+* same holds true for the Builder: it just uses the same Interfaces. The actual coupling is done rather //by type//, i.e. the Builder relies on several types of MObjects to exist and treats them via overloaded methods. He doesn't rely on a actual object structure layout in the EDL besides the requirement of having a [[Playlist]]
+* the Builder itself is a separation layer. Neither do the Objects in the EDL access directly [[Render Nodes|ProcNode]], nor do the latter call back into the EDL. Both connections seem to be necessary at first sight, but both can be avoided by using the Builder Pattern
+* another separation exists between the Render Engine and the individual Nodes: The Render Engine doesn't need to now the details of the data types processed by the Nodes, it relies on the Builder having done the correct connections and just pulles out the calculated results. If there needs to be additional controll information to be passed, then I would prefere to do a direct wiring of separate control connections to specializied components, which in turn could instruct the controller to change the rendering process.
+* to shield the rendering code of all complexities of Thread communication and synchronization, we use the StateProxy
+
+
/*{{{*/
 /* a contrasting background so I can see where one tiddler ends and the other begins */
@@ -3178,6 +3308,18 @@ Portions written by Luke Blanshard are hereby released into the public domain.
 <!--}}}-->
 
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
+
+
{{red{killme}}}
+
/***
 ''TextAreaPlugin for TiddlyWiki version 2.0''
@@ -3305,13 +3447,16 @@ function addKeyDownHandlers(e)
 }
 //}}}
-
+
+
http://tiddlywiki.com/
+
+
The Intention of this text is to help you understanding the design and to show some notable details.
 
 !!!!Starting Point
 Design is an experiment to find out how things are related, we can't //plan// a Design top down, rather we have to start at some point with some hypothesis and look how it works out. The point of origin for Ichthyo's design is the observation that the Render Engine needs some Separation of Concerns to get the complexity down. And especially, this design ''uses three different Levels'' or Layers within the Render Engine and EDL.
-* the __high level__ within the EDL uses uniformely treated MObjects which are assembled/glued together by a network of [[Placements]].<br> It is supposed that the GUI will present this and //only this view //to the user, giving him the ability wo work with this objects
-* the __builder level__ works on a stripped-down subset of this ~MObject network: it uses the //same Object instances// but only assembled by ExplicitePlacements which locate the objects //on a simple (track, time) grid.// Its the job of the builder to create out of this simplified Network the Configuration of [[Render Nodes|ProcNode]] needed to do the actual rendering
+* the __high level__ within the EDL uses uniformely treated MObjects which are assembled/glued together by a network of [[Placements|Placement]].<br> It is supposed that the GUI will present this and //only this view //to the user, giving him the ability wo work with this objects
+* the __builder level__ works on a stripped-down subset of this ~MObject network: it uses the //same Object instances// but only assembled by [[Explicite Placements|ExplicitePlacement]] which locate the objects //on a simple (track, time) grid.// Its the job of the builder to create out of this simplified Network the Configuration of [[Render Nodes|ProcNode]] needed to do the actual rendering
 * the __engine level__ uses solely [[Render Pipeline Nodes|ProcNode]], i.e. a Graph of interconnected processing nodes. The important constraint here is that //any decisions are ruled out//. The core Render Engine with all its nodes is lacking the ability to do any tests and checks and has no possibility to branch or reconfigure anything. (this is an especially important lession I draw from studying the current Cinelerra source code)
 
 !!!!Performance Considerations
@@ -3330,13 +3475,14 @@ This design strives to build each level and subsystem around some central concep
 * and finally, the calculation //process// together with its current state is represented by a StateProxy. I call this a "proxy", because it should encapsulate and hide all tedious details of communication, be it even asychronous communication with some Controller or Dispatcher running in another Thread. In order to maintain a view on the current state of the render process, it could eventually be necessary to register as an observer somewhere or to send notifications to other parts of the system.
 
 !!!!Handling Diversity
-An important goal of this aproach is to be able to push down the treatment of variations and special cases. We don't need to know what kind of Placement linkes one MObject to another, because it is sufficient for us to get an ExplicitePlacement. The Render Engine doesn't need to know if it is pulling audio Frames or video Frames or GOPs or OpenGL textures. It simply relies on the Builder wiring together the correct node types. And the Builder in turn does so by using some overloaded function of an iterator or visitor. There is no need for the video ProcNodes to test for the colormodel on every screen line, because the Data Frame can be a Template parametrized by the colormodel. All of this reduces complexity and quite some misconceptions can be detected alredy by the compiler.
+An important goal of this aproach is to be able to push down the treatment of variations and special cases. We don't need to know what kind of Placement linkes one MObject to another, because it is sufficient for us to get an ExplicitePlacement. The Render Engine doesn't need to know if it is pulling audio Frames or video Frames or GOPs or OpenGL textures. It simply relies on the Builder wiring together the correct node types. And the Builder in turn does so by using some overloaded function of an iterator or visitor. There is no need for the video [[ProcNodes|ProcNode]] to test for the colormodel on every screen line, because the Data Frame can be a Template parametrized by the colormodel. All of this reduces complexity and quite some misconceptions can be detected alredy by the compiler.
 
 !!!!Explicite structural differences
 In case it's not already clear: we don't have "the" Render Engine, rather we construct a Render Engine for each structurally differing part of the timeline. (please relate this to the current Cinelerra code base, which constructs and builds up the render pipeline for each frame separately). No need to call back from within the pipeline to find out if a given plugin is enabled or to see if there are any automation keyframes. So we don't need to pose any constraints on the structuring of the objects in the EDL, besides the requirement to get an ExplicitePlacement for each. We could even loosen the use of the common mataphor of placing media sequences on fixed tracks, if we want to get at a more advanced GUI at some point in the future.
 
 !!!!Stateless Subsystems
-The &raquo;current setup&laquo; of the objects in the EDL is sort of a global state. Same holds true for the Controller, as the Engine can be at playback, it can run a background render or scrub single frames. But the whole complicated subsystem of the Builder and one given Render Engine configuration can be made ''stateless''. As a benifit of this we can run this subsystems multithreaded without the need of any precautions (locking, synchronizing). Because all state information is just passed in as function parameters and lives in local variables on the stack, or is contained in the StateProxy which represents the given render //process// and is passed down as function parameter as well. (note: I use this term in the usual, slightly relaxed manner; of course there are some configuration values contained in instance variables of the objects carying out the calculations, but this values are considered to be constant over the course of the object usage).
+The &raquo;current setup&laquo; of the objects in the EDL is sort of a global state. Same holds true for the Controller, as the Engine can be at playback, it can run a background render or scrub single frames. But the whole complicated subsystem of the Builder and one given Render Engine configuration can be made ''stateless''. As a benifit of this we can run this subsystems multithreaded without the need of any precautions (locking, synchronizing). Because all state information is just passed in as function parameters and lives in local variables on the stack, or is contained in the StateProxy which represents the given render //process// and is passed down as function parameter as well. (note: I use this term in the usual, slightly relaxed manner; of course there are some configuration values contained in instance variables of the objects carying out the calculations, but this values are considered to be constant over the course of the object usage). +