diff --git a/doc/design/architecture/playRender.txt b/doc/design/architecture/Playback.txt similarity index 93% rename from doc/design/architecture/playRender.txt rename to doc/design/architecture/Playback.txt index 9c866e0e1..f85f39685 100644 --- a/doc/design/architecture/playRender.txt +++ b/doc/design/architecture/Playback.txt @@ -3,7 +3,7 @@ Design: Playback and Render Control :Author: Ichthyostega :Date: 5/2011 -//MENU: label Player subsystem +//MENU: label Playback ************************************************************************************** This part of the architecture is concerned with how to initiate, coordinate and control @@ -24,10 +24,12 @@ discussions and brainstorming sessions. * discussions regarding time values and timecode handling shed some light on the requirements to be fulfilled by a player subsystem - - link:http://article.gmane.org/gmane.comp.video.lumiera.general/2116[Timecode Widget and Framerates] - - link:http://article.gmane.org/gmane.comp.video.lumiera.general/2109[Time, Time-spans, Quatisation and Timecode] - - link:{l}/wiki/renderengine.html#TimeQuant[Definition of Time entities] - from the implementation notes in the TiddlyWiki + - https://lists.lumiera.org/pipermail/lumiera/2010-July/001984.html[Timecode formats and time widget] + - https://lists.lumiera.org/pipermail/lumiera/2010-December/002197.html[Timecode Widget and Framerates] + - https://lists.lumiera.org/pipermail/lumiera/2010-December/002190.html[Time, Time-spans, Quatisation and Timecode] + + * at the _framework level_ a set of definitions has been created to handle + link:/x/TimeUsage.html[time values and quantisation]. Reasoning Behind the Player Subsystem's Structure @@ -152,8 +154,8 @@ reconfigure the vault layer services. Frame quantisation ^^^^^^^^^^^^^^^^^^ -link:../TimeQuant.html[Quantisation] is a kind of rounding; like any kind of rounding, quantisation is -a dangerous operation because it kills information content. +link:/x/TimeQuant.html[Quantisation] is a kind of rounding; like any kind of rounding, +quantisation is a dangerous operation because it kills information content. Thus, there are three fundamental guidelines when it comes to rounding: diff --git a/doc/design/architecture/index.txt b/doc/design/architecture/index.txt index 83dadaa02..f3b4468a0 100644 --- a/doc/design/architecture/index.txt +++ b/doc/design/architecture/index.txt @@ -5,7 +5,6 @@ Design Documents: Lumiera Architecture // Menu : prepend child Subsystems // Menu : prepend child ArchitectureSummary -// Menu : attach child TimeQuant after TimeUsage This section will feature some rather high-level considerations regarding the architecture of the application. @@ -14,6 +13,12 @@ the architecture of the application. See link:ArchitectureSummary.html[here] for a short summary of the core architecture ideas of the envisioned Lumiera Application. +.Time and Time-code +link:time/[Handling of time values] and link:time/TimeCode.html[Time Code] is +essential for an editing application and requires some forethought to avoid +some of the common inconsistencies and pitfalls; precision can be a challenge, +given the extremely large range of time scales to cover. + .Rendering and Playback Control This part of the architecture is concened with how to initiate, coordinate and control the calculation processes necessary to generate visible / audible data from our source @@ -21,6 +26,6 @@ media. This design is _not so much_ concerned with the actual calculations; inde takes on an ``bird eye's view'', treating the actual render engine mostly just as an opaque entity providing some service. --> link:playRender.html[Design: Playback and Rendering] +-> link:Playback.html[Design: Playback and Rendering] diff --git a/doc/design/architecture/time/TimeCode.txt b/doc/design/architecture/time/TimeCode.txt new file mode 100644 index 000000000..0baa901c9 --- /dev/null +++ b/doc/design/architecture/time/TimeCode.txt @@ -0,0 +1,13 @@ +Handling of Time Code Formats +============================= + +.A Design draft +Since handling of time values and time code formats is of uttermost importance +for editing film, a draft concept was created in the early phase of Lumiera design. +The chosen approach relies heavily on a framework for representation of temporal data +developed for this purpose in the Lumiera support library. However, the implementation +of various actual time code formats was deferred for later -- while the viability of +this design yet needs to be validated by actual usage. + +Detailed analysis and planning can be found in the +link:/x/fwd/DevWiki.TimeCode.html[DevWiki: TimeCode]. diff --git a/doc/design/architecture/time/TimeMutation.txt b/doc/design/architecture/time/TimeMutation.txt new file mode 100644 index 000000000..42c21b5fb --- /dev/null +++ b/doc/design/architecture/time/TimeMutation.txt @@ -0,0 +1,48 @@ +Modify Quantised Time Values +============================ + +.Challenges +Temporal data can be complex and given in several flavours; a request to _modify_ +some given time data adds a further layer of complexity, since the required modification +can itself be specified in various forms. And on top of that, the temporal data can be +quantised, or can be represented through a quantised view, while also the modification +can be given in any form of quantification, even based on a different time grid. +When it comes to resolving this kind of multi-layered complexity, it is crucial +to stick to the principles of logically sound reasoning; furthermore, especially +the situation where several disjoint time grids are involved may require some +additional decision rule to determine which grid has to take priority. + +.Problematic choices of design +While the Lumiera developers immediately recognised the danger of code quality problems, +there was no consensus how to approach these difficulties. Should everything in the +Render Engine be based on frame counts? Can questions of grid alignment be pushed out +to the system's boundaries? Is grid alignment mostly a problem of UI representation? +An attempt was made to base time handling on simple integral data types, with a plain-C +library to provide quantisation and timecode functions -- which however could not prevent +the proliferation of ad-hoc computations at various places, given that temporal data +seems to be ``just simple numbers''. In an attempt to get this situation under control +before problems start to accumulate and spread, _Ichthyo_ pushed for a radical approach +to rely on the _C++ type system_ and use _opaque_ entities with controlled arithmetic. +Unfortunately, those basic time entities were also defined to be _immutable_ -- following +a trend towards functional programming, which became increasingly popular at that time. + +This new framework proved itself successful as a device to identify and eliminate ad-hoc +solutions -- yet state, being a part of the real world, can not be eliminated by dictum, +and will claim it's right sooner or later. + +- very soon, a `TimeVar` datatype was introduced, since ``pure'' functional concepts + can never compete with the _intuitivity_ of ``just using numbers'' +- from a users point of view, the GUI exposes time-related entities which can be + manipulated -- notably the playback position. An attempt was made, to _encapsulate_ + these manipulations as a `time::Control` + +In this (slightly compromised) form, the new framework was able to support all +time-data related tasks encountered for the first (GTK-2) version of the UI. +Some more technical explanations can be found in the +link:/x/fwd/DevWiki.TimeMutation.html[DevWiki: TimeMutation]. + +In hindsight, using opaque types was very successful -- while the immutability seems +to be a mistake and induces a lot of unnatural complications. A design change to +rectify the situation was planned and documented as +link:/x/ticket/1261.html[#1261 »reconsider (im)mutability of time entities«] + diff --git a/doc/design/architecture/TimeQuant.txt b/doc/design/architecture/time/TimeQuant.txt similarity index 97% rename from doc/design/architecture/TimeQuant.txt rename to doc/design/architecture/time/TimeQuant.txt index 155fd7e00..083108606 100644 --- a/doc/design/architecture/TimeQuant.txt +++ b/doc/design/architecture/time/TimeQuant.txt @@ -44,7 +44,7 @@ changing time:: Time values are _immutable,_ like numbers. + Only a *time variable* can be changed -- yet some of the special time entities - can recieve link:TimeMutation[mutation messages], allowing e.g. for + can receive link:/x/TimeMutation.html[mutation messages], allowing e.g. for adjustments to a time interval selection from the GUI '''' @@ -99,7 +99,7 @@ frame count:: timecode:: Quantisation also is the foundation of all kinds of formalised time specifications actually even a frame count is some kind of (informal) timecode -- other timecodes - employ a standardised format. //Every// presentation of time values and every + employ a standardised format. _Every_ presentation of time values and every persistent storage and exchange of such values is based on time codes. Yet quantisation and time code aren't identical: a given quantised time value typically can be cast into multiple timecode formats. @@ -202,11 +202,9 @@ There is a common baseclass `TCode` though, which can be used as marker or for _type erasure._ -> more on link:TimeUsage.html[usage situations] -//// -// TODO integrate those cross links + --> Timecode link:TimecodeFormat[format and quantisation] +-> Timecode link:/x/TimeCode.html[format and quantisation] + --> Quantiser link:QuantiserImpl[implementation details] -//// +-> Quantiser link:/x/imp/TimeQuantiser.html[implementation details] + diff --git a/doc/design/architecture/TimeUsage.txt b/doc/design/architecture/time/TimeUsage.txt similarity index 93% rename from doc/design/architecture/TimeUsage.txt rename to doc/design/architecture/time/TimeUsage.txt index 10ef5cf16..4dd492716 100644 --- a/doc/design/architecture/TimeUsage.txt +++ b/doc/design/architecture/time/TimeUsage.txt @@ -8,7 +8,7 @@ Time Usage Situations the following collection of usage situations helps to shape the details of the time values and time quantisation design. + --> see also link:TimeQuant.html[more about time quantisation] +-> see also link:/x/TimeQuant.html[more about time quantisation] time position of an object:: indeed the term ``time position'' encompasses two quite different questions @@ -45,7 +45,7 @@ updating the playback position:: possible loop positions are way finer than the processing block size) dispatching individual frames for calculation:: - when a link:PlayProcess[render or playback process] is created, at some point + when a link:/x/PlayProcess.html[render or playback process] is created, at some point we need to translate this logical unit (``calculation stream'') into individual frame job entries. This requires to break continuous time into individual frames, and then ennumerating these frames. @@ -113,7 +113,7 @@ desirable somehow to move these distinctions out of the scope of this design and offload them onto the client (code using these time classes). Another closely related problem is *when to allow mutations*, if at all (-> see -link:TimeMutation[more here...]). We can't completely do away with mutations, +link:/x/TimeMutation.html[more here...]). We can't completely do away with mutations, simply because we don't have a pure functional language at our disposal. The whole concept of _reference semantics_ doesn't play so well with immutable objects. The Lumiera high-level (session) model certainly relies on objects @@ -140,8 +140,8 @@ in this case quantised values and quantisation are approached in the reverse direction, compared with the other uses. Here, after establishing a start point on the time scale, we proceed with ennumerating distinct frames and later on need to access the corresponding raw time, especially to find out about the -link:Segmentation[timeline segment] to address, or for retrieving parameter -automation. -> link:FrameDispatcher[see frame dispatching]. +link:/x/Segmentation.html[timeline segment] to address, or for retrieving parameter +automation. -> link:/x/FrameDispatcher.html[see frame dispatching]. Note that the *display window might be treated as just an independent instance of quantisation*. This is similar to the approach taken above for modifying @@ -176,11 +176,11 @@ closing the circle. substantial problems to be solved --------------------------------- -* how to link:TimeGridAlignment[align multiple grids] -* how to integrate link:TimeMutation[modifications of quantised values]. ([green]#✔ solved#) +* how to align multiple grids -- what grid to use for playback? +* how to integrate link:/x/TimeMutation.html[modifications of quantised values]. ([green]#✔ solved#) * how to isolate the Time/Quantisation part from the grid MetaAsset in the - session -> we use the link:Advice[Advice] system ([green]#✔ solved#) + session -> we use the link:/x/Advice.html[Advice] system ([green]#✔ solved#) * how to design the relation of Timecode, Timecode formatting and Quantisation - -> link:TimecodeFormat[more here] [yellow-background]#WIP# + -> link:/x/TimeCode.html[more here] [yellow-background]#WIP# diff --git a/doc/design/architecture/time/index.txt b/doc/design/architecture/time/index.txt new file mode 100644 index 000000000..9f86f33ea --- /dev/null +++ b/doc/design/architecture/time/index.txt @@ -0,0 +1,21 @@ +Time Handling +============= + +// Menu : sort children +// Menu : attach child TimeQuant after TimeUsage +// Menu : append child TimeMutation + + +While Lumiera will be able to handle various kinds of different content and data, +the task of _editing_ implies to arrange elements into a temporal dimension. +Thus representation of time and expression of relations in time plays a pivotal role. + +At first sight, time seems to we well-known, commonplace and trivial to understand -- +which however is a deception, since anything related to time, timings, duration and +time scales is notoriously difficult to spell out with precision and tricky to +handle in the practice of programming. A high-level discussion should thus + +- start with an analysis of link:TimeUsage.html[usage situations] +- alignment to a pre-determined grid scale, the so called + link:TimeQuant.html[Time Quantisation] requires careful attention +- formal representation of link:TimeCode.html[Time Code] is central to film editing. diff --git a/doc/design/engine/PlayProcess.txt b/doc/design/engine/PlayProcess.txt new file mode 100644 index 000000000..11cdffb90 --- /dev/null +++ b/doc/design/engine/PlayProcess.txt @@ -0,0 +1,11 @@ +Playback and Render Processing +============================== + +.Prototyping and Exploration +On a conceptual level, this topic reaches far beyond the mere data processing +and is undeniably one of the most complex and interwoven aspects of Lumiera. +As of 2025, most structures in this realm are in a state of prototyping -- +many topics are in flux and what works well needs to be figured out yet. + +Many detailed notes can be found in the +link:/x/fwd/DevWiki.PlayProcess.html[DevWiki: PlayProcess]. diff --git a/doc/design/engine/index.txt b/doc/design/engine/index.txt index 0852b6bac..75c1cb741 100644 --- a/doc/design/engine/index.txt +++ b/doc/design/engine/index.txt @@ -2,5 +2,5 @@ Design Documents: Renderengine ============================== This section contains design documents regarding the overall workings of the Render Engine, -and the handling of output generation and output connections. +data processing and the handling of output generation and output connections. diff --git a/doc/design/model/Segmentation.txt b/doc/design/model/Segmentation.txt new file mode 100644 index 000000000..dcd14e75b --- /dev/null +++ b/doc/design/model/Segmentation.txt @@ -0,0 +1,21 @@ +Segmentation of Timeline +======================== + +.A junction between the models +The term ``Segmentation of the Timeline'' describes both a data structure and a step in the +build process, which translates the structures of the *high-level-Model* into a corresponding +graph of Render Nodes. The latter is also known as the *low-level-Model* and can be seen +as a set of preconfigured render pipelines. When such a pipeline is ``pulled''. the render +computations are invoked. The _access points_ to all these pipelines are hooked into a +_backbone_ data structure, designated as the *Fixture* -- which breaks down each top-level +Timeline into a sequence of temporal segments: what differentiates these segments is the +topology of the Render Nodes in the pipeline; whenever a change in this topology is +necessary, a new segment is started. Such a change might e.g. be caused by a transition +between two clips, which has to cover a range of some frames. + +As of 2025, this part of the model is only roughly drafted, mostly using placeholder code +to achieve some level of functional integration. + +Detailed design planning and explanations can be found in the +link:/x/fwd/DevWiki.Segmentation.html[DevWiki: Segmentation]. + diff --git a/doc/design/model/index.txt b/doc/design/model/index.txt index 31dd74534..f1ba202d7 100644 --- a/doc/design/model/index.txt +++ b/doc/design/model/index.txt @@ -2,5 +2,5 @@ Design Documents: Model ======================= * two models: high-level and low-level - * RfC: link:{rfc}/../rfc/ProcHighLevelModel.html[high-level model basics] + * RfC: link:{rfc}/ProcHighLevelModel.html[high-level model basics] diff --git a/doc/devel/meeting_summary/2011-05-11.txt b/doc/devel/meeting_summary/2011-05-11.txt index a35a4b0d7..e23695660 100644 --- a/doc/devel/meeting_summary/2011-05-11.txt +++ b/doc/devel/meeting_summary/2011-05-11.txt @@ -20,7 +20,7 @@ Render Engine Interface _Ichthyo_ had prepared a new link:/documentation/devel/rfc_pending/EngineInterfaceSpec.html[RfC] about the actual interface between the -link:/documentation/design/architecture/playRender.html[Player subsystem] +link:/documentation/design/architecture/Playback.html[Player subsystem] and the Renderengine/Scheduler. The following discussion turned into considering several detaled and technical topics regarding the Jobs to be scheduled, how to create and attach new jobs, diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 8b5f8105c..19d878fb1 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -161542,6 +161542,33 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo + + + + + + + + + + +

