Merge branch 'master' of git://git.lumiera.org/LUMIERA into gui

Conflicts:

	src/gui/panels/timeline-panel.cpp
This commit is contained in:
Joel Holdsworth 2008-09-02 22:58:22 +01:00
commit 4faf561019
146 changed files with 7932 additions and 1423 deletions

4
.gitignore vendored
View file

@ -2,10 +2,11 @@
*~
*.tar.*
.[^.]*
*.o
*.os
*.gch
,valgrind.log*
admin/scons/*.pyc
*.pyc
optcache
Makefile.in
build/*
@ -13,5 +14,6 @@ bin/*
autom4te.cache/*
scripts/*
configure
config.log
aclocal.m4
semantic.cache

View file

@ -21,13 +21,6 @@
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#####################################################################
import sys
sys.path.append("./admin/scons")
import os
from Buildhelper import *
from LumieraEnvironment import *
#-----------------------------------Configuration
OPTIONSCACHEFILE = 'optcache'
@ -37,6 +30,8 @@ BINDIR = 'bin'
TESTDIR = 'tests'
ICONDIR = 'icons'
VERSION = '0.1+pre.01'
TOOLDIR = './admin/scons'
SVGRENDERER = 'admin/render-icon'
#-----------------------------------Configuration
# NOTE: scons -h for help.
@ -46,6 +41,14 @@ VERSION = '0.1+pre.01'
import os
import sys
sys.path.append(TOOLDIR)
from Buildhelper import *
from LumieraEnvironment import *
#####################################################################
@ -56,7 +59,10 @@ def setupBasicEnvironment():
EnsureSConsVersion(0,96,90)
opts = defineCmdlineOptions()
env = LumieraEnvironment(options=opts)
env = LumieraEnvironment(options=opts
,toolpath = [TOOLDIR]
,tools = ["default", "BuilderGCH", "BuilderDoxygen"]
)
env.Append ( CCCOM=' -std=gnu99') # workaround for a bug: CCCOM currently doesn't honor CFLAGS, only CCFLAGS
env.Replace( VERSION=VERSION
@ -68,7 +74,7 @@ def setupBasicEnvironment():
, CCFLAGS='-Wall ' # -fdiagnostics-show-option
)
RegisterPrecompiledHeader_Builder(env)
RegisterIcon_Builder(env,SVGRENDERER)
handleNoBugSwitches(env)
env.Append(CPPDEFINES = '_GNU_SOURCE')
@ -101,8 +107,7 @@ def handleNoBugSwitches(env):
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)
print 'Warning: NoBug ALPHA or BETA builds requires DEBUG=yes, switching DEBUG on!'
env.Replace( DEBUG = 1 )
env.Append(CPPDEFINES = 'EBUG_'+level)
elif level == 'RELEASE':
@ -168,24 +173,21 @@ def configurePlatform(env):
# run all configuration checks in the given env
# Perform checks for prerequisites --------------------------------------------
problems = []
if not conf.TryAction('pkg-config --version > $TARGET')[0]:
print 'We need pkg-config for including library configurations, exiting.'
Exit(1)
problems.append('We need pkg-config for including library configurations, exiting.')
if not conf.CheckLibWithHeader('m', 'math.h','C'):
print 'Did not find math.h / libm, exiting.'
Exit(1)
problems.append('Did not find math.h / libm.')
if not conf.CheckLibWithHeader('dl', 'dlfcn.h', 'C'):
print 'Functions for runtime dynamic loading not available, exiting.'
Exit(1)
problems.append('Functions for runtime dynamic loading not available.')
if not conf.CheckLibWithHeader('nobugmt', 'nobug.h', 'C'):
print 'Did not find NoBug [http://www.pipapo.org/pipawiki/NoBug], exiting.'
Exit(1)
problems.append('Did not find NoBug [http://www.pipapo.org/pipawiki/NoBug].')
if not conf.CheckLibWithHeader('pthread', 'pthread.h', 'C'):
print 'Did not find the pthread lib or pthread.h, exiting.'
problems.append('Did not find the pthread lib or pthread.h.')
else:
conf.env.Append(CPPFLAGS = ' -DHAVE_PTHREAD')
conf.env.Append(CCFLAGS = ' -pthread')
@ -197,49 +199,56 @@ def configurePlatform(env):
conf.env.Append(CPPFLAGS = ' -DHAS_VALGRIND_VALGIND_H')
if not conf.CheckCXXHeader('tr1/memory'):
print 'We rely on the std::tr1 proposed standard extension for shared_ptr.'
Exit(1)
problems.append('We rely on the std::tr1 proposed standard extension for shared_ptr.')
if not conf.CheckCXXHeader('boost/config.hpp'):
print 'We need the C++ boost-lib.'
Exit(1)
problems.append('We need the C++ boost-lib.')
else:
if not conf.CheckCXXHeader('boost/shared_ptr.hpp'):
print 'We need boost::shared_ptr (shared_ptr.hpp).'
Exit(1)
problems.append('We need boost::shared_ptr (shared_ptr.hpp).')
if not conf.CheckLibWithHeader('boost_program_options-mt','boost/program_options.hpp','C++'):
print 'We need boost::program_options (including binary lib for linking).'
Exit(1)
problems.append('We need boost::program_options (including binary lib for linking).')
if not conf.CheckLibWithHeader('boost_regex-mt','boost/regex.hpp','C++'):
print 'We need the boost regular expression lib (incl. binary lib for linking).'
Exit(1)
problems.append('We need the boost regular expression lib (incl. binary lib for linking).')
# if not conf.CheckLibWithHeader('gavl', ['gavlconfig.h', 'gavl/gavl.h'], 'C'):
if not conf.CheckPkgConfig('gavl', 1.0):
print 'Did not find Gmerlin Audio Video Lib [http://gmerlin.sourceforge.net/gavl.html], exiting.'
Exit(1)
problems.append('Did not find Gmerlin Audio Video Lib [http://gmerlin.sourceforge.net/gavl.html].')
else:
conf.env.mergeConf('gavl')
if not conf.CheckPkgConfig('gtkmm-2.4', 2.8):
print 'Unable to configure GTK--, exiting.'
Exit(1)
problems.append('Unable to configure GTK--, exiting.')
if not conf.CheckPkgConfig('glibmm-2.4', '2.16'):
problems.append('Unable to configure Lib glib--, exiting.')
if not conf.CheckPkgConfig('cairomm-1.0', 0.6):
print 'Unable to configure Cairo--, exiting.'
Exit(1)
problems.append('Unable to configure Cairo--, exiting.')
if not conf.CheckPkgConfig('gdl-1.0', '0.6.1'):
print 'Unable to configure the GNOME DevTool Library, exiting.'
Exit(1)
problems.append('Unable to configure the GNOME DevTool Library, exiting.')
if not conf.CheckPkgConfig('xv'): Exit(1)
if not conf.CheckPkgConfig('librsvg-2.0', '2.18.1'):
problems.append('Need rsvg Library for rendering icons.')
if not conf.CheckPkgConfig('xv'): problems.append('Need lib xv')
# if not conf.CheckPkgConfig('xext'): Exit(1)
# if not conf.CheckPkgConfig('sm'): Exit(1)
#
# obviously not needed?
# report missing dependencies
if problems:
print "*** unable to build due to the following problems:"
for isue in problems:
print " * %s" % isue
print
print "build aborted."
Exit(1)
print "** Gathered Library Info: %s" % conf.env.libInfo.keys()
@ -269,6 +278,10 @@ 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.
"""
# use PCH to speed up building
# env['GCH'] = ( env.PrecompiledHeader('$SRCDIR/pre.hpp')
# + env.PrecompiledHeader('$SRCDIR/pre_a.hpp')
# )
objback = srcSubtree(env,'$SRCDIR/backend')
objproc = srcSubtree(env,'$SRCDIR/proc')
@ -281,27 +294,29 @@ def defineBuildTargets(env, artifacts):
+ env.StaticLibrary('$BINDIR/lumi.la', objlib)
)
# use PCH to speed up building
precomp = ( env.PrecompiledHeader('$SRCDIR/pre')
+ env.PrecompiledHeader('$SRCDIR/pre_a')
)
env.Depends(objproc, precomp)
env.Depends(objlib, precomp)
artifacts['lumiera'] = env.Program('$BINDIR/lumiera', ['$SRCDIR/main.cpp']+ core )
artifacts['plugins'] = env.SharedLibrary('$BINDIR/lumiera-plugin', objplug)
# the Lumiera GTK GUI
envgtk = env.Clone().mergeConf(['gtkmm-2.4','cairomm-1.0','gdl-1.0','xv','xext','sm'])
envgtk = env.Clone().mergeConf(['gtkmm-2.4','cairomm-1.0','gdl-1.0','librsvg-2.0','xv','xext','sm'])
objgui = srcSubtree(envgtk,'$SRCDIR/gui')
# render and install Icons
vector_icon_dir = env.subst('$ICONDIR/svg')
prerendered_icon_dir = env.subst('$ICONDIR/prerendered')
artifacts['icons'] = ( [env.IconRender(f) for f in scanSubtree(vector_icon_dir, ['*.svg'])]
+ [env.IconCopy(f) for f in scanSubtree(prerendered_icon_dir, ['*.png'])]
)
artifacts['lumigui'] = ( envgtk.Program('$BINDIR/lumigui', objgui + core)
+ env.Install('$BINDIR', env.Glob('$ICONDIR/*.png'))
+ env.Install('$BINDIR', env.Glob('$SRCDIR/gui/*.rc'))
+ artifacts['icons']
)
# call subdir SConscript(s) for independent components
SConscript(dirs=[SRCDIR+'/tool'], exports='env artifacts core')
SConscript(dirs=['admin'], exports='env envgtk artifacts core')
SConscript(dirs=[TESTDIR], exports='env artifacts core')
@ -321,16 +336,9 @@ def definePostBuildTargets(env, artifacts):
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
# obviousely, we should depend on all sourcefiles
# real Doxygen builder for scons is under developement for 0.97
# so for the moment I prefere not to bother
doxyfile = File('doc/devel/Doxyfile')
env.NoClean(doxyfile)
doxydoc = artifacts['doxydoc'] = [ Dir('doc/devel/html'), Dir('doc/devel/latex') ]
env.Command(doxydoc, doxyfile, "doxygen Doxyfile 2>&1 |tee ,doxylog", chdir='doc/devel')
env.Clean ('doc/devel', doxydoc + ['doc/devel/,doxylog'])
doxydoc = artifacts['doxydoc'] = env.Doxygen('doc/devel/Doxyfile')
env.Alias ('doxydoc', doxydoc)
env.Clean ('doxydoc', doxydoc + ['doc/devel/,doxylog','doc/devel/warnings.txt'])
def defineInstallTargets(env, artifacts):

17
admin/SConscript Normal file
View file

@ -0,0 +1,17 @@
# -*- python -*-
##
## SConscript - SCons buildscript for helper tools (called by SConstruct)
##
Import('env','envgtk','artifacts','core')
vgsuppr = env.Program('#$BINDIR/vgsuppression',['vgsuppression.c']+core)
rsvg = envgtk.Program('#$BINDIR/rsvg-convert','rsvg-convert.c')
artifacts['tools'] += [ vgsuppr ## for supressing false valgrind alarms
+ rsvg ## for rendering SVG icons (uses librsvg)
]
# Rendering the SVG Icons depends on rsvg-convert
env.Depends(artifacts['icons'], rsvg)

View file

@ -68,7 +68,7 @@ def parsePlateLayer( layer ):
return rectangles
def parseSVG( file_path ):
print "Rendering " + file_path
print "Parsing " + file_path
svgdoc = minidom.parse(file_path)
for root_node in svgdoc.childNodes:
if root_node.nodeType == minidom.Node.ELEMENT_NODE:
@ -104,6 +104,9 @@ def renderSvgRsvg(file_path, out_dir, artwork_name, rectangle, doc_size):
# Prepare a Cairo context
width = int(rectangle[2])
height = int(rectangle[3])
if not os.path.exists(rsvgPath):
print "Error: executable %s not found." % rsvgPath
os.spawnlp(os.P_WAIT, rsvgPath, rsvgPath,
"--source-rect=%g:%g:%g:%g" % (rectangle[0], rectangle[1], rectangle[2], rectangle[3]),
@ -115,6 +118,13 @@ def renderSvgIcon(file_path, out_dir):
for rectangle in rectangles:
renderSvgRsvg(file_path, out_dir, artwork_name, rectangle, doc_size)
def getTargetNames(file_path):
"""get a list of target names to be rendered from the given source SVG
usable to setup the build targets for SCons
"""
artwork_name, _ , rectangles = parseSVG(file_path)
return ["%gx%g/%s.png" % (rectangle[2], rectangle[3], artwork_name) for rectangle in rectangles ]
#def renderSvgIcons():
# listing = os.listdir(svgDir)
# for file_path in listing:
@ -129,7 +139,8 @@ def renderSvgIcon(file_path, out_dir):
# copyMergeDirectory(src_dir, list_item)
def printHelp():
print "render-icon.py - An icon rendering utility script for lumiera"
print "render-icon.py SRCFILE.svg TARGETDIR"
print "An icon rendering utility script for lumiera"
def parseArguments(argv):
optlist, args = getopt.getopt(argv, "")

View file

@ -0,0 +1,230 @@
# -*- python -*-
##
## BuilderDoxygen.py - SCons builder for generating Doxygen documentation
##
#
# Astxx, the Asterisk C++ API and Utility Library.
# Copyright (C) 2005, 2006 Matthew A. Nicholson
# Copyright (C) 2006 Tim Blechmann
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1 as published by the Free Software Foundation.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, see http://www.gnu.org/licenses/
#####################################################################
# history: 8/2008 adapted for Lumiera build system
# added patch for Doxyfile in subdirectory
# see http://www.scons.org/wiki/DoxygenBuilder
import os
import os.path
import glob
from fnmatch import fnmatch
def DoxyfileParse(file_contents):
"""
Parse a Doxygen source file and return a dictionary of all the values.
Values will be strings and lists of strings.
"""
data = {}
import shlex
lex = shlex.shlex(instream = file_contents, posix = True)
lex.wordchars += "*+./-:"
lex.whitespace = lex.whitespace.replace("\n", "")
lex.escape = ""
lineno = lex.lineno
token = lex.get_token()
key = token # the first token should be a key
last_token = ""
key_token = False
next_key = False
new_data = True
def append_data(data, key, new_data, token):
if new_data or len(data[key]) == 0:
data[key].append(token)
else:
data[key][-1] += token
while token:
if token in ['\n']:
if last_token not in ['\\']:
key_token = True
elif token in ['\\']:
pass
elif key_token:
key = token
key_token = False
else:
if token == "+=":
if not data.has_key(key):
data[key] = list()
elif token == "=":
data[key] = list()
else:
append_data( data, key, new_data, token )
new_data = True
last_token = token
token = lex.get_token()
if last_token == '\\' and token != '\n':
new_data = False
append_data( data, key, new_data, '\\' )
# compress lists of len 1 into single strings
for (k, v) in data.items():
if len(v) == 0:
data.pop(k)
# items in the following list will be kept as lists and not converted to strings
if k in ["INPUT", "FILE_PATTERNS", "EXCLUDE_PATTERNS"]:
continue
if len(v) == 1:
data[k] = v[0]
return data
def DoxySourceScan(node, env, path):
"""
Doxygen Doxyfile source scanner. This should scan the Doxygen file and add
any files used to generate docs to the list of source files.
"""
default_file_patterns = [
'*.c', '*.cc', '*.cxx', '*.cpp', '*.c++', '*.java', '*.ii', '*.ixx',
'*.ipp', '*.i++', '*.inl', '*.h', '*.hh ', '*.hxx', '*.hpp', '*.h++',
'*.idl', '*.odl', '*.cs', '*.php', '*.php3', '*.inc', '*.m', '*.mm',
'*.py',
]
default_exclude_patterns = [
'*~',
]
sources = []
data = DoxyfileParse(node.get_contents())
if data.get("RECURSIVE", "NO") == "YES":
recursive = True
else:
recursive = False
file_patterns = data.get("FILE_PATTERNS", default_file_patterns)
exclude_patterns = data.get("EXCLUDE_PATTERNS", default_exclude_patterns)
#
# We're running in the top-level directory, but the doxygen
# configuration file is in the same directory as node; this means
# that relative pathnames in node must be adjusted before they can
# go onto the sources list
conf_dir = os.path.dirname(str(node))
for node in data.get("INPUT", []):
if not os.path.isabs(node):
node = os.path.join(conf_dir, node)
if os.path.isfile(node):
sources.append(node)
elif os.path.isdir(node):
if recursive:
for root, dirs, files in os.walk(node):
for f in files:
filename = os.path.join(root, f)
pattern_check = reduce(lambda x, y: x or bool(fnmatch(filename, y)), file_patterns, False)
exclude_check = reduce(lambda x, y: x and fnmatch(filename, y), exclude_patterns, True)
if pattern_check and not exclude_check:
sources.append(filename)
else:
for pattern in file_patterns:
sources.extend(glob.glob("/".join([node, pattern])))
sources = map( lambda path: env.File(path), sources )
return sources
def DoxySourceScanCheck(node, env):
"""Check if we should scan this file"""
return os.path.isfile(node.path)
def DoxyEmitter(source, target, env):
"""Doxygen Doxyfile emitter"""
# possible output formats and their default values and output locations
output_formats = {
"HTML": ("YES", "html"),
"LATEX": ("YES", "latex"),
"RTF": ("NO", "rtf"),
"MAN": ("NO", "man"),
"XML": ("NO", "xml"),
}
data = DoxyfileParse(source[0].get_contents())
targets = []
out_dir = data.get("OUTPUT_DIRECTORY", ".")
# add our output locations
for (k, v) in output_formats.items():
if data.get("GENERATE_" + k, v[0]) == "YES":
targets.append(env.Dir( os.path.join(out_dir, data.get(k + "_OUTPUT", v[1]))) )
# don't clobber targets
for node in targets:
env.Precious(node)
# set up cleaning stuff
for node in targets:
env.Clean(node, node)
return (targets, source)
def generate(env):
"""
Add builders and construction variables for the
Doxygen tool. This is currently for Doxygen 1.4.6.
"""
doxyfile_scanner = env.Scanner(
DoxySourceScan,
"DoxySourceScan",
scan_check = DoxySourceScanCheck,
)
import SCons.Builder
doxyfile_builder = SCons.Builder.Builder(
action = "cd ${SOURCE.dir} && (${DOXYGEN} ${SOURCE.file} 2>&1 |tee ,doxylog)",
emitter = DoxyEmitter,
target_factory = env.fs.Entry,
single_source = True,
source_scanner = doxyfile_scanner,
)
env.Append(BUILDERS = {
'Doxygen': doxyfile_builder,
})
env.AppendUnique(
DOXYGEN = 'doxygen',
)
def exists(env):
"""
Make sure doxygen exists.
"""
return env.Detect("doxygen")

110
admin/scons/BuilderGCH.py Normal file
View file

@ -0,0 +1,110 @@
# -*- python -*-
##
## BuilderGCH.py - SCons builder for gcc's precompiled headers
##
# Copyright (C) scons.org/wiki/GchBuilder
# 2006 Tim Blechmann
# 2008 Hermann Vosseler <Ichthyostega@web.de>
#
# 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, see http://www.gnu.org/licenses/
#####################################################################
# history: 8/2008 adapted for Lumiera build system
# changed to accept a list of precompiled header defs
from types import ListType
import SCons.Action
import SCons.Builder
import SCons.Scanner.C
import SCons.Util
import SCons.Script
SCons.Script.EnsureSConsVersion(0,96,92)
GchAction = SCons.Action.Action('$GCHCOM', '$GCHCOMSTR')
GchShAction = SCons.Action.Action('$GCHSHCOM', '$GCHSHCOMSTR')
def gen_suffix(env, sources):
return sources[0].get_suffix() + env['GCHSUFFIX']
GchShBuilder = SCons.Builder.Builder(action = GchShAction,
source_scanner = SCons.Scanner.C.CScanner(),
suffix = gen_suffix)
GchBuilder = SCons.Builder.Builder(action = GchAction,
source_scanner = SCons.Scanner.C.CScanner(),
suffix = gen_suffix)
def setup_dependency(target,source,env, key):
scanner = SCons.Scanner.C.CScanner()
path = scanner.path(env)
deps = scanner(source[0], env, path)
if env.has_key(key) and env[key]:
for header in env[key]:
header_path = header.path.strip('.gch')
if header_path in [x.path for x in deps]:
print "Precompiled header(%s) %s \t <--- %s" % (key,header_path,source[0])
env.Depends(target, header)
def static_pch_emitter(target,source,env):
SCons.Defaults.StaticObjectEmitter( target, source, env )
setup_dependency(target,source,env, key='GCH')
return (target, source)
def shared_pch_emitter(target,source,env):
SCons.Defaults.SharedObjectEmitter( target, source, env )
setup_dependency(target,source,env, key='GCH-sh')
return (target, source)
def generate(env):
"""
Add builders and construction variables for the Gch builder.
"""
env.Append(BUILDERS = {
'gch': env.Builder(
action = GchAction,
target_factory = env.fs.File,
),
'gchsh': env.Builder(
action = GchShAction,
target_factory = env.fs.File,
),
})
try:
bld = env['BUILDERS']['GCH']
bldsh = env['BUILDERS']['GCH-sh']
except KeyError:
bld = GchBuilder
bldsh = GchShBuilder
env['BUILDERS']['PrecompiledHeader'] = bld
env['BUILDERS']['PrecompiledHeaderShared'] = bldsh
env['GCHCOM'] = '$CXX -o $TARGET -x c++-header -c $CXXFLAGS $_CCCOMCOM $SOURCE'
env['GCHSHCOM'] = '$CXX -o $TARGET -x c++-header -c $SHCXXFLAGS $_CCCOMCOM $SOURCE'
env['GCHSUFFIX'] = '.gch'
for suffix in SCons.Util.Split('.c .C .cc .cxx .cpp .c++'):
env['BUILDERS']['StaticObject'].add_emitter( suffix, static_pch_emitter )
env['BUILDERS']['SharedObject'].add_emitter( suffix, shared_pch_emitter )
def exists(env):
return env.Detect('g++')

View file

@ -28,6 +28,8 @@ import fnmatch
import re
import tarfile
from SCons.Action import Action
#
@ -58,13 +60,13 @@ def srcSubtree(env,tree,isShared=False,builder=None, **args):
else:
builder = lambda f: env.Object(f, **args)
return [builder(f) for f in scanSrcSubtree(root)]
return [builder(f) for f in scanSubtree(root)]
SRCPATTERNS = ['*.c','*.cpp','*.cc']
def scanSrcSubtree(roots):
def scanSubtree(roots, patterns=SRCPATTERNS):
""" first expand (possible) wildcards and filter out non-dirs.
Then scan the given subtree for source filesnames
(python generator function)
@ -73,7 +75,7 @@ def scanSrcSubtree(roots):
for (dir,_,files) in os.walk(root):
if dir.startswith('./'):
dir = dir[2:]
for p in SRCPATTERNS:
for p in patterns:
for f in fnmatch.filter(files, p):
yield os.path.join(dir,f)
@ -102,22 +104,50 @@ def filterNodes(nlist, removeName=None):
return filter(predicate, nlist)
def RegisterPrecompiledHeader_Builder(env):
""" 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):
return '$CXXCOM -x c++-header %s' % source[0]
def fixSourceDependency(target, source, env):
print "precompiled header: %s --> %s" % (source[0],target[0])
return (target, source)
def getDirname(dir):
""" extract directory name without leading path """
dir = os.path.realpath(dir)
if not os.path.isdir(dir):
dir,_ = os.path.split(dir)
_, name = os.path.split(dir)
return name
gchBuilder = env.Builder( generator = genCmdline
, emitter = fixSourceDependency
, suffix = '.gch'
, src_suffix = '.hpp'
)
env.Append(BUILDERS = {'PrecompiledHeader' : gchBuilder})
def RegisterIcon_Builder(env, renderer):
""" Registeres Custom Builders for generating and installing Icons.
Additionally you need to build the tool (rsvg-convert.c)
used to generate png from the svg source using librsvg.
"""
renderer = __import__(renderer) # load python script for invoking the render
renderer.rsvgPath = env.subst("$BINDIR/rsvg-convert")
def invokeRenderer(target, source, env):
source = str(source[0])
targetdir = env.subst("$BINDIR")
renderer.main([source,targetdir])
return 0
def createIconTargets(target,source,env):
""" parse the SVG to get the target file names """
source = str(source[0])
targetdir = os.path.basename(str(target[0]))
targetfiles = renderer.getTargetNames(source) # parse SVG
return (["$BINDIR/%s" % name for name in targetfiles], source)
def IconCopy(env, source):
"""Copy icon to corresponding icon dir. """
subdir = getDirname(source)
return env.Install("$BINDIR/%s" % subdir, source)
buildIcon = env.Builder( action = Action(invokeRenderer, "rendering Icon: $SOURCE --> $TARGETS")
, single_source = True
, emitter = createIconTargets
)
env.Append(BUILDERS = {'IconRender' : buildIcon})
env.AddMethod(IconCopy)

View file

@ -22,7 +22,8 @@
#####################################################################
from SCons.SConf import SConf
import SCons
import SCons.SConf
from SCons.Environment import Environment
from Buildhelper import *
@ -77,17 +78,34 @@ class LumieraEnvironment(Environment):
return libInfo
def Glob (self, pattern):
""" temporary workaround; newer versions of SCons provide this as a global function
"""
""" temporary workaround; newer versions of SCons provide this as a global function """
pattern = self.subst(pattern)
return glob.glob(pattern)
def AddMethod (self, function):
""" temporary workaround; newer versions of SCons provide this as a global function """
self.__dict__[function.__name__] = function.__get__(self)
#### temporary pre 1.0 SCons compatibility hack ####
_ver = map(int, SCons.__version__.split('.'))
_old = (_ver[0]<1 and _ver[1]<98)
if _old:
ConfigBase = SCons.SConf.SConf
else:
ConfigBase = SCons.SConf.SConfBase
del LumieraEnvironment.Glob
del LumieraEnvironment.AddMethod
# use the official impl present since SCons 0.98
# use the new name of the config context base class
class LumieraConfigContext(SConf):
class LumieraConfigContext(ConfigBase):
""" Extends the SCons Configure context with some convenience methods
"""
def __init__(self, *args,**kw):
SConf.__init__(self,*args,**kw)
ConfigBase.__init__(self,*args,**kw)
def CheckPkgConfig (self, libID, minVersion=0):
print "Checking for library configuration: %s " % libID

3
doc/devel/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
,doxylog
warnings.txt
html/*

View file

@ -5,7 +5,7 @@
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = Lumiera
PROJECT_NUMBER = 3.0+alpha
PROJECT_NUMBER = 0.1+pre
OUTPUT_DIRECTORY =
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = English
@ -32,7 +32,7 @@ SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
DETAILS_AT_TOP = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
@ -65,8 +65,8 @@ CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
@ -179,7 +179,7 @@ HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_FEEDNAME = "Lumiera Doxygen docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
HTML_DYNAMIC_SECTIONS = NO
CHM_FILE =

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 153 KiB

View file

@ -16,7 +16,7 @@
<!-- ============================================================= -->
<a name="refclass132741"></a>
<p>Declaration :</p><ul><li>C++ : class State </li><li>Java : public interface State </li></ul><p>Directly inherited by : <a href="class143493.html#refclass143493"><b>InvocationStateBase</b></a> <a href="class142597.html#refclass142597"><b>StateAdapter</b></a> <a href="class142469.html#refclass142469"><b>StateProxy</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class State </li><li>Java : public interface State </li></ul><p>Directly inherited by : <a href="class142597.html#refclass142597"><b>StateAdapter</b></a> <a href="class142469.html#refclass142469"><b>StateProxy</b></a> </p>
<p>Artifact : <a href="index.html#refartifact130949"><b>stateproxy</b></a>, Component(s) : <a href="index.html#refcomponent128005"><b>Builder</b></a></p><div class="sub">
<a name="refrelation135941"></a>
<table><tr><td><div class="element">Relation <b>currFrame (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # currFrame : <a href="class133253.html#refclass133253"><b>Frame</b></a></li><li>C++ : protected: <a href="class133253.html#refclass133253"><b>Frame</b></a> * currFrame</li></ul><a name="refoperation135813"></a>

View file

@ -16,9 +16,8 @@
<!-- ============================================================= -->
<a name="refclass142469"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;class WIRING, class POLICY&gt; class StateProxy : public <a href="class132741.html#refclass132741"><b>State</b></a>, public <a href="class143877.html#refclass143877"><b>InPlace</b></a> </li></ul><div class="sub">
<a name="refrelation154117"></a>
<table><tr><td><div class="element">Relation <b>wiring (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # wiring : <a href="class144005.html#refclass144005"><b>WiringTable</b></a>, multiplicity : 1</li><li>C++ : protected: const <a href="class144005.html#refclass144005"><b>WiringTable</b></a>* wiring</li></ul></div>
<p>Declaration :</p><ul><li>C++ : class StateProxy : public <a href="class132741.html#refclass132741"><b>State</b></a> </li></ul><div class="sub">
</div>
<p>All public operations : <a href="class132741.html#refoperation135941"><b>allocateBuffer</b></a> , <a href="class132741.html#refoperation135813"><b>fetch</b></a> , <a href="class132741.html#refoperation136325"><b>isCalculated</b></a> , <a href="class132741.html#refoperation136197"><b>releaseBuffer</b></a> </p>
</body>
</html>

View file

@ -17,5 +17,9 @@
<a name="refclass142725"></a>
<p>Declaration :</p><ul><li>C++ : class WiringDescriptor </li></ul><p>Directly inherited by : <a href="class143365.html#refclass143365"><b>NodeWiring</b></a> </p>
<div class="sub">
<a name="refoperation136453"></a>
<table><tr><td><div class="element">Operation <b>callDown</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + callDown(inout : <a href="class132741.html#refclass132741"><b>State</b></a>, in requiredOutput : uint) : , exceptions : <a href="class144133.html#refclass144133"><b>BuffHandle</b></a></li><li>C++ : public: virtual callDown () throw (<a href="class144133.html#refclass144133"><b>BuffHandle</b></a>)</li></ul></div>
<p>All public operations : <a href="class142725.html#refoperation136453"><b>callDown</b></a> </p>
</body>
</html>

View file

@ -16,7 +16,13 @@
<!-- ============================================================= -->
<a name="refclass143365"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;class STATE&gt; class NodeWiring : public <a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a> </li></ul><div class="sub">
</div>
<p>Declaration :</p><ul><li>C++ : template&lt;class CONF&gt; class NodeWiring : public <a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a> </li></ul><div class="sub">
<a name="refrelation156165"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144517.html#refclass144517"><b>Strategy</b></a></li><li>C++ : protected: <a href="class144517.html#refclass144517"><b>Strategy</b></a>* </li></ul><a name="refrelation156421"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144517.html#refclass144517"><b>Strategy</b></a></li><li>C++ : protected: <a href="class144517.html#refclass144517"><b>Strategy</b></a>* </li></ul><a name="refrelation156677"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144517.html#refclass144517"><b>Strategy</b></a></li><li>C++ : protected: <a href="class144517.html#refclass144517"><b>Strategy</b></a>* </li></ul><a name="refrelation156933"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144261.html#refclass144261"><b>Invocation</b></a></li><li>C++ : protected: <a href="class144261.html#refclass144261"><b>Invocation</b></a>* </li></ul><a name="refoperation136581"></a>
<table><tr><td><div class="element">Operation <b>callDown</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + callDown() : </li><li>C++ : public: callDown () </li></ul></div>
<p>All public operations : <a href="class143365.html#refoperation136581"><b>callDown</b></a> , <a href="class142725.html#refoperation136453"><b>callDown</b></a> </p>
</body>
</html>

View file

@ -4,21 +4,18 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class InvocationStateBase</title>
<title>Class OperationBase</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class InvocationStateBase</div>
<div class = "title">Class OperationBase</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass143493"></a>
<p>Declaration :</p><ul><li>C++ : class InvocationStateBase : public <a href="class132741.html#refclass132741"><b>State</b></a> </li></ul><p>Directly inherited by : <a href="class143621.html#refclass143621"><b>Caching</b></a> </p>
<div class="sub">
</div>
<p>All public operations : <a href="class132741.html#refoperation135941"><b>allocateBuffer</b></a> , <a href="class132741.html#refoperation135813"><b>fetch</b></a> , <a href="class132741.html#refoperation136325"><b>isCalculated</b></a> , <a href="class132741.html#refoperation136197"><b>releaseBuffer</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class OperationBase </li></ul><p>Directly inherited by : <a href="class144645.html#refclass144645"><b>FeedCache</b></a> <a href="class144389.html#refclass144389"><b>ProcessData</b></a> <a href="class143877.html#refclass143877"><b>ReadSource</b></a> </p>
</body>
</html>

View file

@ -4,21 +4,20 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class Caching</title>
<title>Class QueryCache</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class Caching</div>
<div class = "title">Class QueryCache</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass143621"></a>
<p>Declaration :</p><ul><li>C++ : class Caching : public <a href="class143493.html#refclass143493"><b>InvocationStateBase</b></a> </li></ul><p>Directly inherited by : <a href="class143749.html#refclass143749"><b>Process</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class QueryCache : public <a href="class143749.html#refclass143749"><b>PullInput</b></a> </li></ul><p>Directly inherited by : <a href="class144517.html#refclass144517"><b>Strategy</b></a> </p>
<div class="sub">
</div>
<p>All public operations : <a href="class132741.html#refoperation135941"><b>allocateBuffer</b></a> , <a href="class132741.html#refoperation135813"><b>fetch</b></a> , <a href="class132741.html#refoperation136325"><b>isCalculated</b></a> , <a href="class132741.html#refoperation136197"><b>releaseBuffer</b></a> </p>
</body>
</html>

View file

@ -4,21 +4,21 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class Process</title>
<title>Class PullInput</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class Process</div>
<div class = "title">Class PullInput</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass143749"></a>
<p>Declaration :</p><ul><li>C++ : class Process : public <a href="class143621.html#refclass143621"><b>Caching</b></a> </li></ul><p>Directly inherited by : <a href="class143877.html#refclass143877"><b>InPlace</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class PullInput : public <a href="class144389.html#refclass144389"><b>ProcessData</b></a> </li></ul><p>Directly inherited by : <a href="class143621.html#refclass143621"><b>QueryCache</b></a> <a href="class144517.html#refclass144517"><b>Strategy</b></a> </p>
<div class="sub">
</div>
<p>All public operations : <a href="class132741.html#refoperation135941"><b>allocateBuffer</b></a> , <a href="class132741.html#refoperation135813"><b>fetch</b></a> , <a href="class132741.html#refoperation136325"><b>isCalculated</b></a> , <a href="class132741.html#refoperation136197"><b>releaseBuffer</b></a> </p>
<a name="refrelation158085"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144389.html#refclass144389"><b>ProcessData</b></a></li><li>C++ : protected: <a href="class144389.html#refclass144389"><b>ProcessData</b></a>* </li></ul></div>
</body>
</html>

View file

@ -4,21 +4,20 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class InPlace</title>
<title>Class ReadSource</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class InPlace</div>
<div class = "title">Class ReadSource</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass143877"></a>
<p>Declaration :</p><ul><li>C++ : class InPlace : public <a href="class143749.html#refclass143749"><b>Process</b></a> </li></ul><p>Directly inherited by : <a href="class142469.html#refclass142469"><b>StateProxy</b></a> </p>
<p>Declaration :</p><ul><li>C++ : class ReadSource : public <a href="class143493.html#refclass143493"><b>OperationBase</b></a> </li></ul><p>Directly inherited by : <a href="class144517.html#refclass144517"><b>Strategy</b></a> </p>
<div class="sub">
</div>
<p>All public operations : <a href="class132741.html#refoperation135941"><b>allocateBuffer</b></a> , <a href="class132741.html#refoperation135813"><b>fetch</b></a> , <a href="class132741.html#refoperation136325"><b>isCalculated</b></a> , <a href="class132741.html#refoperation136197"><b>releaseBuffer</b></a> </p>
</body>
</html>

View file

@ -4,19 +4,19 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class WiringTable</title>
<title>Class BuffTable</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class WiringTable</div>
<div class = "title">Class BuffTable</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass144005"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;int SIZ&gt; class WiringTable </li></ul><div class="sub">
<p>Declaration :</p><ul><li>C++ : template&lt;int SIZ&gt; class BuffTable </li></ul><div class="sub">
<a name="refrelation153861"></a>
<table><tr><td><div class="element">Relation <b>&lt;directional aggregation by value&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144133.html#refclass144133"><b>BuffHandle</b></a>, multiplicity : SIZ</li><li>C++ : protected: <a href="class144133.html#refclass144133"><b>BuffHandle</b></a> </li></ul><a name="refrelation153989"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a></li><li>C++ : protected: <a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a>* </li></ul></div>

View file

@ -0,0 +1,25 @@
<!-- 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 Invocation</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class Invocation</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass144261"></a>
<p>Declaration :</p><ul><li>C++ : class Invocation </li></ul><div class="sub">
<a name="refrelation155781"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class142597.html#refclass142597"><b>StateAdapter</b></a></li><li>C++ : protected: <a href="class142597.html#refclass142597"><b>StateAdapter</b></a>* </li></ul><a name="refrelation155909"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a></li><li>C++ : protected: <a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a>* </li></ul><a name="refrelation156037"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class144005.html#refclass144005"><b>BuffTable</b></a></li><li>C++ : protected: <a href="class144005.html#refclass144005"><b>BuffTable</b></a>* </li></ul></div>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Class ProcessData</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class ProcessData</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass144389"></a>
<p>Declaration :</p><ul><li>C++ : class ProcessData : public <a href="class144645.html#refclass144645"><b>FeedCache</b></a>, public <a href="class143493.html#refclass143493"><b>OperationBase</b></a> </li></ul><p>Directly inherited by : <a href="class143749.html#refclass143749"><b>PullInput</b></a> </p>
<div class="sub">
<a name="refrelation158213"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class143749.html#refclass143749"><b>PullInput</b></a></li><li>C++ : protected: <a href="class143749.html#refclass143749"><b>PullInput</b></a>* </li></ul></div>
</body>
</html>

View file

@ -0,0 +1,25 @@
<!-- 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 Strategy</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class Strategy</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass144517"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;class CONF&gt; class Strategy : public <a href="class143877.html#refclass143877"><b>ReadSource</b></a>, public <a href="class143621.html#refclass143621"><b>QueryCache</b></a>, public <a href="class143749.html#refclass143749"><b>PullInput</b></a> </li></ul><div class="sub">
<a name="refrelation156293"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class143365.html#refclass143365"><b>NodeWiring</b></a></li><li>C++ : protected: <a href="class143365.html#refclass143365"><b>NodeWiring</b></a>* </li></ul><a name="refrelation156549"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class143365.html#refclass143365"><b>NodeWiring</b></a></li><li>C++ : protected: <a href="class143365.html#refclass143365"><b>NodeWiring</b></a>* </li></ul><a name="refrelation156805"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class143365.html#refclass143365"><b>NodeWiring</b></a></li><li>C++ : protected: <a href="class143365.html#refclass143365"><b>NodeWiring</b></a>* </li></ul></div>
</body>
</html>

View file

@ -0,0 +1,23 @@
<!-- 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 FeedCache</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class FeedCache</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass144645"></a>
<p>Declaration :</p><ul><li>C++ : class FeedCache : public <a href="class143493.html#refclass143493"><b>OperationBase</b></a> </li></ul><p>Directly inherited by : <a href="class144389.html#refclass144389"><b>ProcessData</b></a> </p>
<div class="sub">
</div>
</body>
</html>

View file

@ -27,11 +27,11 @@
<tr bgcolor=#f0f0f0><td><a href="class129925.html#refclass129925" target = "projectFrame"><b>Auto</b></a></td><td></td><td>Automation data for some parameter (i.e. a time varying function)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143109.html#refclass143109" target = "projectFrame"><b>BackendCache</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144133.html#refclass144133" target = "projectFrame"><b>BuffHandle</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144005.html#refclass144005" target = "projectFrame"><b>BuffTable</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134021.html#refclass134021" target = "projectFrame"><b>Buildable</b></a></td><td>interface</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130565.html#refclass130565" target = "projectFrame"><b>BuilderFacade</b></a></td><td>boundary</td><td>Provides unified access to the builder functionality. While individual components of the builder subsystem may be called if necessary or suitable, it is usually better to do all extern invocations via the high level methods of this Facade</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134149.html#refclass134149" target = "projectFrame"><b>BuilderTool</b></a></td><td>interface</td><td>Used according to the visitor pattern: each Tool contains the concrete implementation for one task to be done to the various MObject classes</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139013.html#refclass139013" target = "projectFrame"><b>BuildInstruct</b></a></td><td></td><td>(Interface) building instructions to be executed by the Builder on the render node network under construction.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143621.html#refclass143621" target = "projectFrame"><b>Caching</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143237.html#refclass143237" target = "projectFrame"><b>Caller</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137221.html#refclass137221" target = "projectFrame"><b>Category</b></a></td><td></td><td>tree like classification of Assets</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137349.html#refclass137349" target = "projectFrame"><b>Clip</b></a></td><td></td><td>bookkeeping (asset) view of a media clip.</td></tr>
@ -60,6 +60,7 @@
<tr bgcolor=#f0f0f0><td><a href="class129797.html#refclass129797" target = "projectFrame"><b>ExplicitPlacement</b></a></td><td>interface</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136197.html#refclass136197" target = "projectFrame"><b>External</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135301.html#refclass135301" target = "projectFrame"><b>Factory</b></a></td><td></td><td>a template for generating functor-like Factory objects, used to encapsulate object creation and providing access via smart-pointers only.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144645.html#refclass144645" target = "projectFrame"><b>FeedCache</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128181.html#refclass128181" target = "projectFrame"><b>File</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128693.html#refclass128693" target = "projectFrame"><b>FileHandle</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128309.html#refclass128309" target = "projectFrame"><b>FileHandleCache</b></a></td><td></td><td></td></tr>
@ -74,10 +75,9 @@
<tr bgcolor=#f0f0f0><td><a href="class128949.html#refclass128949" target = "projectFrame"><b>FrameDescriptor</b></a></td><td>interface</td><td>A FrameDescriptor implements the higher level interfaces for frames. Further refinements are made by subclassing and policy classes</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128225.html#refclass128225" target = "projectFrame"><b>FrameReference</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133637.html#refclass133637" target = "projectFrame"><b>GLBuf</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143877.html#refclass143877" target = "projectFrame"><b>InPlace</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134789.html#refclass134789" target = "projectFrame"><b>Interpolator</b></a></td><td></td><td>Provides the implementation for getting the acutal value of a time varying or automated effect/plugin parameter</td></tr>
<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="class143493.html#refclass143493" target = "projectFrame"><b>InvocationStateBase</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144261.html#refclass144261" target = "projectFrame"><b>Invocation</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>
@ -94,6 +94,7 @@
<tr bgcolor=#f0f0f0><td><a href="class128394.html#refclass128394" target = "projectFrame"><b>Mutex</b></a></td><td></td><td>I provided a reworked Mutex class in my Cinelerra2 repository</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refclass134405" target = "projectFrame"><b>NodeCreatorTool</b></a></td><td></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="class143365.html#refclass143365" target = "projectFrame"><b>NodeWiring</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143493.html#refclass143493" target = "projectFrame"><b>OperationBase</b></a></td><td></td><td></td></tr>
<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>
@ -105,13 +106,16 @@
<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>
<tr bgcolor=#f0f0f0><td><a href="class136837.html#refclass136837" target = "projectFrame"><b>Proc</b></a></td><td></td><td>key abstraction: data processing asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141957.html#refclass141957" target = "projectFrame"><b>ProcDispatcher</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143749.html#refclass143749" target = "projectFrame"><b>Process</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144389.html#refclass144389" target = "projectFrame"><b>ProcessData</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131461.html#refclass131461" target = "projectFrame"><b>Processor</b></a></td><td></td><td></td></tr>
<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="class143749.html#refclass143749" target = "projectFrame"><b>PullInput</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143621.html#refclass143621" target = "projectFrame"><b>QueryCache</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140677.html#refclass140677" target = "projectFrame"><b>QueryHandler</b></a></td><td>interface</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141189.html#refclass141189" target = "projectFrame"><b>QueryHandlerImpl</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143877.html#refclass143877" target = "projectFrame"><b>ReadSource</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>
@ -132,6 +136,7 @@
<tr bgcolor=#f0f0f0><td><a href="class142597.html#refclass142597" target = "projectFrame"><b>StateAdapter</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class142469.html#refclass142469" target = "projectFrame"><b>StateProxy</b></a></td><td>implementation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136325.html#refclass136325" target = "projectFrame"><b>std::exception</b></a></td><td>auxiliary</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144517.html#refclass144517" target = "projectFrame"><b>Strategy</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136965.html#refclass136965" target = "projectFrame"><b>Struct</b></a></td><td></td><td>key abstraction: structural asset</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128138.html#refclass128138" target = "projectFrame"><b>Thread</b></a></td><td></td><td>We can basically reuse the Thread class design from Cinelerra2, Thread becomes a baseclass for all Threads </td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134917.html#refclass134917" target = "projectFrame"><b>Time</b></a></td><td></td><td>denotes a temporal position (time point), based on timeline start.<br /><br />investigate posix.4 realtime timers, wrap these here</td></tr>
@ -147,7 +152,6 @@
<tr bgcolor=#f0f0f0><td><a href="class133509.html#refclass133509" target = "projectFrame"><b>VFrame</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140165.html#refclass140165" target = "projectFrame"><b>Visitable</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class142725.html#refclass142725" target = "projectFrame"><b>WiringDescriptor</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144005.html#refclass144005" target = "projectFrame"><b>WiringTable</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130053.html#refclass130053" target = "projectFrame"><b>Wish</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129162.html#refclass129162" target = "projectFrame"><b>WriteBuffer</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129034.html#refclass129034" target = "projectFrame"><b>WriteBufferPool</b></a></td><td></td><td></td></tr>

View file

@ -28,11 +28,11 @@
<a href="class129925.html#refclass129925" target = "projectFrame"><b>Auto</b></a><br />
<a href="class143109.html#refclass143109" target = "projectFrame"><b>BackendCache</b></a><br />
<a href="class144133.html#refclass144133" target = "projectFrame"><b>BuffHandle</b></a><br />
<a href="class144005.html#refclass144005" target = "projectFrame"><b>BuffTable</b></a><br />
<a href="class134021.html#refclass134021" target = "projectFrame"><b>Buildable</b></a><br />
<a href="class130565.html#refclass130565" target = "projectFrame"><b>BuilderFacade</b></a><br />
<a href="class134149.html#refclass134149" target = "projectFrame"><b>BuilderTool</b></a><br />
<a href="class139013.html#refclass139013" target = "projectFrame"><b>BuildInstruct</b></a><br />
<a href="class143621.html#refclass143621" target = "projectFrame"><b>Caching</b></a><br />
<a href="class143237.html#refclass143237" target = "projectFrame"><b>Caller</b></a><br />
<a href="class137221.html#refclass137221" target = "projectFrame"><b>Category</b></a><br />
<a href="class137349.html#refclass137349" target = "projectFrame"><b>Clip</b></a><br />
@ -61,6 +61,7 @@
<a href="class129797.html#refclass129797" target = "projectFrame"><b>ExplicitPlacement</b></a><br />
<a href="class136197.html#refclass136197" target = "projectFrame"><b>External</b></a><br />
<a href="class135301.html#refclass135301" target = "projectFrame"><b>Factory</b></a><br />
<a href="class144645.html#refclass144645" target = "projectFrame"><b>FeedCache</b></a><br />
<a href="class128181.html#refclass128181" target = "projectFrame"><b>File</b></a><br />
<a href="class128693.html#refclass128693" target = "projectFrame"><b>FileHandle</b></a><br />
<a href="class128309.html#refclass128309" target = "projectFrame"><b>FileHandleCache</b></a><br />
@ -75,10 +76,9 @@
<a href="class128949.html#refclass128949" target = "projectFrame"><b>FrameDescriptor</b></a><br />
<a href="class128225.html#refclass128225" target = "projectFrame"><b>FrameReference</b></a><br />
<a href="class133637.html#refclass133637" target = "projectFrame"><b>GLBuf</b></a><br />
<a href="class143877.html#refclass143877" target = "projectFrame"><b>InPlace</b></a><br />
<a href="class134789.html#refclass134789" target = "projectFrame"><b>Interpolator</b></a><br />
<a href="class136069.html#refclass136069" target = "projectFrame"><b>Invalid</b></a><br />
<a href="class143493.html#refclass143493" target = "projectFrame"><b>InvocationStateBase</b></a><br />
<a href="class144261.html#refclass144261" target = "projectFrame"><b>Invocation</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 />
@ -95,6 +95,7 @@
<a href="class128394.html#refclass128394" target = "projectFrame"><b>Mutex</b></a><br />
<a href="class134405.html#refclass134405" target = "projectFrame"><b>NodeCreatorTool</b></a><br />
<a href="class143365.html#refclass143365" target = "projectFrame"><b>NodeWiring</b></a><br />
<a href="class143493.html#refclass143493" target = "projectFrame"><b>OperationBase</b></a><br />
<a href="class134533.html#refclass134533" target = "projectFrame"><b>Parameter</b></a><br />
<a href="class134661.html#refclass134661" target = "projectFrame"><b>ParamProvider</b></a><br />
<a href="class130437.html#refclass130437" target = "projectFrame"><b>PathManager</b></a><br />
@ -106,13 +107,16 @@
<a href="class137605.html#refclass137605" target = "projectFrame"><b>Preview</b></a><br />
<a href="class136837.html#refclass136837" target = "projectFrame"><b>Proc</b></a><br />
<a href="class141957.html#refclass141957" target = "projectFrame"><b>ProcDispatcher</b></a><br />
<a href="class143749.html#refclass143749" target = "projectFrame"><b>Process</b></a><br />
<a href="class144389.html#refclass144389" target = "projectFrame"><b>ProcessData</b></a><br />
<a href="class131461.html#refclass131461" target = "projectFrame"><b>Processor</b></a><br />
<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="class143749.html#refclass143749" target = "projectFrame"><b>PullInput</b></a><br />
<a href="class143621.html#refclass143621" target = "projectFrame"><b>QueryCache</b></a><br />
<a href="class140677.html#refclass140677" target = "projectFrame"><b>QueryHandler</b></a><br />
<a href="class141189.html#refclass141189" target = "projectFrame"><b>QueryHandlerImpl</b></a><br />
<a href="class143877.html#refclass143877" target = "projectFrame"><b>ReadSource</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 />
@ -133,6 +137,7 @@
<a href="class142597.html#refclass142597" target = "projectFrame"><b>StateAdapter</b></a><br />
<a href="class142469.html#refclass142469" target = "projectFrame"><b>StateProxy</b></a><br />
<a href="class136325.html#refclass136325" target = "projectFrame"><b>std::exception</b></a><br />
<a href="class144517.html#refclass144517" target = "projectFrame"><b>Strategy</b></a><br />
<a href="class136965.html#refclass136965" target = "projectFrame"><b>Struct</b></a><br />
<a href="class128138.html#refclass128138" target = "projectFrame"><b>Thread</b></a><br />
<a href="class134917.html#refclass134917" target = "projectFrame"><b>Time</b></a><br />
@ -148,7 +153,6 @@
<a href="class133509.html#refclass133509" target = "projectFrame"><b>VFrame</b></a><br />
<a href="class140165.html#refclass140165" target = "projectFrame"><b>Visitable</b></a><br />
<a href="class142725.html#refclass142725" target = "projectFrame"><b>WiringDescriptor</b></a><br />
<a href="class144005.html#refclass144005" target = "projectFrame"><b>WiringTable</b></a><br />
<a href="class130053.html#refclass130053" target = "projectFrame"><b>Wish</b></a><br />
<a href="class129162.html#refclass129162" target = "projectFrame"><b>WriteBuffer</b></a><br />
<a href="class129034.html#refclass129034" target = "projectFrame"><b>WriteBufferPool</b></a><br />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -116,7 +116,7 @@ Documentation</title>
<a name="refartifact128005"></a>
<table><tr><td><div class="element">Artifact <b>Lumiera</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#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>buildertool</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#refartifact133509"><b>vrender</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></p>
<p><i>executable</i> associated with : <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#refartifact133509"><b>vrender</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#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>buildertool</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></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>
@ -902,12 +902,16 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<table><tr><td><div class="element">Class <b><a href="class142597.html#refclass142597"><b>StateAdapter</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class142725.html#refclass142725"><b>WiringDescriptor</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143365.html#refclass143365"><b>NodeWiring</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143493.html#refclass143493"><b>InvocationStateBase</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143621.html#refclass143621"><b>Caching</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143749.html#refclass143749"><b>Process</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143877.html#refclass143877"><b>InPlace</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144005.html#refclass144005"><b>WiringTable</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143493.html#refclass143493"><b>OperationBase</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143621.html#refclass143621"><b>QueryCache</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143749.html#refclass143749"><b>PullInput</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class143877.html#refclass143877"><b>ReadSource</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144389.html#refclass144389"><b>ProcessData</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144645.html#refclass144645"><b>FeedCache</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144517.html#refclass144517"><b>Strategy</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144005.html#refclass144005"><b>BuffTable</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144133.html#refclass144133"><b>BuffHandle</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class144261.html#refclass144261"><b>Invocation</b></a></b></div></td></tr></table>
</div>
</div>
<a name="refuse case view128005"></a>

View file

@ -17,8 +17,8 @@
<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#reftransition129541" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition129797" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition129541" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition129669" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130309" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131205" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
@ -28,10 +28,10 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131461" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130693" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition129029" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131717" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130181" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130949" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131717" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131077" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130949" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130053" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition128901" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130565" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>

View file

@ -55,12 +55,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 instance137221" target = "projectFrame"><b>au1</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 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 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#refclass instance130821" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact130309" target = "projectFrame"><b>auto</b></a></td><td>artifact</td><td>Media Object holding automation data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129925.html#refclass129925" target = "projectFrame"><b>Auto</b></a></td><td>class</td><td>Automation data for some parameter (i.e. a time varying function)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram129669" target = "projectFrame"><b>Automation Entities</b></a></td><td>class diagram</td><td></td></tr>

View file

@ -24,6 +24,7 @@
<tr bgcolor=#f0f0f0><td><a href="class143109.html#refclass143109" target = "projectFrame"><b>BackendCache</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129157" target = "projectFrame"><b>BackendLayer</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144133.html#refclass144133" target = "projectFrame"><b>BuffHandle</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144005.html#refclass144005" target = "projectFrame"><b>BuffTable</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128901" target = "projectFrame"><b>build</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity diagram129413" target = "projectFrame"><b>build flow</b></a></td><td>activity diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refdecision activity node128389" target = "projectFrame"><b>build necessary?</b></a></td><td>decision activity node</td><td></td></tr>
@ -36,8 +37,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact131077" target = "projectFrame"><b>buildable</b></a></td><td>artifact</td><td>marker interface denoting any MObject able to be treated by Tools</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128517" target = "projectFrame"><b>buildEngine</b></a></td><td>operation</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="index.html#refcomponent128005" target = "projectFrame"><b>Builder</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130565" target = "projectFrame"><b>builder</b></a></td><td>package</td><td>sourcecode package<br /><br />The Builder creating the Render Engine,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128901" target = "projectFrame"><b>Builder</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130565" target = "projectFrame"><b>builder</b></a></td><td>package</td><td>sourcecode package<br /><br />The Builder creating the Render Engine,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram129285" target = "projectFrame"><b>Builder Entities</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128261" target = "projectFrame"><b>Builder Workings</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130565.html#refclass130565" target = "projectFrame"><b>BuilderFacade</b></a></td><td>class</td><td>Provides unified access to the builder functionality. While individual components of the builder subsystem may be called if necessary or suitable, it is usually better to do all extern invocations via the high level methods of this Facade</td></tr>

View file

@ -19,7 +19,8 @@
<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#refcomponent129157" target = "projectFrame"><b>Cache</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent view128138" target = "projectFrame"><b>Cache</b></a></td><td>component view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143621.html#refclass143621" target = "projectFrame"><b>Caching</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation136581" target = "projectFrame"><b>callDown</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation136453" target = "projectFrame"><b>callDown</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143237.html#refclass143237" target = "projectFrame"><b>Caller</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation140421" target = "projectFrame"><b>category</b></a></td><td>relation</td><td>primary tree like classification of the asset</td></tr>
<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>
@ -29,34 +30,34 @@
<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#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#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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 instance129285" 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 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 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 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 instance130181" 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="index.html#refcomponent131077" target = "projectFrame"><b>client code</b></a></td><td>component</td><td></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>

View file

@ -18,14 +18,14 @@
<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#refartifact128645" target = "projectFrame"><b>edl</b></a></td><td>artifact</td><td>the (high level) Edit Decision List within the current Session</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128133.html#refclass128133" target = "projectFrame"><b>EDL</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128389" target = "projectFrame"><b>EDL</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128133.html#refclass128133" target = "projectFrame"><b>EDL</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram128773" target = "projectFrame"><b>EDL Example1</b></a></td><td>object diagram</td><td>A simple example showing how the actual objects are placed in the Fixture (=definitive playlist). It shows a Video and Audio clip placed on two tracks</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram128901" target = "projectFrame"><b>EDL Example2</b></a></td><td>object diagram</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#refrelation128005" target = "projectFrame"><b>edls</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137733.html#refclass137733" target = "projectFrame"><b>Effect</b></a></td><td>class</td><td>Effect or media processing component</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137221" target = "projectFrame"><b>effect</b></a></td><td>artifact</td><td>Effect or media processing component</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129541" target = "projectFrame"><b>effect</b></a></td><td>artifact</td><td>EDL representation of a pluggable and automatable effect.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137221" target = "projectFrame"><b>effect</b></a></td><td>artifact</td><td>Effect or media processing component</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129029.html#refclass129029" target = "projectFrame"><b>Effect</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation138885" target = "projectFrame"><b>elements</b></a></td><td>relation</td><td>relevant MObjects comprising this segment. TODO: actually necessary??</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132997" target = "projectFrame"><b>enable</b></a></td><td>operation</td><td>change the enabled status of this asset. Note the corresponding #isActive predicate may depend on the enablement status of parent assets as well</td></tr>

View file

@ -18,6 +18,7 @@
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135301.html#refclass135301" target = "projectFrame"><b>Factory</b></a></td><td>class</td><td>a template for generating functor-like Factory objects, used to encapsulate object creation and providing access via smart-pointers only.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144645.html#refclass144645" target = "projectFrame"><b>FeedCache</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation135813" target = "projectFrame"><b>fetch</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128181.html#refclass128181" target = "projectFrame"><b>File</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128138" target = "projectFrame"><b>file</b></a></td><td>relation</td><td></td></tr>

View file

@ -23,8 +23,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram130181" target = "projectFrame"><b>Hierarchy</b></a></td><td>class diagram</td><td>Lumiera Exception hierarchy</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133381" target = "projectFrame"><b>howtoProc</b></a></td><td>operation</td><td>@return descriptor how to build a render pipeline corresponding to this media</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132741" target = "projectFrame"><b>hub</b></a></td><td>artifact</td><td>special ProcNode used to build data distributing connections</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133893" target = "projectFrame"><b>HUE</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133253" target = "projectFrame"><b>HUE</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133893" target = "projectFrame"><b>HUE</b></a></td><td>class instance</td><td></td></tr>
</table>
</body>
</html>

View file

@ -20,10 +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="class143877.html#refclass143877" target = "projectFrame"><b>InPlace</b></a></td><td>class</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 instance134149" 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>
@ -32,7 +31,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact134661" target = "projectFrame"><b>interpolator</b></a></td><td>artifact</td><td>denotes a facility to get (continuously interpolated) parameter values</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134789.html#refclass134789" target = "projectFrame"><b>Interpolator</b></a></td><td>class</td><td>Provides the implementation for getting the acutal value of a time varying or automated effect/plugin parameter</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136069.html#refclass136069" target = "projectFrame"><b>Invalid</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143493.html#refclass143493" target = "projectFrame"><b>InvocationStateBase</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144261.html#refclass144261" target = "projectFrame"><b>Invocation</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation138373" target = "projectFrame"><b>ipo</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132869" target = "projectFrame"><b>isActive</b></a></td><td>operation</td><td>weather this asset is swithced on and consequently included in the fixture and participates in rendering</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation136325" target = "projectFrame"><b>isCalculated</b></a></td><td>operation</td><td></td></tr>

View file

@ -33,8 +33,8 @@
<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#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="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="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>

View file

@ -18,6 +18,7 @@
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#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="class143493.html#refclass143493" target = "projectFrame"><b>OperationBase</b></a></td><td>class</td><td></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 Lumiera codebase is "lumi".</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>

View file

@ -53,8 +53,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131077" target = "projectFrame"><b>Proc-Asset Relations</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram130053" target = "projectFrame"><b>proc-components</b></a></td><td>component diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141957.html#refclass141957" target = "projectFrame"><b>ProcDispatcher</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143749.html#refclass143749" target = "projectFrame"><b>Process</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation136069" target = "projectFrame"><b>process</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144389.html#refclass144389" target = "projectFrame"><b>ProcessData</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129285" target = "projectFrame"><b>ProcessingLayer</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131461.html#refclass131461" target = "projectFrame"><b>Processor</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132101" target = "projectFrame"><b>processor</b></a></td><td>artifact</td><td>a single render pipeline for one segment of the timeline</td></tr>
@ -67,6 +67,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132869" target = "projectFrame"><b>projector</b></a></td><td>artifact</td><td>video ProcNode for scaling and translating image data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation138629" target = "projectFrame"><b>provider</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation135685" target = "projectFrame"><b>pull</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143749.html#refclass143749" target = "projectFrame"><b>PullInput</b></a></td><td>class</td><td></td></tr>
</table>
</body>
</html>

View file

@ -20,6 +20,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view129157" target = "projectFrame"><b>query</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent view128261" target = "projectFrame"><b>Query System overview</b></a></td><td>component view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case view128389" target = "projectFrame"><b>query use</b></a></td><td>use case view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class143621.html#refclass143621" target = "projectFrame"><b>QueryCache</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140677.html#refclass140677" target = "projectFrame"><b>QueryHandler</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141189.html#refclass141189" target = "projectFrame"><b>QueryHandlerImpl</b></a></td><td>class</td><td></td></tr>
</table>

View file

@ -17,14 +17,15 @@
<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="class143877.html#refclass143877" target = "projectFrame"><b>ReadSource</b></a></td><td>class</td><td></td></tr>
<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>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="index.html#refoperation136197" target = "projectFrame"><b>releaseBuffer</b></a></td><td>operation</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="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a></td><td>class</td><td>the possible kinds of RelativePlacements</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128133" target = "projectFrame"><b>relType</b></a></td><td>attribute</td><td>the kind of relation denoted by this Placement</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132741" target = "projectFrame"><b>remove</b></a></td><td>operation</td><td>remove the given asset &lt;i&gt;together with all its dependants&lt;/i&gt; from the internal DB</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128389" target = "projectFrame"><b>Render Entities</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131973" target = "projectFrame"><b>Render Mechanics</b></a></td><td>class diagram</td><td></td></tr>

View file

@ -32,8 +32,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128645" target = "projectFrame"><b>Service Components</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128133" target = "projectFrame"><b>Session</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact138757" target = "projectFrame"><b>session</b></a></td><td>artifact</td><td>Interface: the session edited by the user</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130437" target = "projectFrame"><b>session</b></a></td><td>package</td><td>sourcecode package<br /><br />Everything concerning the EDL and Session, within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128005" target = "projectFrame"><b>Session</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130437" target = "projectFrame"><b>session</b></a></td><td>package</td><td>sourcecode package<br /><br />Everything concerning the EDL and Session, within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139653.html#refclass139653" target = "projectFrame"><b>Session</b></a></td><td>class</td><td>Primary Interface for all editing tasks.<br />The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128133" target = "projectFrame"><b>Session structure</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128517" target = "projectFrame"><b>sessionimpl</b></a></td><td>artifact</td><td>holds the complete session data to be edited by the user</td></tr>
@ -47,8 +47,8 @@
<tr bgcolor=#f0f0f0><td><a href="class138885.html#refclass138885" target = "projectFrame"><b>SimpleClip</b></a></td><td>class</td><td>Elementary clip consisting of only one media stream</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128906.html#refclass128906" target = "projectFrame"><b>SmartPointer</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128266" target = "projectFrame"><b>SmartPointers</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation141957" target = "projectFrame"><b>source</b></a></td><td>relation</td><td>media source of this clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation142469" target = "projectFrame"><b>source</b></a></td><td>relation</td><td>the media source this clip referes to</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation141957" target = "projectFrame"><b>source</b></a></td><td>relation</td><td>media source of this clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133765.html#refclass133765" target = "projectFrame"><b>Source</b></a></td><td>class</td><td>Source Node: represents a media source to pull data from.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact134277" target = "projectFrame"><b>source</b></a></td><td>artifact</td><td>Representation of a Media source</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refdeployment diagram129797" target = "projectFrame"><b>Source Overview</b></a></td><td>deployment diagram</td><td></td></tr>
@ -64,6 +64,7 @@
<tr bgcolor=#f0f0f0><td><a href="class142469.html#refclass142469" target = "projectFrame"><b>StateProxy</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact130949" target = "projectFrame"><b>stateproxy</b></a></td><td>artifact</td><td>Key Interface representing a render process and encapsulating state</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136325.html#refclass136325" target = "projectFrame"><b>std::exception</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144517.html#refclass144517" target = "projectFrame"><b>Strategy</b></a></td><td>class</td><td></td></tr>
<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>

View file

@ -42,13 +42,13 @@
<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#refoperation134405" 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>
<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#refoperation130693" 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#refoperation130309" 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#refoperation130053" 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="class140805.html#refclass140805" target = "projectFrame"><b>TypeHandler</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141317.html#refclass141317" target = "projectFrame"><b>TypeHandler&lt;Pipe&gt;</b></a></td><td>class</td><td></td></tr>
</table>

View file

@ -22,18 +22,18 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact134021" target = "projectFrame"><b>vframe</b></a></td><td>artifact</td><td>a buffer and render process holding a Video frame</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance137093" target = "projectFrame"><b>vid1</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 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 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 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 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 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 instance132741" 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 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 instance132741" 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 instance133765" target = "projectFrame"><b>video</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 instance128517" 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="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 instance129157" 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="class140165.html#refclass140165" target = "projectFrame"><b>Visitable</b></a></td><td>class</td><td></td></tr>

View file

@ -20,9 +20,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131845" target = "projectFrame"><b>what</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131717" target = "projectFrame"><b>what</b></a></td><td>operation</td><td>the base class of all exceptions thrown by the standard library</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case diagram131717" target = "projectFrame"><b>when to query</b></a></td><td>use case diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation154117" target = "projectFrame"><b>wiring</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class142725.html#refclass142725" target = "projectFrame"><b>WiringDescriptor</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class144005.html#refclass144005" target = "projectFrame"><b>WiringTable</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation148229" target = "projectFrame"><b>wiringTemplate</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact139269" target = "projectFrame"><b>wish</b></a></td><td>artifact</td><td>LocatingPin representing a low-priority directive by the user,<br />to be fulfilled only if possible (and after satisfying the<br />more important LocatingPins)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130053.html#refclass130053" target = "projectFrame"><b>Wish</b></a></td><td>class</td><td></td></tr>

View file

@ -23,6 +23,8 @@
<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="class143365.html#refoperation136581"><b>callDown</b></a></td><td><a href="class143365.html#refclass143365"><b>NodeWiring</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class142725.html#refoperation136453"><b>callDown</b></a></td><td><a href="class142725.html#refclass142725"><b>WiringDescriptor</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>
@ -67,12 +69,12 @@
<tr bgcolor=#f0f0f0><td><a href="class139781.html#refoperation134149"><b>save</b></a></td><td><a href="class139781.html#refclass139781"><b>SessManager</b></a></td><td>create a complete, serialized representation<br />of the current session config and contents.<br />@todo how to serialize, prameters, return value?</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140293.html#refoperation134405"><b>treat</b></a></td><td><a href="class140293.html#refclass140293"><b>Applicable</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134149.html#refoperation129797"><b>treat</b></a></td><td><a href="class134149.html#refclass134149"><b>BuilderTool</b></a></td><td>This operation is to be overloaded for the specific MObject subclasses to be treated.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130437"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130309"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130565"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130437"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130693"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation129925"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation130053"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation129925"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation130181"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refoperation128010"><b>useFile</b></a></td><td><a href="class129333.html#refclass129333"><b>FileProvider</b></a></td><td>Announces that the application intends to use this file with mode (READ|WRITE|READWRITE)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refoperation128138"><b>useTemporaryStorage</b></a></td><td><a href="class129333.html#refclass129333"><b>FileProvider</b></a></td><td>Provides a pool for interminate frames</td></tr>

View file

@ -40,11 +40,11 @@ liblumicommon_a_SOURCES = \
noinst_HEADERS += \
$(liblumicommon_a_srcdir)/cmdline.hpp \
$(liblumicommon_a_srcdir)/factory.hpp \
$(liblumicommon_a_srcdir)/frameid.hpp \
$(liblumicommon_a_srcdir)/singleton.hpp \
$(liblumicommon_a_srcdir)/singletonpolicies.hpp \
$(liblumicommon_a_srcdir)/singletonpreconfigure.hpp \
$(liblumicommon_a_srcdir)/lumitime.hpp \
$(liblumicommon_a_srcdir)/typelist.hpp \
$(liblumicommon_a_srcdir)/visitor.hpp \
$(liblumicommon_a_srcdir)/visitordispatcher.hpp \
$(liblumicommon_a_srcdir)/visitorpolicies.hpp \
@ -56,7 +56,10 @@ noinst_HEADERS += \
$(liblumicommon_a_srcdir)/query/mockconfigrules.hpp \
$(liblumicommon_a_srcdir)/singletonfactory.hpp \
$(liblumicommon_a_srcdir)/singletonsubclass.hpp \
$(liblumicommon_a_srcdir)/typelistutil.hpp \
$(liblumicommon_a_srcdir)/meta/typelist.hpp \
$(liblumicommon_a_srcdir)/meta/configflags.hpp \
$(liblumicommon_a_srcdir)/meta/generator.hpp \
$(liblumicommon_a_srcdir)/meta/typelistutil.hpp \
$(liblumicommon_a_srcdir)/util.hpp \
$(liblumicommon_a_srcdir)/test/mockinjector.hpp \
$(liblumicommon_a_srcdir)/test/suite.hpp \

View file

@ -48,7 +48,7 @@
#include "common/p.hpp"
#include "common/query.hpp"
#include "common/typelistutil.hpp"
#include "common/meta/generator.hpp"
#include "common/singletonsubclass.hpp"
//TODO: is it sensible to bring in the types explicitly here? (it's not necessary, but may be convenient...)

View file

@ -1,5 +1,5 @@
/*
FRAME.hpp - Key Abstraction: render process and buffer holding frame data.
FRAMEID.hpp - distinct identification of a single data frame
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,26 +21,36 @@
*/
#ifndef PROC_INTERFACE_FRAME_H
#define PROC_INTERFACE_FRAME_H
#ifndef LUMIERA_FRAMEID_H
#define LUMIERA_FRAMEID_H
namespace proc_interface
namespace lumiera
{
/**
* TODO: how to relate to Cehteh's Frame entity in the Backend?
* The latter is the fundamental Frame entity, wheras this Object
* rather represents a buffer set containing frame date.
* Identification tuple for addressing frames unambiguosly.
*
* @todo currently (7/08) this is a dummy implementation to find out
* what interface the Proc layer needs. Probably the backend will
* later on define what is actually needed; this header should then
* be replaced by a combined C/C++ header
*/
class Frame
class FrameID : boost::totally_ordered<FrameID>
{
/////////////////
long dummy;
public:
FrameID(long dum=0) : dummy(dum) {}
operator long () { return dummy; }
bool operator< (const FrameID& of) const { return dummy < of.dummy; }
bool operator== (const FrameID& of) const { return dummy == of.dummy; }
};
} // namespace proc_interface
} // namespace lumiera
#endif

