From 1dd998951660734244d39abf024b3d91b674dac1 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sun, 27 Jan 2008 02:39:13 +0100 Subject: [PATCH 1/3] some tweeks to the (scons) build system, using precompiled header --- .gitignore | 1 + SConstruct | 19 +++-- admin/scons/Buildhelper.py | 29 +++++++ src/common/test/run.hpp | 9 ++- src/common/util.hpp | 2 +- src/pre.hpp | 51 +++++++++++++ src/proc/asset.hpp | 2 + src/proc/asset/media.cpp | 1 + src/proc/mobject/mobject.hpp | 2 + src/proc/mobject/placement.hpp | 3 +- src/tool/try.cpp | 75 +++---------------- tests/SConscript | 6 +- tests/components/backend/mediaaccessmock.cpp | 1 - .../backend/mediaaccessmocktest.cpp | 1 - tests/components/common/appconfigtest.cpp | 1 - .../components/common/factoryspecialtest.cpp | 1 - .../common/sanitizedidentifiertest.cpp | 2 - tests/components/common/singletontest.cpp | 1 - .../common/singletontestmocktest.cpp | 1 - .../common/test/cmdlinewrappertest.cpp | 6 +- 20 files changed, 126 insertions(+), 88 deletions(-) create mode 100644 src/pre.hpp diff --git a/.gitignore b/.gitignore index d55b1ba9f..ef277c1a1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.tar.* .[^.]* *.os +*.gch Buildhelper.pyc optcache Makefile.in diff --git a/SConstruct b/SConstruct index 126e40a8d..8c482c9ba 100644 --- a/SConstruct +++ b/SConstruct @@ -65,6 +65,7 @@ def setupBasicEnvironment(): , CCFLAGS='-Wall ' # -fdiagnostics-show-option ) + RegisterPrecompiledHeader_Builder(env) handleNoBugSwitches(env) appendCppDefine(env,'DEBUG','DEBUG', 'NDEBUG') @@ -91,9 +92,13 @@ def appendVal(env,var,targetVar,val=None): def handleNoBugSwitches(env): """ set the build level for NoBug. Release builds imply no DEBUG + wheras ALPHA and BETA require DEBUG """ level = env['BUILDLEVEL'] if level in ['ALPHA', 'BETA']: + if not env['DEBUG']: + print 'NoBug: ALPHA or BETA builds without DEBUG not possible, exiting.' + Exit(1) env.Replace( DEBUG = 1 ) env.Append(CPPDEFINES = 'EBUG_'+level) elif level == 'RELEASE': @@ -128,7 +133,7 @@ def defineCmdlineOptions(): def prepareOptionsHelp(opts,env): prelude = """ -USAGE: scons [-c] [OPTS] [key=val,...] [TARGETS] +USAGE: scons [-c] [OPTS] [key=val [key=val...]] [TARGETS] Build and optionally install Cinelerra. Without specifying any target, just the (re)build target will run. Add -c to the commandline to clean up anything a given target would produce @@ -228,20 +233,23 @@ def defineBuildTargets(env, artifacts): setup sub-environments with special build options if necessary. We use a custom function to declare a whole tree of srcfiles. """ + env.PrecompiledHeader('$SRCDIR/pre') + cinobj = ( srcSubtree(env,'$SRCDIR/backend') + srcSubtree(env,'$SRCDIR/proc') + srcSubtree(env,'$SRCDIR/common') + srcSubtree(env,'$SRCDIR/lib') ) plugobj = srcSubtree(env,'$SRCDIR/plugin', isShared=True) - corelib = env.StaticLibrary('$BINDIR/core.la', cinobj) + core = env.StaticLibrary('$BINDIR/core.la', cinobj) + #core = cinobj - artifacts['cinelerra'] = env.Program('$BINDIR/cinelerra', ['$SRCDIR/main.cpp']+ corelib ) + artifacts['cinelerra'] = env.Program('$BINDIR/cinelerra', ['$SRCDIR/main.cpp']+ core ) artifacts['plugins'] = env.SharedLibrary('$BINDIR/cinelerra-plugin', plugobj) # call subdir SConscript(s) for independent components SConscript(dirs=[SRCDIR+'/tool'], exports='env artifacts') - SConscript(dirs=[TESTDIR], exports='env artifacts corelib') + SConscript(dirs=[TESTDIR], exports='env artifacts core') @@ -257,7 +265,8 @@ def definePostBuildTargets(env, artifacts): allbu = env.Alias('allbuild', build+artifacts['testsuite']) env.Default('build') # additional files to be cleaned when cleaning 'build' - env.Clean ('build', [ 'scache.conf', '.sconf_temp', '.sconsign.dblite', 'config.log']) + env.Clean ('build', [ 'scache.conf', '.sconf_temp', '.sconsign.dblite', 'config.log' ]) + env.Clean ('build', [ '$SRCDIR/pre.gch' ]) # Doxygen documentation # Note: at the moment we only depend on Doxyfile diff --git a/admin/scons/Buildhelper.py b/admin/scons/Buildhelper.py index 81d501424..4ca958d7f 100644 --- a/admin/scons/Buildhelper.py +++ b/admin/scons/Buildhelper.py @@ -90,6 +90,35 @@ def globRootdirs(roots): +def RegisterPrecompiledHeader_Builder(env): + """ Registeres an Custom Builder for generating a precompiled Header + """ + def genCmdline(source, target, env, for_signature): +# mat = re.match(r'(.+)\.gch', target[0]) +# if mat: +# src = mat.group(1)+'.hpp' +# return '%s -x c++-header %s' % (env['CXXCOM'],source[0]) + return '$CXXCOM -x c++-header %s' % source[0] +# return '$CXX $CXXFLAGS $CPPFLAGS -x c++-header %s' % (source[0]) +# else: +# print 'Illegal Precompiled Header name "%s", exiting.' % target[0] +# Exit(1) + def fixSourceDependency(target, source, env): + """ reverse dependency: the source (Header) depends + on the precompiled header binary """ + env.Depends(source[0], target[0]) + print "precompiled header: %s --> %s" % (source[0],target[0]) + return (target, source) + + gchBuilder = env.Builder( generator = genCmdline + , emitter = fixSourceDependency + , suffix = '.gch' + , src_suffix = '.hpp' + ) + env.Append(BUILDERS = {'PrecompiledHeader' : gchBuilder}) + + + def Tarball(env,location,dirs,suffix=''): """ Custom Command: create Tarball of some subdirs location: where to create the tar (optionally incl. filename.tar.gz) diff --git a/src/common/test/run.hpp b/src/common/test/run.hpp index 668f29645..0cee56674 100644 --- a/src/common/test/run.hpp +++ b/src/common/test/run.hpp @@ -25,12 +25,17 @@ #ifndef TESTHELPER_RUN_H #define TESTHELPER_RUN_H -#include -#include +#include "pre.hpp" + + +#include "nobugcfg.h" #include "common/test/suite.hpp" #include "common/util.hpp" +#include +#include + namespace test { diff --git a/src/common/util.hpp b/src/common/util.hpp index 0874f88e9..0e661e707 100644 --- a/src/common/util.hpp +++ b/src/common/util.hpp @@ -29,7 +29,7 @@ #include #include -#include "nobugcfg.h" ///////////////////TODO: just temporarily!!!! +//#include "nobugcfg.h" ///////////////////TODO: just temporarily!!!! namespace util diff --git a/src/pre.hpp b/src/pre.hpp new file mode 100644 index 000000000..af83dd9a2 --- /dev/null +++ b/src/pre.hpp @@ -0,0 +1,51 @@ +/* + PRE.hpp - precompiled header collection + + + Copyright (C) CinelerraCV + 2007, Christian Thaeter + Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file pre.hpp + ** Precompiled Header Collection. + ** Assortment of standard util, error handling and basic lib-boost components, + ** frequently used in conjunction. Precompiling these can speedup building + ** significantly. When used, this header should be included prior to any other + ** headers (and it needs to be compiled by gcc into a "pre.gch" file prior to + ** building the object files including this header). + ** + ** @see mobject.hpp usage example + */ + +#ifndef CINELERRA_PRE_HPP +#define CINELERRA_PRE_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include "cinelerra.h" + + + +#endif /*CINELERRA_PRE_HPP*/ diff --git a/src/proc/asset.hpp b/src/proc/asset.hpp index dabb73039..2e6a1cd6c 100644 --- a/src/proc/asset.hpp +++ b/src/proc/asset.hpp @@ -55,6 +55,8 @@ #define PROC_INTERFACE_ASSET_H +#include "pre.hpp" + #include "proc/asset/category.hpp" #include "common/error.hpp" diff --git a/src/proc/asset/media.cpp b/src/proc/asset/media.cpp index 7f5206836..0dd34936f 100644 --- a/src/proc/asset/media.cpp +++ b/src/proc/asset/media.cpp @@ -21,6 +21,7 @@ * *****************************************************/ +#include "pre.hpp" #include "proc/assetmanager.hpp" #include "proc/asset/media.hpp" #include "proc/asset/clip.hpp" diff --git a/src/proc/mobject/mobject.hpp b/src/proc/mobject/mobject.hpp index b051a49ec..634322470 100644 --- a/src/proc/mobject/mobject.hpp +++ b/src/proc/mobject/mobject.hpp @@ -24,6 +24,8 @@ #ifndef MOBJECT_MOBJECT_H #define MOBJECT_MOBJECT_H +#include "pre.hpp" + #include #include diff --git a/src/proc/mobject/placement.hpp b/src/proc/mobject/placement.hpp index cd2ee06ac..63d96c0fb 100644 --- a/src/proc/mobject/placement.hpp +++ b/src/proc/mobject/placement.hpp @@ -57,7 +57,8 @@ #ifndef MOBJECT_PLACEMENT_H #define MOBJECT_PLACEMENT_H -#include "cinelerra.h" +#include "pre.hpp" + #include "proc/mobject/mobject.hpp" #include "proc/mobject/session/locatingpin.hpp" #include "proc/mobject/session/track.hpp" diff --git a/src/tool/try.cpp b/src/tool/try.cpp index 6aa45243a..349ca7db0 100644 --- a/src/tool/try.cpp +++ b/src/tool/try.cpp @@ -6,87 +6,32 @@ // 8/07 - how to control NOBUG?? // execute with NOBUG_LOG='ttt:TRACE' bin/try // 1/08 - working out a static initialisation problem for Visitor (Tag creation) +// 1/08 - check 64bit longs #include #include +#include + + using std::string; using std::cout; NOBUG_CPP_DEFINE_FLAG(test); - template class Tag; - - - template - class TagTypeRef - { - public: - static Tag tag; - }; - - - template - class Tag - { - size_t tagID; - static size_t lastRegisteredID; - - public: - Tag(size_t tt=0) : tagID(tt) {} - operator size_t() const { return tagID; } - - template - static Tag& - get (TOOLImpl* const concreteTool=0) - { - INFO (test,"getTag"); - Tag& t = TagTypeRef::tag; - if (!t) - t.tagID = ++Tag::lastRegisteredID; - return t; - } - - }; - - - - - /** storage for the Tag registry for each concrete tool */ - template - Tag TagTypeRef ::tag (0); - - template - size_t Tag::lastRegisteredID (0); - - - - - - class TT - { - - }; - - class TI : public TT - { - - }; - class TII : public TT - { - - }; int main (int argc, char* argv[]) { NOBUG_INIT; - size_t xxx = Tag::get(); - - cout << "created Tag=" << xxx <<"\n"; - cout << "created Tag=" << Tag::get () <<"\n"; + int64_t lol (1); + cout << sizeof(lol)<< "\n"; + + cout << "long: "<< std::numeric_limits::max() + <<" 64: " << std::numeric_limits::max() + <<"\n"; return 0; } diff --git a/tests/SConscript b/tests/SConscript index 31bd607e2..7f66b6284 100644 --- a/tests/SConscript +++ b/tests/SConscript @@ -7,7 +7,7 @@ from os import path from Buildhelper import srcSubtree from Buildhelper import globRootdirs -Import('env','artifacts','corelib') +Import('env','artifacts','core') def testExecutable(env,tree, exeName=None, obj=None): @@ -24,7 +24,7 @@ def testExecutable(env,tree, exeName=None, obj=None): obj = srcSubtree(env,tree) # use all sourcefiles found in subtree if not exeName: exeName = 'test-%s' % tree - return env.Program('#$BINDIR/'+exeName, obj + corelib) + return env.Program('#$BINDIR/'+exeName, obj + core) def treatPluginTestcase(env): @@ -38,7 +38,7 @@ def treatPluginTestcase(env): testplugin = ( env.SharedLibrary('#$BINDIR/.libs/example_plugin', oC, SHLIBPREFIX='') + env.SharedLibrary('#$BINDIR/.libs/example_plugin_cpp', oCPP, SHLIBPREFIX='') ) - testExe = env.Program('#$BINDIR/test-plugin', ['plugin/plugin_main.c'] + corelib) + testExe = env.Program('#$BINDIR/test-plugin', ['plugin/plugin_main.c'] + core) env.Depends(testExe, testplugin) return testExe #-- it depentds (at the moment) on a specific isolated test-plugin, diff --git a/tests/components/backend/mediaaccessmock.cpp b/tests/components/backend/mediaaccessmock.cpp index cd87399bb..d980c83d5 100644 --- a/tests/components/backend/mediaaccessmock.cpp +++ b/tests/components/backend/mediaaccessmock.cpp @@ -36,7 +36,6 @@ #include "backend/mediaaccessmock.hpp" #include "common/util.hpp" -#include "nobugcfg.h" #include #include diff --git a/tests/components/backend/mediaaccessmocktest.cpp b/tests/components/backend/mediaaccessmocktest.cpp index 2e4a71ec5..110d2b3cd 100644 --- a/tests/components/backend/mediaaccessmocktest.cpp +++ b/tests/components/backend/mediaaccessmocktest.cpp @@ -26,7 +26,6 @@ #include "common/test/run.hpp" //#include "common/util.hpp" -#include "nobugcfg.h" //#include #include diff --git a/tests/components/common/appconfigtest.cpp b/tests/components/common/appconfigtest.cpp index c76817712..49266c4ae 100644 --- a/tests/components/common/appconfigtest.cpp +++ b/tests/components/common/appconfigtest.cpp @@ -21,7 +21,6 @@ * *****************************************************/ -#include "nobugcfg.h" #include "common/appconfig.hpp" diff --git a/tests/components/common/factoryspecialtest.cpp b/tests/components/common/factoryspecialtest.cpp index 39066d952..e9848c599 100644 --- a/tests/components/common/factoryspecialtest.cpp +++ b/tests/components/common/factoryspecialtest.cpp @@ -26,7 +26,6 @@ #include "common/test/run.hpp" #include "common/util.hpp" -#include "nobugcfg.h" #include #include diff --git a/tests/components/common/sanitizedidentifiertest.cpp b/tests/components/common/sanitizedidentifiertest.cpp index b066ec03c..a6dba2c79 100644 --- a/tests/components/common/sanitizedidentifiertest.cpp +++ b/tests/components/common/sanitizedidentifiertest.cpp @@ -21,8 +21,6 @@ * *****************************************************/ -#include "nobugcfg.h" - #include "common/test/run.hpp" #include "common/util.hpp" diff --git a/tests/components/common/singletontest.cpp b/tests/components/common/singletontest.cpp index 1fa5e0209..ce88d5245 100644 --- a/tests/components/common/singletontest.cpp +++ b/tests/components/common/singletontest.cpp @@ -26,7 +26,6 @@ #include "common/test/run.hpp" #include "common/singleton.hpp" #include "common/util.hpp" -#include "nobugcfg.h" #include #include diff --git a/tests/components/common/singletontestmocktest.cpp b/tests/components/common/singletontestmocktest.cpp index eab73eba6..b33dda5d2 100644 --- a/tests/components/common/singletontestmocktest.cpp +++ b/tests/components/common/singletontestmocktest.cpp @@ -25,7 +25,6 @@ #include "common/test/run.hpp" #include "common/singleton.hpp" #include "common/util.hpp" -#include "nobugcfg.h" #include #include diff --git a/tests/components/common/test/cmdlinewrappertest.cpp b/tests/components/common/test/cmdlinewrappertest.cpp index 4ab8b28be..84b0780c1 100644 --- a/tests/components/common/test/cmdlinewrappertest.cpp +++ b/tests/components/common/test/cmdlinewrappertest.cpp @@ -21,8 +21,6 @@ * *****************************************************/ -#include "nobugcfg.h" - #include "common/test/run.hpp" #include "common/cmdline.hpp" #include "common/util.hpp" @@ -32,7 +30,6 @@ #include -using namespace boost::lambda; using std::cout; @@ -41,6 +38,9 @@ namespace util { namespace test { + using boost::lambda::_1; + using boost::lambda::var; + /** @test for util::Cmdline, wrapping various example cmdlines */ From 43f8faabd19c4045be32c1cf47de22db33397ea2 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sun, 27 Jan 2008 03:11:39 +0100 Subject: [PATCH 2/3] small cleanup --- SConstruct | 9 ++++++--- admin/scons/Buildhelper.py | 14 ++------------ src/common/util.hpp | 1 - 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/SConstruct b/SConstruct index 8c482c9ba..88c5dcb97 100644 --- a/SConstruct +++ b/SConstruct @@ -72,7 +72,7 @@ def setupBasicEnvironment(): appendCppDefine(env,'OPENGL','USE_OPENGL') appendVal(env,'ARCHFLAGS', 'CCFLAGS') # for both C and C++ appendVal(env,'OPTIMIZE', 'CCFLAGS', val=' -O3') - appendVal(env,'DEBUG', 'CCFLAGS', val=' -g') + appendVal(env,'DEBUG', 'CCFLAGS', val=' -ggdb') prepareOptionsHelp(opts,env) opts.Save(OPTIONSCACHEFILE, env) @@ -233,7 +233,6 @@ def defineBuildTargets(env, artifacts): setup sub-environments with special build options if necessary. We use a custom function to declare a whole tree of srcfiles. """ - env.PrecompiledHeader('$SRCDIR/pre') cinobj = ( srcSubtree(env,'$SRCDIR/backend') + srcSubtree(env,'$SRCDIR/proc') @@ -242,7 +241,11 @@ def defineBuildTargets(env, artifacts): ) plugobj = srcSubtree(env,'$SRCDIR/plugin', isShared=True) core = env.StaticLibrary('$BINDIR/core.la', cinobj) - #core = cinobj + #core = cinobj # use this for linking directly + + # use PCH to speed up building + precomp = env.PrecompiledHeader('$SRCDIR/pre') + env.Depends(cinobj, precomp) artifacts['cinelerra'] = env.Program('$BINDIR/cinelerra', ['$SRCDIR/main.cpp']+ core ) artifacts['plugins'] = env.SharedLibrary('$BINDIR/cinelerra-plugin', plugobj) diff --git a/admin/scons/Buildhelper.py b/admin/scons/Buildhelper.py index 4ca958d7f..419de6e68 100644 --- a/admin/scons/Buildhelper.py +++ b/admin/scons/Buildhelper.py @@ -91,22 +91,12 @@ def globRootdirs(roots): def RegisterPrecompiledHeader_Builder(env): - """ Registeres an Custom Builder for generating a precompiled Header + """ Registeres an Custom Builder for generating a precompiled Header. + Note you should define a dependency to the PCH file """ def genCmdline(source, target, env, for_signature): -# mat = re.match(r'(.+)\.gch', target[0]) -# if mat: -# src = mat.group(1)+'.hpp' -# return '%s -x c++-header %s' % (env['CXXCOM'],source[0]) return '$CXXCOM -x c++-header %s' % source[0] -# return '$CXX $CXXFLAGS $CPPFLAGS -x c++-header %s' % (source[0]) -# else: -# print 'Illegal Precompiled Header name "%s", exiting.' % target[0] -# Exit(1) def fixSourceDependency(target, source, env): - """ reverse dependency: the source (Header) depends - on the precompiled header binary """ - env.Depends(source[0], target[0]) print "precompiled header: %s --> %s" % (source[0],target[0]) return (target, source) diff --git a/src/common/util.hpp b/src/common/util.hpp index 0e661e707..101a3ccaf 100644 --- a/src/common/util.hpp +++ b/src/common/util.hpp @@ -29,7 +29,6 @@ #include #include -//#include "nobugcfg.h" ///////////////////TODO: just temporarily!!!! namespace util From 70c5994c72b5ea89b3b1c5f156faa3198124af67 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sun, 3 Feb 2008 05:35:38 +0100 Subject: [PATCH 3/3] Protocol of the 1st official Cin3 developer meeting on IRC --- wiki/index.html | 69 ++++++++++++++++++++++++++++++++++++++++- wiki/renderengine.html | 70 +++++++++++++++++++++--------------------- 2 files changed, 103 insertions(+), 36 deletions(-) diff --git a/wiki/index.html b/wiki/index.html index cfd0de1ef..43202dd25 100755 --- a/wiki/index.html +++ b/wiki/index.html @@ -996,7 +996,14 @@ git push git://git.pipapo.org/cinelerra3/mob cinelerra3/mob is an anonymous account at pipapo.org where everyone can commit changes. -
+
+
We keep a protocol or short summary of each important discussion. The summaries of the monthly developer meetings are posted to the Mailinglist and can be found on pipapo.org too
+
+* [[1.official developer meeting 1.Feb.2008|IRC_2008-02-01]]
+* [[informal developer meeting 10.Aug.2007|IRC_2007-08-10]]
+
+
+
!10/11 aug 2007
 * maybe let the render graph builder generate a meta language which then is ''jit compiled'' for each configuration
 * using smart pointers and factories for objects ''and avoid unprotected use of {{{new}}} and {{{delete}}}'', if this wont work because of cycles, we might investigate specialized garbage collectors for specific cases.
