diff --git a/src/steam/engine/calc-stream.hpp b/src/steam/engine/calc-stream.hpp index c020368bb..359cd80a8 100644 --- a/src/steam/engine/calc-stream.hpp +++ b/src/steam/engine/calc-stream.hpp @@ -37,8 +37,7 @@ #include "lib/error.hpp" -#include "steam/play/timings.hpp" -#include "steam/play/output-slot.hpp" +#include "vault/out/output-slot.hpp" #include "steam/engine/render-drive.hpp" //#include "include/dummy-player-facade.h" //#include "include/display-facade.h" @@ -98,7 +97,7 @@ namespace engine{ void - sendToOutput (play::DataSink) + sendToOutput (vault::out::DataSink) { UNIMPLEMENTED ("set up dispatcher to start calculating and feeding to the given output sink"); } diff --git a/src/steam/engine/dispatcher.hpp b/src/steam/engine/dispatcher.hpp index e8178ccab..82ffd1f63 100644 --- a/src/steam/engine/dispatcher.hpp +++ b/src/steam/engine/dispatcher.hpp @@ -30,8 +30,8 @@ #include "steam/mobject/model-port.hpp" #include "steam/engine/job-ticket.hpp" #include "steam/engine/job-planning.hpp" -#include "steam/play/timings.hpp" -#include "steam/play/output-slot.hpp" +#include "vault/out/output-slot.hpp" +#include "vault/out/timings.hpp" #include "lib/iter-explorer.hpp" #include "lib/time/timevalue.hpp" #include "lib/nocopy.hpp" @@ -47,8 +47,8 @@ namespace engine { using std::move; using std::make_pair; using mobject::ModelPort; - using play::Timings; - using play::DataSink; + using vault::out::Timings; + using vault::out::DataSink; using lib::time::TimeValue; using lib::time::TimeSpan; using lib::time::FrameCnt; @@ -264,7 +264,7 @@ namespace engine { * wire in the DataSink...) */ auto - feedTo (play::DataSink& sink) + feedTo (DataSink& sink) { return terminatePipeline ( SRC::transform( diff --git a/src/steam/engine/engine-diagnostics.hpp b/src/steam/engine/engine-diagnostics.hpp index b77540044..70ba59b3d 100644 --- a/src/steam/engine/engine-diagnostics.hpp +++ b/src/steam/engine/engine-diagnostics.hpp @@ -30,13 +30,14 @@ #include "lib/error.hpp" #include "lib/nocopy.hpp" +#include "vault/out/timings.hpp" #include "steam/engine/engine-service.hpp" //#include "include/dummy-player-facade.h" //#include "include/display-facade.h" //#include "steam/engine/calc-stream.hpp" //#include "steam/mobject/model-port.hpp" -#include "steam/play/timings.hpp" -//#include "steam/play/output-slot.hpp" +//#include "vault/out/timings.hpp" +//#include "vault/out/output-slot.hpp" //#include "vessel/instancehandle.hpp" //#include "lib/singleton-ref.hpp" //#include "lib/polymorphic-value.hpp" @@ -52,7 +53,7 @@ namespace engine{ // using vessel::Subsys; // using vessel::Display; // using vessel::DummyPlayer; - using steam::play::Timings; + using vault::out::Timings; @@ -101,6 +102,5 @@ namespace engine{ -} // namespace engine -} // namespace steam +}}// namespace steam::engine #endif diff --git a/src/steam/engine/engine-service.cpp b/src/steam/engine/engine-service.cpp index abf778048..7692c0e95 100644 --- a/src/steam/engine/engine-service.cpp +++ b/src/steam/engine/engine-service.cpp @@ -22,23 +22,20 @@ #include "steam/engine/render-environment.hpp" #include "lib/itertools.hpp" -//#include -//#include #include +using std::ref; +using std::bind; +using std::function; +using std::placeholders::_1; +using lib::iter_source::transform; +using lib::append_all; +using vault::out::DataSink; namespace steam { namespace engine{ -// using std::string; -// using vessel::Subsys; - using std::ref; - using std::bind; - using std::function; - using std::placeholders::_1; - using lib::iter_source::transform; - using lib::append_all; namespace { // hidden local details of the service implementation.... @@ -76,7 +73,7 @@ namespace engine{ Quality serviceQuality) { //////////////////////////////////////////////////TICKET #1301 : prepare proper Dispatcher here, including translation ModelPort -> portIDX RenderEnvironment& renderConfig = configureCalculation (mPort,nominalTimings,serviceQuality); - function triggerRenderStart = bind (activateCalculation, _1, ref(renderConfig)); + function triggerRenderStart = bind (activateCalculation, _1, ref(renderConfig)); CalcStreams runningCalculations; append_all (transform (output.getOpenedSinks() @@ -84,10 +81,10 @@ namespace engine{ ) ,runningCalculations); return runningCalculations; -/////////////////////////////////////////////////////////////////////////////////////////////TICKET #874 : use a pipeline builder to write it as follows: -// treat_all(output.getOpenedSinks()) -// .apply (activateCalculation, _1, renderConfig) -// .buildVector(); +/////////////////////////////////////////////////////////////////////////////////////////////TICKET #874 : use our pipeline builder (lib::IterSource) to write it as follows: +// lib::explore(output.getOpenedSinks()) +// .transform ([this,&renderConfig](DataSink sink){ return activateCalculation(sink, renderConfig); }) +// .effuse(); } @@ -109,7 +106,7 @@ namespace engine{ * to be re-configured and adjusted while running. */ CalcStream - EngineService::activateCalculation (play::DataSink sink, RenderEnvironment& engineCallback) + EngineService::activateCalculation (DataSink sink, RenderEnvironment& engineCallback) { CalcStream calcStream(engineCallback); calcStream.sendToOutput (sink); ////////////////////////////////////////////////////TICKET #1297 : need to re-think the association ModelPort ⟷ output sink diff --git a/src/steam/engine/engine-service.hpp b/src/steam/engine/engine-service.hpp index 6d6e79e6e..4764ffd27 100644 --- a/src/steam/engine/engine-service.hpp +++ b/src/steam/engine/engine-service.hpp @@ -49,10 +49,10 @@ #include "lib/nocopy.hpp" //#include "include/dummy-player-facade.h" //#include "include/display-facade.h" +#include "vault/out/timings.hpp" #include "steam/engine/calc-stream.hpp" #include "steam/mobject/model-port.hpp" -#include "steam/play/timings.hpp" -#include "steam/play/output-slot.hpp" +#include "vault/out/output-slot.hpp" //#include "vessel/instancehandle.hpp" //#include "lib/singleton-ref.hpp" #include "lib/polymorphic-value.hpp" @@ -71,9 +71,9 @@ namespace engine{ // using vessel::DummyPlayer; // using std::function; using mobject::ModelPort; - using steam::play::Timings; + using vault::out::Timings; - using OutputConnection = steam::play::OutputSlot::Allocation; + using OutputConnection = vault::out::OutputSlot::Allocation; @@ -159,7 +159,7 @@ namespace engine{ friend class EngineDiagnostics; private: - static CalcStream activateCalculation (play::DataSink, RenderEnvironment&); + static CalcStream activateCalculation (vault::out::DataSink, RenderEnvironment&); }; diff --git a/src/steam/engine/job-planning.hpp b/src/steam/engine/job-planning.hpp index 288e888bd..25e043b92 100644 --- a/src/steam/engine/job-planning.hpp +++ b/src/steam/engine/job-planning.hpp @@ -61,8 +61,8 @@ #include "steam/common.hpp" #include "vault/gear/job.h" #include "steam/engine/job-ticket.hpp" -#include "steam/play/output-slot.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/output-slot.hpp" +#include "vault/out/timings.hpp" #include "lib/time/timevalue.hpp" #include "lib/itertools.hpp" #include "lib/nocopy.hpp" @@ -74,11 +74,11 @@ namespace engine { namespace error = lumiera::error; - using play::DataSink; - using play::Timings; using lib::time::Time; using lib::time::TimeVar; using lib::time::Duration; + using vault::out::DataSink; + using vault::out::Timings; using vault::gear::Job; @@ -139,11 +139,11 @@ namespace engine { { switch (timings.playbackUrgency) { - case play::ASAP: - case play::NICE: + case vault::out::ASAP: + case vault::out::NICE: return Time::ANYTIME; - case play::TIMEBOUND: + case vault::out::TIMEBOUND: return doCalcDeadline (timings); } NOTREACHED ("unexpected playbackUrgency"); diff --git a/src/steam/engine/render-drive.hpp b/src/steam/engine/render-drive.hpp index ceed456b9..720d2f6b5 100644 --- a/src/steam/engine/render-drive.hpp +++ b/src/steam/engine/render-drive.hpp @@ -33,7 +33,7 @@ #include "steam/common.hpp" #include "steam/engine/render-environment.hpp" #include "steam/mobject/model-port.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" #include "vault/gear/job.h" //#include "lib/nocopy.hpp" @@ -42,9 +42,10 @@ namespace steam { namespace engine { // using std::function; + using mobject::ModelPort; using vault::gear::JobParameter; using vault::gear::JobClosure; - using mobject::ModelPort; + using vault::out::Timings; // using lib::time::TimeSpan; // using lib::time::FSecs; // using lib::time::Time; @@ -98,7 +99,7 @@ namespace engine { { } - play::Timings const& + Timings const& getTimings() const { return engine_.effectiveTimings(); diff --git a/src/steam/engine/render-environment.hpp b/src/steam/engine/render-environment.hpp index 061e65809..445bc71bf 100644 --- a/src/steam/engine/render-environment.hpp +++ b/src/steam/engine/render-environment.hpp @@ -31,13 +31,15 @@ #include "steam/common.hpp" #include "steam/engine/dispatcher.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" //#include "lib/nocopy.hpp" namespace steam { namespace engine{ + using vault::out::Timings; + /** @@ -54,8 +56,8 @@ namespace engine{ public: virtual ~RenderEnvironment() { } ///< this is an interface - virtual play::Timings& effectiveTimings() =0; - virtual Dispatcher& getDispatcher() =0; + virtual Timings& effectiveTimings() =0; + virtual Dispatcher& getDispatcher() =0; }; diff --git a/src/steam/play/output-manager.hpp b/src/steam/play/output-manager.hpp index 88a6b4c18..135831681 100644 --- a/src/steam/play/output-manager.hpp +++ b/src/steam/play/output-manager.hpp @@ -24,7 +24,8 @@ #include "lib/error.hpp" #include "lib/nocopy.hpp" -#include "steam/play/output-slot.hpp" +#include "vault/out/timings.hpp" +#include "vault/out/output-slot.hpp" #include "steam/mobject/model-port.hpp" //#include @@ -42,6 +43,12 @@ namespace play { //using std::string; //using std::vector; + using vault::out::PlaybackUrgency; + using vault::out::TIMEBOUND; + using vault::out::NICE; + using vault::out::ASAP; + using vault::out::Timings; + using vault::out::OutputSlot; using std::shared_ptr; diff --git a/src/steam/play/render-configurator.hpp b/src/steam/play/render-configurator.hpp index c25211907..cc6f62cd7 100644 --- a/src/steam/play/render-configurator.hpp +++ b/src/steam/play/render-configurator.hpp @@ -36,8 +36,9 @@ #include "steam/mobject/model-port.hpp" #include "steam/play/play-process.hpp" #include "steam/engine/calc-stream.hpp" -#include "steam/play/output-slot.hpp" #include "steam/play/output-manager.hpp" +#include "vault/out/output-slot.hpp" +#include "vault/out/timings.hpp" //#include "lib/iter-source.hpp" //#include "lib/util.hpp" @@ -52,6 +53,8 @@ namespace play { // using std::string; // using util::isnil; using std::function; + using vault::out::Timings; + using vault::out::OutputSlot; using steam::mobject::ModelPort; // typedef steam::play::POutputManager POutputManager; diff --git a/tests/steam/play/diagnostic-output-slot.hpp b/src/vault/out/diagnostic-output-slot.hpp similarity index 98% rename from tests/steam/play/diagnostic-output-slot.hpp rename to src/vault/out/diagnostic-output-slot.hpp index 060c0f018..cb7a09587 100644 --- a/tests/steam/play/diagnostic-output-slot.hpp +++ b/src/vault/out/diagnostic-output-slot.hpp @@ -18,15 +18,15 @@ */ -#ifndef STEAM_PLAY_DIAGNOSTIC_OUTPUT_SLOT_H -#define STEAM_PLAY_DIAGNOSTIC_OUTPUT_SLOT_H +#ifndef VAULT_OUT_DIAGNOSTIC_OUTPUT_SLOT_H +#define VAULT_OUT_DIAGNOSTIC_OUTPUT_SLOT_H #include "lib/error.hpp" #include "lib/nocopy.hpp" #include "include/logging.h" -#include "steam/play/output-slot.hpp" -#include "steam/play/output-slot-connection.hpp" +#include "vault/out/output-slot.hpp" +#include "vault/out/output-slot-connection.hpp" #include "vault/mem/buffhandle.hpp" #include "vault/mem/naive-buffer-setup.hpp" #include "lib/time/timevalue.hpp" @@ -45,8 +45,8 @@ #include -namespace steam { -namespace play { +namespace vault { +namespace out { namespace err = lumiera::error; using lib::Symbol; @@ -544,5 +544,5 @@ namespace play { -}} // namespace steam::play -#endif +}} // namespace vault::out +#endif /*VAULT_OUT_DIAGNOSTIC_OUTPUT_SLOT_H*/ diff --git a/src/steam/play/output-slot-connection.hpp b/src/vault/out/output-slot-connection.hpp similarity index 96% rename from src/steam/play/output-slot-connection.hpp rename to src/vault/out/output-slot-connection.hpp index 71793e934..4a3b53b1b 100644 --- a/src/steam/play/output-slot-connection.hpp +++ b/src/vault/out/output-slot-connection.hpp @@ -2,7 +2,7 @@ OUTPUT-SLOT-CONNECTION.hpp - implementation API for concrete output slots Copyright (C) - 2011, Hermann Vosseler + 2011,2026 Hermann Vosseler   **Lumiera** is free software; you can redistribute it and/or modify it   under the terms of the GNU General Public License as published by the @@ -26,13 +26,13 @@ */ -#ifndef STEAM_PLAY_OUTPUT_SLOT_CONNECTION_H -#define STEAM_PLAY_OUTPUT_SLOT_CONNECTION_H +#ifndef VAULT_OUT_OUTPUT_SLOT_CONNECTION_H +#define VAULT_OUT_OUTPUT_SLOT_CONNECTION_H #include "lib/error.hpp" #include "lib/nocopy.hpp" -#include "steam/play/output-slot.hpp" +#include "vault/out/output-slot.hpp" #include "vault/mem/buffhandle.hpp" #include "lib/scoped-collection.hpp" #include "lib/iter-adapter-stl.hpp" @@ -49,8 +49,8 @@ //#include -namespace steam { -namespace play { +namespace vault { +namespace out { using vault::mem::BuffHandle; //using vault::mem::BufferProvider; @@ -239,5 +239,5 @@ namespace play { -}} // namespace steam::play -#endif +}} // namespace vault::out +#endif /*VAULT_OUT_OUTPUT_SLOT_CONNECTION_H*/ diff --git a/src/steam/play/output-slot.cpp b/src/vault/out/output-slot.cpp similarity index 90% rename from src/steam/play/output-slot.cpp rename to src/vault/out/output-slot.cpp index a1396c13b..6567215d4 100644 --- a/src/steam/play/output-slot.cpp +++ b/src/vault/out/output-slot.cpp @@ -18,18 +18,18 @@ #include "lib/error.hpp" -#include "steam/play/output-slot.hpp" -#include "steam/play/output-slot-connection.hpp" +#include "vault/out/output-slot.hpp" +#include "vault/out/output-slot-connection.hpp" #include -namespace steam { -namespace play { +namespace vault { +namespace out { + namespace err = lumiera::error; using std::vector; - namespace error = lumiera::error; @@ -73,7 +73,7 @@ namespace play { OutputSlot::allocate() { if (not isFree()) - throw error::Logic ("Attempt to open/allocate an OutputSlot already in use."); + throw err::Logic ("Attempt to open/allocate an OutputSlot already in use."); state_.reset (this->buildState()); return *state_; @@ -111,4 +111,4 @@ namespace play { -}} // namespace steam::play +}} // namespace vault::out diff --git a/src/steam/play/output-slot.hpp b/src/vault/out/output-slot.hpp similarity index 95% rename from src/steam/play/output-slot.hpp rename to src/vault/out/output-slot.hpp index 8005d6628..f5c9b4c4f 100644 --- a/src/steam/play/output-slot.hpp +++ b/src/vault/out/output-slot.hpp @@ -2,7 +2,7 @@ OUTPUT-SLOT.hpp - capability to transfer data to a physical output Copyright (C) - 2011, Hermann Vosseler + 2011,2026 Hermann Vosseler   **Lumiera** is free software; you can redistribute it and/or modify it   under the terms of the GNU General Public License as published by the @@ -53,23 +53,23 @@ */ -#ifndef STEAM_PLAY_OUTPUT_SLOT_H -#define STEAM_PLAY_OUTPUT_SLOT_H +#ifndef VAULT_OUT_OUTPUT_SLOT_H +#define VAULT_OUT_OUTPUT_SLOT_H #include "lib/error.hpp" #include "lib/handle.hpp" #include "lib/time/timevalue.hpp" #include "vault/mem/buffer-provider.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" #include "lib/iter-source.hpp" #include "lib/nocopy.hpp" #include -namespace steam { -namespace play { +namespace vault { +namespace out { using vault::mem::BuffHandle; using vault::mem::BufferProvider; @@ -83,7 +83,7 @@ namespace play { class DataSink; - typedef FrameCnt FrameID; + using FrameID = FrameCnt; @@ -180,5 +180,5 @@ namespace play { -}} // namespace steam::play -#endif +}} // namespace vault::out +#endif /*VAULT_OUT_OUTPUT_SLOT_H*/ diff --git a/src/steam/play/timings.cpp b/src/vault/out/timings.cpp similarity index 98% rename from src/steam/play/timings.cpp rename to src/vault/out/timings.cpp index 0f1fcf216..f160ce053 100644 --- a/src/steam/play/timings.cpp +++ b/src/vault/out/timings.cpp @@ -21,14 +21,14 @@ */ -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" #include "lib/time/formats.hpp" #include "lib/time/timequant.hpp" #include "lib/rational.hpp" -namespace steam { -namespace play { +namespace vault { +namespace out { using lib::time::PQuant; using lib::time::Time; @@ -219,4 +219,4 @@ namespace play { -}} // namespace steam::play +}} // namespace vault::out diff --git a/src/steam/play/timings.hpp b/src/vault/out/timings.hpp similarity index 93% rename from src/steam/play/timings.hpp rename to src/vault/out/timings.hpp index 3c923ddad..9f5ec79ca 100644 --- a/src/steam/play/timings.hpp +++ b/src/vault/out/timings.hpp @@ -25,13 +25,16 @@ ** actual timing specs dictate the constraints for real time frame ** delivery to an external output connection. ** - ** @todo WIP-WIP-WIP 8/2011 - ** @see output-slot.hpp ////TODO + ** @todo WIP-WIP-WIP 3/2026 although this class is around for many years now, + ** its actual meaning is still not well defined; sometimes it appears as a specification, + ** while at places it also plays the role of a constraint. + ** @see dispatcher.hpp + ** @see output-slot.hpp */ -#ifndef STEAM_PLAY_TIMINGS_H -#define STEAM_PLAY_TIMINGS_H +#ifndef VAULT_OUT_TIMINGS_H +#define VAULT_OUT_TIMINGS_H #include "lib/error.hpp" @@ -52,8 +55,8 @@ namespace time{ typedef std::shared_ptr PQuant; }} -namespace steam { -namespace play { +namespace vault { +namespace out { using lib::time::FrameCnt; using lib::time::FrameRate; @@ -192,10 +195,10 @@ namespace play { inline bool Timings::isTimebound() const { - return play::TIMEBOUND == playbackUrgency; + return out::TIMEBOUND == playbackUrgency; } -}} // namespace steam::play -#endif +}} // namespace vault::out +#endif /*VAULT_OUT_TIMINGS_H*/ diff --git a/tests/steam/engine/dispatcher-interface-test.cpp b/tests/steam/engine/dispatcher-interface-test.cpp index 83ce151ae..ddeab3d37 100644 --- a/tests/steam/engine/dispatcher-interface-test.cpp +++ b/tests/steam/engine/dispatcher-interface-test.cpp @@ -18,7 +18,7 @@ #include "test/run.hpp" #include "steam/engine/mock-dispatcher.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" #include "lib/time/timevalue.hpp" #include "lib/util.hpp" @@ -31,10 +31,10 @@ namespace steam { namespace engine{ namespace test { + using vault::out::Timings; using lib::time::FrameRate; using lib::time::Offset; using lib::time::Time; - using play::Timings; using asset::Pipe; using PID = asset::ID; diff --git a/tests/steam/engine/engine-interface-test.cpp b/tests/steam/engine/engine-interface-test.cpp index fd36831bd..69384cba1 100644 --- a/tests/steam/engine/engine-interface-test.cpp +++ b/tests/steam/engine/engine-interface-test.cpp @@ -19,13 +19,14 @@ #include "test/run.hpp" #include "lib/error.hpp" +#include "steam/asset/pipe.hpp" #include "steam/engine/calc-stream.hpp" #include "steam/engine/engine-service.hpp" #include "steam/engine/engine-diagnostics.hpp" -#include "steam/play/output-slot.hpp" -#include "steam/play/diagnostic-output-slot.hpp" #include "steam/mobject/model-port.hpp" -#include "steam/asset/pipe.hpp" +#include "vault/out/diagnostic-output-slot.hpp" +#include "vault/out/output-slot.hpp" +#include "vault/out/timings.hpp" #include "lib/time/timevalue.hpp" //#include @@ -41,8 +42,9 @@ namespace test { using asset::Pipe; using asset::PPipe; using mobject::ModelPort; - using steam::play::OutputSlot; - using steam::play::DiagnosticOutputSlot; + using vault::out::OutputSlot; + using vault::out::DiagnosticOutputSlot; + using vault::out::Timings; using lib::time::FrameRate; typedef asset::ID PID; diff --git a/tests/steam/engine/job-planning-test.cpp b/tests/steam/engine/job-planning-test.cpp index fc0aab39a..acb44e5ca 100644 --- a/tests/steam/engine/job-planning-test.cpp +++ b/tests/steam/engine/job-planning-test.cpp @@ -18,7 +18,7 @@ #include "test/run.hpp" #include "steam/engine/mock-dispatcher.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" #include "lib/time/timevalue.hpp" #include "lib/format-cout.hpp" #include "lib/util.hpp" @@ -34,10 +34,10 @@ namespace steam { namespace engine{ namespace test { + using vault::out::Timings; using lib::time::FrameRate; using lib::time::Offset; using lib::time::Time; - using play::Timings; diff --git a/tests/steam/engine/mock-dispatcher.hpp b/tests/steam/engine/mock-dispatcher.hpp index 696db2172..62f5ba897 100644 --- a/tests/steam/engine/mock-dispatcher.hpp +++ b/tests/steam/engine/mock-dispatcher.hpp @@ -49,6 +49,7 @@ #include "steam/mobject/model-port.hpp" #include "steam/engine/dispatcher.hpp" #include "steam/engine/job-ticket.hpp" +#include "vault/out/output-slot.hpp" #include "vault/gear/job.h" #include "vault/real-clock.hpp" #include "lib/allocator-handle.hpp" @@ -78,6 +79,7 @@ namespace test { using util::isnil; using util::isSameObject; using fixture::Segmentation; + using vault::out::DataSink; using vault::RealClock; using vault::gear::Job; using vault::gear::JobClosure; @@ -403,7 +405,7 @@ namespace test { /** * Test support: verify the given Job is consistent with this Dispatcher. */ - bool verify(Job const& job, ModelPort const& port, play::DataSink const& sink) + bool verify(Job const& job, ModelPort const& port, vault::out::DataSink const& sink) { if (not dummySetup_.isSupported (port, sink)) return false; diff --git a/tests/steam/play/dummy-builder-context.hpp b/tests/steam/play/dummy-builder-context.hpp index 01f599f10..4eaeddba2 100644 --- a/tests/steam/play/dummy-builder-context.hpp +++ b/tests/steam/play/dummy-builder-context.hpp @@ -40,7 +40,7 @@ #include "steam/mobject/model-port.hpp" #include "steam/fixture/model-port-registry.hpp" -#include "steam/play/output-slot-connection.hpp" +#include "vault/out/output-slot-connection.hpp" #include "steam/play/output-manager.hpp" #include "steam/asset/timeline.hpp" #include "steam/asset/pipe.hpp" @@ -58,15 +58,19 @@ namespace play { namespace test { using fixture::ModelPortRegistry; + using vault::mem::BuffHandle; + using vault::out::DataSink; + using vault::out::FrameID; + using lib::time::TimeValue; /** * @todo 5/2023 quick-n-dirty placeholder to be able to fabricate fake DataSink handles (`Handle`) */ class UnimplementedConnection - : public play::OutputSlot::Connection + : public vault::out::OutputSlot::Connection { - BuffHandle claimBufferFor(FrameID) override { UNIMPLEMENTED ("claimBufferFor(FrameID)"); } + BuffHandle claimBufferFor (FrameID) override; bool isTimely (FrameID, TimeValue) override { return true; } void transfer (BuffHandle &) override { UNIMPLEMENTED ("transfer (BuffHandle const&)"); } void pushout (BuffHandle &) override { UNIMPLEMENTED ("pushout (BuffHandle const&)"); } @@ -94,7 +98,7 @@ namespace test { using TID = asset::ID; using ModelPorts = lib::IterSource::iterator; - using DummyOutputLink = std::pair; + using DummyOutputLink = std::pair; inline PID @@ -162,8 +166,8 @@ namespace test { modelPorts_.push_back (ModelPort(pipeB)); // prepare corresponding placeholder DataSink (a fake active output connection) - dataSinks_.emplace_back().activate(std::make_shared()); - dataSinks_.emplace_back().activate(std::make_shared()); + dataSinks_.emplace_back().activate (std::make_shared()); + dataSinks_.emplace_back().activate (std::make_shared()); } @@ -182,7 +186,11 @@ namespace test { }; } }; - - -}}} // namespace steam::play::test + + inline vault::mem::BuffHandle UnimplementedConnection::claimBufferFor (FrameID) + { + UNIMPLEMENTED ("claimBufferFor(FrameID)"); + } + + }}} // namespace steam::play::test #endif /*STEAM_PLAY_DUMMY_BUILDER_CONTEXT_H*/ diff --git a/tests/steam/engine/testframe-test.cpp b/tests/test/testframe-test.cpp similarity index 100% rename from tests/steam/engine/testframe-test.cpp rename to tests/test/testframe-test.cpp diff --git a/tests/steam/engine/output-proxy-provider-test.cpp b/tests/vault/mem/output-proxy-provider-test.cpp similarity index 100% rename from tests/steam/engine/output-proxy-provider-test.cpp rename to tests/vault/mem/output-proxy-provider-test.cpp diff --git a/tests/steam/play/output-slot-protocol-test.cpp b/tests/vault/out/output-slot-protocol-test.cpp similarity index 97% rename from tests/steam/play/output-slot-protocol-test.cpp rename to tests/vault/out/output-slot-protocol-test.cpp index 3b6685c63..24d8e93df 100644 --- a/tests/steam/play/output-slot-protocol-test.cpp +++ b/tests/vault/out/output-slot-protocol-test.cpp @@ -18,7 +18,7 @@ #include "test/run.hpp" -#include "steam/play/diagnostic-output-slot.hpp" +#include "vault/out/diagnostic-output-slot.hpp" #include "vault/mem/buffhandle.hpp" #include "test/test-frame.hpp" @@ -27,8 +27,8 @@ using test::TestFrame; using test::testData; using vault::mem::BuffHandle; -namespace steam { -namespace play { +namespace vault{ +namespace out { namespace test { @@ -133,4 +133,4 @@ namespace test { -}}} // namespace steam::play::test +}}} // namespace vault::out::test diff --git a/tests/steam/play/timing-constraints-test.cpp b/tests/vault/out/timing-constraints-test.cpp similarity index 95% rename from tests/steam/play/timing-constraints-test.cpp rename to tests/vault/out/timing-constraints-test.cpp index 3794028a4..68ce84ca7 100644 --- a/tests/steam/play/timing-constraints-test.cpp +++ b/tests/vault/out/timing-constraints-test.cpp @@ -18,16 +18,16 @@ #include "test/run.hpp" -#include "steam/play/timings.hpp" #include "lib/time/timevalue.hpp" +#include "vault/out/timings.hpp" //#include "steam/engine/buffhandle.hpp" //#include "steam/engine/testframe.hpp" //#include "lib/time/control.hpp" -namespace steam { -namespace play { +namespace vault { +namespace out { namespace test { using lib::time::Time; @@ -71,4 +71,4 @@ namespace test { -}}} // namespace steam::play::test +}}} // namespace vault::out::test diff --git a/tests/steam/engine/timings-test.cpp b/tests/vault/out/timings-test.cpp similarity index 95% rename from tests/steam/engine/timings-test.cpp rename to tests/vault/out/timings-test.cpp index 183d724ae..0a2d620ae 100644 --- a/tests/steam/engine/timings-test.cpp +++ b/tests/vault/out/timings-test.cpp @@ -21,7 +21,7 @@ #include "test/run.hpp" #include "test/test-helper.hpp" -#include "steam/play/timings.hpp" +#include "vault/out/timings.hpp" #include "lib/time/timevalue.hpp" //#include "lib/time/timequant.hpp" //#include "lib/format-cout.hpp" @@ -37,8 +37,8 @@ using util::isnil; //using std::function; -namespace steam { -namespace engine{ +namespace vault { +namespace out { namespace test { using lib::time::FSecs; @@ -47,13 +47,12 @@ namespace test { using lib::time::Duration; using lib::time::Offset; using lib::time::Time; - using play::Timings; namespace { // Test fixture... /* == test parameters == */ - const uint START_FRAME(10); + uint const START_FRAME (10); @@ -125,4 +124,4 @@ namespace test { -}}} // namespace steam::engine::test +}}} // namespace vault::out::test diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 01514b7ea..3beeb1677 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -5055,7 +5055,7 @@ While actually data frames are //pulled,// on a conceptual level data is assumed As both of these specifications are given by [[Pipe]]-~IDs, the actual designation information may be reduced. Much can be infered from the circumstances, because any pipe includes a StreamType, and an output designation for an incompatible stream type is irrelevant. (e.g. and audio output when the pipe currently in question deals with video) -
+
//writing down some thoughts//
 
 * ruled out the system outputs as OutputDesignation.
