Loading...
Searching...
No Matches
plugins/score-plugin-engine/Execution/DocumentPlugin.hpp
1#pragma once
2#include "BaseScenarioComponent.hpp"
3
4#include <Process/Dataflow/Port.hpp>
5#include <Process/ExecutionAction.hpp>
6#include <Process/ExecutionContext.hpp>
7#include <Process/ExecutionSetup.hpp>
8
9#include <score/plugins/documentdelegate/plugin/DocumentPlugin.hpp>
10#include <score/tools/Metadata.hpp>
11
12#include <ossia/dataflow/bench_map.hpp>
13#include <ossia/dataflow/dataflow_fwd.hpp>
14#include <ossia/network/generic/generic_device.hpp>
15#include <ossia/network/local/local.hpp>
16
17#include <QTimer>
18
19#include <memory>
20#include <verdigris>
21inline QDataStream& operator<<(QDataStream& i, const ossia::bench_map& sel)
22{
23 SCORE_ABORT;
24 return i;
25}
26inline QDataStream& operator>>(QDataStream& i, ossia::bench_map& sel)
27{
28 SCORE_ABORT;
29 return i;
30}
31
32namespace ossia
33{
34class audio_protocol;
35struct bench_map;
36}
37namespace Device
38{
39class DeviceInterface;
40}
41namespace score
42{
43class DocumentModel;
44}
45namespace Scenario
46{
47class BaseScenario;
48class IntervalModel;
49}
50namespace Dataflow
51{
52class AudioDevice;
53}
54namespace Execution
55{
56struct Queues
57{
58};
60class SCORE_PLUGIN_ENGINE_EXPORT DocumentPlugin final : public score::DocumentPlugin
61{
62 W_OBJECT(DocumentPlugin)
63public:
65 {
66 explicit ContextData(const score::DocumentContext& ctx);
67
69 void processEditCommands();
70
71 ExecutionCommandQueue m_execQueue{1024};
72 EditionCommandQueue m_editionQueue{1024};
73 GCCommandQueue m_gcQueue{1024};
74 std::atomic_bool m_created{};
75
76 std::shared_ptr<ossia::graph_interface> execGraph;
77 std::shared_ptr<ossia::execution_state> execState;
78 std::shared_ptr<ossia::bench_map> bench;
79 SetupContext setupContext;
80
81 Context context;
82 };
83
84 DocumentPlugin(const score::DocumentContext& ctx, QObject* parent);
85
86 ~DocumentPlugin() override;
87 void reload(bool forcePlay, Scenario::IntervalModel& doc);
88 void clear();
89
90 void on_documentClosing() override;
91 const std::shared_ptr<BaseScenarioElement>& baseScenario() const noexcept;
92
93 void playStartState();
94 void playStopState();
95
96 bool isPlaying() const;
97
98 const std::shared_ptr<ContextData>& contextData() const noexcept { return m_ctxData; }
99 const Context& context() const noexcept { return m_ctxData->context; }
100 const ExecutionController& executionController() const noexcept;
101 std::shared_ptr<ossia::audio_protocol> audioProto();
102
103 void runAllCommands() const;
104
105 void registerAction(ExecutionAction& act);
106 const std::vector<ExecutionAction*>& actions() const noexcept { return m_actions; }
107
108 const Execution::Settings::Model& settings;
109
110 QPointer<Dataflow::AudioDevice> audio_device{};
111 QPointer<Device::DeviceInterface> local_device{};
112
113public:
114 void finished() E_SIGNAL(SCORE_PLUGIN_ENGINE_EXPORT, finished)
116 void cleared() E_SIGNAL(SCORE_PLUGIN_ENGINE_EXPORT, cleared)
117 void started() E_SIGNAL(SCORE_PLUGIN_ENGINE_EXPORT, started)
118
119 void slot_bench(ossia::bench_map, int64_t ns);
120
121private:
122 void on_deviceAdded(Device::DeviceInterface* device);
123 void onDeviceChanged(ossia::net::device_base* old_dev, ossia::net::device_base* new_dev);
124 void on_finished();
125 void timerEvent(QTimerEvent* event) override;
126 bool registerDevice(ossia::net::device_base*);
127 bool unregisterDevice(ossia::net::device_base*);
128 void updateDeviceExpressions();
129 void requestExpressionUpdate();
130 void waitForExecutionQueue();
131 void makeGraph();
132 void initExecState();
133 void recreateBase();
134 void processEditCommands();
135
136 std::shared_ptr<ContextData> m_ctxData;
137 std::shared_ptr<BaseScenarioElement> m_base;
138 std::vector<ExecutionAction*> m_actions;
139
140 int m_tid{};
141 bool m_expressionUpdatePending{};
142};
143}
Definition plugins/score-plugin-engine/Execution/DocumentPlugin.hpp:61
Definition ExecutionAction.hpp:12
Definition ExecutionController.hpp:33
Definition ExecutorModel.hpp:64
Definition IntervalModel.hpp:50
Extend a document with custom data and systems.
Definition DocumentPluginBase.hpp:24
Manipulation of Devices from Qt.
Definition AddressSettings.cpp:14
Components used for the execution of a score.
Definition PortTap.cpp:24
Main plug-in of score.
Definition ConnectionsList.hpp:22
Base toolkit upon which the software is built.
Definition Application.cpp:83
STL namespace.
Definition ExecutionContext.hpp:208
Definition plugins/score-plugin-engine/Execution/DocumentPlugin.hpp:65
Definition ExecutionContext.hpp:119
Definition ExecutionContext.hpp:73
Definition ExecutionContext.hpp:163
Definition plugins/score-plugin-engine/Execution/DocumentPlugin.hpp:57
Definition ExecutionSetup.hpp:38
Definition DocumentContext.hpp:18