namespace ARDOUR {
+class DummyAudioBackend;
+
class DummyMidiEvent {
public:
DummyMidiEvent (const pframes_t timestamp, const uint8_t* data, size_t size);
class DummyPort {
protected:
- DummyPort (const std::string&, PortFlags);
+ DummyPort (DummyAudioBackend &b, const std::string&, PortFlags);
public:
virtual ~DummyPort ();
}
private:
+ DummyAudioBackend &_dummy_backend;
std::string _name;
const PortFlags _flags;
LatencyRange _capture_latency_range;
class DummyAudioPort : public DummyPort {
public:
- DummyAudioPort (const std::string&, PortFlags);
+ DummyAudioPort (DummyAudioBackend &b, const std::string&, PortFlags);
~DummyAudioPort ();
DataType type () const { return DataType::AUDIO; };
class DummyMidiPort : public DummyPort {
public:
- DummyMidiPort (const std::string&, PortFlags);
+ DummyMidiPort (DummyAudioBackend &b, const std::string&, PortFlags);
~DummyMidiPort ();
DataType type () const { return DataType::MIDI; };
}; // class DummyMidiPort
class DummyAudioBackend : public AudioBackend {
+ friend class DummyPort;
public:
DummyAudioBackend (AudioEngine& e, AudioBackendInfo& info);
~DummyAudioBackend ();
std::vector<DummyPort *> _ports;
+
+ struct PortConnectData {
+ std::string a;
+ std::string b;
+ bool c;
+
+ PortConnectData (const std::string& a, const std::string& b, bool c)
+ : a (a) , b (b) , c (c) {}
+ };
+
+ std::vector<PortConnectData *> _port_connection_queue;
+ pthread_mutex_t _port_callback_mutex;
+
+ void port_connect_callback (const std::string& a, const std::string& b, bool conn) {
+ pthread_mutex_lock (&_port_callback_mutex);
+ _port_connection_queue.push_back(new PortConnectData(a, b, conn));
+ pthread_mutex_unlock (&_port_callback_mutex);
+ }
+
bool valid_port (PortHandle port) const {
return std::find (_ports.begin (), _ports.end (), (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) {