@@ -5065,11 +5065,14 @@ As both of these specifications are given by [[Pipe]]-~IDs, the actual designati
 * this introduces the notion of a ModelPort: //a point in the (high level) model where output can be produced//
 * thus obviously we need an OutputManager element to track the association of OutputDesignation to OutputSlot
 
-Do we get a single [[Fixture]] &mdash; guess yes
+There is always a single [[Fixture]] -- which is the seam where the high-level model view meshes up with the rendering graph.
+This Fixture is regenerated or amended, whenever anything in the high-level view has changed. Each change //causes an Event// -- and the Fixture is one of the //projections// of this event (using the terminology from the //Event Sourcing// architecture). The key elements within the Fixture are the [[Model Ports|ModelPort]], because such a port is the only ting that //can be rendered:// it constitutes an ExitNode. 
 
-From the implementation side, the only interesting exit nodes are the ones to be //actually pulled,// i.e. those immeditately corresponding to the final output.
-* __rendering__ happens immediately at the output of a GlobalPipe (i.e. at a [[Timeline]], which is top-level)
+
+From the implementation side, the only interesting [[designations|OutputDesignation]] are the ones to be //actually pulled,// i.e. the Model Ports and Exit nodes immediately corresponding to the final output.
+* __rendering__ happens directly at the output of a GlobalPipe (i.e. at a [[Timeline]], which is top-level)
 * __playback__ always happens at a viewer element
