#include "coreaudio_pcmio.h"
#include "coremidi_io.h"
+#define MaxCoreMidiEventSize 256 // matches CoreMidi's MIDIPacket (https://developer.apple.com/documentation/coremidi/midipacket)
+
namespace ARDOUR {
class CoreAudioBackend;
public:
CoreMidiEvent (const pframes_t timestamp, const uint8_t* data, size_t size);
CoreMidiEvent (const CoreMidiEvent& other);
- ~CoreMidiEvent ();
size_t size () const { return _size; };
pframes_t timestamp () const { return _timestamp; };
- const unsigned char* const_data () const { return _data; };
- unsigned char* data () { return _data; };
+ const uint8_t* data () const { return _data; };
bool operator< (const CoreMidiEvent &other) const { return timestamp () < other.timestamp (); };
private:
size_t _size;
pframes_t _timestamp;
- uint8_t *_data;
+ uint8_t _data[MaxCoreMidiEventSize];
};
-typedef std::vector<boost::shared_ptr<CoreMidiEvent> > CoreMidiBuffer;
+typedef std::vector<CoreMidiEvent> CoreMidiBuffer;
class CoreBackendPort {
protected:
return for_playback ? _playback_latency_range : _capture_latency_range;
}
- void set_latency_range (const LatencyRange &latency_range, bool for_playback)
- {
- if (for_playback)
- {
- _playback_latency_range = latency_range;
- }
- else
- {
- _capture_latency_range = latency_range;
- }
- }
+ void set_latency_range (const LatencyRange &latency_range, bool for_playback);
+
+ void update_connected_latency (bool for_playback);
private:
CoreAudioBackend &_osx_backend;
size_t raw_buffer_size (DataType t);
/* Process time */
- framepos_t sample_time ();
- framepos_t sample_time_at_cycle_start ();
+ samplepos_t sample_time ();
+ samplepos_t sample_time_at_cycle_start ();
pframes_t samples_since_cycle_start ();
int create_process_thread (boost::function<void()> func);
/* process threads */
static void* coreaudio_process_thread (void *);
- bool coreaudio_set_realtime_policy (pthread_t) const;
std::vector<pthread_t> _threads;
struct ThreadData {
PortHandle add_port (const std::string& shortname, ARDOUR::DataType, ARDOUR::PortFlags);
int register_system_audio_ports ();
void unregister_ports (bool system_only = false);
+ void update_system_port_latecies ();
std::vector<CoreBackendPort *> _system_inputs;
std::vector<CoreBackendPort *> _system_outputs;