View file

@ -0,0 +1,191 @@
/*
CONFIGFLAGS.hpp - Building classes based on configuration cases
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 configflags.hpp
** Under some circumstances it is necessary to assemble functionality
** out of elementary building blocks. Especially, this assembly can be
** expressed as template specialisations directed by a configuration type.
** Thus, the purpose of this header is to encode flag-like configuraitons
** as distinct types, which can be used to select such specialisations.
** Each possible configuration can be encoded as a list of flags, which allows
** to generate, filter and process those configurations. The final goal is to
** automatically generate a factory which is able to deliver objects
** configured according to the situation encoded in the flags.
**
** @note currently there is an inherent limitation to configurations defined by
** a maximum of 5 independant flags. While it is easy to increase this limit,
** you should consider that the final goal is to genarate template instantiations,
** which would lead to more and more code bloat with growing number of possible
** combination.
**
** @see proc::engine::config::Strategy usage example
** @see proc::engine::config::ConfigSelector
** @see typelist.hpp
**
*/
#ifndef LUMIERA_META_CONFIGFLAGS_H
#define LUMIERA_META_CONFIGFLAGS_H
#include "common/meta/typelist.hpp"
namespace lumiera {
namespace typelist {
const size_t CONFIG_FLAGS_MAX = 5;
template<char bit> struct Flag { typedef Flag ID; };
template<> struct Flag<0> { typedef NullType ID; };
template< char f1=0
, char f2=0
, char f3=0
, char f4=0
, char f5=0
>
struct Flags
{
typedef typename Types< typename Flag<f1>::ID
, typename Flag<f2>::ID
, typename Flag<f3>::ID
, typename Flag<f4>::ID
, typename Flag<f5>::ID
>::List
Tuple;
typedef Tuple List;
};
template< char f1=0
, char f2=0
, char f3=0
, char f4=0
, char f5=0
>
struct Config ///< distinct type representing a configuration
{
typedef typename Flags<f1,f2,f3,f4,f5>::Tuple Flags;
typedef Flags List;
};
template<char Fl, class CONF>
struct ConfigSetFlag; ///< set (prepend) the Flag to the given config
template< char Fl
, char f1
, char f2
, char f3
, char f4
, char IGN
>
struct ConfigSetFlag<Fl, Config<f1,f2,f3,f4,IGN> >
{
typedef typelist::Config<Fl,f1,f2,f3,f4> Config;
};
/** build a configuration type from a list-of-flags */
template<class FLAGS, class CONF=typelist::Config<> >
struct BuildConfigFromFlags
{
typedef CONF Config;
typedef Config Type;
};
template<char Fl, class FLAGS, class CONF>
struct BuildConfigFromFlags< Node<Flag<Fl>,FLAGS>, CONF>
{
typedef typename ConfigSetFlag< Fl
, typename BuildConfigFromFlags<FLAGS,CONF>::Config
>::Config Config;
typedef Config Type;
};
/** create a configuration type for the given list-of-flags */
template<class FLAGS>
struct DefineConfigByFlags : BuildConfigFromFlags<FLAGS> { };
/**
* Helper for calculating values and for
* invoking runtime code based on a given FlagTuple.
* Can also be used on a Typelist of several Configs.
* The latter case is typically used to invoke an operation
* while ennumerating all Flag-Configurations defined in Code.
* An example would be to build (at runtime) an dispatcher table.
* Explanation: For the Case covering a List of Configs, we provide
* a templated visitaion function, which can accept a functor object
* to be invoked on each Configuration.
*/
template<class FLAGS>
struct FlagInfo;
template<char ff, class FLAGS>
struct FlagInfo<Node<Flag<ff>, FLAGS> >
{
enum{ BITS = MAX(ff, FlagInfo<FLAGS>::BITS)
, CODE = (1<<ff) | FlagInfo<FLAGS>::CODE
};
};
template<>
struct FlagInfo<NullType>
{
enum{ BITS = 0
, CODE = 0
};
template<class FUNC>
static typename FUNC::Ret
accept (FUNC& functor)
{
return functor.done();
}
};
template<class CONF, class TAIL>
struct FlagInfo<Node<CONF, TAIL> >
{
typedef typename CONF::Flags ThisFlags;
enum{ BITS = MAX (char(FlagInfo<ThisFlags>::BITS), char(FlagInfo<TAIL>::BITS))
};
template<class FUNC>
static typename FUNC::Ret
accept (FUNC& functor)
{
functor.template visit<CONF>(FlagInfo<ThisFlags>::CODE);
return FlagInfo<TAIL>::accept (functor);
}
};
} // namespace typelist
} // namespace lumiera
#endif