+This assessment might seem incomplete at first sight, because most media handling applications employ an implicit second layer of conversions to accommodate outputs. Not so Lumiera: no mapping or translation or media adaptation operation is performed outside of the Engine, ever. Not even the viewers in the GUI have the ability to //implicitly scale video.// When video is required in a different size for playback, the model is re-built and the necessary conversions are made within the engine, resulting in another ModelPort, that precisely matches what is required at the external interface. (An attentive reader might have noticed that this implies using the GPU. And indeed, the goal is that the Render Engine is generic to such a degree that it can //coordinate and orchestrate// various rendering technologies. {{red{However, the initial round of integration will cut some corners in this respect.}}})
 
 !Attaching and mapping of exit nodes
 Initially, [[Output designations|OutputDesignation]] are typically just local or relative references to another OutputDesignation; yet after some resolution steps, we'll arrive at an OutputDesignation //defined absolute.// Basically, these are equivalent to a [[Pipe]]-ID choosen as target for the connection and -- they become //real//&nbsp; by some object //claiming to root this pipe.// The applicability of this pattern is figured out dynamically while building the render network, resulting in a collection of [[model ports|ModelPort]] as part of the current [[Fixture]]. A RenderProcess can be started to pull from these -- and only from these -- active exit points of the model. Besides, when the timeline enclosing these model ports is [[connected to a viewer|ViewConnection]], an [[output network|OutputNetwork]] //is built to allow hooking exit points to the viewer component.// Both cases encompass a mapping of exit nodes to actual output channels. Usually, this mapping just relies on relative addressing of the output sinks, starting to allocate connections with the //first of each kind// (e.g. "connect to the first usable audio output destination").