+ Wir sollten darauf achten, auf den oberen Ebenen die Anzahl der Kategorien knapp zu halten — um eine gewisse systematische Auffindbarkeit zu gewährleisten; im Gegenzug dazu sind weitere Unterkategorien auf tiefer geschachtelten Ebenen eine praktisch kostenlos verfügbare Ressource, da die Kapazität eines Baumes exponentiell mit der Tiefe wächst +

+ +
+ + + + +

+ Wenn die Design- und Archtektur-Bereiche zu sehr in die Details abgleiten, fächern sie sich in technische Belange auf, welche nicht mehr so recht systematisch in eine Kategorie passen wollen. Für die technische Dokumentation ist das kein Problem, denn diese ist ohnehin quantitativ ausgelegt. +

+ +
+
+
+
@@ -161617,6 +161644,190 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo + + + + + + + + + + +

+ wie so oft hatte Christian eine ganz pfiffige Lösung, die zu kurz greift aber in die richtige Richtung zeigt (und auf die man erst mal kommen muß!) +

+ +
+ + + + + +

+ es gibt einen RfC: »WebsiteSupportMarkup« +

+ +
+
+
+ + + + + +

+ Die Implementierung braucht sehr wahrscheinlich einen kompletten Scan über alle Dokumente; das zu vermeiden führt direkt in ein DB-basiertes CMS. Daher, gemäß KISS sollte man erst mal versuchen das zu implementieren und beobachten, wie groß der Schmerz ist. Auch Menuegen selber war mal in zwei Tagen implementiert, ist schwer zu warten, aber erfüllt seinen Zweck inzwischen seit mehr als 10 Jahren +

