From cc3d3397a7c958a54918abab9c358a8652af8a9e Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 22 Sep 2007 16:00:36 +0200 Subject: [PATCH] documented the new design in more detail --- doc/devel/uml/class135557.html | 2 +- doc/devel/uml/class137989.html | 3 +- doc/devel/uml/class139397.html | 22 +++++ doc/devel/uml/class139525.html | 20 +++++ doc/devel/uml/classdiagrams.html | 3 + doc/devel/uml/classes.html | 2 + doc/devel/uml/classes_list.html | 2 + doc/devel/uml/componentdiagrams.html | 1 + doc/devel/uml/fig128005.png | Bin 38305 -> 42604 bytes doc/devel/uml/fig130693.png | Bin 0 -> 12650 bytes doc/devel/uml/fig130821.png | Bin 0 -> 14943 bytes doc/devel/uml/fig130949.png | Bin 0 -> 7478 bytes doc/devel/uml/fig131077.png | Bin 0 -> 19924 bytes doc/devel/uml/fig131205.png | Bin 0 -> 15040 bytes doc/devel/uml/index.html | 59 ++++++++++++-- doc/devel/uml/index_60.html | 4 +- doc/devel/uml/index_65.html | 7 +- doc/devel/uml/index_66.html | 2 + doc/devel/uml/index_67.html | 28 +++---- doc/devel/uml/index_68.html | 3 +- doc/devel/uml/index_70.html | 2 +- doc/devel/uml/index_73.html | 4 +- doc/devel/uml/index_76.html | 1 + doc/devel/uml/index_77.html | 4 + doc/devel/uml/index_79.html | 4 +- doc/devel/uml/index_80.html | 1 + doc/devel/uml/index_83.html | 5 +- doc/devel/uml/index_84.html | 6 +- doc/devel/uml/index_85.html | 1 + doc/devel/uml/index_86.html | 20 ++--- doc/devel/uml/index_87.html | 1 + doc/devel/uml/navig.html | 2 +- doc/devel/uml/usecasediagrams.html | 22 +++++ doc/devel/uml/usecases.html | 25 ++++++ src/proc/asset/media.hpp | 6 +- uml/cinelerra3/128005 | 28 ++++++- uml/cinelerra3/128005.diagram | 14 +++- uml/cinelerra3/128133 | 54 +++++++++++- uml/cinelerra3/128138 | 8 +- uml/cinelerra3/128389 | 4 +- uml/cinelerra3/128389.diagram | 20 ++--- uml/cinelerra3/129157 | 118 ++++++++++++++++++++++++++- uml/cinelerra3/130053 | 3 +- uml/cinelerra3/130053.diagram | 4 + uml/cinelerra3/130309.diagram | 92 ++++++++++----------- uml/cinelerra3/130693.diagram | 23 ++++++ uml/cinelerra3/130821.diagram | 37 +++++++++ uml/cinelerra3/130949.diagram | 21 +++++ uml/cinelerra3/131077.diagram | 92 +++++++++++++++++++++ uml/cinelerra3/131205.diagram | 79 ++++++++++++++++++ uml/cinelerra3/5.session | 35 +++----- uml/cinelerra3/cinelerra3.prj | 2 +- wiki/renderengine.html | 26 +++++- 53 files changed, 768 insertions(+), 154 deletions(-) create mode 100644 doc/devel/uml/class139397.html create mode 100644 doc/devel/uml/class139525.html create mode 100644 doc/devel/uml/fig130693.png create mode 100644 doc/devel/uml/fig130821.png create mode 100644 doc/devel/uml/fig130949.png create mode 100644 doc/devel/uml/fig131077.png create mode 100644 doc/devel/uml/fig131205.png create mode 100644 doc/devel/uml/usecasediagrams.html create mode 100644 doc/devel/uml/usecases.html create mode 100644 uml/cinelerra3/130693.diagram create mode 100644 uml/cinelerra3/130821.diagram create mode 100644 uml/cinelerra3/130949.diagram create mode 100644 uml/cinelerra3/131077.diagram create mode 100644 uml/cinelerra3/131205.diagram diff --git a/doc/devel/uml/class135557.html b/doc/devel/uml/class135557.html index fdcef57fa..cb97dca6f 100644 --- a/doc/devel/uml/class135557.html +++ b/doc/devel/uml/class135557.html @@ -17,7 +17,7 @@

Declaration :

Directly inherited by : Config External Invalid Logic State

-

Artifact : error

+

Artifact : error, Component(s) : CommonLib

Operation what

Declaration :

  • Uml : + what() : const char*
  • C++ : public: virtual const char* what () const
Operation rootCause

Declaration :

  • Uml : + rootCause() : std::exception
  • C++ : public: std::exception rootCause ()

If this exception was caused by a chain of further exceptions,
return the first one registered in this throw sequence.
This works only, if every exceptions thrown as a consequence
of another exception is propperly constructed by passing
the original exception to the constructor

diff --git a/doc/devel/uml/class137989.html b/doc/devel/uml/class137989.html index 5ee601cc6..6c5bf6158 100644 --- a/doc/devel/uml/class137989.html +++ b/doc/devel/uml/class137989.html @@ -17,7 +17,8 @@

Declaration :

  • C++ : class Track : public Struct

structural asset holding the configuration of a track in the EDL

Artifact : track

-
+ +
Relation wiringTemplate (<unidirectional association>)

Declaration :

  • Uml : # wiringTemplate : ProcPatt, multiplicity : 1
  • C++ : protected: ProcPatt* wiringTemplate

All public operations : enable , getDependant , getParents , isActive

diff --git a/doc/devel/uml/class139397.html b/doc/devel/uml/class139397.html new file mode 100644 index 000000000..1bfe82fbf --- /dev/null +++ b/doc/devel/uml/class139397.html @@ -0,0 +1,22 @@ + + + + + + +Class MediaFactory + + + + + +
Class MediaFactory
+

+ + + + +

Declaration :

Depends on BackendLayer

Depends on BackendLayer

specialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well

Artifact : media

+
+ + diff --git a/doc/devel/uml/class139525.html b/doc/devel/uml/class139525.html new file mode 100644 index 000000000..e5acd9bec --- /dev/null +++ b/doc/devel/uml/class139525.html @@ -0,0 +1,20 @@ + + + + + + +Class MediaAccessFacade + + + + + +
Class MediaAccessFacade
+

+ + + + +

Declaration :

provides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions

Component(s) : Media Access

+ diff --git a/doc/devel/uml/classdiagrams.html b/doc/devel/uml/classdiagrams.html index 8c55bf4b0..63f1a4fcf 100644 --- a/doc/devel/uml/classdiagrams.html +++ b/doc/devel/uml/classdiagrams.html @@ -23,9 +23,12 @@ File MappingShows whats used to access Frames HierarchyCinelerra Exception hierarchy In Memory Database +interface components Media-Asset Relations +Proc-Asset Relations Render Entities Session structure +Struct-Asset Relations diff --git a/doc/devel/uml/classes.html b/doc/devel/uml/classes.html index b522e0caf..a34ff3876 100644 --- a/doc/devel/uml/classes.html +++ b/doc/devel/uml/classes.html @@ -78,6 +78,8 @@ Logic Mask Mediakey abstraction: media-like assets +MediaAccessFacadeboundaryprovides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions +MediaFactoryspecialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well Metakey abstraction: metadata and organisational asset Meta MObjectinterface diff --git a/doc/devel/uml/classes_list.html b/doc/devel/uml/classes_list.html index ffe1ccbab..b394be64d 100644 --- a/doc/devel/uml/classes_list.html +++ b/doc/devel/uml/classes_list.html @@ -79,6 +79,8 @@ Logic
Mask
Media
+MediaAccessFacade
+MediaFactory
Meta
Meta
MObject
diff --git a/doc/devel/uml/componentdiagrams.html b/doc/devel/uml/componentdiagrams.html index 15a1086a2..967828869 100644 --- a/doc/devel/uml/componentdiagrams.html +++ b/doc/devel/uml/componentdiagrams.html @@ -16,6 +16,7 @@ +
backend-components
OverviewThis drawing shows the top level compoents and relations
proc-components
diff --git a/doc/devel/uml/fig128005.png b/doc/devel/uml/fig128005.png index 68d6a056f9d4741ebf13eae4e28b2bb03e948933..7290793c8a6a17876c0d310300a50540f5f28411 100644 GIT binary patch literal 42604 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 literal 38305 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 literal 0 HcmV?d00001 diff --git a/doc/devel/uml/fig130821.png b/doc/devel/uml/fig130821.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9dab369ff404ec3f3d028bdf1961375048ca84 GIT binary patch literal 14943 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 literal 0 HcmV?d00001 diff --git a/doc/devel/uml/fig131205.png b/doc/devel/uml/fig131205.png new file mode 100644 index 0000000000000000000000000000000000000000..04fc181b776b859a86cd6c5f15a36733529f4d6e GIT binary patch literal 15040 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 literal 0 HcmV?d00001 diff --git a/doc/devel/uml/index.html b/doc/devel/uml/index.html index 9f3edecf9..6e665f205 100644 --- a/doc/devel/uml/index.html +++ b/doc/devel/uml/index.html @@ -29,7 +29,7 @@ Documentation