@@ -5092,9 +5095,12 @@ Within the model routing is done mostly just by referring to an OutputDesignatio
 
 The relation between the central OutputDirector and the peripheral OutputManager implementations is hierarchical. Because output slots are usually registered rather at some peripheral output manager implementation, a direct mapping from OutputDesignation (i.e. global pipe) to these slots is created foremost at that peripheral level. Resolving a global pipe into an output slot is the core concern of any OutputManager implementation. Thus, when there is a locally preconfigured mapping, like e.g. for a viewer's video master pipe to the output slot installed by the corresponding GUI viewer element, then this mapping will be picked up foremost to resolve the video master output.
 
-For a viewer widget in the GUI this yields exactly the expeted behaviour, but in other cases, e.g. for sound output, we need more general, more globally scoped output slots. In these cases, when a local mapping is absent, the query for output resolution is passed on up to the  OutputDirector, drawing on the collection of globally available output slots for that specific kind of media.
+For a viewer widget in the GUI this yields exactly the expected behaviour, but in other cases, e.g. for sound output, we need more general, more globally scoped output slots. In these cases, when a local mapping is absent, the query for output resolution is passed on up to the  OutputDirector, drawing on the collection of globally available output slots for that specific kind of media.
 {{red{open question 11/11: is it possible to retrieve a slot from another peripheral node?}}}
 