View file

@ -1,5 +1,5 @@
/*
TYPELISTUTIL.hpp - metaprogramming utilities for lists-of-types
GENERATOR.hpp - metaprogramming utilities for generating classes and interfaces
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -38,7 +38,7 @@ This code is heavily inspired by
*/
/** @file typelistutil.hpp
/** @file generator.hpp
** Helpers for working with lumiera::typelist::Types (i.e. lists-of-types).
** The main purpose is to build interfaces and polymorphic implementations
** (using virtual functions) based on templated Types or Collections of types,
@ -50,10 +50,10 @@ This code is heavily inspired by
*/
#ifndef LUMIERA_TYPELISTUTIL_H
#define LUMIERA_TYPELISTUTIL_H
#ifndef LUMIERA_META_GENERATOR_H
#define LUMIERA_META_GENERATOR_H
#include "common/typelist.hpp"
#include "common/meta/typelist.hpp"
@ -196,42 +196,6 @@ namespace lumiera
};
/**
* Metafunction counting the number of Types in the collection
*/
template<class TYPES>
struct count;
template<>
struct count<NullType>
{
enum{ value = 0 };
};
template<class TY, class TYPES>
struct count<Node<TY,TYPES> >
{
enum{ value = 1 + count<TYPES>::value };
};
/**
* Metafunction " max( sizeof(T) ) for T in TYPES "
*/
template<class TYPES>
struct maxSize;
template<>
struct maxSize<NullType>
{
enum{ value = 0 };
};
template<class TY, class TYPES>
struct maxSize<Node<TY,TYPES> >
{
enum{ thisval = sizeof(TY)
, nextval = maxSize<TYPES>::value
, value = nextval > thisval? nextval:thisval
};
};
} // namespace typelist
} // namespace lumiera