+ +
+ +
+ + + + +

+ Das größte Problem ist wohl, daß wir nicht genau wissen, was wir brauchen (abgesehen von der Vorstellung, irgenwie magisch funktionierende Cross-Links zu bekommen)... +

+
    +
  • + wir wollen ein Tag-System, welches um weitere Quellen erweitert werden kann +
  • +
  • + wir wollen möglichst mit dem Taggen anfangen können, bevor unser Konzept wirklich klar ist +
  • +
  • + es schwirren viele Ideen herum bezüglich generierter Übersichtsseiten; was uns aber tatsächlich weht tut, ist die Schwierigkeit, Cross-Links in der Dokumentation zu verwenden. +
  • +
+ +
+
+ + + + + + + +

+ nun sind wohl 10 Jahre vergangen +

+

+ und das Problem besteht unverändert +

+ +
+ + + +

+ ...was aber vor allem daran liegt, daß ich allein bin und für mich sowiso alles per Mindmap organisiere; daher konnte ich das Problem bisher »aussitzen« — was aber leider dazu geführt hat, daß das TiddlyWiki (und meine Mindmap) ins Unermessliche gewachsen sind. Dennoch ist das Problem eigentlich brennend ernst: außer mir blickt keiner durch, und ohne mich findet niemand die Ergebnisse der umfangreichen Konzeptionsarbeit. +