+!!!channels
+It might seem bewildering that the discussion of output management thus far has not mentioned the ''channels'' within each media stream. In fact, the handling scheme explained here does not rely on this concept, to avoid confusion and ambiguity. Rather, the output handling relies on the concept of a ''media feed'': this is any stream that is connected distinctively and delivered separately, with dedicated [[Timings]]. Such a media feed may -- or may not, depending on circumstances -- carry several media channels. The typical example is the audio connection of a soundcard, that accepts a //single feed// with left and right audio channel interleaved. However, in a different setup, it might be required to produce a dedicated, separate feed at the interface for some multichannel setup; in such a case, the Engine will have to calculate several distinct feeds, and the delivered data format is also different (it is not interleaved).
+
 !!!output modes
 Most output connections and drivers embody some kind of //operation mode:// Display is characterised by resolution and colour depth, sound by number of channels and sampling rate, amongst others. There might be a mismatch with the output expectations represented by [[output designations|OutputDesignation]] within the model. Nontheless we limit those actual operation modes strictly to the OutputManager realm. They should not leak out into the model within the session.
 In practice, this decision might turn out to be rather rigid, but some additional mechanisms allow for more flexibility
diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm
index c719ad8ee..2869b52c9 100644
--- a/wiki/thinkPad.ichthyo.mm
+++ b/wiki/thinkPad.ichthyo.mm
@@ -110829,8 +110829,8 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
 
 
 