View file

@ -53,8 +53,8 @@ This code is heavily inspired by
*/
#ifndef LUMIERA_TYPELIST_H
#define LUMIERA_TYPELIST_H
#ifndef LUMIERA_META_TYPELIST_H
#define LUMIERA_META_TYPELIST_H
@ -64,11 +64,15 @@ namespace lumiera
namespace typelist
{
class NullType { };
class NullType
{
typedef NullType List;
};
template<class H, class T>
struct Node
{
typedef Node List;
typedef H Head;
typedef T Tail;
};
@ -113,6 +117,8 @@ namespace lumiera
};
typedef Node<NullType,NullType> NodeNull;
} // namespace typelist

View file

@ -0,0 +1,213 @@
/*
TYPELISTUTIL.hpp - Utils for working with lists-of-types
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 LUMIERA_META_TYPELISTUTIL_H
#define LUMIERA_META_TYPELISTUTIL_H
#include "common/meta/typelist.hpp"
namespace lumiera {
namespace typelist {
/**
* Metafunction counting the number of Types in the collection
*/
template<class TYPES>
struct count;
template<>
struct count<NullType>
{
enum{ value = 0 };
};
template<class TY, class TYPES>
struct count<Node<TY,TYPES> >
{
enum{ value = 1 + count<TYPES>::value };
};
/**
* Metafunction " max( sizeof(T) ) for T in TYPES "
*/
template<class TYPES>
struct maxSize;
template<>
struct maxSize<NullType>
{
enum{ value = 0 };
};
template<class TY, class TYPES>
struct maxSize<Node<TY,TYPES> >
{
enum{ thisval = sizeof(TY)
, nextval = maxSize<TYPES>::value
, value = nextval > thisval? nextval:thisval
};
};
/** apply a transformation (template) to each type in the list */
template<class TY, template<class> class _TRANS_>
struct Apply { typedef TY List; };
template< class TY, class TYPES
, template<class> class _TRANS_
>
struct Apply<Node<TY,TYPES>, _TRANS_ > { typedef Node< typename _TRANS_<TY>::Type
, typename Apply<TYPES,_TRANS_>::List
> List; };
template<bool, class T, class TAIL>
struct CondNode { typedef TAIL Next; };
template<class T, class TAIL>
struct CondNode<true, T, TAIL> { typedef Node<T,TAIL> Next; };
/** filter away those types which don't fulfill a predicate metafunction */
template< class TYPES
, template<class> class _P_ ///< a template providing a boolean member \c ::value
>
struct Filter;
template<template<class> class _P_>
struct Filter<NullType,_P_> { typedef NullType List; };
template< class TY, class TYPES
, template<class> class _P_
>
struct Filter<Node<TY,TYPES>,_P_> { typedef typename CondNode< _P_<TY>::value
, TY
, typename Filter<TYPES,_P_>::List
>::Next
List; };
/** append lists-of-types */
template<class TY1, class TY2>
struct Append { typedef Node<TY1, typename Append<TY2,NullType>::List> List; };
template< class TY, class TYPES
, class TAIL
>
struct Append<Node<TY,TYPES>, TAIL> { typedef Node<TY, typename Append<TYPES, TAIL>::List> List; };
template<class TY, class TYPES>
struct Append<NullType, Node<TY,TYPES> > { typedef Node<TY,TYPES> List; };
template<class TY, class TYPES>
struct Append<Node<TY,TYPES>, NullType> { typedef Node<TY,TYPES> List; };
template<class TY1>
struct Append<TY1,NullType> { typedef Node<TY1,NullType> List; };
template<class TY2>
struct Append<NullType,TY2> { typedef Node<TY2,NullType> List; };
template<>
struct Append<NullType,NullType> { typedef NullType List; };
/**
* prefix each of the elements,
* yielding a list-of lists-of-types
*/
template<class T, class TY>
struct PrefixAll { typedef Node< typename Append<T,TY>::List, NullType> List; };
template<class T>
struct PrefixAll<T, NullType> { typedef NullType List; };
template<class T>
struct PrefixAll<T, NodeNull> { typedef Node< typename Append<T,NodeNull>::List, NullType> List; };
template< class T
, class TY, class TYPES
>
struct PrefixAll<T, Node<TY,TYPES> > { typedef Node< typename Append<T,TY>::List
, typename PrefixAll<T,TYPES>::List
> List; };
template<class TY1,class TY2>
struct Distribute { typedef typename PrefixAll<TY1,TY2>::List List; };
template<class TY>
struct Distribute<NullType,TY> { typedef NullType List; };
template< class TY, class TYPES
, class TAIL
>
struct Distribute<Node<TY,TYPES>,TAIL> { typedef typename Append< typename PrefixAll<TY,TAIL>::List
, typename Distribute<TYPES,TAIL>::List
>::List
List; };
/** use a permutation generator
* for creating a list of all possible combinations
*/
template< class X
, template<class> class _PERMU_>
struct Combine { typedef typename Distribute< typename _PERMU_<X>::List
, Node<NullType,NullType>
>::List List; };
template< template<class> class _PERMU_>
struct Combine<NullType, _PERMU_ > { typedef Node<NullType,NullType> List; };
template< class TY, class TYPES
, template<class> class _PERMU_>
struct Combine<Node<TY,TYPES>,_PERMU_> { typedef typename Distribute< typename _PERMU_<TY>::List
, typename Combine<TYPES,_PERMU_>::List
>::List List; };
/** permutation generator for the Combine metafunction,
* yielding an "on" and "off" case
*/
template<class F>
struct FlagOnOff
{
typedef Node<F, Node<NullType,NullType> > List;
};
/** generate all possible on-off combinations of the given flags */
template<class FLAGS>
struct CombineFlags
{
typedef typename Combine<FLAGS, FlagOnOff>::List List;
};
} // namespace typelist
} // namespace lumiera
#endif

