summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/engine_state_controller.h
diff options
context:
space:
mode:
authorGZharun <grygoriiz@wavesglobal.com>2015-05-07 14:55:00 +0300
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-29 14:18:15 -0400
commitbdbad46dee06eaee866eb9fbea1d3b48386dc029 (patch)
treedcc19f592076b1bb8791681b1ab60fcff3f9125b /libs/ardour/ardour/engine_state_controller.h
parentdddf76abf567a166c290c841894ee2b6b0917653 (diff)
copy current EngineStateController from Tracks to import Yevgeny's LTC (re)connection related changes
Diffstat (limited to 'libs/ardour/ardour/engine_state_controller.h')
-rw-r--r--libs/ardour/ardour/engine_state_controller.h1088
1 files changed, 568 insertions, 520 deletions
diff --git a/libs/ardour/ardour/engine_state_controller.h b/libs/ardour/ardour/engine_state_controller.h
index c1ed973f41..0c270d6c9b 100644
--- a/libs/ardour/ardour/engine_state_controller.h
+++ b/libs/ardour/ardour/engine_state_controller.h
@@ -1,21 +1,21 @@
/*
- Copyright (C) 2014 Waves Audio Ltd.
+ Copyright (C) 2014 Waves Audio Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
+ */
#ifndef __gtk2_ardour__engine_state_controller__
#define __gtk2_ardour__engine_state_controller__
@@ -39,565 +39,613 @@ class AudioBackendInfo;
*/
class EngineStateController
{
- public:
+public:
- // public data types:
+ // public data types:
- /**
- * @struct PortState
- * Structure which represents AudioPort state
- */
- struct PortState {
- std::string name; ///< Audio Port name
- bool active; ///< Audio Port state
+ /**
+ * @struct PortState
+ * Structure which represents AudioPort state
+ */
+ struct PortState {
+ std::string name; ///< Audio Port name
+ bool active; ///< Audio Port state
- PortState ()
- : name(""),
- active(false)
- {
- }
+ PortState ()
+ : name(""),
+ active(false)
+ {
+ }
- PortState (const std::string& name)
- : name(name),
- active(false)
- {
- }
+ PortState (const std::string& name)
+ : name(name),
+ active(false)
+ {
+ }
- bool operator==(const PortState& rhs) {return rhs.name == name; }
+ bool operator==(const PortState& rhs) {return rhs.name == name; }
- };
+ };
- /// @typedef Type for the list of all available audio ports
- typedef std::list<PortState> PortStateList;
+ /// @typedef Type for the list of all available audio ports
+ typedef std::list<PortState> PortStateList;
- /**
- * @struct MidiPortState
- * Structure which represents MidiPort state.
- */
- struct MidiPortState
- {
- std::string name; ///< Midi Port name
- bool active; ///< Midi Port state
- bool available; ///< Midi Port availability - if it is physicaly available or not
- bool scene_connected; ///< Is midi port used for scene MIDI marker in/out
- bool mtc_in; ///< Is midi port used as MTC in
+ /**
+ * @struct MidiPortState
+ * Structure which represents MidiPort state.
+ */
+ struct MidiPortState
+ {
+ std::string name; ///< Midi Port name
+ bool active; ///< Midi Port state
+ bool available; ///< Midi Port availability - if it is physicaly available or not
+ bool scene_connected; ///< Is midi port used for scene MIDI marker in/out
+ bool mtc_in; ///< Is midi port used as MTC in
- MidiPortState(const std::string& name):
- name(name),
- active(false),
- available(false),
- scene_connected(false),
- mtc_in(false)
- {}
+ MidiPortState(const std::string& name):
+ name(name),
+ active(false),
+ available(false),
+ scene_connected(false),
+ mtc_in(false)
+ {}
- bool operator==(const MidiPortState& rhs)
- {
- return name == rhs.name;
- }
- };
+ bool operator==(const MidiPortState& rhs)
+ {
+ return name == rhs.name;
+ }
+ };
- /// @typedef Type for the list of MidiPorts ever registered in the system
- typedef std::list<MidiPortState> MidiPortStateList;
+ /// @typedef Type for the list of MidiPorts ever registered in the system
+ typedef std::list<MidiPortState> MidiPortStateList;
- //Interfaces
+ //Interfaces
- /** Get an instance of EngineStateController singleton.
- * @return EngineStateController instance pointer
- */
- static EngineStateController* instance ();
+ /** Get an instance of EngineStateController singleton.
+ * @return EngineStateController instance pointer
+ */
+ static EngineStateController* instance ();
- /** Associate session with EngineStateController instance.
- */
+ /** Associate session with EngineStateController instance.
+ */
void set_session (Session* session);
- /** Remove link to the associated session.
- */
+ /** Remove link to the associated session.
+ */
void remove_session ();
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- // General backend/device information methods
-
- /** Provides names of all available backends.
- *
- * @param[out] available_backends - vector of available backends
- */
- void available_backends (std::vector<const AudioBackendInfo*>& available_backends);
-
- /** Provides the name of currently used backend.
- *
- * @return the name of currently used backend
- */
- const std::string& get_current_backend_name() const;
-
- /** Provides the name of currently used device.
- *
- * @return the name of currently used device
- */
- const std::string& get_current_device_name () const;
-
- /** Provides names for all available devices.
- *
- * @param[out] device_vector - vector of available devices
- */
- void enumerate_devices (std::vector<ARDOUR::AudioBackend::DeviceStatus>& device_vector) const;
-
- /** Get sample rate used by current device.
- *
- * @return current sample rate
- */
- ARDOUR::framecnt_t get_current_sample_rate () const;
-
- /** Get default sample rate for current backend.
- *
- * @return default sample rate for current backend
- */
- ARDOUR::framecnt_t get_default_sample_rate () const;
-
- /** Get sample rates which are supported by current device and current backend.
- *
- * @param[out] sample_rates - vector of supported sample rates
- */
- void available_sample_rates_for_current_device (std::vector<float>& sample_rates) const;
-
- /** Get buffer size used by current device.
- *
- * @return current buffer size
- */
- ARDOUR::pframes_t get_current_buffer_size () const;
-
- /** Get default buffer size for current backend.
- *
- * @return default buffer size for current backend
- */
- ARDOUR::pframes_t get_default_buffer_size () const;
-
- /** Get buffer sizes which are supported by current device and current backend.
- *
- * @param[out] buffer_sizes - vector of supported buffer_sizes
- */
- void available_buffer_sizes_for_current_device (std::vector<ARDOUR::pframes_t>& buffer_sizes) const;
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // General backend/device information methods
+
+ /** Provides names of all available backends.
+ *
+ * @param[out] available_backends - vector of available backends
+ */
+ void available_backends (std::vector<const AudioBackendInfo*>& available_backends);
+
+ /** Provides the name of currently used backend.
+ *
+ * @return the name of currently used backend
+ */
+ const std::string& get_current_backend_name() const;
+
+ /** Provides the name of currently used device.
+ *
+ * @return the name of currently used device
+ */
+ const std::string& get_current_device_name () const;
+
+ /** Provides names for all available devices.
+ *
+ * @param[out] device_vector - vector of available devices
+ */
+ void enumerate_devices (std::vector<ARDOUR::AudioBackend::DeviceStatus>& device_vector) const;
+
+ /** Get sample rate used by current device.
+ *
+ * @return current sample rate
+ */
+ ARDOUR::framecnt_t get_current_sample_rate () const;
+
+ /** Get default sample rate for current backend.
+ *
+ * @return default sample rate for current backend
+ */
+ ARDOUR::framecnt_t get_default_sample_rate () const;
+
+ /** Get sample rates which are supported by current device and current backend.
+ *
+ * @param[out] sample_rates - vector of supported sample rates
+ */
+ void available_sample_rates_for_current_device (std::vector<float>& sample_rates) const;
+
+ /** Get buffer size used by current device.
+ *
+ * @return current buffer size
+ */
+ ARDOUR::pframes_t get_current_buffer_size () const;
+
+ /** Get default buffer size for current backend.
+ *
+ * @return default buffer size for current backend
+ */
+ ARDOUR::pframes_t get_default_buffer_size () const;
+
+ /** Get buffer sizes which are supported by current device and current backend.
+ *
+ * @param[out] buffer_sizes - vector of supported buffer_sizes
+ */
+ void available_buffer_sizes_for_current_device (std::vector<ARDOUR::pframes_t>& buffer_sizes) const;
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // device state control methods
+
+ /** Get the number of all enabled Audio inputs.
+ *
+ * @return number of all enabled Audio inputs
+ */
+ uint32_t get_available_inputs_count() const;
+ /** Get the number of all enabled Audio outputs.
+ *
+ * @return number of all enabled Audio outputs
+ */
+ uint32_t get_available_outputs_count () const;
+
+ /** Get vector of all enabled physical Audio input port names.
+ *
+ * @param[out] port_names - vector of all enabled Audio input names
+ */
+ void get_physical_audio_inputs (std::vector<std::string>& port_names);
+ /** Get vector of all enabled physical Audio input port names.
+ *
+ * @param[out] port_names - vector of all enabled Audio input names
+ */
+ void get_physical_audio_outputs (std::vector<std::string>& port_names);
+
+ /** Get vector of all enabled physical MIDI input port names.
+ *
+ * @param[out] port_names - vector of all enabled MIDI input names
+ */
+ void get_physical_midi_inputs (std::vector<std::string>& port_names);
+ /** Get vector of all enabled physical MIDI output port names.
+ *
+ * @param[out] port_names - vector of all enabled MIDI output names
+ */
+ void get_physical_midi_outputs (std::vector<std::string>& port_names);
+
+ /** Sets new state to all Audio inputs.
+ *
+ * @param[in] state - new state
+ */
+ void set_state_to_all_inputs(bool state);
+ /** Sets new state to all Audio outputs.
+ * @note Does nothing in Stereo Out mode
+ * @param[in] state - new state
+ */
+ void set_state_to_all_outputs(bool state);
+
+ /** Get vector of states for all physical Audio input ports.
+ *
+ * @param[out] channel_states - vector of input port states
+ */
+ void get_physical_audio_input_states(std::vector<PortState>& channel_states);
+ /** Get vector of states for all physical Audio output ports.
+ *
+ * @param[out] channel_states - vector of output port states
+ */
+ void get_physical_audio_output_states(std::vector<PortState>& channel_states);
+
+ /** Set state of the specified Audio input port.
+ *
+ * @param[in] port_name - input name
+ * @param[in] state - new state
+ */
+ void set_physical_audio_input_state(const std::string& port_name, bool state);
+ /** Set state of the specified Audio output port.
+ *
+ * @param[in] port_name - output name
+ * @param[in] state - new state
+ */
+ void set_physical_audio_output_state(const std::string& port_name, bool state);
+
+ /** Get state of the specified Audio input port.
+ *
+ * @param[in] port_name - input name
+ * @return input state
+ */
+ bool get_physical_audio_input_state(const std::string& port_name);
+ /** Get state of the specified Audi output port.
+ *
+ * @param[in] port_name - output name
+ * @return output state
+ */
+ bool get_physical_audio_output_state(const std::string& port_name);
+
+
+ /** Get vector of all enabled MIDI input port names.
+ *
+ * @param[out] channel_states - vector of enabled inputs
+ */
+ void get_physical_midi_input_states (std::vector<MidiPortState>& channel_states);
+ /** Get vector of all enabled MIDI output port names.
+ *
+ * @param[out] channel_states - vector of enabled outputs
+ */
+ void get_physical_midi_output_states (std::vector<MidiPortState>& channel_states);
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // device state control methods
-
- /** Get the number of all enabled Audio inputs.
- *
- * @return number of all enabled Audio inputs
- */
- uint32_t get_available_inputs_count() const;
- /** Get the number of all enabled Audio outputs.
- *
- * @return number of all enabled Audio outputs
- */
- uint32_t get_available_outputs_count () const;
-
- /** Get vector of all enabled physical Audio input port names.
- *
- * @param[out] port_names - vector of all enabled Audio input names
- */
- void get_physical_audio_inputs (std::vector<std::string>& port_names);
- /** Get vector of all enabled physical Audio input port names.
- *
- * @param[out] port_names - vector of all enabled Audio input names
- */
- void get_physical_audio_outputs (std::vector<std::string>& port_names);
-
- /** Get vector of all enabled physical MIDI input port names.
- *
- * @param[out] port_names - vector of all enabled MIDI input names
- */
- void get_physical_midi_inputs (std::vector<std::string>& port_names);
- /** Get vector of all enabled physical MIDI output port names.
- *
- * @param[out] port_names - vector of all enabled MIDI output names
- */
- void get_physical_midi_outputs (std::vector<std::string>& port_names);
-
- /** Sets new state to all Audio inputs.
- *
- * @param[in] state - new state
- */
- void set_state_to_all_inputs(bool state);
- /** Sets new state to all Audio outputs.
- * @note Does nothing in Stereo Out mode
- * @param[in] state - new state
- */
- void set_state_to_all_outputs(bool state);
-
- /** Get vector of states for all physical Audio input ports.
- *
- * @param[out] channel_states - vector of input port states
- */
- void get_physical_audio_input_states(std::vector<PortState>& channel_states);
- /** Get vector of states for all physical Audio output ports.
- *
- * @param[out] channel_states - vector of output port states
- */
- void get_physical_audio_output_states(std::vector<PortState>& channel_states);
-
- /** Set state of the specified Audio input port.
- *
- * @param[in] port_name - input name
- * @param[in] state - new state
- */
- void set_physical_audio_input_state(const std::string& port_name, bool state);
- /** Set state of the specified Audio output port.
- *
- * @param[in] port_name - output name
- * @param[in] state - new state
- */
- void set_physical_audio_output_state(const std::string& port_name, bool state);
-
- /** Get state of the specified Audio input port.
- *
- * @param[in] port_name - input name
- * @return input state
- */
- bool get_physical_audio_input_state(const std::string& port_name);
- /** Get state of the specified Audi output port.
- *
- * @param[in] port_name - output name
- * @return output state
- */
- bool get_physical_audio_output_state(const std::string& port_name);
-
- /** Get vector of all enabled MIDI input port names.
- *
- * @param[out] channel_states - vector of enabled inputs
- */
- void get_physical_midi_input_states (std::vector<MidiPortState>& channel_states);
- /** Get vector of all enabled MIDI output port names.
- *
- * @param[out] channel_states - vector of enabled outputs
- */
- void get_physical_midi_output_states (std::vector<MidiPortState>& channel_states);
-
- /** Set state of the specified MIDI input port.
- *
- * @param[in] port_name - input name
- * @param[in] state - new state
- */
- void set_physical_midi_input_state(const std::string& port_name, bool state);
- /** Set state of the specified MIDI output port.
- *
- * @param[in] port_name - output name
- * @param[in] state - new state
- */
- void set_physical_midi_output_state(const std::string& port_name, bool state);
- /** Get state of the specified MIDI input port.
- *
- * @param[in] port_name - input name
- * @param[out] scene_connected - is port used as Scene In or not
- * @return input state
- */
- bool get_physical_midi_input_state(const std::string& port_name, bool& scene_connected);
- /** Get state of the specified MIDI output port.
- *
- * @param[in] port_name - output name
- * @param[out] scene_connected - is port used as Scene Out or not
- * @return output state
- */
- bool get_physical_midi_output_state(const std::string& port_name, bool& scene_connected);
-
- /** Set state of Scene In connection for the specified MIDI input port.
- *
- * @param[in] port_name - input name
- * @param[in] state - new state
- */
- void set_physical_midi_scene_in_connection_state(const std::string& port_name, bool state);
- /** Set state of Scene Out connection for the specified MIDI output port.
- *
- * @param[in] port_name - input name
- * @param[in] state - new state
- */
- void set_physical_midi_scenen_out_connection_state(const std::string&, bool);
-
- /** Disocnnect all MIDI input ports from Scene In.
- */
- void set_all_midi_scene_inputs_disconnected();
- /** Disocnnect all MIDI output ports from Scene Out.
- */
- void set_all_midi_scene_outputs_disconnected();
-
- /** Set MIDI TimeCode input port
- * @note There is a sense to choose MIDI TimeCode input only because
- * our MIDI TimeCode is propagated to all midi output ports.
- */
- void set_mtc_input(const std::string&);
-
- /** Check if AudioEngine setup is required
- * @return true if setup is required, otherwise - false
- */
- bool is_setup_required() const {return ARDOUR::AudioEngine::instance()->setup_required (); }
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // Methods set parameters inside the controller
- // the state of engine won't change untill we make a "push" of this state to the backend
- // NOTE: Use push_state_to_backend() method to update backend with the most recent controller state
-
- /** Set new sample rate for current device in EngineStateController database
- * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state
- * @param sample_rate - new sample rate
- */
- bool set_new_sample_rate_in_controller(framecnt_t sample_rate);
- /** Set new buffer size for current device in EngineStateController database
- * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state
- * @param buffer_size - new buffer size
- */
- bool set_new_buffer_size_in_controller(pframes_t buffer_size);
-
- /** @brief push current controller state to backend.
- * Propagate and set all current EngineStateController parameters to the backend
- * @note Engine will be restarted if it's running when this method is called.
- * @note If an attempt ot set parameters is unsuccessful current device will be switched to "None".
- * @param start - start the Engine if it was not running when this function was called.
- * @return true on success, otherwise - false
- */
- bool push_current_state_to_backend(bool start);
- /** Switch to new backend
- * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called.
- * @param backend_name - new backend name.
- * @return true on success, otherwise - false
- */
- bool set_new_backend_as_current(const std::string& backend_name);
- /** Switch to new device
- * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called.
- * @param device_name - new device name.
- * @return true on success, otherwise - false
- */
- bool set_new_device_as_current(const std::string& device_name);
+ /** Get name of mtc source port
+ *
+ * return name of mtc source port
+ */
+ std::string get_mtc_source_port ();
+
+ /** Set ltc source port
+ *
+ * @param[in] port - name of ltc source port
+ */
+ void set_ltc_source_port (const std::string& port);
+ /** Get name of ltc source port
+ *
+ * return name of ltc source port
+ */
+ std::string get_ltc_source_port ();
+
+ /** Set ltc output port
+ *
+ * @param[in] port - name of ltc output port
+ */
+ void set_ltc_output_port (const std::string&);
+ /** Get name of ltc output port
+ *
+ * return name of ltc output port
+ */
+ std::string get_ltc_output_port ();
+
+ /** Set state of the specified MIDI input port.
+ *
+ * @param[in] port_name - input name
+ * @param[in] state - new state
+ */
+ void set_physical_midi_input_state(const std::string& port_name, bool state);
+ /** Set state of the specified MIDI output port.
+ *
+ * @param[in] port_name - output name
+ * @param[in] state - new state
+ */
+ void set_physical_midi_output_state(const std::string& port_name, bool state);
+ /** Get state of the specified MIDI input port.
+ *
+ * @param[in] port_name - input name
+ * @param[out] scene_connected - is port used as Scene In or not
+ * @return input state
+ */
+ bool get_physical_midi_input_state(const std::string& port_name, bool& scene_connected);
+ /** Get state of the specified MIDI output port.
+ *
+ * @param[in] port_name - output name
+ * @param[out] scene_connected - is port used as Scene Out or not
+ * @return output state
+ */
+ bool get_physical_midi_output_state(const std::string& port_name, bool& scene_connected);
+
+ /** Set state of Scene In connection for the specified MIDI input port.
+ *
+ * @param[in] port_name - input name
+ * @param[in] state - new state
+ */
+ void set_physical_midi_scene_in_connection_state(const std::string& port_name, bool state);
+ /** Set state of Scene Out connection for the specified MIDI output port.
+ *
+ * @param[in] port_name - input name
+ * @param[in] state - new state
+ */
+ void set_physical_midi_scenen_out_connection_state(const std::string&, bool);
+
+ /** Disocnnect all MIDI input ports from Scene In.
+ */
+ void set_all_midi_scene_inputs_disconnected();
+ /** Disocnnect all MIDI output ports from Scene Out.
+ */
+ void set_all_midi_scene_outputs_disconnected();
+
+ /** Set MIDI TimeCode input port
+ * @note There is a sense to choose MIDI TimeCode input only because
+ * our MIDI TimeCode is propagated to all midi output ports.
+ */
+ void set_mtc_source_port (const std::string&);
+
+ /** Check if AudioEngine setup is required
+ * @return true if setup is required, otherwise - false
+ */
+ bool is_setup_required() const {return ARDOUR::AudioEngine::instance()->setup_required (); }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Methods set parameters inside the controller
+ // the state of engine won't change untill we make a "push" of this state to the backend
+ // NOTE: Use push_state_to_backend() method to update backend with the most recent controller state
+
+ /** Set new sample rate for current device in EngineStateController database
+ * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state
+ * @param sample_rate - new sample rate
+ */
+ bool set_new_sample_rate_in_controller(framecnt_t sample_rate);
+ /** Set new buffer size for current device in EngineStateController database
+ * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state
+ * @param buffer_size - new buffer size
+ */
+ bool set_new_buffer_size_in_controller(pframes_t buffer_size);
+
+ /** @brief push current controller state to backend.
+ * Propagate and set all current EngineStateController parameters to the backend
+ * @note Engine will be restarted if it's running when this method is called.
+ * @note If an attempt ot set parameters is unsuccessful current device will be switched to "None".
+ * @param start - start the Engine if it was not running when this function was called.
+ * @return true on success, otherwise - false
+ */
+ bool push_current_state_to_backend(bool start);
+ /** Switch to new backend
+ * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called.
+ * @param backend_name - new backend name.
+ * @return true on success, otherwise - false
+ */
+ bool set_new_backend_as_current(const std::string& backend_name);
+ /** Switch to new device
+ * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called.
+ * @param device_name - new device name.
+ * @return true on success, otherwise - false
+ */
+ bool set_new_device_as_current(const std::string& device_name);
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // Methods to save/serialize setting states
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Methods to save/serialize setting states
- /** Serialize Audio/Midi settings (entire EngineStateController database) to XML
- * @return XML note with serialized states
- */
- XMLNode& serialize_audio_midi_settings();
- /** Save Audio/Midi settings (entire EngineStateController database) to config persistently
- */
- void save_audio_midi_settings();
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- //UPDATE SIGNALS
- /** This signal is emitted if the sample rate changes */
- PBD::Signal0<void> SampleRateChanged;
- /** This signal is emitted if the buffer size changes */
- PBD::Signal0<void> BufferSizeChanged;
- /** This signal is emitted if the device list changes */
- PBD::Signal1<void, bool> DeviceListChanged;
+ /** Serialize Audio/Midi settings (entire EngineStateController database) to XML
+ * @return XML note with serialized states
+ */
+ XMLNode& serialize_audio_midi_settings();
+ /** Save Audio/Midi settings (entire EngineStateController database) to config persistently
+ */
+ void save_audio_midi_settings();
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ //UPDATE SIGNALS
+ /** This signal is emitted if the sample rate changes */
+ PBD::Signal0<void> SampleRateChanged;
+ /** This signal is emitted if the buffer size changes */
+ PBD::Signal0<void> BufferSizeChanged;
+ /** This signal is emitted if the device list changes */
+ PBD::Signal1<void, bool> DeviceListChanged;
/** This signal is emitted if the device cannot operate properly */
- PBD::Signal0<void> DeviceError;
+ PBD::Signal0<void> DeviceError;
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- //ENGINE STATE SIGNALS
- /** This signal is emitted when the engine is started */
- PBD::Signal0<void> EngineRunning;
- /** This signal is emitted when the engine is stopped */
- PBD::Signal0<void> EngineStopped;
- /** This signal is emitted if Engine processing is terminated */
- PBD::Signal0<void> EngineHalted;
-
- /** This signal is emitted if the AUDIO input channel configuration changes */
- PBD::Signal0<void> InputConfigChanged;
- /** This signal is emitted if the AUDIO output channel configuration changes */
- PBD::Signal0<void> OutputConfigChanged;
- /** This signal is emitted if the AUDIO output connection mode changes
- * @note By output connection mode "Stereo Out" or "Multi Out" is meant
- */
- PBD::Signal0<void> OutputConnectionModeChanged;
-
- /** This signals is emitted if the MIDI input channel configuration changes */
- PBD::Signal0<void> MIDIInputConfigChanged;
- /** This signals is emitted if the MIDI output channel configuration changes */
- PBD::Signal0<void> MIDIOutputConfigChanged;
- /** This signals is emitted if the MIDI Scene In connection changes */
- PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneInputConnectionChanged;
- /** This signals is emitted if the MIDI Scene Out connection changes */
- PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneOutputConnectionChanged;
-
- /** This signal is emitted if the MTC Input channel is changed */
- PBD::Signal1<void, const std::string&> MTCInputChanged;
-
- /** This signal is emitted if new Audio/MIDI ports are registered or unregistered */
- PBD::Signal0<void> PortRegistrationChanged;
-
- private:
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ //ENGINE STATE SIGNALS
+ /** This signal is emitted when the engine is started */
+ PBD::Signal0<void> EngineRunning;
+ /** This signal is emitted when the engine is stopped */
+ PBD::Signal0<void> EngineStopped;
+ /** This signal is emitted if Engine processing is terminated */
+ PBD::Signal0<void> EngineHalted;
+
+ /** This signal is emitted if the AUDIO input channel configuration changes */
+ PBD::Signal0<void> InputConfigChanged;
+ /** This signal is emitted if the AUDIO output channel configuration changes */
+ PBD::Signal0<void> OutputConfigChanged;
+ /** This signal is emitted if the AUDIO output connection mode changes
+ * @note By output connection mode "Stereo Out" or "Multi Out" is meant
+ */
+ PBD::Signal0<void> OutputConnectionModeChanged;
+
+ /** This signals is emitted if the MIDI input channel configuration changes */
+ PBD::Signal0<void> MIDIInputConfigChanged;
+ /** This signals is emitted if the MIDI output channel configuration changes */
+ PBD::Signal0<void> MIDIOutputConfigChanged;
+ /** This signals is emitted if the MIDI Scene In connection changes */
+ PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneInputConnectionChanged;
+ /** This signals is emitted if the MIDI Scene Out connection changes */
+ PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneOutputConnectionChanged;
+
+ /** This signal is emitted if the MTC Input channel is changed */
+ PBD::Signal1<void, const std::string&> MTCInputChanged;
+
+ /** This signal is emitted if new Audio/MIDI ports are registered or unregistered */
+ PBD::Signal0<void> PortRegistrationChanged;
+
+private:
- EngineStateController(); /// singleton
- ~EngineStateController(); /// singleton
- EngineStateController(const EngineStateController& ); /// prohibited
- EngineStateController& operator=(const EngineStateController&); /// prohibited
-
- ////////////////////////////////////////////////////////////////////////////////////////////
- // private data structures
-
- /** @struct Engine state
- * @brief State structure.
- * Contains information about single device/backend state
- */
- struct State {
+ EngineStateController(); /// singleton
+ ~EngineStateController(); /// singleton
+ EngineStateController(const EngineStateController& ); /// prohibited
+ EngineStateController& operator=(const EngineStateController&); /// prohibited
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ // private data structures
+
+ /** @struct Engine state
+ * @brief State structure.
+ * Contains information about single device/backend state
+ */
+ struct State {
std::string backend_name; ///< state backend name
std::string device_name; ///< state device name
ARDOUR::framecnt_t sample_rate; ///< sample rate used by the device in this state
ARDOUR::pframes_t buffer_size; ///< buffer size used by the device in this state
- PortStateList input_channel_states; ///< states of device Audio inputs
+ PortStateList input_channel_states; ///< states of device Audio inputs
PortStateList multi_out_channel_states; ///< states of device Audio inputs in Multi Out mode
- PortStateList stereo_out_channel_states; ///< states of device Audio inputs in Stereo Out mode
+ PortStateList stereo_out_channel_states; ///< states of device Audio inputs in Stereo Out mode
bool active; ///< was this state the most recent active one
State()
- : sample_rate(0)
- , buffer_size(0)
- , input_channel_states (0)
- , multi_out_channel_states (0)
- , stereo_out_channel_states (0)
- , active (false)
- {
- }
+ : sample_rate(0)
+ , buffer_size(0)
+ , input_channel_states (0)
+ , multi_out_channel_states (0)
+ , stereo_out_channel_states (0)
+ , active (false)
+ {
+ }
- bool operator==(const State& rhs)
- {
- return (backend_name == rhs.backend_name) && (device_name == rhs.device_name);
- }
+ bool operator==(const State& rhs)
+ {
+ return (backend_name == rhs.backend_name) && (device_name == rhs.device_name);
+ }
- /** Forms string name for the state
- * @return name string
- */
- std::string form_state_name() {
- return std::string("State:" + backend_name + ":" + device_name);
- }
+ /** Forms string name for the state
+ * @return name string
+ */
+ std::string form_state_name() {
+ return std::string("State:" + backend_name + ":" + device_name);
+ }
- /** @struct StatepPredicate
- * This predicate is used to identify a state during search in the list of states
- */
- struct StatePredicate
- {
- StatePredicate(const std::string& backend_name, const std::string& device_name)
- : _backend_name (backend_name)
- , _device_name (device_name)
- {}
+ /** @struct StatepPredicate
+ * This predicate is used to identify a state during search in the list of states
+ */
+ struct StatePredicate
+ {
+ StatePredicate(const std::string& backend_name, const std::string& device_name)
+ : _backend_name (backend_name)
+ , _device_name (device_name)
+ {}
- bool operator()(boost::shared_ptr<ARDOUR::EngineStateController::State> rhs)
- {
- return (_backend_name == rhs->backend_name) && (_device_name == rhs->device_name);
- }
+ bool operator()(boost::shared_ptr<ARDOUR::EngineStateController::State> rhs)
+ {
+ return (_backend_name == rhs->backend_name) && (_device_name == rhs->device_name);
+ }
- private:
- std::string _backend_name;
- std::string _device_name;
- };
- };
-
- /// @typedef Type for the state pointer
- typedef boost::shared_ptr<State> StatePtr;
- /// @typedef Type for the list of states
- typedef std::list<StatePtr> StateList;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // methods to manage setting states
-
- /** Deserializes and loads Engine and Audio port states from the config to EngineStateController
- */
- void _deserialize_and_load_engine_states();
- /** Deserializes and loads MIDI port states from the config to EngineStateController
- */
- void _deserialize_and_load_midi_port_states();
- /** Serializes Engine and Audio port states from EngineStateController to XML node
- * @param[in,out] audio_midi_settings_node - node to serialize the satets to
- */
- void _serialize_engine_states(XMLNode* audio_midi_settings_node);
- /** Serializes MIDI port states from EngineStateController to XML node
- * @param[in,out] audio_midi_settings_node - node to serialize the satets to
- */
- void _serialize_midi_port_states(XMLNode* audio_midi_settings_node);
-
- /** Provides initial state configuration.
- * It loades the last active state if there is one and it is aplicable.
- * Otherwise default state (None device with default sample rate and buffer size) is loaded.
- */
- void _do_initial_engine_setup();
-
- /** Loades provided state.
- * @note It's possible that provided state can't be loaded
- * (device disconnected or reqested parameters are not supported anymore).
- * @param state - state to apply
- * @return true on success, otherwise - false
- */
- bool _apply_state(const StatePtr& state);
-
- /** Gets available device channels from engine and updates internal controller state
- */
- void _update_device_channels_state();
-
- /** Check "Stereo Out" mode channels state configuration and make it correspond Stereo Out mode requirements
- */
- void _refresh_stereo_out_channel_states();
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // internal helper functions
- /** make sure that current device parameters are supported and fit session requirements
- * @return true if current state is valid and all parameters are supported, otherwise - false
- */
+ private:
+ std::string _backend_name;
+ std::string _device_name;
+ };
+ };
+
+ /// @typedef Type for the state pointer
+ typedef boost::shared_ptr<State> StatePtr;
+ /// @typedef Type for the list of states
+ typedef std::list<StatePtr> StateList;
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ // methods to manage setting states
+
+ /** Deserializes and loads Engine and Audio port states from the config to EngineStateController
+ */
+ void _deserialize_and_load_engine_states();
+ /** Deserializes and loads MIDI port states from the config to EngineStateController
+ */
+ void _deserialize_and_load_midi_port_states();
+ /** Serializes Engine and Audio port states from EngineStateController to XML node
+ * @param[in,out] audio_midi_settings_node - node to serialize the satets to
+ */
+ void _serialize_engine_states(XMLNode* audio_midi_settings_node);
+ /** Serializes MIDI port states from EngineStateController to XML node
+ * @param[in,out] audio_midi_settings_node - node to serialize the satets to
+ */
+ void _serialize_midi_port_states(XMLNode* audio_midi_settings_node);
+
+ /** Provides initial state configuration.
+ * It loades the last active state if there is one and it is aplicable.
+ * Otherwise default state (None device with default sample rate and buffer size) is loaded.
+ */
+ void _do_initial_engine_setup();
+
+ /** Loades provided state.
+ * @note It's possible that provided state can't be loaded
+ * (device disconnected or reqested parameters are not supported anymore).
+ * @param state - state to apply
+ * @return true on success, otherwise - false
+ */
+ bool _apply_state(const StatePtr& state);
+
+ /** Gets available device channels from engine and updates internal controller state
+ */
+ void _update_device_channels_state();
+
+ /** Check "Stereo Out" mode channels state configuration and make it correspond Stereo Out mode requirements
+ */
+ void _refresh_stereo_out_channel_states();
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // internal helper functions
+ /** make sure that current device parameters are supported and fit session requirements
+ * @return true if current state is valid and all parameters are supported, otherwise - false
+ */
bool _validate_current_device_state();
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////
- // callbacks
- /** Invoked when Engine starts running
- */
- void _on_engine_running();
- /** Invoked when Engine is halted
- */
- void _on_engine_halted();
- /** Invoked when Engine processing is terminated
- */
- void _on_engine_stopped();
- /** Invoked when Device error accured, it failed to start or didn't accept the change which should
- */
+ /** change ltc source port in case of the input ports list change
+ */
+ void _update_ltc_source_port ();
+ /** change ltc source port in case of the output ports list change
+ */
+ void _update_ltc_output_port ();
+
+ /** check that port is still existed in the list of input ports
+ @param[in] port - port name
+ @return true if current port is existed, otherwise - false
+ */
+ bool _audio_input_port_exists (const std::string& port);
+ /** check that port is still existed in the list of output ports
+ @param[in] port - port name
+ @return true if current port is existed, otherwise - false
+ */
+ bool _audio_output_port_exists (const std::string& port);
+
+
+
+ ////////////////////////////////////////
+ // callbacks
+ /** Invoked when Engine starts running
+ */
+ void _on_engine_running();
+ /** Invoked when Engine is halted
+ */
+ void _on_engine_halted();
+ /** Invoked when Engine processing is terminated
+ */
+ void _on_engine_stopped();
+ /** Invoked when Device error accured, it failed to start or didn't accept the change which should
+ */
void _on_device_error();
- /** Invoked when current device changes sample rate
- */
- void _on_sample_rate_change(ARDOUR::framecnt_t);
- /** Invoked when current device changes buffer size
- */
- void _on_buffer_size_change(ARDOUR::pframes_t);
- /** Invoked when the list of available devices is changed
- */
- void _on_device_list_change();
- /** Invoked when the config parameter is changed
- */
- void _on_parameter_changed (const std::string&);
- /** Invoked when Audio/MIDI ports are registered or unregistered
- */
- void _on_ports_registration_update ();
- /** Invoked when session loading process is complete
- */
+ /** Invoked when current device changes sample rate
+ */
+ void _on_sample_rate_change(ARDOUR::framecnt_t);
+ /** Invoked when current device changes buffer size
+ */
+ void _on_buffer_size_change(ARDOUR::pframes_t);
+ /** Invoked when the list of available devices is changed
+ */
+ void _on_device_list_change();
+ /** Invoked when the config parameter is changed
+ */
+ void _on_parameter_changed (const std::string&);
+ /** Invoked when Audio/MIDI ports are registered or unregistered
+ */
+ void _on_ports_registration_update ();
+ /** Invoked when session loading process is complete
+ */
void _on_session_loaded();
- ////////////////////////////////////////
+ ////////////////////////////////////////
- ////////////////////////////////////////
- // attributes
- StatePtr _current_state; ///< current state pointer
- // list of system states
- StateList _states; ///< list of all available states
+ ////////////////////////////////////////
+ // attributes
+ StatePtr _current_state; ///< current state pointer
+ // list of system states
+ StateList _states; ///< list of all available states
- MidiPortStateList _midi_inputs; ///< midi input states
- MidiPortStateList _midi_outputs; ///< midi output states
+ MidiPortStateList _midi_inputs; ///< midi input states
+ MidiPortStateList _midi_outputs; ///< midi output states
- std::string _last_used_real_device; ///< last active non-default (real) device
+ std::string _last_used_real_device; ///< last active non-default (real) device
Session* _session; ///< current session
- // Engine connections stuff
+ // Engine connections stuff
PBD::ScopedConnectionList update_connections; ///< connection container for update signals
PBD::ScopedConnectionList session_connections; ///< connection container for session signals
- PBD::ScopedConnection running_connection; ///< connection container for EngineRunning signal
- PBD::ScopedConnection halt_connection; ///< connection container for EngineHalted signal
- PBD::ScopedConnection stopped_connection; ///< connection container for EngineStopped signal
+ PBD::ScopedConnection running_connection; ///< connection container for EngineRunning signal
+ PBD::ScopedConnection halt_connection; ///< connection container for EngineHalted signal
+ PBD::ScopedConnection stopped_connection; ///< connection container for EngineStopped signal
};
} // namespace ARDOUR