+ +
+ + +
+ + + + + + + +

+ Dieser Vorschlag stammt von Christian, und (selbst wenn der Vorschlag zunächst in zweifelhaftem Kontext stand) — es ist die einzige bisher vorgeschlagene Lösung, die mit einfachen Mitteln umsetzbar ist, letztlich sogar ohne jedwede Automatisierung +

+ +
+
+
+ + + + +

+ ...all die weiteren seinerzeit hitzig diskutieren »Killer-Features« sind meines Erachtens Extras, die man oben drauf setzen kann; auch Übersichts- und Kategorieseiten erreicht man letztlich wieder über einen ID-Link. Der einzige Knackpunkt ist, das Eingangs-Format der Links so hinzubekommen, daß es tragfähig ist. +

+ +
+
+ + + + + + +

+ Micro-HTTPD expandiert nicht automatisch *.html +

+ +
+
+ + + + +

+ Aus mehrerlei Gründen +

+
    +
  • + weil wir generell in der Adresszeile die kanonische URL sehen wollen +
  • +
  • + weil das Navigationsmenü nur mit der kanonischen URL funktioniert +
  • +
+ +
+ + + + + +
+ + + +
+ + + + + + + + +

+ »solange Vorrat reicht« — die ganze Frage der Duplikat-Resolution kann später auf technischer Ebene gelöst werden, solange es nur für jede verwendete ID einen Link gibt +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + @@ -162538,10 +162749,12 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo - - - - + + + + + + @@ -162589,13 +162802,14 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo - + + - + @@ -162833,8 +163047,211 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo - + + + + + + + + + + + + + + + + + + + + + +