76
src/common/meta/util.hpp Normal file
View file

@ -0,0 +1,76 @@
/*
UTIL.hpp - metaprogramming helpers and utilities
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 LUMIERA_META_UTIL_H
#define LUMIERA_META_UTIL_H
namespace lumiera {
/* types for figuring out the overload resolution chosen by the compiler */
typedef char Yes_t;
struct No_t { char padding[8]; };
namespace typelist {
/** semi-automatic detection if an instantiation is possible.
* Requires help by the template to be tested, which needs to define
* a typedef member \c is_defined. The embedded metafunction Test can be used
* as a predicate for filtering types which may yield a valid instantiation
* of the candidate template in question.
* \par
* A fully automated solution for this problem is impossible by theoretic reasons.
* Any non trivial use of such a \c is_defined trait would break the "One Definition Rule",
* as the state of any type can change from "partially defined" to "fully defined" over
* the course of any translation unit. Thus, even if there may be a \em solution out there,
* we can expect it to break at some point by improvements/fixes to the C++ Language.
*/
template<template<class> class _CandidateTemplate_>
struct Instantiation
{
template<class X>
class Test
{
typedef _CandidateTemplate_<X> Instance;
template<class U>
static Yes_t check(typename U::is_defined *);
template<class U>
static No_t check(...);
public:
static const bool value = (sizeof(Yes_t)==sizeof(check<Instance>(0)));
};
};
} // namespace typelist
} // namespace lumiera
#endif

View file

@ -35,7 +35,7 @@ This code is heavily inspired by
#define LUMIERA_SINGLETONFACTORY_H
#include "common/singletonpolicies.hpp" //< several Policies usable together with SingletonFactory
#include "common/singletonpolicies.hpp" ///< several Policies usable together with SingletonFactory
#include "common/util.hpp"
#include "proc/nobugcfg.hpp"

View file

@ -237,4 +237,8 @@ namespace util
* and we probably will enforce this design rule in future. */
#define INSTANCEOF(CLASS, EXPR) (dynamic_cast<const CLASS*> (EXPR))
/** the inevitalbe MAX macro, sometimes still necessary in template code */
#define MAX(A,B) (A < B) ? (B) : (A)
#endif /*UTIL_HPP_*/