Overview



This drawing shows the top level compoents and relations

Component CommonLib
-

provided classes : Time

+

provided classes : Error, Time

Component Builder

provided classes : StateProxy

@@ -73,6 +73,11 @@ Documentation
Component RenderPathManager

provided classes : PathManager

+ +
Component MediaFactory
+

required classes : MediaAccessFacade

+ +
Component AssetDB

1.2 Component View interfaces

@@ -87,6 +92,12 @@ Documentation
Component ConManager

required classes : ParamProvider

+ +

+

backend-components



+ +
Component Media Access
+

provided classes : MediaAccessFacade

1.3 Package codegen

@@ -101,7 +112,7 @@ Documentation
Artifact Cinelerra3

Depends on common

Depends on gui

Depends on proc

Depends on backend

the main executable to be built

-

executable associated with : allocation, vframe, arender, renderstate, label, glbuf, procnode, stateproxy, hub, buildable, abstractmo, nodecreatertool, projector, interpolator, edl, fixture, glpipe, vrender, exitnode, pathmanager, track, paramprovider, mask, main, conmanager, clip, meta, fixedplacement, relativeplacement, mobject, source, frame, placement, session, builderfacade, toolfactory, controllerfacade, processor, pluginadapter, effect, tool, segmentationtool, aframe, assembler, trafo, explicitplacement, auto, glrender, link, parameter, renderengine

+

executable associated with : arender, renderstate, label, glbuf, procnode, stateproxy, hub, buildable, abstractmo, nodecreatertool, projector, interpolator, edl, fixture, glpipe, vrender, exitnode, pathmanager, track, paramprovider, mask, main, conmanager, clip, meta, fixedplacement, relativeplacement, mobject, source, frame, placement, session, builderfacade, toolfactory, controllerfacade, processor, pluginadapter, effect, tool, segmentationtool, aframe, assembler, trafo, explicitplacement, auto, glrender, link, parameter, renderengine, allocation, vframe

Artifact main

Artifact source

@@ -197,7 +208,7 @@ Documentation
Artifact media

key abstraction: media-like assets

-

Artifact source associated with : Media

+

Artifact source associated with : Media, MediaFactory

Artifact proc

key abstraction: media-like assets

@@ -532,9 +543,16 @@ Documentation

Media-Asset Relations



+ +

+

Proc-Asset Relations



+ +

+

Struct-Asset Relations



Class Asset
Class Media
+
Class Proc
Class Struct
@@ -982,11 +1000,36 @@ reuse exiting Engine

Selection :

Transformation

3 Package BackendLayer

+ +

3.1 Class View Interface

+
+ +

+

interface components



+
+
+ +

3.2 Use Case View usage

+
+ +

+

backend use cases



+ +

3.2.1 Use Case load Media

+
+
+ +

3.2.2 Use Case access File

+ +

3.2.3 Use Case detect Channels

+ +

3.2.4 Use Case access Channel

+
-

3.1 Package design

+

3.3 Package design

-

3.1.1 Class View Backend Components

+

3.3.1 Class View Backend Components

@@ -1007,15 +1050,15 @@ reuse exiting Engine