+ Stichworte allein sind ein flat namespace +

+ +
+
+ + + + + +

+ Das wäre eigentlich eine schöne Lösung, die uns weiterhin ein Content-Management-System erspart: wir erzeugen beim Seiten-Rendern eine Linkfarm, und die Links werden anhand von Tags aufgelöst, die in den Seiten als Kommentar stehen (ähnlich wie derzeit die Steuerung des Menüs) +

+ +
+
+ + + + +

+ Seinerzeit wollte Christian das mal eben schnell in Lua  implementieren, war aber am nächsten Tag zurückgerudert (als ihm klar wurde, daß die eigentliche Aufgabe schon etwas komplexer ist). Dann wollte sich Benny darum kümmern, ist aber bei einem Glossary-Generator steckengeblieben. Und ich — ich würde das wohl in 1-2 Wochen hinbekommen, würde dafür aber auch Menuegen neu schreiben, weil beide Aufgaben gleichermaßen eine Traversierung aller Sources erfordern. Meine Sorge dabei ist, daß das ein Performance-Bottleneck wird; denn dann brauchen wir inkrementelle Verarbeitung und damit eine Datenbank — und würden dann selber ein Content-Management-System schreiben. +

+ +
+
+ + + + +

+ Und das Problem hierbei ist so typisch Christian: „man kann dann ja mit Tags arbeiten!“ — Junge, ein System von Tags aufbauen, das für unsere Zwecke funktionert, das ist die eigentliche Aufgabe. +

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Lumiera ist keine Plattform und kein Framework — wir haben lediglich Framework-artige Infrastruktur wie in jeder größeren Applikation +

+ +
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + +

+ hier stimmt was nicht mit dem Link auf das allgemeine Essay +

+ +
+ +
+ + + + + + + +

+ Okt.2009 hatten wir eine Kooperation mit der ffis.de vereinbart; in den nächsten Jahren gab es ein paar Klein-Spenden, die wir aber nicht von der ffis abgerufen haben, da wir damals keinen Bedarf hatten (Idee war z.B. immer gewesen, einem Entwickler die Reise zum Treffen zu zahlen — aber die Beteiligten konnten die Reise zur FrOSCon immer problemlos selber zahlen). Das ist zwar schön für uns .... aber eine derart veraltete Spenden-Seite wirft ein schlechtes Licht auf uns! +

+ +
+ + + +
+ + + + + + + +
@@ -174582,6 +174999,21 @@ Since then others have made contributions, see the log for the history.
+ + + + + + + + + + + + + + +