View file

@ -41,7 +41,8 @@
#define LUMIERA_VARIANT_H
#include "common/typelistutil.hpp"
#include "common/meta/typelistutil.hpp"
#include "common/meta/generator.hpp"
#include <boost/noncopyable.hpp>

View file

@ -79,7 +79,7 @@ Credits for many further implementation ideas go to
#include "common/visitorpolicies.hpp"
#include "common/visitordispatcher.hpp"
#include "common/typelist.hpp"
#include "common/meta/typelist.hpp"
namespace lumiera

View file

@ -29,7 +29,7 @@
#include "common/variant.hpp"
#include "common/accesscasted.hpp"
#include "common/typelist.hpp"
#include "common/meta/typelist.hpp"
#include "proc/mobject/placement.hpp"
#include "common/p.hpp"

View file

@ -63,8 +63,9 @@ TimelinePanel::TimelinePanel() :
toolbar.append(seperator2);
toolbar.append(zoomIn, mem_fun(this, &TimelinePanel::on_zoom_in));
toolbar.append(zoomOut, mem_fun(this, &TimelinePanel::on_zoom_out));
toolbar.set_icon_size(IconSize(ICON_SIZE_LARGE_TOOLBAR));
// doesn't compile on Etch
// toolbar.set_icon_size(IconSize(ICON_SIZE_LARGE_TOOLBAR));
toolbar.set_toolbar_style(TOOLBAR_ICONS);
// Add the toolbar

View file

@ -49,5 +49,5 @@ noinst_HEADERS += \
$(liblumi_a_srcdir)/mrucache.h \
$(liblumi_a_srcdir)/time.h \
$(liblumi_a_srcdir)/appconfig.hpp \
$(liblumi_a_srcdir)/appconfig.hpp
$(liblumi_a_srcdir)/lifecycleregistry.hpp

View file

@ -25,9 +25,8 @@ liblumiproc_a_CXXFLAGS = $(CXXFLAGS) -Wall
liblumiproc_a_CPPFLAGS = -I$(top_srcdir)/src/
liblumiproc_a_SOURCES = \
$(liblumiproc_a_srcdir)/controllerfacade.cpp \
$(liblumiproc_a_srcdir)/frame.cpp \
$(liblumiproc_a_srcdir)/stateproxy.cpp \
$(liblumiproc_a_srcdir)/controllerfacade.cpp \
$(liblumiproc_a_srcdir)/state.cpp \
$(liblumiproc_a_srcdir)/asset.cpp \
$(liblumiproc_a_srcdir)/assetmanager.cpp \
$(liblumiproc_a_srcdir)/nobugcfg.cpp
@ -66,25 +65,19 @@ liblumiprocengine_a_CXXFLAGS = $(CXXFLAGS) -Wall
liblumiprocengine_a_CPPFLAGS = -I$(top_srcdir)/src/
liblumiprocengine_a_SOURCES = \
$(liblumiprocengine_a_srcdir)/aframe.cpp \
$(liblumiprocengine_a_srcdir)/arender.cpp \
$(liblumiprocengine_a_srcdir)/codecadapter.cpp \
$(liblumiprocengine_a_srcdir)/exitnode.cpp \
$(liblumiprocengine_a_srcdir)/glbuf.cpp \
$(liblumiprocengine_a_srcdir)/glpipe.cpp \
$(liblumiprocengine_a_srcdir)/glrender.cpp \
$(liblumiprocengine_a_srcdir)/hub.cpp \
$(liblumiprocengine_a_srcdir)/buffhandle.cpp \
$(liblumiprocengine_a_srcdir)/link.cpp \
$(liblumiprocengine_a_srcdir)/mask.cpp \
$(liblumiprocengine_a_srcdir)/nodefactory.cpp \
$(liblumiprocengine_a_srcdir)/nodewiring.cpp \
$(liblumiprocengine_a_srcdir)/pluginadapter.cpp \
$(liblumiprocengine_a_srcdir)/processor.cpp \
$(liblumiprocengine_a_srcdir)/procnode.cpp \
$(liblumiprocengine_a_srcdir)/projector.cpp \
$(liblumiprocengine_a_srcdir)/renderengine.cpp \
$(liblumiprocengine_a_srcdir)/source.cpp \
$(liblumiprocengine_a_srcdir)/trafo.cpp \
$(liblumiprocengine_a_srcdir)/vframe.cpp \
$(liblumiprocengine_a_srcdir)/vrender.cpp
$(liblumiprocengine_a_srcdir)/source.cpp \
$(liblumiprocengine_a_srcdir)/stateproxy.cpp \
$(liblumiprocengine_a_srcdir)/trafo.cpp
@ -113,8 +106,9 @@ liblumiprocmobjectbuilder_a_CPPFLAGS = -I$(top_srcdir)/src/
liblumiprocmobjectbuilder_a_SOURCES = \
$(liblumiprocmobjectbuilder_a_srcdir)/assembler.cpp \
$(liblumiprocmobjectbuilder_a_srcdir)/conmanager.cpp \
$(liblumiprocmobjectbuilder_a_srcdir)/nodecreatertool.cpp \
$(liblumiprocmobjectbuilder_a_srcdir)/segmentationtool.cpp
$(liblumiprocmobjectbuilder_a_srcdir)/nodecreatortool.cpp \
$(liblumiprocmobjectbuilder_a_srcdir)/segmentationtool.cpp \
$(liblumiprocmobjectbuilder_a_srcdir)/toolfactory.cpp
liblumiprocmobjectcontroller_a_srcdir = $(top_srcdir)/src/proc/mobject/controller
@ -124,8 +118,7 @@ liblumiprocmobjectcontroller_a_CXXFLAGS = $(CXXFLAGS) -Wall
liblumiprocmobjectcontroller_a_CPPFLAGS = -I$(top_srcdir)/src/
liblumiprocmobjectcontroller_a_SOURCES = \
$(liblumiprocmobjectcontroller_a_srcdir)/pathmanager.cpp \
$(liblumiprocmobjectcontroller_a_srcdir)/renderstate.cpp
$(liblumiprocmobjectcontroller_a_srcdir)/pathmanager.cpp
liblumiprocmobjectsession_a_srcdir = $(top_srcdir)/src/proc/mobject/session
@ -138,9 +131,12 @@ liblumiprocmobjectsession_a_SOURCES = \
$(liblumiprocmobjectsession_a_srcdir)/abstractmo.cpp \
$(liblumiprocmobjectsession_a_srcdir)/allocation.cpp \
$(liblumiprocmobjectsession_a_srcdir)/auto.cpp \
$(liblumiprocmobjectsession_a_srcdir)/compoundclip.cpp \
$(liblumiprocmobjectsession_a_srcdir)/clip.cpp \
$(liblumiprocmobjectsession_a_srcdir)/compoundclip.cpp \
$(liblumiprocmobjectsession_a_srcdir)/constraint.cpp \
$(liblumiprocmobjectsession_a_srcdir)/defsmanager.cpp \
$(liblumiprocmobjectsession_a_srcdir)/effect.cpp \
$(liblumiprocmobjectsession_a_srcdir)/fixedlocation.cpp \
$(liblumiprocmobjectsession_a_srcdir)/fixedlocation.cpp \
$(liblumiprocmobjectsession_a_srcdir)/label.cpp \
$(liblumiprocmobjectsession_a_srcdir)/meta.cpp \
$(liblumiprocmobjectsession_a_srcdir)/relativelocation.cpp \
@ -152,9 +148,6 @@ liblumiprocmobjectsession_a_SOURCES = \
$(liblumiprocmobjectsession_a_srcdir)/edl.cpp \
$(liblumiprocmobjectsession_a_srcdir)/session.cpp \
$(liblumiprocmobjectsession_a_srcdir)/track.cpp \
$(liblumiprocmobjectsession_a_srcdir)/clip.cpp \
$(liblumiprocmobjectsession_a_srcdir)/constraint.cpp \
$(liblumiprocmobjectsession_a_srcdir)/defsmanager.cpp \
$(liblumiprocmobjectsession_a_srcdir)/fixture.cpp \
$(liblumiprocmobjectsession_a_srcdir)/locatingpin.cpp \
$(liblumiprocmobjectsession_a_srcdir)/mobjectfactory.cpp \
@ -183,15 +176,6 @@ noinst_HEADERS += \
$(liblumiproc_a_srcdir)/asset/track.hpp \
$(liblumiproc_a_srcdir)/asset/unknown.hpp \
$(liblumiproc_a_srcdir)/controllerfacade.hpp \
$(liblumiproc_a_srcdir)/engine/aframe.hpp \
$(liblumiproc_a_srcdir)/engine/arender.hpp \
$(liblumiproc_a_srcdir)/engine/codecadapter.hpp \
$(liblumiproc_a_srcdir)/engine/exitnode.hpp \
$(liblumiproc_a_srcdir)/engine/glbuf.hpp \
$(liblumiproc_a_srcdir)/engine/glpipe.hpp \
$(liblumiproc_a_srcdir)/engine/glrender.hpp \
$(liblumiproc_a_srcdir)/engine/hub.hpp \
$(liblumiproc_a_srcdir)/engine/link.hpp \
$(liblumiproc_a_srcdir)/engine/mask.hpp \
$(liblumiproc_a_srcdir)/engine/pluginadapter.hpp \
$(liblumiproc_a_srcdir)/engine/procnode.hpp \
@ -199,15 +183,12 @@ noinst_HEADERS += \
$(liblumiproc_a_srcdir)/engine/renderengine.hpp \
$(liblumiproc_a_srcdir)/engine/source.hpp \
$(liblumiproc_a_srcdir)/engine/trafo.hpp \
$(liblumiproc_a_srcdir)/engine/vframe.hpp \
$(liblumiproc_a_srcdir)/engine/vrender.hpp \
$(liblumiproc_a_srcdir)/engine/processor.hpp \
$(liblumiproc_a_srcdir)/frame.hpp \
$(liblumiproc_a_srcdir)/mobject/builder/assembler.hpp \
$(liblumiproc_a_srcdir)/mobject/builder/buildertool.hpp \
$(liblumiproc_a_srcdir)/mobject/builder/conmanager.hpp \
$(liblumiproc_a_srcdir)/mobject/builder/nodecreatertool.hpp \
$(liblumiproc_a_srcdir)/mobject/builder/segmentationtool.hpp \
$(liblumiproc_a_srcdir)/mobject/builder/toolfactory.hpp \
$(liblumiproc_a_srcdir)/mobject/builderfacade.hpp \
$(liblumiproc_a_srcdir)/mobject/controller/pathmanager.hpp \
$(liblumiproc_a_srcdir)/mobject/controller/renderstate.hpp \
@ -241,7 +222,6 @@ noinst_HEADERS += \
$(liblumiproc_a_srcdir)/mobject/mobject.hpp \
$(liblumiproc_a_srcdir)/mobject/placement.hpp \
$(liblumiproc_a_srcdir)/mobject/session.hpp \
$(liblumiproc_a_srcdir)/stateproxy.hpp \
$(liblumiproc_a_srcdir)/asset.hpp \
$(liblumiproc_a_srcdir)/assetmanager.hpp \
$(liblumiproc_a_srcdir)/lumiera.hpp \

View file

@ -108,7 +108,15 @@ namespace asset
: public InstructEntry
{
template<typename T>
BuildInstruct (T& instr) : InstructEntry(instr) {}
BuildInstruct (T& instr) : InstructEntry() {}
// TODO: this ctor is *not* correct, just to make it compile
// There is a strange problem with boost::variant, probably becausse the
// template parameter T could be anything (but actually we know it's one
// of our Instruction types.
// I have to reinvestigate this design anyway, and probably will replace
// the boost::variant by something else, derive from a common base or such.
// Note: as of 8/2008 ProcPatt is just a draft and not implemented.
};

View file

@ -91,7 +91,8 @@ namespace asset
else
{
DoAttach entry(node, where);
instructions_.push_back(BuildInstruct(entry));
BuildInstruct instruction(entry);
instructions_.push_back(instruction);
}
TODO ("declare dependency??");
return *this;

View file

@ -1,34 +0,0 @@
/*
AFrame - buffer holding a Audio samples for the render process
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/aframe.hpp"
namespace engine
{
/** */
} // namespace engine

View file

@ -1,41 +0,0 @@
/*
AFRAME.hpp - buffer holding a Audio samples for the render process
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_AFRAME_H
#define ENGINE_AFRAME_H
#include "proc/frame.hpp"
namespace engine
{
class AFrame : public proc_interface::Frame
{};
} // namespace engine
#endif

View file

@ -1,44 +0,0 @@
/*
ARENDER.hpp - Representation of a Audio Render process
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_ARENDER_H
#define ENGINE_ARENDER_H
#include "proc/stateproxy.hpp"
namespace engine
{
/**
* Representation of a Audio render process
*/
class ARender : public proc_interface::StateProxy
{};
} // namespace engine
#endif

View file

@ -1,5 +1,5 @@
/*
ARender - Representation of a Audio Render process
BuffHandle - Buffer handling support for the render engine
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,14 +21,12 @@
* *****************************************************/
#include "proc/engine/arender.hpp"
#include "proc/engine/buffhandle.hpp"
namespace engine
{
/** */
namespace engine {
/** */
} // namespace engine

View file

@ -0,0 +1,104 @@
/*
BUFFHANDLE.hpp - Buffer handling support for the render engine
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 buffhandle.hpp
** Various bits needed to support the buffer management within the render nodes.
** When pulling data from predecessor nodes and calculating new data, each render node
** needs several input and output buffers. These may be allocated and provided by several
** different "buffer providers" (for example the frame cache). For accessing those buffers,
** the node needs to keep a table of buffer pointers, and for releasing the buffers later
** on, we need some handles. The usage pattern of those buffer pointer tables is stack-like,
** thus it makes sense to utilize a single large buffer pointer array per pull() calldown
** sequence and dynamically claim small chunks for each node.
**
** @see nodeoperation.hpp
** @see bufftable.hpp storage for the buffer table
** @see engine::Invocation
*/
#ifndef ENGINE_BUFFHANDLE_H
#define ENGINE_BUFFHANDLE_H
#include "common/error.hpp"
namespace engine {
/**
* Handle for a buffer for processing data, abstracting away the actual implementation.
* The real buffer pointer can be retrieved by dereferencing this smart-handle class.
*/
struct BuffHandle
{
typedef float Buff;
typedef Buff* PBuff;//////TODO define the Buffer type(s)
PBuff
operator->() const
{
return pBuffer_;
}
Buff&
operator* () const
{
ENSURE (pBuffer_);
return *pBuffer_;
}
protected:
PBuff pBuffer_;
long sourceID_;
};
/**
* Buffer Type information.
* Given a BufferDescriptor, it is possible to allocate a buffer
* of suitable size and type by using State::allocateBuffer().
*/
struct BufferDescriptor
{
char typeID_; ///////TODO define the Buffer type(s)
};
class ProcNode;
typedef ProcNode* PNode;
struct ChannelDescriptor ///////TODO collapse this with BufferDescriptor?
{
BufferDescriptor bufferType;
};
struct InChanDescriptor : ChannelDescriptor
{
PNode dataSrc; ///< the ProcNode to pull this input from
uint srcChannel; ///< output channel to use on the predecessor node
};
} // namespace engine
#endif

View file

@ -0,0 +1,162 @@
/*
BUFFTABLE.hpp - Table of buffer pointers to be used by the render nodes
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_BUFFHTABLE_H
#define ENGINE_BUFFHTABLE_H
#include "common/error.hpp"
#include "proc/engine/buffhandle.hpp"
#include "proc/engine/procnode.hpp"
#include <boost/noncopyable.hpp>
#include <vector>
#include <utility>
namespace engine {
using std::pair;
using std::vector;
/**
* Tables of buffer handles and corresponding dereferenced buffer pointers.
* Used within the invocation of a processing node to calculate data.
* The tables are further differentiated into input data buffers and output
* data buffers. The tables are supposed to be implemented as bare "C" arrays,
* thus the array of real buffer pointers can be fed directly to the
* processing function of the respective node.
*/
struct BuffTable
{
typedef BuffHandle * PHa;
typedef BuffHandle::PBuff * PBu;
typedef pair<PHa const,PBu const> Chunk;
PHa outHandle;
PHa inHandle;
PBu outBuff;
PBu inBuff;
};
class BuffTableStorage
{
vector<BuffHandle> hTab_;
vector<BuffHandle::PBuff> pTab_;
size_t level_;
public:
BuffTableStorage (const size_t maxSiz)
: hTab_(maxSiz),
pTab_(maxSiz),
level_(0)
{ }
~BuffTableStorage() { ASSERT (0==level_, "buffer management logic broken."); }
protected:
friend class BuffTableChunk;
/** allocate the given number of slots
* starting at current level to be used
* by the newly created BuffTableChunk
*/
BuffTable::Chunk
claim (uint slots)
{
ASSERT (pTab_.size() == hTab_.size());
REQUIRE (level_+slots <= hTab_.size());
size_t prev_level (level_);
level_ += slots;
return std::make_pair (&hTab_[prev_level],
&pTab_[prev_level]);
}
void
release (uint slots)
{
ASSERT (slots <= level_);
REQUIRE (level_ <= hTab_.size());
REQUIRE (level_ <= pTab_.size());
level_ -= slots;
}
bool
level_check (BuffTable::Chunk& prev_level)
{
return prev_level.first == &hTab_[level_]
&& prev_level.second == &pTab_[level_];
}
};
/**
* to be allocated on the stack while evaluating a ProcNode#pull() call.
* The "current" State (StateProxy) maintains a BuffTableStorage (=pool),
* which can be used to crate such chunks. The claiming and releasing of
* slots in the BuffTableStorage is automatically tied to BuffTableChunk
* object's lifecycle.
*/
class BuffTableChunk
: public BuffTable,
boost::noncopyable
{
const uint siz_;
BuffTable::Chunk tab_;
BuffTableStorage& sto_;
public:
BuffTableChunk (WiringDescriptor const& wd, BuffTableStorage& storage)
: siz_(wd.getNrI() + wd.getNrO()),
tab_(storage.claim (siz_)),
sto_(storage)
{
const uint nrO(wd.getNrO());
// Setup the public visible table locations
this->outHandle = &tab_.first[ 0 ];
this->inHandle = &tab_.first[nrO];
this->outBuff = &tab_.second[ 0 ];
this->inBuff = &tab_.second[nrO];
}
~BuffTableChunk ()
{
sto_.release (siz_);
ASSERT ( sto_.level_check (tab_),
"buffer management logic broken.");
}
};
} // namespace engine
#endif

