I wanna be nasty, I wanna be cruel,..
[ardour.git] / libs / backends / dummy / dummy_audiobackend.h
index 29baa235c11885647aa842948d444223ac2dc45b..3534f7facc4193f12fa323019486ade341d2dffd 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "ardour/types.h"
 #include "ardour/audio_backend.h"
+#include "ardour/dsp_load_calculator.h"
 
 namespace ARDOUR {
 
@@ -71,9 +72,11 @@ class DummyPort {
                virtual ~DummyPort ();
 
                const std::string& name () const { return _name; }
+               const std::string& pretty_name () const { return _pretty_name; }
                PortFlags flags () const { return _flags; }
 
                int set_name (const std::string &name) { _name = name; return 0; }
+               int set_pretty_name (const std::string &name) { _pretty_name = name; return 0; }
 
                virtual DataType type () const = 0;
 
@@ -85,7 +88,7 @@ class DummyPort {
                bool is_connected (const DummyPort *port) const;
                bool is_physically_connected () const;
 
-               const std::vector<DummyPort *>& get_connections () const { return _connections; }
+               const std::set<DummyPort *>& get_connections () const { return _connections; }
 
                int connect (DummyPort *port);
                int disconnect (DummyPort *port);
@@ -114,10 +117,11 @@ class DummyPort {
        private:
                DummyAudioBackend &_dummy_backend;
                std::string _name;
+               std::string _pretty_name;
                const PortFlags _flags;
                LatencyRange _capture_latency_range;
                LatencyRange _playback_latency_range;
-               std::vector<DummyPort*> _connections;
+               std::set<DummyPort*> _connections;
 
                void _connect (DummyPort* , bool);
                void _disconnect (DummyPort* , bool);
@@ -148,6 +152,8 @@ class DummyAudioPort : public DummyPort {
 
                enum GeneratorType {
                        Silence,
+                       DC05,
+                       Demolition,
                        UniformWhiteNoise,
                        GaussianWhiteNoise,
                        PinkNoise,
@@ -320,6 +326,9 @@ class DummyAudioBackend : public AudioBackend {
                std::string get_port_name (PortHandle) const;
                PortHandle  get_port_by_name (const std::string&) const;
 
+               int get_port_property (PortHandle, const std::string& key, std::string& value, std::string& type) const;
+               int set_port_property (PortHandle, const std::string& key, const std::string& value, const std::string& type);
+
                int get_ports (const std::string& port_name_pattern, DataType type, PortFlags flags, std::vector<std::string>&) const;
 
                DataType port_data_type (PortHandle) const;
@@ -401,6 +410,7 @@ class DummyAudioBackend : public AudioBackend {
                float  _samplerate;
                size_t _samples_per_period;
                float  _dsp_load;
+               DSPLoadCalculator _dsp_load_calc;
                static size_t _max_buffer_size;
 
                uint32_t _n_inputs;
@@ -439,7 +449,11 @@ class DummyAudioBackend : public AudioBackend {
                std::vector<DummyAudioPort *> _system_outputs;
                std::vector<DummyMidiPort *> _system_midi_in;
                std::vector<DummyMidiPort *> _system_midi_out;
-               std::vector<DummyPort *> _ports;
+
+               typedef std::map<std::string, DummyPort *> PortMap; // fast lookup in _ports
+               typedef std::set<DummyPort *> PortIndex; // fast lookup in _ports
+               PortMap _portmap;
+               PortIndex _ports;
 
                struct PortConnectData {
                        std::string a;
@@ -467,16 +481,15 @@ class DummyAudioBackend : public AudioBackend {
                }
 
                bool valid_port (PortHandle port) const {
-                       return std::find (_ports.begin (), _ports.end (), (DummyPort*)port) != _ports.end ();
+                       return _ports.find (static_cast<DummyPort*>(port)) != _ports.end ();
                }
 
-               DummyPort * find_port (const std::string& port_name) const {
-                       for (std::vector<DummyPort*>::const_iterator it = _ports.begin (); it != _ports.end (); ++it) {
-                               if ((*it)->name () == port_name) {
-                                       return *it;
-                               }
+               DummyPort* find_port (const std::string& port_name) const {
+                       PortMap::const_iterator it = _portmap.find (port_name);
+                       if (it == _portmap.end()) {
+                               return NULL;
                        }
-                       return NULL;
+                       return (*it).second;
                }
 
 }; // class DummyAudioBackend