-
 
+
 
 
 
@@ -114899,19 +114899,32 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
 
 
 
-
+
 
-
-
-
+
+
+
+
 
 
 
-
+
 
-
+
 
-
+
+
+
+
+
+  
+  
+    

+ das Konzept der Meta-Assets ist unausgegoren.... +

+ +
+
@@ -114925,13 +114938,13 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
- + - + - + @@ -114946,10 +114959,21 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) + + + + +

+ ...es gibt nun also Abstraktionen, die zwar inhaltlich auf Ebene der Modellierung liegen (also in »Steam«), zugleich aber als Bindemittel dienen, um die Zusammenarbeit in der Applikation zu ermöglichen +

+ +
- + + + @@ -114962,7 +114986,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) - + @@ -115144,8 +115168,8 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) - - + + @@ -115168,8 +115192,8 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) - - + + @@ -115700,24 +115724,25 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) - - + + - - + + - - + + + - - + + - - + + @@ -115732,9 +115757,61 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) + + + + +

+ ⟹ auch die Timings müssen dorthin umziehen +

+ +
+ + + + + +

+ Genauer, steam::asset::TimeGrid, und hier gibt es einen Diamond-of-Death. Was auch immer das bedeuten mag — der Sinn des Interfaces MetaAsset ist (noch) nicht so wirklich klar, und auch der Unterschied zwischen time::Grid und time::Quantiser vermischt sich bisweilen +

+ +
+
- + +
+ + + + + + + + + + +

+ Konkret müssen z.B. Tests aus /tests/steam/engine gegen den diagnostic-buffer-provider.cpp gelinkt sein; mit dem neuen Layout ist das leider nur möglich, wenn diagnostic-buffer-provider.cpp in liblumieravault.so liegt, aber nicht in libtest-vault.so +

+ +
+
+ + + +
+
+ + + + + + + + + + @@ -117330,8 +117407,8 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension) - +