View file

@ -1,30 +0,0 @@
/*
CodecAdapter - Processing Node for (de)coding media data
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/codecadapter.hpp"
namespace engine
{
} // namespace engine

View file

@ -1,49 +0,0 @@
/*
CODECADAPTER.hpp - Processing Node for (de)coding media data
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_CODECADAPTER_H
#define ENGINE_CODECADAPTER_H
#include "proc/engine/trafo.hpp"
namespace engine
{
/**
* Adapter for wiring an externally loaded
* codec into the render pipeline. The decoding
* process thus is integrated into the framework
* of the Renderengine, while the actual implementation
* can be delegated to an external library accessed
* through Lumiera's data backend.
*/
class CodecAdapter : public Trafo
{};
} // namespace engine
#endif

View file

@ -1,34 +0,0 @@
/*
GLBuf - a buffer and render process holding a Video frame for OpenGL rendering
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/glbuf.hpp"
namespace engine
{
/** */
} // namespace engine

View file

@ -1,39 +0,0 @@
/*
GLBUF.hpp - a buffer and render process holding a Video frame for OpenGL rendering
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_GLBUF_H
#define ENGINE_GLBUF_H
#include "proc/frame.hpp"
namespace engine
{
class GLBuf : public proc_interface::Frame
{};
} // namespace engine
#endif

View file

@ -1,34 +0,0 @@
/*
GLPipe - specialized connection element for handling OpenGL implementation details
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/glpipe.hpp"
namespace engine
{
/** */
} // namespace engine

View file

@ -1,46 +0,0 @@
/*
GLPIPE.hpp - specialized connection element for handling OpenGL implementation details
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_GLPIPE_H
#define ENGINE_GLPIPE_H
#include "proc/engine/link.hpp"
namespace engine
{
/**
* specialized connection node used to handle the transfer of OpenGL data
* from a image bitmap into texture form.
*/
class GLPipe : public Link
{};
} // namespace engine
#endif

View file

@ -1,33 +0,0 @@
/*
GLRender - Representation of a OpenGL accellerated Video render process
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/glrender.hpp"
namespace engine
{
/** */
} // namespace engine

View file

@ -1,42 +0,0 @@
/*
GLRENDER.hpp - Representation of a OpenGL accellerated Video render process
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_GLRENDER_H
#define ENGINE_GLRENDER_H
#include "proc/stateproxy.hpp"
namespace engine
{
/**
* Representation of a OpenGL accelerated Video render process
*/
class GLRender : public proc_interface::StateProxy
{};
} // namespace engine
#endif

View file

@ -1,34 +0,0 @@
/*
Hub - special ProcNode used to build data distributing connections
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/hub.hpp"
namespace engine
{
/** */
} // namespace engine

View file

@ -1,44 +0,0 @@
/*
HUB.hpp - special ProcNode used to build data distributing connections
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_HUB_H
#define ENGINE_HUB_H
#include "proc/engine/procnode.hpp"
namespace engine
{
class Hub : public ProcNode
{};
///TODO: seems rather we don't need this one anymore??
//////// to be decided after the implementing the basic render engine....
} // namespace engine
#endif

View file

@ -40,6 +40,10 @@ namespace engine
*/
class Link : public ProcNode
{
Link (WiringDescriptor const& wd)
: ProcNode(wd)
{ }
///////TODO: flatten hierarchy if we don't have common functionallity for all Link-Subclasses
///////TODO: can be decdiede when we know more how to handle OpenGL rendering
};

View file

@ -1,5 +1,5 @@
/*
ExitNode - special Processing Node providing "pullable" output
NodeFactory - Interface for creating processing nodes of variouos kinds
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,13 +21,21 @@
* *****************************************************/
#include "proc/engine/exitnode.hpp"
#include "proc/engine/nodefactory.hpp"
#include "proc/mobject/session/effect.hpp"
namespace engine
namespace engine {
using mobject::Placement;
using mobject::session::Effect;
/** create a processing node able to render an effect */
PTrafo
NodeFactory::operator() (Placement<Effect> const&)
{
/** */
UNIMPLEMENTED ("create proc node for Effect/Plugin");
}
} // namespace engine

View file

@ -1,5 +1,5 @@
/*
EXITNODE.hpp - special Processing Node providing "pullable" output
NODEFACTORY.hpp - Interface for creating processing nodes of variouos kinds
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,25 +21,46 @@
*/
#ifndef ENGINE_EXITNODE_H
#define ENGINE_EXITNODE_H
#ifndef ENGINE_NODEFACTORY_H
#define ENGINE_NODEFACTORY_H
#include "proc/engine/procnode.hpp"
#include "proc/mobject/placement.hpp"
namespace engine
{
namespace mobject {
namespace session {
class Clip;
class Effect;
typedef Placement<Effect> PEffect;
// TODO: class Transition;
} // namespace mobject::session
} // namespace mobject
namespace engine {
using std::vector;
class Trafo;
typedef Trafo* PTrafo; ///< @note ProcNode is handled by pointer and bulk allocated/dealocated
/**
* The output end of each render pipeline.
* Pulling from such exit nodes actually ivokes the render process
* Create processing nodes based on given objects of the high-level model.
*/
class ExitNode : public ProcNode
{};
class NodeFactory
{
public:
PTrafo operator() (mobject::session::PEffect const&);
};
} // namespace engine
#endif

View file

@ -0,0 +1,216 @@
/*
NODEINVOCATION.hpp - Organize the invocation state within a single pull() call
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 nodeinvocation.hpp
** Organize the state related to the invocation of s single ProcNode::pull() call
** This header defines part of the "glue" which holds together the render node network
** and enables to pull result frames from the nodes. Doing so requires some invocation
** local state to be maintained, especially a table of buffers used to carry out the
** calculations. Further, getting the input buffers filled requires to issue recursive
** \c pull() calls, which on the whole creates a stack-like assembly of local invocation
** state.
** The actual steps to be carried out for a \c pull() call are dependant on the configuration
** of the node to pull. Each node has been preconfigured by the builder with a WiringDescriptor
** and a concrete type of a StateAdapter. The actual sequence of steps is defined in the header
** nodeoperation.hpp out of a set of basic operation steps. These steps all use the passed in
** Invocation object (a sub-interface of StateAdapter) to access the various aspects of the
** invocation state.
**
** \par composition of the Invocation State
** For each individual ProcNode#pull() call, the WiringAdapter#callDown() builds an StateAdapter
** instance directly on the stack, managing the actual buffer pointers and state references. Using this
** StateAdapter, the predecessor nodes are pulled. The way these operations are carried out is encoded
** in the actual StateAdapter type known to the NodeWiring (WiringAdapter) instance. All of these actual
** StateAdapter types are built as implementing the engine::State interface.
**
** @see engine::ProcNode
** @see engine::StateProxy
** @see engine::BuffTable
** @see nodewiring.hpp interface for building/wiring the nodes
**
*/
#ifndef ENGINE_NODEINVOCATION_H
#define ENGINE_NODEINVOCATION_H
#include "proc/state.hpp"
#include "proc/engine/procnode.hpp"
#include "proc/engine/buffhandle.hpp"
#include "proc/engine/bufftable.hpp"
namespace engine {
/**
* Adapter to shield the ProcNode from the actual buffer management,
* allowing the processing function within ProcNode to use logical
* buffer IDs. StateAdapter is created on the stack for each pull()
* call, using setup/wiring data preconfigured by the builder.
* Its job is to provide the actual implementation of the Cache
* push / fetch and recursive downcall to render the source frames.
*/
class StateAdapter
: public State
{
protected:
State& parent_;
State& current_;
StateAdapter (State& callingProcess)
: parent_ (callingProcess),
current_(callingProcess.getCurrentImplementation())
{ }
virtual State& getCurrentImplementation () { return current_; }
public: /* === proxying the State interface === */
virtual void releaseBuffer (BuffHandle& bh) { current_.releaseBuffer (bh); }
virtual void is_calculated (BuffHandle const& bh) { current_.is_calculated (bh); }
virtual BuffHandle fetch (FrameID const& fID) { return current_.fetch (fID); }
// note: allocateBuffer() is choosen specifically based on the actual node wiring
};
/**
* Invocation context state.
* A ref to this type is carried through the chain of NEXT::step() functions
* which form the actual invocation sequence. The various operations in this sequence
* access the context via the references in this struct, while also using the inherited
* public State interface. The object instance actually used as Invocation is created
* on the stack and parametrized according to the necessities of the invocation sequence
* actually configured. Initially, this real instance is configured without BuffTable,
* because the invocation may be short-circuited due to Cache hit. Otherwise, when
* the invocation sequence actually prepares to call the process function of this
* ProcNode, a buffer table chunk is allocated by the StateProxy and wired in.
*/
struct Invocation
: StateAdapter
{
WiringDescriptor const& wiring;
const uint outNr;
BuffTable* buffTab;
protected:
/** creates a new invocation context state, without BuffTable */
Invocation (State& callingProcess, WiringDescriptor const& w, uint o)
: StateAdapter(callingProcess),
wiring(w), outNr(o),
buffTab(0)
{ }
const uint nrO() const { return wiring.getNrO(); }
const uint nrI() const { return wiring.getNrI(); }
const uint buffTabSize() const { return nrO()+nrI(); }
/** setup the link to an externally allocated buffer table */
void setBuffTab (BuffTable* b) { this->buffTab = b; }
bool
buffTab_isConsistent ()
{
return (buffTab)
&& (0 < buffTabSize())
&& (nrO()+nrI() <= buffTabSize())
&& (buffTab->inBuff == &buffTab->outBuff[nrO()] )
&& (buffTab->inHandle == &buffTab->outHandle[nrO()])
;
}
};
struct AllocBufferFromParent ///< using the parent StateAdapter for buffer allocations
: Invocation
{
AllocBufferFromParent (State& sta, WiringDescriptor const& w, const uint outCh)
: Invocation(sta, w, outCh) {}
virtual BuffHandle
allocateBuffer (BufferDescriptor const& bd) { return parent_.allocateBuffer(bd); }
};
struct AllocBufferFromCache ///< using the global current State, which will delegate to Cache
: Invocation
{
AllocBufferFromCache (State& sta, WiringDescriptor const& w, const uint outCh)
: Invocation(sta, w, outCh) {}
virtual BuffHandle
allocateBuffer (BufferDescriptor const& bd) { return current_.allocateBuffer(bd); }
};
/**
* The real invocation context state implementation. It is created
* by the NodeWiring (WiringDescriptor) of the processing node which
* is pulled by this invocation, hereby using the internal configuration
* information to guide the selecton of the real call sequence
*
* \par assembling the call sequence implementation
* Each ProcNode#pull() call creates such a StateAdapter subclass on the stack,
* with a concrete type according to the WiringDescriptor of the node to pull.
* This concrete type encodes a calculation Strategy, which is assembled
* as a chain of policy templates on top of OperationBase. For each of the
* possible configuratons we define such a chain (see bottom of nodeoperation.hpp).
* The WiringFactory defined in nodewiring.cpp actually drives the instantiation
* of all those possible combinations.
*/
template<class Strategy, class BufferProvider>
class ActualInvocationProcess
: public BufferProvider
{
public:
ActualInvocationProcess (State& callingProcess, WiringDescriptor const& w, const uint outCh)
: BufferProvider(callingProcess, w, outCh)
{ }
/** contains the details of Cache query and recursive calls
* to the predecessor node(s), eventually followed by the
* ProcNode::process() callback
*/
BuffHandle retrieve ()
{
return Strategy::step (*this);
}
};
} // namespace engine
#endif

View file

@ -0,0 +1,311 @@
/*
NODEOPERATION.hpp - Specify how the nodes call each other and how processing is organized
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 nodeoperation.hpp
** Chunks of operation for invoking the rendernodes.
** This header defines part of the "glue" which holds together the render node network
** and enables to pull a result frames from the nodes. Especially, the aspect of
** buffer management and cache query is covered here. Each node has been preconfigured by
** the builder with a WiringDescriptor and a concrete type of a StateAdapter, including
** a specific Configuration, because the node can be built to
** - participate in the Caching or ignore the cache
** - actually process a result or just pull frames from a source
** - employ in-Place calculations or use separate in/out buffers
** Additionally, each node may have a given number of input/output pins, expecting to
** be provided with buffers holding a specific kind of data.
**
** \par composition of the invocation Strategy
** For each individual ProcNode#pull() call, the WiringAdapter#callDown() builds an Invocation state
** instance directly on the stack, holding references to the actual buffer pointers and state. Using this
** StateAdapter, the predecessor nodes are pulled. The way these operations are carried out is encoded
** in the actual type of Strategy, which is defined at the bottom of this header. Each Strategy is a chain
** of elementary operations invoking each other (\c NEXT::step(invocation) ). Notably, all those possible
** configurations are pre-build while compiling (it's a small number below 32 configuration instance).
** To be able to select the Strategy for each configuration, we need a Factory (ConfigSelector defined in
** nodewiringconfig). which is actually instantiated and used in nodewiring.cpp, which is the object
** file holding all those instantiations.
**
** @see engine::ProcNode
** @see engine::Invocation
** @see engine::State
** @see engine::NodeFactory
** @see nodewiringconfig.hpp
** @see nodewiring.hpp interface for building/wiring the nodes
**
*/
#ifndef ENGINE_NODEOPERATION_H
#define ENGINE_NODEOPERATION_H
#include "proc/state.hpp"
#include "proc/engine/procnode.hpp"
#include "proc/engine/buffhandle.hpp"
#include "proc/engine/bufftable.hpp"
#include "proc/engine/nodeinvocation.hpp"
#include "common/meta/util.hpp"
#include "common/meta/configflags.hpp"
namespace engine {
namespace config {
/**
* Collection of functions used to build up the invocation sequence.
*/
class OperationBase
{
typedef lumiera::Yes_t is_defined;
};
template<class NEXT>
struct QueryCache : NEXT
{
BuffHandle
step (Invocation& ivo)
{
BuffHandle fetched = ivo.fetch (
this->genFrameID (ivo));
if (fetched)
return fetched;
else
return NEXT::step (ivo);
}
};
template<class NEXT>
struct AllocBufferTable : NEXT
{
BuffHandle
step (Invocation& ivo)
{
BuffTableChunk buffTab (ivo.wiring, ivo.getBuffTableStorage());
ivo.setBuffTab(&buffTab);
ASSERT (ivo.buffTab);
ASSERT (ivo.buffTab_isConsistent());
return NEXT::step (ivo);
}
};
template<class NEXT>
struct PullInput : NEXT
{
BuffHandle
step (Invocation& ivo)
{
BuffHandle * inH = ivo.buffTab->inHandle;
BuffHandle::PBuff *inBuff = ivo.buffTab->inBuff;
for (uint i = 0; i < ivo.nrI(); ++i )
{
inBuff[i] =
*(inH[i] = this->pullPredecessor(ivo,i)); // invoke predecessor
// now Input #i is ready...
}
return NEXT::step (ivo); // note: passing down a ref to the ProcessInvocation
}
};
template<class NEXT>
struct ReadSource : NEXT
{
BuffHandle
step (Invocation& ivo)
{
BuffHandle *inH = ivo.buffTab->inHandle;
BuffHandle *outH = ivo.buffTab->outHandle;
BuffHandle::PBuff *inBuff = ivo.buffTab->inBuff;
BuffHandle::PBuff *outBuff = ivo.buffTab->outBuff;
ASSERT (ivo.nrO() == ivo.nrI() );
for (uint i = 0; i < ivo.nrI(); ++i )
{
inBuff[i] = outBuff[i] =
*(inH[i] = outH[i] = this->getSource(ivo,i));
// now Input #i is ready...
}
return NEXT::step (ivo);
}
};
template<class NEXT>
struct AllocOutput : NEXT
{
BuffHandle
step (Invocation& ivo)
{
ASSERT (ivo.buffTab);
ASSERT (ivo.nrO() < ivo.buffTabSize());
BuffHandle *outH = ivo.buffTab->outHandle;
BuffHandle::PBuff *outBuff = ivo.buffTab->outBuff;
for (uint i = 0; i < ivo.nrO(); ++i )
{
outBuff[i] =
*(outH[i] = ivo.allocateBuffer (ivo.wiring.out[i].bufferType));
// now Output buffer for channel #i is available...
}
return NEXT::step (ivo);
}
};
template<class NEXT>
struct ProcessData : NEXT
{
BuffHandle
step (Invocation& ivo)
{
ASSERT (ivo.buffTab);
ASSERT (ivo.buffTab_isConsistent());
ASSERT (this->validateBuffers(ivo));
// Invoke our own process() function,
// providing the array of outBuffer+inBuffer ptrs
ivo.wiring.processFunction (ivo.buffTab->outBuff);
return NEXT::step (ivo);
}
};
template<class NEXT>
struct FeedCache : NEXT
{
BuffHandle
step (Invocation& ivo)
{
for (uint i = 0; i < ivo.nrO(); ++i )
{
// declare all Outputs as finished
ivo.is_calculated(ivo.buffTab->outHandle[i]);
}
return NEXT::step (ivo);
}
};
template<class NEXT>
struct ReleaseBuffers : NEXT /////////////////TODO: couldn't this be done automatically by BuffTab's dtor??
{ ///////////////// this would require BuffHandle to be a smart ref....
BuffHandle
step (Invocation& ivo)
{
// all buffers besides the required Output no longer needed
this->releaseBuffers(ivo.buffTab->outHandle,
ivo.buffTabSize(),
ivo.outNr);
return ivo.buffTab->outHandle[ivo.outNr];
}
};
/* === declare the possible Assembly of these elementary steps === */
enum Cases
{
CACHING = 1,
PROCESS,
INPLACE,
NOT_SET = 0,
NUM_Cases = INPLACE
};
template<char CACHE_Fl=0, char INPLACE_Fl=0>
struct SelectBuffProvider;
template<> struct SelectBuffProvider<CACHING> { typedef AllocBufferFromCache Type; };
template<> struct SelectBuffProvider<NOT_SET,INPLACE> { typedef AllocBufferFromParent Type; };
template<> struct SelectBuffProvider<CACHING,INPLACE> { typedef AllocBufferFromCache Type; };
template<> struct SelectBuffProvider<> { typedef AllocBufferFromParent Type; };
template<class Config>
struct Strategy ;
using lumiera::typelist::Config;
template<char INPLACE>
struct Strategy< Config<CACHING,PROCESS,INPLACE> >
: QueryCache<
AllocBufferTable<
PullInput<
AllocOutput<
ProcessData<
FeedCache<
ReleaseBuffers<
OperationBase > > > > > > >
{ };
template<char INPLACE>
struct Strategy< Config<PROCESS,INPLACE> >
: AllocBufferTable<
PullInput<
AllocOutput<
ProcessData<
ReleaseBuffers<
OperationBase > > > > >
{ };
template<>
struct Strategy< Config<> >
: AllocBufferTable<
ReadSource<
ReleaseBuffers<
OperationBase > > >
{ };
template<>
struct Strategy< Config<INPLACE> > : Strategy< Config<> > { };
template<>
struct Strategy< Config<CACHING> >
: AllocBufferTable<
ReadSource<
AllocOutput<
ProcessData< // wiring_.processFunction is supposed to do just buffer copying here
ReleaseBuffers<
OperationBase > > > > >
{ };
} // namespace config
} // namespace engine
#endif

View file

@ -0,0 +1,138 @@
/*
NodeWiring - Implementation of the node network and operation control
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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/engine/procnode.hpp"
#include "proc/engine/nodewiring.hpp"
#include "proc/engine/nodeoperation.hpp"
#include "proc/engine/nodewiringconfig.hpp"
#include "common/meta/typelistutil.hpp"
namespace engine {
namespace config {
using lumiera::typelist::Flags;
using lumiera::typelist::CombineFlags;
using lumiera::typelist::DefineConfigByFlags;
using lumiera::typelist::Instantiation;
using lumiera::typelist::Apply;
using lumiera::typelist::Filter;
typedef Flags<CACHING,PROCESS,INPLACE>::Tuple AllFlags;
/** build the list of all possible flag combinations */
typedef CombineFlags<AllFlags> AllFlagCombinations;
/** build a configuration type for each of those flag combinations */
typedef Apply<AllFlagCombinations::List, DefineConfigByFlags> AllConfigs;
/** filter those configurations which actually define a wiring strategy */
typedef Filter<AllConfigs::List, Instantiation<Strategy>::Test> PossibleConfigs;
} // namespace config
namespace { // internal: setting up a factory for each required configuration
using config::ConfigSelector;
class Alloc {}; ///////////////TODO
template<class CONF>
class WiringDescriptorFactory
{
Alloc& alloc_;
public:
WiringDescriptorFactory(Alloc& a)
: alloc_(a) {}
WiringDescriptor&
operator() ()
{
/////////////////////////////////////////////TODO
typedef config::Strategy<CONF> Strategy;
typedef typename config::SelectBuffProvider<>::Type BuffProvider; ////////////////////////TODO: how to extract the required flags from CONF??
typedef ActualInvocationProcess<Strategy, BuffProvider> InvocationStateType;
typedef NodeWiring<InvocationStateType> Product;
Product * dummy (0);
return *dummy;
}
};
typedef WiringDescriptor& (FunctionType)(void);
typedef ConfigSelector< WiringDescriptorFactory ///< Factory template
, FunctionType ///< function signature of the Factory
, Alloc& ///< allocator fed to all factories
> WiringSelector;
struct WiringFactoryImpl
{
WiringSelector selector;
WiringFactoryImpl (Alloc& alloc)
: selector(config::PossibleConfigs::List(), alloc)
{ }
};
} // (END) internals
/////////////////////////////TODO: define the ctor
/** create and configure a concrete wiring descriptor to tie
* a ProcNode to its predecessor nodes. This includes selecting
* the actual StateProxy type, configuring it out of some operation
* control templates (policy classes). Compiling this operator function
* actually drives the necessary template instantiations for all cases
* encountered while building the node network.
* The created WiringDescriptor object is bulk allocated similar to the ProcNode
* objects for a given segment of the Timeline. It should be further configured
* with the actual predecessor nodes pointers and can then be used to create
* the new processing node to be wired up.
*/
WiringDescriptor&
WiringFactory::operator() (uint nrOut, uint nrIn, bool cache)
{
UNIMPLEMENTED ("build the actual wiring descriptor based on given operation options");
// Bits config (FlagInfo<Config>::CODE);
size_t config = 13; /////////////////////////////////////////TODO
// return pImpl_->selector[config]();
}
// BlockAlloc<NodeWiring< StateAdapter< Config<cache, process, inplace> > > >::fabricate();
} // namespace engine

