X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fbackends%2Fjack%2Fjack_audiobackend.h;h=2c67dc72fd650c186c76d37a0b9277312daefc06;hb=2b7c585dbae9c989d35e2884060aad4b0270f90e;hp=bbf78895a872350e8be9a208e31a4934eb70c1f1;hpb=86343b6c15a3a43f082802484d2bc813d34db821;p=ardour.git diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h index bbf78895a8..2c67dc72fd 100644 --- a/libs/backends/jack/jack_audiobackend.h +++ b/libs/backends/jack/jack_audiobackend.h @@ -29,8 +29,7 @@ #include -#include -#include +#include "weak_libjack.h" #include "ardour/audio_backend.h" @@ -41,9 +40,9 @@ class JACKSession; class JACKAudioBackend : public AudioBackend { public: - JACKAudioBackend (AudioEngine& e, boost::shared_ptr); + JACKAudioBackend (AudioEngine& e, AudioBackendInfo& info, boost::shared_ptr); ~JACKAudioBackend (); - + /* AUDIOBACKEND API */ std::string name() const; @@ -59,6 +58,7 @@ class JACKAudioBackend : public AudioBackend { std::vector available_sample_rates (const std::string& device) const; std::vector available_buffer_sizes (const std::string& device) const; + std::vector available_period_sizes (const std::string& driver) const; uint32_t available_input_channel_count (const std::string& device) const; uint32_t available_output_channel_count (const std::string& device) const; @@ -68,20 +68,28 @@ class JACKAudioBackend : public AudioBackend { int set_device_name (const std::string&); int set_sample_rate (float); int set_buffer_size (uint32_t); + int set_peridod_size (uint32_t); int set_interleaved (bool yn); int set_input_channels (uint32_t); int set_output_channels (uint32_t); int set_systemic_input_latency (uint32_t); int set_systemic_output_latency (uint32_t); + int set_systemic_midi_input_latency (std::string const, uint32_t) { return 0; } + int set_systemic_midi_output_latency (std::string const, uint32_t) { return 0; } + + int reset_device (); std::string device_name () const; float sample_rate () const; uint32_t buffer_size () const; + uint32_t period_size () const; bool interleaved () const; uint32_t input_channels () const; uint32_t output_channels () const; uint32_t systemic_input_latency () const; uint32_t systemic_output_latency () const; + uint32_t systemic_midi_input_latency (std::string const) const { return 0; } + uint32_t systemic_midi_output_latency (std::string const) const { return 0; } std::string driver_name() const; std::string control_app_name () const; @@ -92,8 +100,8 @@ class JACKAudioBackend : public AudioBackend { float dsp_load() const; - pframes_t sample_time (); - pframes_t sample_time_at_cycle_start (); + framepos_t sample_time (); + framepos_t sample_time_at_cycle_start (); pframes_t samples_since_cycle_start (); size_t raw_buffer_size (DataType t); @@ -115,7 +123,7 @@ class JACKAudioBackend : public AudioBackend { void update_latencies (); static bool already_configured(); - + /* PORTENGINE API */ const std::string& my_name() const; @@ -124,6 +132,8 @@ class JACKAudioBackend : public AudioBackend { int set_port_name (PortHandle, const std::string&); 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&) const; @@ -142,14 +152,30 @@ class JACKAudioBackend : public AudioBackend { int disconnect_all (PortHandle); int connect (const std::string& src, const std::string& dst); int disconnect (const std::string& src, const std::string& dst); - + /* MIDI */ std::vector enumerate_midi_options () const; int set_midi_option (const std::string&); std::string midi_option () const; - int midi_event_get (pframes_t& timestamp, size_t& size, uint8_t** buf, void* port_buffer, uint32_t event_index); + std::vector enumerate_midi_devices () const { + return std::vector (); + } + int set_midi_device_enabled (std::string const, bool) { + return 0; + } + bool midi_device_enabled (std::string const) const { + return true; + } + bool can_set_systemic_midi_latencies () const { + return false; + } + bool can_set_period_size () const { + return true; + } + + int midi_event_get (pframes_t& timestamp, size_t& size, uint8_t const** buf, void* port_buffer, uint32_t event_index); int midi_event_put (void* port_buffer, pframes_t timestamp, const uint8_t* buffer, size_t size); uint32_t get_midi_event_count (void* port_buffer); void midi_clear (void* port_buffer); @@ -163,7 +189,7 @@ class JACKAudioBackend : public AudioBackend { /* Latency management */ - + void set_latency_range (PortHandle, bool for_playback, LatencyRange); LatencyRange get_latency_range (PortHandle, bool for_playback); @@ -190,6 +216,7 @@ class JACKAudioBackend : public AudioBackend { std::map _raw_buffer_sizes; std::vector _jack_threads; + jack_native_thread_t _main_thread; static int _xrun_callback (void *arg); static void* _process_thread (void *arg); @@ -200,7 +227,7 @@ class JACKAudioBackend : public AudioBackend { static void _freewheel_callback (int , void *arg); static void _latency_callback (jack_latency_callback_mode_t, void*); static void _session_callback (jack_session_event_t *event, void *arg); - + void jack_timebase_callback (jack_transport_state_t, pframes_t, jack_position_t*, int); int jack_sync_callback (jack_transport_state_t, jack_position_t*); int jack_bufsize_callback (pframes_t); @@ -212,16 +239,16 @@ class JACKAudioBackend : public AudioBackend { void set_jack_callbacks (); int reconnect_to_jack (); - + struct ThreadData { JACKAudioBackend* engine; boost::function f; size_t stacksize; - + ThreadData (JACKAudioBackend* e, boost::function fp, size_t stacksz) : engine (e) , f (fp) , stacksize (stacksz) {} }; - + void* process_thread (); static void* _start_process_thread (void*); @@ -233,6 +260,7 @@ class JACKAudioBackend : public AudioBackend { std::string _target_device; float _target_sample_rate; uint32_t _target_buffer_size; + uint32_t _target_num_periods; SampleFormat _target_sample_format; bool _target_interleaved; uint32_t _target_input_channels; @@ -245,7 +273,7 @@ class JACKAudioBackend : public AudioBackend { typedef std::set DeviceList; typedef std::map DriverDeviceMap; - + mutable DriverDeviceMap all_devices; PBD::ScopedConnection disconnect_connection; @@ -264,7 +292,7 @@ class JACKAudioBackend : public AudioBackend { void when_connected_to_jack (); PBD::ScopedConnection jack_connection_connection; - /* Object to manage interactions with Session in a way that + /* Object to manage interactions with Session in a way that keeps JACK out of libardour directly */ @@ -277,4 +305,4 @@ class JACKAudioBackend : public AudioBackend { } // namespace #endif /* __ardour_audiobackend_h__ */ - +