@@ -1025,6 +1032,66 @@ cinelerra3/mob is an anonymous account at pipapo.org where everyone can commit c
 * on the question who decides what to do after a cache miss, we tend to put the decision into the render node (because this seems to be the simpler aproach), but still have to work out the details.
 
+
+
! 1. feb.2008 on #openvideo
+21:00 -23:30 GMT. __Participants__:
+* hermanr
+* cehteh
+* ichthyo
+* Dasypus
+* gmerlin
+* ~SimAV
+* pippin
+* Plough
+* Plouj
+* Velmont
+
+!! Discuss the open points in http://www.pipapo.org/pipawiki/Cinelerra3/DesignProcess &mdash; do we need this formalism?
+At start of the project last summer, Cehteh made a [[design process proposal|http://www.pipapo.org/pipawiki/Cinelerra3/DesignProcess]]. We will keeping this up, not for every implementation detail, but for mayor plans, wishes and design decisions. One point in the agenda of future meetings will be to work through proposals in the queue
+* proposals in the "idea" state are not complete, can be just brainstorming or need further discussion. Comments please to the proposal page.
+* proposals in the "draft" state are ready for conclusive discussion and will be treated in one of the next meetings
+* "final" proposals are either "accepted" or "dropped". We don't differentiate the latter, but should write a short note why it was dropped.
+
+!! The development model
+We employ a distributed model based on GIT. We want this repository to be as complete as possible, including documentation in embedded ~TiddlyWikis and Bug reports. Each dev has its own GIT repo, devs are pulling from each other, they are free to cherry pick and try to make the combined version work. Point is that everyone can clone the git, negotiate with the others what s(he) wants to do, and hack on. Every dev signs off his branch with an standardized signature. For small changes we provide a "Mob GIT", i.e. anonymously pushable git (which is untrusted of course). Cehteh is currently working on a git web frontend which makes the codebase in the mob-repo web-editable like a wiki.
+Will we need a stable version or an official branch?  not yet &mdash; as long as the team is small it will work more painless without. At some point, when the project is more mature, we will define an official branch. Later on we will have automated builds and regression test runs. As we do test-driven development anyways, it's just a question of someone setting up all the infrastructure, then we'll do it.
+Ichthyo proposes a new requirement: All devs should ensure the "master" branch of their respective repositories always passes the compiler and the test suite. ~Work-In-Progress should be done on branches. Rationale: it is sufficient to pull from the master branches, and you can be sure the version you pulled worked for the originator.
+A note on dependencies: it will be hard to target minimal dependencies for such a project, but we shall try not bloat it unnecessarily. Sometimes it can be sensible to rather re-invent a feature &mdash; esp. when it fits into the core focus of the project &mdash; instead of depending on difficult to build and not sufficiently maintained external project. But we should avoid reinventing things like GUI toolkits.
+And, pretty much obvious, we try to stick to modern programming standards. That means, modules have interfaces, interfaces need some (minimal) documentation, and it is not allowed to bypass the interfaces and tangle everything in a wild fashion.
+Currently, the project can be separated into three layers, which could evolve into sub-projects: Backend, ~Proc-Layer, GUI. For each part, the dev most deeply involved and most knowledgeable will take on the sometimes necessary leadership and have the last word in case of quarrels. Currently, Cehteh cares for the Backend and Ichthyo headed for the ~Proc-Layer. We have postponed any work on the GUI for now and don't participate in GUI toolkit discussions. If there is a dev willing to care for the GUI, collect proposals, care for usability and the users needs and finally code it up, then he will the one to decide what toolkit to use.
+We plan to make the discussion about GPL v3 a point on the agenda of the next meeting.
+
+!! Monthly meetings
+* make it thursday, not friday
+* time for now 21:00 GMT &mdash; if some (potential) participants have problems with this time, please speak up (maybe alternating times?)
+* write a short status report for each mayor part //prior// to the meeting (saves us time). Maybe add an TODO list there
+* go through the open issues for the design process drafts
+* publish a protocol of each meeting on the (~Cinelerra-CV, ~LibOpenvideo) Mailinglists, in the TiddlyWiki and on pipapo.org
+* next meeting on first Thursday in March (6.3.2008)
+
+!! Who works on what, what are the short term goals, what tasks are open?
+''Ichthyo'' works on the processing layer. Current goal is to get the core of the builder fleshed out. Next goal is to create a clip object (dummy), add it to the EDL, hand the EDL over to the builder and let the builder make the first (preliminary) render nodes. (note: left many details for later).
+Ichthyo started coding his design draft and things seem to work out as intended. Some Keywords: Have a high-level model and a low level model. The former are the objects in the Session edited by the user, the latter is a network of completely configured render nodes, employing the same pull model as in Cinelerra-2. In between sits the Builder, translating high-level into low-level. This translation is done on demand (not for every frame).
+Current state in this part is: basic asset manager is done, asset objects (forming a hierarchy) can be created and will be registered automatically, it is possible to create a clip-"~MediaObject" from a media asset (without caring for any details regarding multichannel clips). Some support lib components are written, Session and data holders start up on demand and shutdown cleanly. The test suite is the only interesting executable, and this will remain so for quite some time. Currently writing the first parts of the Builder.
+Further plans/ideas: Ichthyo is rather determined to embed a Prolog interpreter (YAP Prolog) to handle all sorts of configuration queries in a rule-driven fashion. Things Ichthyo can't do in the near future: caring for session loading/saving serialisation plus storage backends, caring for a DB based implementation of the asset manager and integration with production support software, target the scheduler which will receive any edit operations initiated from the GUI.
+
+''Cehteh'' is currently working on webgit, which is somewhat related inasmuch it will make small contributions to the mob repository much simpler. Previously he started with some foundation and support facilities. He plans to come back to the Backend implementation in about two weeks. The Backend is intended to handle all media (and even meta-)data as generalized frames. The render nodes network created by the ~Proc-Layer is completely stateless and all data is served from below. While it will be possible to address and access individual data within a frame (e.g. audio samples), frames are the smallest unit for memory and cache management. No plans to use a tiled memory model or to support frames larger than aprox. 20-40% of the available RAM.
+Cehteh's design plan includes a scheduler to organize the access to the raw data, monitor the timings and prefetch data as needed. This scheduler will be configurable via quality preferences ("need realtime", "need perfect quality"). Further, there will be an elaborate caching scheme trying hard to avoid re-rendering any frames already calculated previously. Temporary data will be backed by files and thus swapped out &mdash; this swapout and size of temporary data is to be monitored and adjusted on load &mdash; and all temporary data is kept as most-recent-used cache discipline. Incoming and outgoing footage shall mostly be handled by using mmaped buffers. The rationale is to avoid unnecessary copy from kernel to user space and wasting memory for an additional in-kernel buffer. Writing via a mmapped buffer is little more tricky; there will be a in-place writing which is used for indices and other precalculated data which needs updates, and the processing layer can query write buffers which are actually a small cache/ring and then comited to the file. Basically, mmapping is a clean solution if you can design for it, and it's portable (posix)
+Things to do: object serialisation backend is sometime on Cehteh's schedule, but that's ahead and if someone else helps or takes over it would be OK. Even more true for a DB based backend for the asset manager.
+
+__about multithreading__: since the render nodes are stateless they can be driven in multiple threads (but inter frame dependencies need to be resolved/serialized). Mostly the backend manages threads and does that quite conservatively (compared to Cinelerra-2 which massively creates separate threads for small tasks). Any edit operations initiated from GUI go to a scheduler in the middle layer, which enqueues and effectively serializes operations done to the "media objects" in the high-level model. The editing operations themselves are //not threadsafe // by design, they rely on being scheduled correctly. The builder is triggered from this ~Proc-Layer scheduler and starts in one separate thread, and when done, we swap whole parts of the render nodes network and then the backend can re(start) rendering as needed.
+
+!!The naming discussion
+The discussion looks healthy so far... People can add new proposals on the [[pipawiki|http://www.pipapo.org/pipawiki/Cinelerra3/Names]]. intersting names are still coming in, so we should just let the name-choosing game go on for a while. And, btw, we //can// depart from beeing similar to "Cinelerra" ;-) 
+Let's say, we need a person volonteering to guide/moderate the selection, going over the list and scratching inammprobiate ones. Criteria for good names being:
+* should not be an existing project
+* should be "googeable"
+* should not be offensive
+* should have one of the free top level domains (.net, .org)
+* should be compatible with educational institutions (sorry, no pr0nedit :)
+* should not obviously collide with trade marks
+
+
/***
 ''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''
diff --git a/wiki/renderengine.html b/wiki/renderengine.html
index 8d57363ad..ded8d9eb3 100644
--- a/wiki/renderengine.html
+++ b/wiki/renderengine.html
@@ -42,9 +42,9 @@ DAMAGE.
 
 
 
-
loading Cinelerra Renderengine devel doku ...

Requires Javascript.
+
loading Proc-Layer devel doku ...

Requires Javascript.
- Engine - some aspects of Cinelerra-3 design + Engine - Building a Render Nodes Network from Objects in the EDL