View file

@ -0,0 +1,90 @@
/*
NODEWIRING.hpp - Implementation of the node network and operation control
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 ENGINE_NODEWIRING_H
#define ENGINE_NODEWIRING_H
#include "proc/engine/procnode.hpp"
#include <boost/scoped_ptr.hpp>
#include <cstddef>
namespace engine {
class WiringFactory;
namespace { class WiringFactoryImpl; } ////TODO: better use a named implementation namespace! (produces warings on gcc 4.3)
/**
* Actual implementation of the link between nodes,
* also acting as "track switch" for the execution path
* choosen while operating the node network for rendering.
* @param STATE Invocation state object controlling the
* behaviour of callDown() while rendering.
* @see StateAdapter
* @see NodeFactory
*/
template<class STATE>
class NodeWiring
: public WiringDescriptor
{
const uint siz_;
const uint nrO_;
friend class WiringFactory;
public:
virtual uint getNrI() const { return siz_ - nrO_; }
virtual uint getNrO() const { return nrO_; }
protected:
virtual BuffHandle
callDown (State& currentProcess, uint requiredOutputNr) const
{
STATE thisStep (currentProcess, *this);
return thisStep.retrieve (requiredOutputNr); // fetch or calculate results
}
};
class WiringFactory
{
boost::scoped_ptr<WiringFactoryImpl> pImpl_;
public:
WiringDescriptor&
operator() (uint nrOut, uint nrIn, bool cache);
};
} // namespace engine
#endif

View file

@ -0,0 +1,180 @@
/*
NODEWIRINGCONFIG.hpp - Helper for representing and selecting the wiring case
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
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 nodewiringconfig.hpp
** Sometimes we need to coose a different implementation for dealing with
** some special cases. While for simple cases, just testing a flag or using a
** switch statement will do the job, matters get more difficult when we have to
** employ a completely different execution path for each of the different cases,
** while using a set of common building blocks.
** \par
** In the Lumiera render engine, right on the critical path, we need some glue code
** for invoking the predecessor nodes when pulling a given processing node. The actual
** sequence is quite dependant on the specific situation each node is wired up, regarding
** buffer allocation, cache querying and the possible support for GPU processing and
** render farms. The solution is to define specialisations of a Strategy template
** using the specific configuration as template argument. Based on these, we can
** create a collection of factories, which in turn will build the internal wiring
** for the individual ProcNode instances in accordance to the situation determined
** for this node, expressed as a set of flags. As a net result, each node has an
** indivudual configuration (as opposed to creating a lot of hand-written individual
** ProcNode subclasses), but parts of this configuration assembly is done already at
** compile time, allowing for additional checks by typing and for possible optimisation.
**
** @see proc::engine::config::Strategy
** @see nodewiring.hpp
** @see configflags.hpp
**
*/
#ifndef ENGINE_NODEWIRINGCONFIG_H
#define ENGINE_NODEWIRINGCONFIG_H
#include "common/util.hpp"
#include "common/meta/configflags.hpp"
#include <boost/function.hpp>
#include <bitset>
#include <map>
namespace engine {
namespace config {
using lumiera::typelist::FlagInfo;
using util::contains;
using lumiera::typelist::CONFIG_FLAGS_MAX;
/**
* Helper for fabricating ProcNode Wiring configurations.
* This object builds a table of factories, holding one factory
* for each possible node configuration. Provided with the desired
* configuration encoded as bits, the related factory can be invoked,
* thus producing a product object for the given configuration.
*
* \par implementation notes
* The actual factory class is templated, so it will be defined
* at the use site of ConfigSelector. Moreover, this factory
* usually expects an ctor argument, which will be fed through
* when creating the ConfigSelector instance. This is one of
* the reasons why we go through all these complicated factory
* building: this ctor argument usually brings in a reference
* to the actual memory allocator. Thus we have to rebuild the
* ConfigSelector each time we switch and rebuild the ProcNode
* factories, which in turn happens each time we use a new
* bulk allocation memory block -- typically for each separate
* segment of the Timeline and processing node graph.
*
* Now the selection of the possible flag configurations, for which
* Factory instances are created in the table, is governed by the
* type parameter of the ConfigSelector ctor. This type parameter
* needs to be a Typelist of Typelists, each representing a flag
* configuration. The intention is to to drive this selection by
* the use of template metaprogramming for extracting all
* currently defined StateProxy object configurations.
* @todo as the facories live only within the enclosed table (map)
* we could allocate them in-place. Unfortunately this is
* non-trivial, because the stl containers employ
* value semantics and thus do a copy even on insert.
* Thus, for now we use a shared_ptr to hold the factory
* heap allocated.
*/
template< template<class CONF> class Factory
, typename FUNC ///< common function type of all Factory instances
, typename PAR ///< ctor parameter of the Factories
>
class ConfigSelector
{
typedef boost::function<FUNC> FacFunction;
template<class FAC>
struct FactoryHolder
: private FAC,
public FacFunction
{
FactoryHolder(PAR p)
: FAC(p),
FacFunction( static_cast<FAC&>(*this))
{ }
};
typedef std::tr1::shared_ptr<FacFunction> PFunc;
typedef std::map<size_t, PFunc> ConfigTable;
ConfigTable possibleConfig_; ///< Table of factories
/** Helper: a visitor usable with FlagInfo */
struct FactoryTableBuilder
{
PAR ctor_param_;
ConfigTable& factories_;
FactoryTableBuilder (ConfigTable& tab, PAR p)
: ctor_param_(p),
factories_(tab) { }
/* === visitation interface === */
typedef void Ret;
template<class CONF>
void
visit (size_t code)
{
PFunc pFactory (new FactoryHolder<Factory<CONF> > (ctor_param_));
factories_[code] = pFactory;
}
void done() {}
};
public:
template<class CONFS>
ConfigSelector(CONFS const&, PAR factory_ctor_param)
{
FactoryTableBuilder buildTable(this->possibleConfig_,
factory_ctor_param );
// store a new Factory instance
// for each possible Flag-Configuration
FlagInfo<CONFS>::accept (buildTable);
}
FacFunction&
operator[] (size_t configFlags) ///< retrieve the factory corresponding to the given config
{
if (contains (possibleConfig_, configFlags))
return *possibleConfig_[configFlags];
else
throw lumiera::error::Invalid("ConfigSelector: No preconfigured factory for config-bits="
+std::bitset<CONFIG_FLAGS_MAX>(configFlags).to_string());
}
};
} // namespace config
} // namespace engine
#endif

View file

@ -22,8 +22,7 @@
#include "proc/engine/processor.hpp"
#include "proc/engine/exitnode.hpp"
#include "proc/stateproxy.hpp"
#include "proc/state.hpp"
namespace engine
{

View file

@ -25,7 +25,7 @@
#define ENGINE_PROCESSOR_H
#include "proc/lumiera.hpp"
#include "proc/stateproxy.hpp"
#include "proc/state.hpp"

View file

@ -22,12 +22,14 @@
#include "proc/engine/procnode.hpp"
#include "proc/engine/nodefactory.hpp"
namespace engine
{
namespace engine {
/** */
/** Storage for the (single, static) ProcNode factory object.
*/
NodeFactory ProcNode::create;
} // namespace engine

View file

@ -20,39 +20,137 @@
*/
/** @file procnode.hpp
** Interface to the processing nodes and the render nodes network.
**
** Actually, there are three different interfaces to consider
** - the ProcNode#pull is the invocation interface. It is call-style (easily callable by C)
** - the builder interface, comprised by the NodeFactory and the WiringFactory. It's C++ (using templates)
** - the actual processing function is supposed to be a C function; it uses a set of C functions
** for accessing the frame buffers with the data to be processed.
**
** By using the builder interface, concrete node and wiring descriptor classes are created,
** based on some templates. These concrete classes form the "glue" to tie the node network
** together and contain much of the operation beahviour in a hard wired fashion.
**
** @see nodefactory.hpp
** @see operationpoint.hpp
*/
#ifndef ENGINE_PROCNODE_H
#define ENGINE_PROCNODE_H
#include <vector>
#include "pre.hpp"
#include "proc/lumiera.hpp"
#include "proc/state.hpp"
#include "proc/mobject/parameter.hpp"
using std::vector;
#include <vector>
namespace engine
{
namespace engine {
using std::vector;
using proc_interface::State;
class ProcNode;
class NodeFactory;
typedef ProcNode* PNode;
template<class E>
struct RefArray
{
virtual E const& operator[] (uint i) const =0;
virtual ~RefArray() {}
};
/**
* Interface: Description of the input and output ports,
* processing function and predecessor nodes for a given ProcNode.
*/
class WiringDescriptor
{
public:
virtual ~WiringDescriptor() {}
virtual uint getNrI() const =0; ///////////TODO: indeed need a virtual function??
virtual uint getNrO() const =0;
RefArray<ChannelDescriptor>& out;
RefArray<InChanDescriptor>& in;
typedef void (ProcFunc) (BuffHandle::PBuff, uint);
ProcFunc* processFunction;
protected:
WiringDescriptor (RefArray<ChannelDescriptor>& o,
RefArray<InChanDescriptor>& i,
ProcFunc pFunc)
: out(o), in(i),
processFunction(pFunc)
{ }
/** the wiring-dependent part of the node operation.
* Includes the creation of a one-way state object on the stack
* holding the actual buffer pointers and issuing the recrusive pull() calls
* @see NodeWiring#callDown default implementation
*/
virtual BuffHandle callDown (State& currentProcess, uint requiredOutputNr) const =0;
friend class ProcNode;
};
/**
* Key abstraction of the Render Engine: A Data processing Node
*/
class ProcNode
{
protected:
typedef mobject::Parameter<double> Param;
/** The predecessor in a processing pipeline.
* I.e. a source to get data to be processed
*/
ProcNode * datasrc;
typedef mobject::Parameter<double> Param; //////TODO: just a placeholder for automation as of 6/2008
vector<Param> params;
const WiringDescriptor& wiringConfig_;
protected:
ProcNode (WiringDescriptor const& wd)
: wiringConfig_(wd)
{ }
virtual ~ProcNode() {};
friend class NodeFactory;
public:
static NodeFactory create; ///////TODO: really? probably we'll rather have a NodeFactory object in the builder...
/** Engine Core operation: render and pull output from this node.
* On return, currentProcess will hold onto output buffer(s)
* containing the calculated result frames. In case this node
* calculates a multi channel output, only one channel can be
* retrieved by such a \c pull() call, but you can expect data
* of the other channels to be processed and fed to cache.
* @param currentProcess the current processing state for
* managing buffers and accessing current parameter values
* @param requiredOutputNr the output channel requested (in case
* this node delivers more than one output channel)
* @return handle to the buffer containing the calculated result.
*/
BuffHandle
pull (State& currentProcess, uint requiredOutputNr=0) const
{
return this->wiringConfig_.callDown (currentProcess, requiredOutputNr);
}
};
} // namespace engine
#endif

View file

@ -37,7 +37,7 @@ namespace engine
*/
class Projector : public Trafo
{
////////////
////////////TODO adapt ctor
};

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