Selection :

    Transformation
    -

    3.1.1.1 Activity get frame

    +

    3.3.1.1 Activity get frame

    Pre Condition :

      Post Condition :

        -

        3.2 Component View Cache

        +

        3.4 Component View Cache

        -

        3.3 Component View FileMapping

        +

        3.5 Component View FileMapping

        4 Package GUI

        diff --git a/doc/devel/uml/index_60.html b/doc/devel/uml/index_60.html index cc286ecf2..4909e634c 100644 --- a/doc/devel/uml/index_60.html +++ b/doc/devel/uml/index_60.html @@ -17,8 +17,8 @@ - + @@ -30,8 +30,8 @@ - + diff --git a/doc/devel/uml/index_65.html b/doc/devel/uml/index_65.html index b2473717c..7fc8a769c 100644 --- a/doc/devel/uml/index_65.html +++ b/doc/devel/uml/index_65.html @@ -19,6 +19,8 @@ + + @@ -40,18 +42,19 @@ + - + - + diff --git a/doc/devel/uml/index_66.html b/doc/devel/uml/index_66.html index 1d3f8104b..2f6812bb3 100644 --- a/doc/devel/uml/index_66.html +++ b/doc/devel/uml/index_66.html @@ -19,6 +19,8 @@ + + diff --git a/doc/devel/uml/index_67.html b/doc/devel/uml/index_67.html index 9cba96588..d9c7fd522 100644 --- a/doc/devel/uml/index_67.html +++ b/doc/devel/uml/index_67.html @@ -27,27 +27,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + @@ -73,8 +73,8 @@ - + diff --git a/doc/devel/uml/index_68.html b/doc/devel/uml/index_68.html index 81b2f665f..75c620c08 100644 --- a/doc/devel/uml/index_68.html +++ b/doc/devel/uml/index_68.html @@ -27,8 +27,9 @@ - + + diff --git a/doc/devel/uml/index_70.html b/doc/devel/uml/index_70.html index 3eb653613..14b9fb500 100644 --- a/doc/devel/uml/index_70.html +++ b/doc/devel/uml/index_70.html @@ -33,8 +33,8 @@ - + diff --git a/doc/devel/uml/index_73.html b/doc/devel/uml/index_73.html index 3701bbfcd..6bb5ea25f 100644 --- a/doc/devel/uml/index_73.html +++ b/doc/devel/uml/index_73.html @@ -21,10 +21,12 @@ - + + + diff --git a/doc/devel/uml/index_76.html b/doc/devel/uml/index_76.html index ddbe5c66d..9403a79d7 100644 --- a/doc/devel/uml/index_76.html +++ b/doc/devel/uml/index_76.html @@ -23,6 +23,7 @@ + diff --git a/doc/devel/uml/index_77.html b/doc/devel/uml/index_77.html index 793afbce2..dac7b6a5a 100644 --- a/doc/devel/uml/index_77.html +++ b/doc/devel/uml/index_77.html @@ -24,7 +24,11 @@ + + + + diff --git a/doc/devel/uml/index_79.html b/doc/devel/uml/index_79.html index a8226191c..4902abfdc 100644 --- a/doc/devel/uml/index_79.html +++ b/doc/devel/uml/index_79.html @@ -19,9 +19,9 @@ - - + + diff --git a/doc/devel/uml/index_80.html b/doc/devel/uml/index_80.html index 27ab841fa..2380ad9ce 100644 --- a/doc/devel/uml/index_80.html +++ b/doc/devel/uml/index_80.html @@ -44,6 +44,7 @@ + diff --git a/doc/devel/uml/index_83.html b/doc/devel/uml/index_83.html index e5e139dc4..15423df50 100644 --- a/doc/devel/uml/index_83.html +++ b/doc/devel/uml/index_83.html @@ -30,8 +30,8 @@ - + @@ -40,8 +40,8 @@ - + @@ -55,6 +55,7 @@ +
        NameKindDescription
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        <flow>transition
        NameKindDescription
        abstractmoartifactabstract base class for all Media Objects
        AbstractMOclass
        access Channeluse case
        access Fileuse case
        activity finalactivity final
        activity finalactivity final
        AFrameclass
        assetpackagesourcecode package

        Asset Management
        Assetpackage
        Asset Kindsclass diagram
        AssetDBcomponent
        AssetManagementcomponent
        AssetManagerclassFacade for the Asset subsystem
        assetmanagerartifactFacade for the Asset subsystem
        Assetsclass view
        ATTACHattributeattach subject to anchor (e.g. an effect to a clip)
        au1class instance
        aud_Aclass instance
        aud_aclass instance
        aud_Aclass instance
        audioclass instance
        audio1class instance
        audio1class instance
        audio1class instance
        audio1class instance
        autoartifactMedia Object holding automation data
        AutoclassAutomation data for some parameter (i.e. a time varying function)
        Automation Entitiesclass diagram
        NameKindDescription
        backendpackagesourcecode package

        Data backend classes here...
        Backend Componentsclass view
        backend use casesuse case diagram
        backend-componentscomponent diagram
        BackendLayerpackage
        buildoperation
        build flowactivity diagram
        checked_outrelationthis list keeps all mappings which are in use, and thus prevents them from Cache aging
        Cinelerra3artifactthe main executable to be built
        cinelerra3package
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        class instanceclass instance
        Clipclassbookkeeping (asset) view of a media clip.
        clipartifacta Media Clip
        clipartifactbookkeeping (asset) view of a media clip.
        clipartifacta Media Clip
        Clipclass
        clipsrelation
        Codecclassdescription of some media data decoder or encoder facility
        connectopaque activity action
        Constraintclass
        Controllercomponent
        Controllerpackage
        controllerpackagesourcecode package

        The Processing and Render Controller,
        located within the MObject Subsystem
        Controllerpackage
        Controller Entitiesclass diagram
        Controller Workingsclass view
        ControllerFacadeclassProvides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.
        descriptorrelation
        designpackage
        designpackageAll things concering the big picture.
        Not a real code package, rather a container for design drafts, specifications, decisions.
        determine Render Paramsopaque activity action
        detect Channelsuse case
        determine Render Paramsexpansion region
        determine Render Paramsopaque activity action
        devnullclass instance
        DirectPlacementclass
        Dispatchercomponent
        Fixtureactivity object
        fixtureartifactthe (low level) representation of the EDL with concrete placement data
        fixturerelation
        Fixturecomponent
        Fixtureclass
        Fixturecomponent
        fork activity nodefork activity node
        FrameclassFrames are just a low level lump of continous memory, most parts are opaque. Frames are memory sensitive, they will be small constant sized structures which can be efficently managed in a pool.
        Framenode
        In Memory Databaseclass diagram
        inFixtureactivity action pin
        inputclass instance
        inputclass instance
        inputclass instance
        inputclass instance
        instanceoperation
        instructionsrelation
        Interfaceclass view
        interface componentsclass diagram
        interfacescomponent view
        interpolatorartifactdenotes a facility to get (continuously interpolated) parameter values
        InterpolatorclassProvides the implementation for getting the acutal value of a time varying or automated effect/plugin parameter
        lengthattributeduration (span) of this timeline segment.
        Linkclass
        linkartifactforwarding, adapting or connecting ProcNode
        load Mediause case
        Lockclass
        Lockclass
        Logicclass
        maskartifactVideo ProcNode for masking regions of the image (automatable)
        Mediaclasskey abstraction: media-like assets
        mediaartifactkey abstraction: media-like assets
        Media Accesscomponent
        Media-Asset Relationsclass diagram
        MediaAccessFacadeclassprovides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions
        MediaFactorycomponent
        MediaFactoryclassspecialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well
        merge activity nodemerge activity node
        Metaclasskey abstraction: metadata and organisational asset
        metaartifactkey abstraction: metadata and organisational asset
        NameKindDescription
        offsetattributeOffset the actual position by this (time) value relative to the anchor point. TODO: Representation?
        orgattributeorigin or authorship id. Can be a project abbreviation, a package id or just the authors nickname or UID. This allows for the compnent name to be more generic (e.g. "blur"). Default for all assets provided by the core cinelerra-3 codebase is "cin3".
        ouputclass instance
        ouputclass instance
        ouputclass instance
        ouputclass instance
        ouputclass instance
        OutPortclassstructural asset corresponding to some port generating media output
        outportartifactstructural asset corresponding to some port generating media output
        outputrelation
        procnode
        procartifactkey abstraction: media-like assets
        procattributeholds the Processor (Render Engine Element) to be built by the current build step
        Proc-Asset Relationsclass diagram
        proc-componentscomponent diagram
        ProcessingLayerpackage
        Processorclass
        Service Componentsclass view
        Sessioncomponent
        sessionartifactholds the complete session to be edited by the user
        Sessionclass view
        sessionpackagesourcecode package

        Everything concerning the EDL and Session, within the MObject Subsystem
        Sessionclass view
        Sessionclass
        Session structureclass diagram
        setup Build Paramsopaque activity action
        SimpleClipclass
        SmartPointerclass
        SmartPointersclass view
        sourcerelationmedia source of this clip
        sourcerelationthe media source this clip referes to
        sourcerelationmedia source of this clip
        SourceclassSource Node: represents a media source to pull data from.
        sourceartifactRepresentation of a Media source
        Source Overviewdeployment diagram
        std::exceptionclass
        Structclasskey abstraction: structural asset
        structartifactkey abstraction: structural asset
        Struct-Asset Relationsclass diagram
        subjectrelation
        subPatternrelation
        diff --git a/doc/devel/uml/index_84.html b/doc/devel/uml/index_84.html index 90cbd038f..b86c2c7b0 100644 --- a/doc/devel/uml/index_84.html +++ b/doc/devel/uml/index_84.html @@ -40,13 +40,13 @@ tracksrelation Trafoclass trafoartifacttransforming processing Node -treatoperation -treatoperation treatoperation +treatoperation treatoperation +treatoperation treatoperation -treatoperation treatoperation +treatoperation treatoperationThis operation is to be overloaded for the specific MObject subclasses to be treated. diff --git a/doc/devel/uml/index_85.html b/doc/devel/uml/index_85.html index b5f26dfb9..6075e15d1 100644 --- a/doc/devel/uml/index_85.html +++ b/doc/devel/uml/index_85.html @@ -19,6 +19,7 @@ NameKindDescription Unknownclassplaceholder for unknown or unavailable media source unknownartifactplaceholder for unknown or unavailable media source +usageuse case view useFileoperationAnnounces that the application intends to use this file with mode (READ|WRITE|READWRITE) useTemporaryStorageoperationProvides a pool for interminate frames diff --git a/doc/devel/uml/index_86.html b/doc/devel/uml/index_86.html index 191657818..1a10d10b0 100644 --- a/doc/devel/uml/index_86.html +++ b/doc/devel/uml/index_86.html @@ -20,23 +20,23 @@ versionattributeversion number of the thing or concept represented by this asset. Of each unique tuple (name, category, org) there will be only one version in the whole system. Version 0 is reserved for internal purposes. Versions are considered to be ordered, and any higher version is supposed to be fully backwards compatible to all previous versions. VFrameclass vframeartifacta buffer and render process holding a Video frame -vid1class instance vid1class instance -vid_aclass instance -vid_Aclass instance +vid1class instance +vid_Aclass instance vid_aclass instance vid_Aclass instance -vid_Aclass instance -videoclass instance -videoclass instance +vid_aclass instance +vid_Aclass instance videoclass instance +videoclass instance +videoclass instance videoclass instance -video1class instance -video1class instance -video1class instance video1class instance -video1class instance +video1class instance video1class instance +video1class instance +video1class instance +video1class instance VRenderclassRepresentation of a Video render process. (Encapsulates the video buffers for the actual calculations) vrenderartifactRepresentation of a Video render process diff --git a/doc/devel/uml/index_87.html b/doc/devel/uml/index_87.html index 4af6e38d9..cdf4db578 100644 --- a/doc/devel/uml/index_87.html +++ b/doc/devel/uml/index_87.html @@ -19,6 +19,7 @@ NameKindDescription whatoperation whatoperationthe base class of all exceptions thrown by the standard library +wiringTemplaterelation Wishclass write_bufferrelation WriteBufferclass diff --git a/doc/devel/uml/navig.html b/doc/devel/uml/navig.html index 2bdbe6770..1d6f86b34 100644 --- a/doc/devel/uml/navig.html +++ b/doc/devel/uml/navig.html @@ -9,7 +9,7 @@


        -

        -Top- -Classes- -Public Operations- -Public properties- -Packages- -Activities- -Class Diagrams- -Object Diagrams- -Activity Diagrams- -Collaboration Diagrams- -Component Diagrams- -Deployment Diagrams-

        +

        -Top- -Classes- -Public Operations- -Public properties- -Packages- -Use Cases- -Activities- -Class Diagrams- -Object Diagrams- -Activity Diagrams- -Use Case Diagrams- -Collaboration Diagrams- -Component Diagrams- -Deployment Diagrams-

        < A B C D E F G H I K L M N O P R S T U V W

        diff --git a/doc/devel/uml/usecasediagrams.html b/doc/devel/uml/usecasediagrams.html new file mode 100644 index 000000000..62cd42a0e --- /dev/null +++ b/doc/devel/uml/usecasediagrams.html @@ -0,0 +1,22 @@ + + + + + + +Use Case Diagram Index + + + + + +
        Use Case Diagram Index
        +

        + + + + + +
        backend use cases
        + + diff --git a/doc/devel/uml/usecases.html b/doc/devel/uml/usecases.html new file mode 100644 index 000000000..d55241488 --- /dev/null +++ b/doc/devel/uml/usecases.html @@ -0,0 +1,25 @@ + + + + + + +Use Cases Index + + + + + +
        Use Cases Index
        +

        + + + + + + + + +
        access Channel
        access File
        detect Channels
        load Media
        + + diff --git a/src/proc/asset/media.hpp b/src/proc/asset/media.hpp index 350ba86f2..66c21da04 100644 --- a/src/proc/asset/media.hpp +++ b/src/proc/asset/media.hpp @@ -22,8 +22,8 @@ /** @file media.hpp - ** Media data is a specific Kind of Asset. - ** For the different Kinds of Assets, we use sub-intefaces inheriting + ** Media data is a specific kind of Asset. + ** For the different kinds of Assets, we use sub-intefaces inheriting ** from the general Asset interface. To be able to get asset::Media instances ** directly from the AssetManager, we define a specialization of the Asset ID. ** @@ -89,7 +89,7 @@ namespace asset /** - * Factory specialized for createing Media Asset objects. + * Factory specialized for creating Media Asset objects. */ class MediaFactory : public cinelerra::Factory { diff --git a/uml/cinelerra3/128005 b/uml/cinelerra3/128005 index 0d1ddaf0c..e16107985 100644 --- a/uml/cinelerra3/128005 +++ b/uml/cinelerra3/128005 @@ -1,6 +1,6 @@ format 40 "design" // design - revision 9 + revision 10 modified_by 5 "hiv" // class settings //class diagram settings @@ -42,6 +42,7 @@ Not a real code package, rather a container for design drafts, specifications, d component 129925 "CommonLib" provided_classes + class_ref 135557 // Error class_ref 134917 // Time end end @@ -84,10 +85,10 @@ Not a real code package, rather a container for design drafts, specifications, d -_-> on component_ref 128005 // Builder end - end component 128645 "AssetManagement" + stereotype "subsystem" end component 128773 "Dispatcher" @@ -129,6 +130,16 @@ Not a real code package, rather a container for design drafts, specifications, d end end + component 130181 "MediaFactory" + stereotype "component" + required_classes + class_ref 139525 // MediaAccessFacade + end + end + + component 130309 "AssetDB" + stereotype "service" + end end componentview 128133 "interfaces" @@ -157,6 +168,19 @@ Not a real code package, rather a container for design drafts, specifications, d class_ref 134661 // ParamProvider end end + + componentdiagram 130693 "backend-components" + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + draw_component_as_icon default show_component_req_prov default show_component_rea default + size A4 + end + + component 130437 "Media Access" + stereotype "service" + provided_classes + class_ref 139525 // MediaAccessFacade + end + end end package_ref 128645 // codegen diff --git a/uml/cinelerra3/128005.diagram b/uml/cinelerra3/128005.diagram index cf3c8dfa1..a16e8f676 100644 --- a/uml/cinelerra3/128005.diagram +++ b/uml/cinelerra3/128005.diagram @@ -1,4 +1,4 @@ -format 38 +format 40 fragment 128005 "UI Layer" xyzwh 321 22 2000 829 100 @@ -11,8 +11,8 @@ fragment 128261 "Backend Layer" xyzwh 64 848 2000 1089 105 end packagecanvas 128389 - package_ref 128133 // AssetManager - xyzwh 561 201 2005 265 214 + package_ref 128133 // Asset + xyzwh 561 201 2005 265 241 packagecanvas 128517 package_ref 128261 // MObject xyzwh 94 201 2006 458 335 @@ -38,7 +38,7 @@ note 129541 "Structures edited by the User" xyzwh 43 269 2016 181 41 componentcanvas 129669 component_ref 128645 // AssetManagement draw_component_as_icon default show_component_req_prov default show_component_rea default - xyzwh 577 241 2010 208 159 + xyzwh 577 232 2010 217 201 componentcanvas 129797 component_ref 128773 // Dispatcher draw_component_as_icon default show_component_req_prov default show_component_rea default xyzwh 406 31 2005 193 75 @@ -59,6 +59,12 @@ note 131973 "just works, never decides" xyzwh 317 668 2015 110 59 note 132101 "codecs, stream I/O here" xyzwh 376 592 2005 166 39 +componentcanvas 132229 component_ref 130181 // MediaFactory + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 593 354 2015 158 67 +componentcanvas 132357 component_ref 130309 // AssetDB + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 629 289 2020 155 63 simplerelationcanvas 131205 simplerelation_ref 128005 from ref 130053 z 2004 to ref 130181 simplerelationcanvas 131333 simplerelation_ref 128133 diff --git a/uml/cinelerra3/128133 b/uml/cinelerra3/128133 index 64b57bac8..9e7642989 100644 --- a/uml/cinelerra3/128133 +++ b/uml/cinelerra3/128133 @@ -1,6 +1,6 @@ format 40 "Asset" // ProcessingLayer::Asset - revision 11 + revision 12 modified_by 5 "hiv" // class settings //class diagram settings @@ -53,6 +53,16 @@ format 40 size A4 end + classdiagram 131077 "Proc-Asset Relations" + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + size A4 + end + + classdiagram 131205 "Struct-Asset Relations" + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + size A4 + end + class 136453 "Asset" abstract visibility public stereotype "interface" cpp_decl "${comment}${template}class ${name}${inherit} @@ -396,6 +406,39 @@ ${class}::${name} ${(}${)}${const}${volatile} ${throw}${staticnl} end end + class 139397 "MediaFactory" + visibility public + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "" + explicit_switch_type "" + + comment "specialized Asset Factory for configuring (new) media asset instances based on existing media files on disk; can create placeholder assets as well" + simplerelation 129285 + -_-> + on + package_ref 129157 // BackendLayer + end + + simplerelation 129413 + -_-> + on + package_ref 129157 // BackendLayer + end + + classrelation 144261 // + relation 142341 -_-> + a default + cpp default "Generated" + classrelation_ref 144261 // + b multiplicity "" parent class_ref 139525 // MediaAccessFacade + end + end + class 138501 "CompoundMedia" visibility public cpp_decl "${comment}${template}class ${name}${inherit} @@ -641,6 +684,15 @@ ${inlines} classrelation_ref 141317 // b multiplicity "" parent class_ref 136965 // Struct end + + classrelation 144389 // wiringTemplate () + relation 142469 ---> + a role_name "wiringTemplate" multiplicity "1" protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; +" + classrelation_ref 144389 // wiringTemplate () + b multiplicity "" parent class_ref 138757 // ProcPatt + end end class 138117 "OutPort" diff --git a/uml/cinelerra3/128138 b/uml/cinelerra3/128138 index 33c1211c8..be431c6db 100644 --- a/uml/cinelerra3/128138 +++ b/uml/cinelerra3/128138 @@ -1,7 +1,7 @@ format 40 "design" // BackendLayer::design - revision 8 - modified_by 10 "ct" + revision 9 + modified_by 5 "hiv" // class settings //class diagram settings draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -318,7 +318,7 @@ ${inlines} classrelation_ref 129802 // end - classrelation 130058 // write_buffer () + classrelation 130058 // relation_ref 129418 // end end @@ -528,7 +528,7 @@ ${inlines} b role_name "write_buffer" multiplicity "0..1" protected cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; " - classrelation_ref 130058 // write_buffer () + classrelation_ref 130058 // end classrelation 130314 // diff --git a/uml/cinelerra3/128389 b/uml/cinelerra3/128389 index 6581cb200..35d64e6bd 100644 --- a/uml/cinelerra3/128389 +++ b/uml/cinelerra3/128389 @@ -1,6 +1,6 @@ format 40 "RenderEngine" // ProcessingLayer::RenderEngine - revision 11 + revision 12 modified_by 5 "hiv" // class settings //class diagram settings @@ -563,7 +563,7 @@ ${inlines} classrelation 141701 // relation 139909 -_-> a default - cpp default "Generated" + cpp default "#include in header" classrelation_ref 141701 // b multiplicity "" parent class_ref 136709 // Media end diff --git a/uml/cinelerra3/128389.diagram b/uml/cinelerra3/128389.diagram index 7c1a670cd..b031adc09 100644 --- a/uml/cinelerra3/128389.diagram +++ b/uml/cinelerra3/128389.diagram @@ -14,11 +14,11 @@ classcanvas 128389 class_ref 131589 // ExitNode end classcanvas 128517 class_ref 131717 // ProcNode draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 462 265 2000 + xyz 462 264 2000 end classcanvas 129029 class_ref 131845 // Trafo draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 496 444 2000 + xyz 496 443 2000 end classcanvas 129157 class_ref 131973 // Link draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -38,7 +38,7 @@ classcanvas 129541 class_ref 132357 // Mask end classcanvas 129669 class_ref 132485 // PluginAdapter draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 506 622 2000 + xyz 506 621 2000 end classcanvas 129797 class_ref 132613 // GLPipe draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -82,7 +82,7 @@ classcanvas 137221 class_ref 133765 // Source end classcanvas 139781 class_ref 135045 // CodecAdapter draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 599 622 2000 + xyz 599 621 2000 end relationcanvas 128261 relation_ref 131845 // from ref 128005 z 1999 stereotype "<>" xyz 178 278 3000 to point 216 200 @@ -102,8 +102,8 @@ relationcanvas 129925 relation_ref 132101 // no_multiplicity_a no_multiplicity_b relationcanvas 130053 relation_ref 132229 // geometry VHV - from ref 129029 z 1999 to point 516 384 - line 130949 z 1999 to point 499 384 + from ref 129029 z 1999 to point 516 383 + line 130949 z 1999 to point 499 383 line 131077 z 1999 to ref 128517 no_role_a no_role_b no_multiplicity_a no_multiplicity_b @@ -198,11 +198,11 @@ relationcanvas 137989 relation_ref 134917 // no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 139397 relation_ref 135429 // - from ref 128517 z 1999 to point 432 265 - line 139525 z 1999 to point 432 295 + from ref 128517 z 1999 to point 432 264 + line 139525 z 1999 to point 432 294 line 139653 z 1999 to ref 128517 - role_a_pos 414 273 3000 no_role_b - no_multiplicity_a multiplicity_b_pos 445 292 3000 + role_a_pos 414 272 3000 no_role_b + no_multiplicity_a multiplicity_b_pos 445 291 3000 relationcanvas 139909 relation_ref 136965 // from ref 139781 z 1999 to ref 129029 no_role_a no_role_b diff --git a/uml/cinelerra3/129157 b/uml/cinelerra3/129157 index 10e4a87d1..c1920331a 100644 --- a/uml/cinelerra3/129157 +++ b/uml/cinelerra3/129157 @@ -1,14 +1,14 @@ -format 38 +format 40 "BackendLayer" // BackendLayer - revision 5 - modified_by 10 "ct" + revision 6 + modified_by 5 "hiv" // class settings //class diagram settings draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default //use case diagram settings package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default //sequence diagram settings - show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default //collaboration diagram settings show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default //object diagram settings @@ -26,6 +26,116 @@ format 38 package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default show_infonote default drawing_language default + classview 129029 "Interface" + //class diagram settings + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + //collaboration diagram settings + show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default + //object diagram settings + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + //sequence diagram settings + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default + //state diagram settings + package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default + show_activities default region_horizontally default drawing_language default + //class settings + //activity diagram settings + package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default + show_infonote default drawing_language default + + classdiagram 130949 "interface components" + draw_all_relations no hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + size A4 + end + + class 139525 "MediaAccessFacade" + visibility public stereotype "boundary" + cpp_decl "${comment}${template}class ${name}${inherit} + { +${members} }; +${inlines} +" + java_decl "" + idl_decl "${comment}${abstract}${local}interface ${name}${inherit} { +${members}}; +" + explicit_switch_type "" + + comment "provides functions for querying (opening) a media file, detecting the channels or streams found within this file, etc. Delegating to the actual backend functions" + end + end + + usecaseview 128133 "usage" + //use case diagram settings + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + //sequence diagram settings + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default + //collaboration diagram settings + show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default + //object diagram settings + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + usecasediagram 130821 "backend use cases" + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + size A4 + end + + usecase 128005 "load Media" + //use case diagram settings + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + //sequence diagram settings + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default + //collaboration diagram settings + show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default + //object diagram settings + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + simplerelation 129029 + -_-> + stereotype "include" + on usecase_ref 128133 // access File + end + + simplerelation 129157 + -_-> + stereotype "include" + on usecase_ref 128261 // detect Channels + comment "after accessing the file, detect the channel/stream structure" + end + end + + usecase 128133 "access File" + //use case diagram settings + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + //sequence diagram settings + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default + //collaboration diagram settings + show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default + //object diagram settings + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + end + + usecase 128261 "detect Channels" + //use case diagram settings + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + //sequence diagram settings + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default + //collaboration diagram settings + show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default + //object diagram settings + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + end + + usecase 128389 "access Channel" + //use case diagram settings + package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + //sequence diagram settings + show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default + //collaboration diagram settings + show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default + //object diagram settings + write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default + end + end + package_ref 128138 // design componentview 128138 "Cache" diff --git a/uml/cinelerra3/130053 b/uml/cinelerra3/130053 index 27985ba52..c61e1e94f 100644 --- a/uml/cinelerra3/130053 +++ b/uml/cinelerra3/130053 @@ -1,6 +1,6 @@ format 40 "asset" // design::codegen::proc::asset - revision 5 + revision 6 modified_by 5 "hiv" // class settings //class diagram settings @@ -151,6 +151,7 @@ ${members} ${namespace_end}" associated_classes class_ref 136709 // Media + class_ref 139397 // MediaFactory end comment "key abstraction: media-like assets" end diff --git a/uml/cinelerra3/130053.diagram b/uml/cinelerra3/130053.diagram index 36438c6a4..da938cd73 100644 --- a/uml/cinelerra3/130053.diagram +++ b/uml/cinelerra3/130053.diagram @@ -88,6 +88,8 @@ arrowjunctioncanvas 139397 class_ref 130437 // PathManager xyz 350 458 2000 label_xy 328 479 arrowjunctioncanvas 140549 class_ref 128261 // Fixture xyz 494 749 2000 label_xy 487 770 +arrowjunctioncanvas 140805 class_ref 135557 // Error + xyz 790 194 2000 label_xy 787 215 line 132101 ---O from ref 129541 z 1999 to point 301 541 line 139269 z 1999 to ref 131973 @@ -131,5 +133,7 @@ line 139525 ---O geometry HV line 139781 z 1999 to ref 139397 line 140677 ---( from ref 135685 z 1999 to ref 140549 +line 140933 ---O + from ref 132869 z 1999 to ref 140805 preferred_whz 0 0 0.8 end diff --git a/uml/cinelerra3/130309.diagram b/uml/cinelerra3/130309.diagram index bfff7acc4..d9d44ae03 100644 --- a/uml/cinelerra3/130309.diagram +++ b/uml/cinelerra3/130309.diagram @@ -10,126 +10,126 @@ classcanvas 128133 class_ref 136581 // AssetManager end packagecanvas 128517 package_ref 128133 // Asset - show_context_mode namespace xyzwh 215 182 1994 610 571 + show_context_mode namespace xyzwh 214 182 1994 610 571 classcanvas 128645 class_ref 136709 // Media draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 259 330 2005 + xyz 258 330 2005 end classcanvas 128773 class_ref 136837 // Proc draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 503 347 2005 + xyz 502 330 2005 end classcanvas 128901 class_ref 136965 // Struct draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 655 347 2005 + xyz 654 330 2005 end classcanvas 129029 class_ref 137093 // Meta draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 761 347 2005 + xyz 760 330 2005 end classcanvas 130821 class_ref 137221 // Category draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 277 233 2004 + xyz 276 233 2004 end classcanvas 131077 class_ref 137349 // Clip draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 319 445 2000 + xyz 318 445 2000 end classcanvas 131333 class_ref 137477 // Unknown draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 382 529 2000 + xyz 381 529 2000 end classcanvas 131461 class_ref 137605 // Preview draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 387 445 2005 + xyz 386 445 2005 end classcanvas 131973 class_ref 137733 // Effect draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 477 445 2000 + xyz 476 445 2000 end classcanvas 132101 class_ref 137861 // Codec draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 538 445 2000 + xyz 537 445 2000 end classcanvas 132485 class_ref 137989 // Track draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 615 445 2000 + xyz 614 445 2000 end classcanvas 132613 class_ref 138117 // OutPort draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 678 445 2000 + xyz 677 445 2000 end classcanvas 132997 class_ref 138245 // Dataset draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 757 445 2000 + xyz 756 445 2000 end classcanvas 133253 class_ref 138373 // DB draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 486 233 2000 + xyz 485 233 2000 end classcanvas 133765 class_ref 138501 // CompoundMedia draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 245 529 2005 + xyz 244 529 2005 end classcanvas 135813 class_ref 138757 // ProcPatt draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 638 506 2000 + xyz 637 506 2000 end classcanvas 136709 class_ref 139141 // DoAttach draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 567 688 2000 + xyz 566 688 2000 end classcanvas 136837 class_ref 139013 // BuildInstruct draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 605 620 2000 + xyz 604 620 2000 end classcanvas 136965 class_ref 139269 // DoRecurse draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 639 688 2000 + xyz 638 688 2000 end relationcanvas 129157 relation_ref 138117 // geometry VHV - from ref 128645 z 1999 to point 293 307 + from ref 128645 z 1999 to point 292 307 line 129797 z 1999 to point 138 307 line 129925 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 129285 relation_ref 138245 // geometry VHV - from ref 128773 z 1999 to point 523 315 - line 130053 z 1999 to point 138 315 + from ref 128773 z 1999 to point 522 307 + line 130053 z 1999 to point 138 307 line 130181 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 129413 relation_ref 138373 // geometry VHV - from ref 128901 z 1999 to point 675 315 - line 130309 z 1999 to point 138 315 + from ref 128901 z 1999 to point 674 307 + line 130309 z 1999 to point 138 307 line 130437 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 129541 relation_ref 138501 // geometry VHV - from ref 129029 z 1999 to point 781 315 - line 130565 z 1999 to point 138 315 + from ref 129029 z 1999 to point 780 307 + line 130565 z 1999 to point 138 307 line 130693 z 1999 to ref 128005 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 130949 relation_ref 138629 // from ref 128005 z 1999 to ref 130821 - role_a_pos 223 229 3000 no_role_b - multiplicity_a_pos 260 250 3000 multiplicity_b_pos 194 194 3000 + role_a_pos 222 217 3000 no_role_b + multiplicity_a_pos 259 250 3000 multiplicity_b_pos 194 194 3000 relationcanvas 131205 relation_ref 138757 // geometry VHV - from ref 131077 z 1999 to point 339 423 - line 134277 z 1999 to point 293 423 + from ref 131077 z 1999 to point 338 423 + line 134277 z 1999 to point 292 423 line 134405 z 1999 to ref 128645 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 131717 relation_ref 139013 // geometry VHV - from ref 131461 z 2004 to point 411 423 - line 134021 z 2004 to point 293 423 + from ref 131461 z 2004 to point 410 423 + line 134021 z 2004 to point 292 423 line 134149 z 2004 to ref 128645 no_role_a no_role_b no_multiplicity_a no_multiplicity_b @@ -159,20 +159,20 @@ relationcanvas 133125 relation_ref 139781 // no_multiplicity_a no_multiplicity_b relationcanvas 133381 relation_ref 140293 // geometry HV - from ref 128133 z 1999 to point 506 93 + from ref 128133 z 1999 to point 505 93 line 133637 z 1999 to ref 133253 - role_a_pos 518 208 3000 no_role_b - multiplicity_a_pos 492 208 3000 multiplicity_b_pos 386 104 3000 + role_a_pos 517 208 3000 no_role_b + multiplicity_a_pos 491 208 3000 multiplicity_b_pos 386 104 3000 relationcanvas 134533 relation_ref 140421 // from ref 133765 z 2004 to ref 128645 no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 134917 relation_ref 140549 // - from ref 133765 z 2004 stereotype "<>" xyz 229 493 3000 to point 225 545 + from ref 133765 z 2004 stereotype "<>" xyz 228 493 3000 to point 225 545 line 135301 z 2004 to point 225 365 line 135173 z 2004 to ref 128645 - role_a_pos 217 343 3000 no_role_b - multiplicity_a_pos 232 376 3000 multiplicity_b_pos 230 556 3000 + role_a_pos 216 343 3000 no_role_b + multiplicity_a_pos 231 376 3000 multiplicity_b_pos 229 556 3000 relationcanvas 136069 relation_ref 141189 // from ref 135813 z 1999 to ref 128901 no_role_a no_role_b @@ -185,9 +185,9 @@ relationcanvas 136197 relation_ref 141317 // no_role_a no_role_b no_multiplicity_a no_multiplicity_b relationcanvas 137093 relation_ref 141701 // - from ref 135813 z 1999 stereotype "<>" xyz 632 569 3000 to ref 136837 - role_a_pos 655 600 3000 no_role_b - multiplicity_a_pos 622 599 3000 multiplicity_b_pos 643 557 3000 + from ref 135813 z 1999 stereotype "<>" xyz 631 569 3000 to ref 136837 + role_a_pos 657 595 3000 no_role_b + multiplicity_a_pos 621 595 3000 multiplicity_b_pos 642 557 3000 relationcanvas 137221 relation_ref 141829 // from ref 136709 z 1999 to ref 136837 no_role_a no_role_b @@ -200,13 +200,13 @@ relationcanvas 137477 relation_ref 142085 // from ref 136965 z 1999 to point 728 656 line 137605 z 1999 to point 728 562 line 137733 z 1999 to ref 135813 - role_a_pos 704 524 3000 no_role_b - multiplicity_a_pos 736 560 3000 multiplicity_b_pos 705 688 3000 + role_a_pos 703 523 3000 no_role_b + multiplicity_a_pos 703 556 3000 multiplicity_b_pos 704 688 3000 relationcanvas 137861 relation_ref 142213 // from ref 136709 z 1999 stereotype "<>" xyz 538 659 3000 to point 595 388 line 137989 z 1999 to ref 128773 - role_a_pos 559 553 3000 no_role_b - multiplicity_a_pos 571 541 3000 no_multiplicity_b + role_a_pos 556 343 3000 no_role_b + multiplicity_a_pos 556 376 3000 no_multiplicity_b line 128261 -_-_ geometry HV from ref 128005 z 1999 to point 331 150 line 128389 z 1999 to ref 128133 diff --git a/uml/cinelerra3/130693.diagram b/uml/cinelerra3/130693.diagram new file mode 100644 index 000000000..1602c55a2 --- /dev/null +++ b/uml/cinelerra3/130693.diagram @@ -0,0 +1,23 @@ +format 40 + +packagecanvas 128005 + package_ref 129541 // backend + xyzwh 59 425 1994 717 262 +packagecanvas 128133 + package_ref 130053 // asset + color lightblue xyzwh 437 34 1994 342 257 +componentcanvas 128261 component_ref 130181 // MediaFactory + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 536 127 2005 155 63 +componentcanvas 128389 component_ref 130437 // Media Access + draw_component_as_icon default show_component_req_prov default show_component_rea default + xyzwh 550 504 2005 155 63 +arrowjunctioncanvas 128517 class_ref 139525 // MediaAccessFacade + xyz 617 395 2000 label_xy 575 414 +arrowjunctioncanvas 128773 class_ref 139525 // MediaAccessFacade + xyz 616 349 2000 label_xy 574 368 +line 128645 ---O + from ref 128389 z 1999 to ref 128517 +line 128901 ---( + from ref 128261 z 1999 to ref 128773 +end diff --git a/uml/cinelerra3/130821.diagram b/uml/cinelerra3/130821.diagram new file mode 100644 index 000000000..369aa3f38 --- /dev/null +++ b/uml/cinelerra3/130821.diagram @@ -0,0 +1,37 @@ +format 40 + +packagecanvas 128005 + package_ref 128133 // Asset + xyzwh 32 26 2000 226 311 +classcanvas 128133 class_ref 139397 // MediaFactory + xyz 131 95 3005 label_xy 118 135 +usecasecanvas 128389 usecase_ref 128005 // load Media + xyzwh 340 148 3005 64 32 label_xy 346 180 +usecasecanvas 128645 usecase_ref 128133 // access File + xyzwh 537 190 3005 64 32 label_xy 540 222 +usecasecanvas 128773 usecase_ref 128261 // detect Channels + xyzwh 502 254 3005 64 32 label_xy 495 286 +subject 129413 "" + xyzwh 12 5 2005 280 676 +subject 129541 "" + xyzwh 305 6 2000 351 673 +packagecanvas 129669 + package_ref 128389 // RenderEngine + xyzwh 31 344 2010 227 327 +classcanvas 129797 class_ref 132741 // StateProxy + xyz 129 449 3005 label_xy 122 489 +usecasecanvas 129925 usecase_ref 128389 // access Channel + xyzwh 457 378 3005 64 32 label_xy 450 410 +note 130437 "using channel handle" + xyzwh 471 323 3009 128 35 +line 128517 ---> + from ref 128133 z 3004 to ref 128389 +simplerelationcanvas 129157 simplerelation_ref 129029 + from ref 128389 z 3004 stereotype "<>" xyz 452 185 3000 to ref 128645 +simplerelationcanvas 129285 simplerelation_ref 129157 + from ref 128389 z 3004 stereotype "<>" xyz 424 216 3000 to ref 128773 +line 130053 ---> + from ref 129797 z 3004 to ref 129925 +line 130309 -_-_ + from ref 128773 z 3004 to ref 129925 +end diff --git a/uml/cinelerra3/130949.diagram b/uml/cinelerra3/130949.diagram new file mode 100644 index 000000000..8b766f1c6 --- /dev/null +++ b/uml/cinelerra3/130949.diagram @@ -0,0 +1,21 @@ +format 40 + +classcanvas 128005 class_ref 139525 // MediaAccessFacade + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 149 277 2000 + end +packagecanvas 128133 + package_ref 129157 // BackendLayer + xyzwh 49 191 1995 561 424 +packagecanvas 128261 + package_ref 128133 // Asset + xyzwh 324 29 2000 287 138 +classcanvas 128389 class_ref 139397 // MediaFactory + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 375 83 2005 + end +relationcanvas 129285 relation_ref 142341 // + from ref 128389 z 1999 to ref 128005 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +end diff --git a/uml/cinelerra3/131077.diagram b/uml/cinelerra3/131077.diagram new file mode 100644 index 000000000..5da417c64 --- /dev/null +++ b/uml/cinelerra3/131077.diagram @@ -0,0 +1,92 @@ +format 40 + +classcanvas 128005 class_ref 139013 // BuildInstruct + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 693 369 2000 + end +classcanvas 128133 class_ref 136837 // Proc + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 591 79 2005 + end +classcanvas 128261 class_ref 137861 // Codec + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 581 216 2000 + end +classcanvas 128389 class_ref 138757 // ProcPatt + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 726 255 2000 + end +classcanvas 128517 class_ref 137733 // Effect + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 550 152 2000 + end +classcanvas 128645 class_ref 139141 // DoAttach + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 655 437 2000 + end +packagecanvas 128773 + package_ref 128133 // Asset + show_context_mode namespace xyzwh 406 24 1994 417 478 +packagecanvas 129669 + package_ref 128389 // RenderEngine + xyzwh 20 90 1994 330 411 +classcanvas 129797 class_ref 135045 // CodecAdapter + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 198 348 2000 + end +classcanvas 129925 class_ref 131717 // ProcNode + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 79 137 2000 + end +classcanvas 130053 class_ref 132485 // PluginAdapter + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 233 285 2000 + end +classcanvas 130181 class_ref 131845 // Trafo + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 96 238 2000 + end +relationcanvas 128901 relation_ref 142213 // + from ref 128645 z 1999 stereotype "<>" xyz 626 407 3000 to point 683 134 + line 129029 z 1999 to ref 128133 + role_a_pos 645 92 3000 no_role_b + multiplicity_a_pos 645 125 3000 no_multiplicity_b +relationcanvas 129157 relation_ref 139269 // + from ref 128517 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129285 relation_ref 139397 // + from ref 128261 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129413 relation_ref 141701 // + from ref 128389 z 1999 stereotype "<>" xyz 714 332 3000 to ref 128005 + role_a_pos 746 344 3000 no_role_b + multiplicity_a_pos 710 344 3000 multiplicity_b_pos 731 306 3000 +relationcanvas 129541 relation_ref 141829 // + from ref 128645 z 1999 to ref 128005 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 130309 relation_ref 135429 // + from ref 129925 z 1999 to point 49 137 + line 130437 z 1999 to point 49 167 + line 130565 z 1999 to ref 129925 + role_a_pos 31 145 3000 no_role_b + no_multiplicity_a multiplicity_b_pos 62 164 3000 +relationcanvas 130693 relation_ref 132229 // + from ref 130181 z 1999 to ref 129925 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 131077 relation_ref 136965 // + from ref 129797 z 1999 to ref 130181 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 131205 relation_ref 132997 // + from ref 130053 z 1999 to ref 130181 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +line 131333 -_-_ + from ref 130053 z 1999 to ref 128517 +line 131461 -_-_ + from ref 129797 z 1999 to ref 128261 +end diff --git a/uml/cinelerra3/131205.diagram b/uml/cinelerra3/131205.diagram new file mode 100644 index 000000000..02ad56b41 --- /dev/null +++ b/uml/cinelerra3/131205.diagram @@ -0,0 +1,79 @@ +format 40 + +packagecanvas 128005 + package_ref 128133 // Asset + xyzwh 328 34 1994 448 544 +classcanvas 128133 class_ref 139013 // BuildInstruct + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 651 391 2000 + end +classcanvas 128261 class_ref 136837 // Proc + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 481 508 2005 + end +classcanvas 128389 class_ref 138757 // ProcPatt + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 684 277 2000 + end +classcanvas 128517 class_ref 138117 // OutPort + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 510 196 2000 + end +classcanvas 128645 class_ref 139141 // DoAttach + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 613 459 2000 + end +classcanvas 128773 class_ref 137989 // Track + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 604 196 2000 + end +classcanvas 128901 class_ref 139269 // DoRecurse + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 685 459 2000 + end +classcanvas 129029 class_ref 136965 // Struct + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 701 101 2005 + end +relationcanvas 129157 relation_ref 139653 // + geometry VHV + from ref 128517 z 1999 to point 535 167 + line 130437 z 1999 to point 721 167 + line 130565 z 1999 to ref 129029 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129285 relation_ref 141189 // + from ref 128389 z 1999 to point 721 228 + line 130693 z 1999 to ref 129029 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129413 relation_ref 139525 // + geometry VHV + from ref 128773 z 1999 to point 624 167 + line 130181 z 1999 to point 721 167 + line 130309 z 1999 to ref 129029 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129541 relation_ref 141701 // + from ref 128389 z 1999 stereotype "<>" xyz 678 340 3000 to ref 128133 + role_a_pos 704 366 3000 no_role_b + multiplicity_a_pos 668 366 3000 multiplicity_b_pos 689 328 3000 +relationcanvas 129669 relation_ref 141829 // + from ref 128645 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 129797 relation_ref 142213 // + from ref 128645 z 1999 stereotype "<>" xyz 510 628 3000 to ref 128261 + role_a_pos 535 494 3000 no_role_b + multiplicity_a_pos 535 527 3000 no_multiplicity_b +relationcanvas 130053 relation_ref 141957 // + from ref 128901 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 130821 relation_ref 142469 // + geometry VH + from ref 128773 z 1999 to point 624 296 + line 131205 z 1999 to ref 128389 + role_a_pos 587 295 3000 no_role_b + multiplicity_a_pos 667 307 3000 no_multiplicity_b +end diff --git a/uml/cinelerra3/5.session b/uml/cinelerra3/5.session index 41ab92dac..15afb5ad6 100644 --- a/uml/cinelerra3/5.session +++ b/uml/cinelerra3/5.session @@ -1,38 +1,23 @@ window_sizes 1140 783 270 860 633 71 diagrams - active classdiagram_ref 130309 // Asset Kinds + classdiagram_ref 130309 // Asset Kinds 860 633 100 4 180 0 classdiagram_ref 128133 // Session structure 688 506 100 4 120 0 - classdiagram_ref 130437 // Media-Asset Relations + active classdiagram_ref 130437 // Media-Asset Relations 860 633 100 4 0 0 + classdiagram_ref 128389 // Render Entities + 688 506 100 4 120 0 end show_stereotypes -selected objectdiagram_ref 128773 // EDL Example1 +selected + package_ref 129 // cinelerra3 open package_ref 128005 // design - class_ref 136453 // Asset - operation_ref 133125 // getID - operation_ref 132357 // reg - class_ref 136709 // Media - class_ref 138501 // CompoundMedia - class_ref 137349 // Clip - class_ref 138757 // ProcPatt - class_ref 139141 // DoAttach - class_ref 139269 // DoRecurse - class_ref 128901 // Clip - class_ref 138629 // CompoundClip - - package_ref 128389 // RenderEngine - usecaseview_ref 128005 // Renderengine Use - class_ref 135685 // Logic - class_ref 135813 // Config - class_ref 135941 // State - class_ref 136069 // Invalid - class_ref 136197 // External - class_ref 136325 // std::exception - class_ref 135429 // Appconfig - classview_ref 128266 // SmartPointers + classview_ref 128901 // Assets + classview_ref 128133 // Engine Workings + classview_ref 129029 // Interface + componentview_ref 128266 // FileMapping end end diff --git a/uml/cinelerra3/cinelerra3.prj b/uml/cinelerra3/cinelerra3.prj index 7d03110f4..cd49f3161 100644 --- a/uml/cinelerra3/cinelerra3.prj +++ b/uml/cinelerra3/cinelerra3.prj @@ -1,6 +1,6 @@ format 40 "cinelerra3" - revision 28 + revision 29 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 53f84aa82..f845eb46c 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -1367,9 +1367,10 @@ As a //first shot// Ichthyo considers the following approach: <style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;">loading <b>Cinelerra Renderengine</b> devel doku<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div> -
        +
        The Interface asset::Media is a //key abstraction// It ties together several concepts and enables to deal with them on the interfaces in a uniform manner. Besides, as every Asset kind it belongs rather to the bookkeeping view: it holds the specific properties and parametrisation of the media source it stands for. Regarding the __inward interface__ &mdash; as used from within the [[EDL]] or the [[Render Nodes|ProcNode]], it is irrelevant if a given asset::Media object stands for a complete media source, just a clip taken from this source or if a placeholder version of the real media source is used instead.
        -[img[Asset Classess|uml/fig130437.png]]
        +[img[Asset Classess|uml/fig130437.png]] +
        Of course: Cinelerra currently leaks memory and crashes regularilly. For the newly written code, besides retaining the same performance level, a main goal is to use methods and techniques known to support the writing of quality code. So, besides the MultithreadConsiderations, a solid strategy for managing the ownership of allocated memory blocks is necessary right from start.
        @@ -2063,6 +2064,16 @@ Simple relations can be hard wired. But, on the contrary, it would be as naive t
         
         One example of this problem is the [[handling of multichannel media|MultichannelMedia]]. Following the above reasoning, we end with having a [["structural processing pattern"|ProcPatt]], typically one video stream with MPEG decoder and a pair of audio streams which need either to be routed to some "left" and "right" output ports, or have to be passed through a panning filter accordingly. Now the problem is: //create a new instance of this structure for each new media, or detect which media to subsume under a existing pattern instance.//
        +
        +
        All Assets of kind asset::Proc represent //processing algorithms// in the bookkeeping view. They enable loading, browsing and maybe even parametrizing all the Effects, Plugins and Codecs available for use within the Cinelerra Session.
        +
        +Besides, they provide an important __inward interface__ for the [[ProcNode]]s, which will use these asset entries to dispatch the actual processing call when rendering. 
        +
        +{{red{todo: the naming scheme??}}}
        +
        +[img[Asset Classess|uml/fig131077.png]]
        +
        +
        The middle Layer of our current Architecture plan, i.e. the layer managing all processing and manipulation, while the actual data handling is done in the backend and the user interaction belongs to the GUI Layer.
         
        @@ -2430,6 +2441,17 @@ Instead, we should try to just connect the various subsystems via Interfaces and
         * to shield the rendering code of all complexities of thread communication and synchronization, we use the StateProxy
         
        +
        +
        Structural Assets are intended mainly for internal use, but the user should be able to see and query them. By changing the parametrisation of some structural Asset, we can customize the default behaviour of Cinelerra to some extent.
        +* [[Processing Patterns|ProcPatt]] encode the information, how to get at the actual media data when rendering a clip.
        +* Tracks are one of the dimensions used for organizing the EDL. Besides, they carry parametrisation of output port, overlay mode etc.
        +* Output Ports {{red{still need to be defined...}}}
        +
        +The Asset name field of structural Assets utilizes a special naming scheme, which allows to derive the name based on the capabilities of the structural asset. For example, by default all media clips with a given media stream type (e.g. H264) will use the same [[processing Pattern|ProcPatt]] for rendering. {{red{todo: work out the details of this naming scheme??}}}
        +
        +[img[Asset Classess|uml/fig131205.png]]
        +
        +
        /*{{{*/
         /* a contrasting background so I can see where one tiddler ends and the other begins */