prepare fix for copying plugin state
[ardour.git] / libs / ardour / ardour / audio_backend.h
1 /*
2     Copyright (C) 2013 Paul Davis
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #ifndef __libardour_audiobackend_h__
21 #define __libardour_audiobackend_h__
22
23 #include <string>
24 #include <vector>
25
26 #include <stdint.h>
27 #include <stdlib.h>
28
29 #include <boost/function.hpp>
30
31 #include "ardour/libardour_visibility.h"
32 #include "ardour/types.h"
33 #include "ardour/audioengine.h"
34 #include "ardour/port_engine.h"
35
36 #ifdef ARDOURBACKEND_DLL_EXPORTS // defined if we are building the ARDOUR Panners DLLs (instead of using them)
37     #define ARDOURBACKEND_API LIBARDOUR_DLL_EXPORT
38 #else
39     #define ARDOURBACKEND_API LIBARDOUR_DLL_IMPORT
40 #endif
41 #define ARDOURBACKEND_LOCAL LIBARDOUR_DLL_LOCAL
42
43 namespace ARDOUR {
44
45 struct LIBARDOUR_API AudioBackendInfo {
46     const char* name;
47
48     /** Using arg1 and arg2, initialize this audiobackend.
49      *
50      * Returns zero on success, non-zero otherwise.
51      */
52     int (*instantiate) (const std::string& arg1, const std::string& arg2);
53
54     /** Release all resources associated with this audiobackend
55      */
56     int (*deinstantiate) (void);
57
58     /** Factory method to create an AudioBackend-derived class.
59      *
60      * Returns a valid shared_ptr to the object if successfull,
61      * or a "null" shared_ptr otherwise.
62      */
63     boost::shared_ptr<AudioBackend> (*factory) (AudioEngine&);
64
65     /** Return true if the underlying mechanism/API has been
66      * configured and does not need (re)configuration in order
67      * to be usable. Return false otherwise.
68      *
69      * Note that this may return true if (re)configuration, even though
70      * not currently required, is still possible.
71      */
72     bool (*already_configured)();
73
74     /** Return true if the underlying mechanism/API can be
75      * used on the given system.
76      *
77      * If this function returns false, the backend is not
78      * listed in the engine dialog.
79      */
80     bool (*available)();
81 };
82
83 class LIBARDOUR_API AudioBackend : public PortEngine {
84   public:
85
86     AudioBackend (AudioEngine& e, AudioBackendInfo& i) : PortEngine (e), _info (i), engine (e) {}
87     virtual ~AudioBackend () {}
88
89         enum ErrorCode {
90                 NoError = 0,
91                 BackendInitializationError = -64,
92                 BackendDeinitializationError,
93                 BackendReinitializationError,
94                 AudioDeviceOpenError,
95                 AudioDeviceCloseError,
96                 AudioDeviceInvalidError,
97                 AudioDeviceNotAvailableError,
98                 AudioDeviceNotConnectedError,
99                 AudioDeviceReservationError,
100                 AudioDeviceIOError,
101                 MidiDeviceOpenError,
102                 MidiDeviceCloseError,
103                 MidiDeviceNotAvailableError,
104                 MidiDeviceNotConnectedError,
105                 MidiDeviceIOError,
106                 SampleFormatNotSupportedError,
107                 SampleRateNotSupportedError,
108                 RequestedInputLatencyNotSupportedError,
109                 RequestedOutputLatencyNotSupportedError,
110                 PeriodSizeNotSupportedError,
111                 PeriodCountNotSupportedError,
112                 DeviceConfigurationNotSupportedError,
113                 ChannelCountNotSupportedError,
114                 InputChannelCountNotSupportedError,
115                 OutputChannelCountNotSupportedError,
116                 AquireRealtimePermissionError,
117                 SettingAudioThreadPriorityError,
118                 SettingMIDIThreadPriorityError,
119                 ProcessThreadStartError,
120                 FreewheelThreadStartError,
121                 PortRegistrationError,
122                 PortReconnectError,
123                 OutOfMemoryError,
124         };
125
126         static std::string get_error_string (ErrorCode);
127
128         enum StandardDeviceName {
129                 DeviceNone,
130                 DeviceDefault
131         };
132
133         static std::string get_standard_device_name (StandardDeviceName);
134
135     /** Return the AudioBackendInfo object from which this backend
136         was constructed.
137     */
138     AudioBackendInfo& info() const { return _info; }
139
140     /** Return the name of this backend.
141      *
142      * Should use a well-known, unique term. Expected examples
143      * might include "JACK", "CoreAudio", "ASIO" etc.
144      */
145     virtual std::string name() const = 0;
146
147     /** Return true if the callback from the underlying mechanism/API
148      * (CoreAudio, JACK, ASIO etc.) occurs in a thread subject to realtime
149      * constraints. Return false otherwise.
150     */
151     virtual bool is_realtime () const = 0;
152
153     /* Discovering devices and parameters */
154
155     /** Return true if this backend requires the selection of a "driver"
156      * before any device can be selected. Return false otherwise.
157      *
158      * Intended mainly to differentiate between meta-APIs like JACK
159      * which can still expose different backends (such as ALSA or CoreAudio
160      * or FFADO or netjack) and those like ASIO or CoreAudio which
161      * do not.
162      */
163     virtual bool requires_driver_selection() const { return false; }
164
165     /** If the return value of requires_driver_selection() is true,
166      * then this function can return the list of known driver names.
167      *
168      * If the return value of requires_driver_selection() is false,
169      * then this function should not be called. If it is called
170      * its return value is an empty vector of strings.
171      */
172     virtual std::vector<std::string> enumerate_drivers() const { return std::vector<std::string>(); }
173
174     /** Returns zero if the backend can successfully use @param name as the
175      * driver, non-zero otherwise.
176      *
177      * Should not be used unless the backend returns true from
178      * requires_driver_selection()
179      */
180     virtual int set_driver (const std::string& /*drivername*/) { return 0; }
181
182     /** used to list device names along with whether or not they are currently
183      *  available.
184     */
185     struct DeviceStatus {
186         std::string name;
187         bool        available;
188
189         DeviceStatus (const std::string& s, bool avail) : name (s), available (avail) {}
190     };
191
192     /** An optional alternate interface for backends to provide a facility to
193      * select separate input and output devices.
194      *
195      * If a backend returns true then enumerate_input_devices() and
196      * enumerate_output_devices() will be used instead of enumerate_devices()
197      * to enumerate devices. Similarly set_input/output_device_name() should
198      * be used to set devices instead of set_device_name().
199      */
200     virtual bool use_separate_input_and_output_devices () const { return false; }
201
202     /** Returns a collection of DeviceStatuses identifying devices discovered
203      * by this backend since the start of the process.
204      *
205      * Any of the names in each DeviceStatus may be used to identify a
206      * device in other calls to the backend, though any of them may become
207      * invalid at any time.
208      */
209     virtual std::vector<DeviceStatus> enumerate_devices () const = 0;
210
211     /** Returns a collection of DeviceStatuses identifying input devices
212      * discovered by this backend since the start of the process.
213      *
214      * Any of the names in each DeviceStatus may be used to identify a
215      * device in other calls to the backend, though any of them may become
216      * invalid at any time.
217      */
218     virtual std::vector<DeviceStatus> enumerate_input_devices () const
219     { return std::vector<DeviceStatus>(); }
220
221     /** Returns a collection of DeviceStatuses identifying output devices
222      * discovered by this backend since the start of the process.
223      *
224      * Any of the names in each DeviceStatus may be used to identify a
225      * device in other calls to the backend, though any of them may become
226      * invalid at any time.
227      */
228     virtual std::vector<DeviceStatus> enumerate_output_devices () const
229     { return std::vector<DeviceStatus>(); }
230
231
232         /** An interface to set buffers/period for playback latency.
233          * useful for ALSA or JACK/ALSA on Linux.
234          *
235          * @return true if the backend supports period-size configuration
236          */
237         virtual bool can_set_period_size () const { return false; }
238
239         /** Returns a vector of supported period-sizes for the given driver */
240         virtual std::vector<uint32_t> available_period_sizes (const std::string& driver) const { return std::vector<uint32_t>(); }
241
242         /** Set the period size to be used.
243          * must be called before starting the backend.
244          */
245         virtual int set_peridod_size (uint32_t) { return -1; }
246
247         /**
248          * @return true if backend supports requesting an update to the device list
249          * and any cached properties associated with the devices.
250          */
251         virtual bool can_request_update_devices () { return false; }
252
253         /**
254          * Request an update to the list of devices returned in the enumerations.
255          * The Backend must return true from can_request_update_devices to support
256          * this interface.
257          * @return true if the devices were updated
258          */
259         virtual bool update_devices () { return false; }
260
261         /**
262          * @return true if backend supports a blocking or buffered mode, false by
263          * default unless implemented by a derived class.
264          */
265         virtual bool can_use_buffered_io () { return false; }
266
267         /**
268          * Set the backend to use a blocking or buffered I/O mode
269          */
270         virtual void set_use_buffered_io (bool) { }
271
272         /**
273          * @return Set the backend to use a blocking or buffered I/O mode, false by
274          * default unless implemented by a derived class.
275          */
276         virtual bool get_use_buffered_io () { return false; }
277
278     /** Returns a collection of float identifying sample rates that are
279      * potentially usable with the hardware identified by @param device.
280      * Any of these values may be supplied in other calls to this backend
281      * as the desired sample rate to use with the name device, but the
282      * requested sample rate may turn out to be unavailable, or become invalid
283      * at any time.
284      */
285     virtual std::vector<float> available_sample_rates (const std::string& device) const = 0;
286
287     /* backends that support separate input and output devices should
288      * implement this function and return an intersection (not union) of available
289      * sample rates valid for the given input + output device combination.
290      */
291     virtual std::vector<float> available_sample_rates2 (const std::string& input_device, const std::string& output_device) const {
292             std::vector<float> input_sizes  = available_sample_rates (input_device);
293             std::vector<float> output_sizes = available_sample_rates (output_device);
294             std::vector<float> rv;
295             std::set_union (input_sizes.begin (), input_sizes.end (),
296                             output_sizes.begin (), output_sizes.end (),
297                             std::back_inserter (rv));
298             return rv;
299     }
300
301     /* Returns the default sample rate that will be shown to the user when
302      * configuration options are first presented. If the derived class
303      * needs or wants to override this, it can. It also MUST override this
304      * if there is any chance that an SR of 44.1kHz is not in the list
305      * returned by available_sample_rates()
306      */
307     virtual float default_sample_rate () const {
308             return 44100.0;
309     }
310
311     /** Returns a collection of uint32 identifying buffer sizes that are
312      * potentially usable with the hardware identified by @param device.
313      * Any of these values may be supplied in other calls to this backend
314      * as the desired buffer size to use with the name device, but the
315      * requested buffer size may turn out to be unavailable, or become invalid
316      * at any time.
317      */
318     virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const = 0;
319
320     /* backends that support separate input and output devices should
321      * implement this function and return an intersection (not union) of available
322      * buffer sizes valid for the given input + output device combination.
323      */
324     virtual std::vector<uint32_t> available_buffer_sizes2 (const std::string& input_device, const std::string& output_device) const {
325             std::vector<uint32_t> input_rates  = available_buffer_sizes (input_device);
326             std::vector<uint32_t> output_rates = available_buffer_sizes (output_device);
327             std::vector<uint32_t> rv;
328             std::set_union (input_rates.begin (), input_rates.end (),
329                             output_rates.begin (), output_rates.end (),
330                             std::back_inserter (rv));
331             return rv;
332     }
333     /* Returns the default buffer size that will be shown to the user when
334      * configuration options are first presented. If the derived class
335      * needs or wants to override this, it can. It also MUST override this
336      * if there is any chance that a buffer size of 1024 is not in the list
337      * returned by available_buffer_sizes()
338      */
339     virtual uint32_t default_buffer_size (const std::string& device) const {
340             return 1024;
341     }
342
343     /** Returns the maximum number of input channels that are potentially
344      * usable with the hardware identified by @param device.  Any number from 1
345      * to the value returned may be supplied in other calls to this backend as
346      * the input channel count to use with the name device, but the requested
347      * count may turn out to be unavailable, or become invalid at any time.
348      */
349     virtual uint32_t available_input_channel_count (const std::string& device) const = 0;
350
351     /** Returns the maximum number of output channels that are potentially
352      * usable with the hardware identified by @param device.  Any number from 1
353      * to the value returned may be supplied in other calls to this backend as
354      * the output channel count to use with the name device, but the requested
355      * count may turn out to be unavailable, or become invalid at any time.
356      */
357     virtual uint32_t available_output_channel_count (const std::string& device) const = 0;
358
359     /* Return true if the derived class can change the sample rate of the
360      * device in use while the device is already being used. Return false
361      * otherwise. (example: JACK cannot do this as of September 2013)
362      */
363     virtual bool can_change_sample_rate_when_running () const = 0;
364     /* Return true if the derived class can change the buffer size of the
365      * device in use while the device is already being used. Return false
366      * otherwise.
367      */
368     virtual bool can_change_buffer_size_when_running () const = 0;
369
370                 /** return true if the backend can measure and update
371                  * systemic latencies without restart.
372                  */
373                 virtual bool can_change_systemic_latency_when_running () const { return false; }
374
375     /* Set the hardware parameters.
376      *
377      * If called when the current state is stopped or paused,
378      * the changes will not take effect until the state changes to running.
379      *
380      * If called while running, the state will change as fast as the
381      * implementation allows.
382      *
383      * All set_*() methods return zero on success, non-zero otherwise.
384      */
385
386     /** Set the name of the device to be used
387      */
388     virtual int set_device_name (const std::string&) = 0;
389
390     /** Set the name of the input device to be used if using separate
391      * input/output devices.
392      *
393      * @see use_separate_input_and_output_devices()
394      */
395     virtual int set_input_device_name (const std::string&) { return 0;}
396
397     /** Set the name of the output device to be used if using separate
398      * input/output devices.
399      *
400      * @see use_separate_input_and_output_devices()
401      */
402     virtual int set_output_device_name (const std::string&) { return 0;}
403
404     /** Deinitialize and destroy current device
405      */
406         virtual int drop_device() {return 0;};
407     /** Set the sample rate to be used
408      */
409     virtual int set_sample_rate (float) = 0;
410     /** Set the buffer size to be used.
411      *
412      * The device is assumed to use a double buffering scheme, so that one
413      * buffer's worth of data can be processed by hardware while software works
414      * on the other buffer. All known suitable audio APIs support this model
415      * (though ALSA allows for alternate numbers of buffers, and CoreAudio
416      * doesn't directly expose the concept).
417      */
418     virtual int set_buffer_size (uint32_t) = 0;
419     /** Set the preferred underlying hardware data layout.
420      * If @param yn is true, then the hardware will interleave
421      * samples for successive channels; otherwise, the hardware will store
422      * samples for a single channel contiguously.
423      *
424      * Setting this does not change the fact that all data streams
425      * to and from Ports are mono (essentially, non-interleaved)
426      */
427     virtual int set_interleaved (bool yn) = 0;
428     /** Set the number of input channels that should be used
429      */
430     virtual int set_input_channels (uint32_t) = 0;
431     /** Set the number of output channels that should be used
432      */
433     virtual int set_output_channels (uint32_t) = 0;
434     /** Set the (additional) input latency that cannot be determined via
435      * the implementation's underlying code (e.g. latency from
436      * external D-A/D-A converters. Units are samples.
437      */
438     virtual int set_systemic_input_latency (uint32_t) = 0;
439     /** Set the (additional) output latency that cannot be determined via
440      * the implementation's underlying code (e.g. latency from
441      * external D-A/D-A converters. Units are samples.
442      */
443     virtual int set_systemic_output_latency (uint32_t) = 0;
444     /** Set the (additional) input latency for a specific midi device,
445      * or if the identifier is empty, apply to all midi devices.
446      */
447     virtual int set_systemic_midi_input_latency (std::string const, uint32_t) = 0;
448     /** Set the (additional) output latency for a specific midi device,
449      * or if the identifier is empty, apply to all midi devices.
450      */
451     virtual int set_systemic_midi_output_latency (std::string const, uint32_t) = 0;
452
453     /* Retrieving parameters */
454
455     virtual std::string  device_name () const = 0;
456     virtual std::string  input_device_name () const { return std::string(); }
457     virtual std::string  output_device_name () const { return std::string(); }
458     virtual float        sample_rate () const = 0;
459     virtual uint32_t     buffer_size () const = 0;
460     virtual bool         interleaved () const = 0;
461     virtual uint32_t     input_channels () const = 0;
462     virtual uint32_t     output_channels () const = 0;
463     virtual uint32_t     systemic_input_latency () const = 0;
464     virtual uint32_t     systemic_output_latency () const = 0;
465     virtual uint32_t     systemic_midi_input_latency (std::string const) const = 0;
466     virtual uint32_t     systemic_midi_output_latency (std::string const) const = 0;
467     virtual uint32_t     period_size () const { return 0; }
468
469     /** override this if this implementation returns true from
470      * requires_driver_selection()
471      */
472     virtual std::string  driver_name() const { return std::string(); }
473
474     /** Return the name of a control application for the
475      * selected/in-use device. If no such application exists,
476      * or if no device has been selected or is in-use,
477      * return an empty string.
478      */
479     virtual std::string control_app_name() const = 0;
480     /** Launch the control app for the currently in-use or
481      * selected device. May do nothing if the control
482      * app is undefined or cannot be launched.
483      */
484     virtual void launch_control_app () = 0;
485
486     /* @return a vector of strings that describe the available
487      * MIDI options.
488      *
489      * These can be presented to the user to decide which
490      * MIDI drivers, options etc. can be used. The returned strings
491      * should be thought of as the key to a map of possible
492      * approaches to handling MIDI within the backend. Ensure that
493      * the strings will make sense to the user.
494      */
495     virtual std::vector<std::string> enumerate_midi_options () const = 0;
496
497     /* Request the use of the MIDI option named @param option, which
498      * should be one of the strings returned by enumerate_midi_options()
499      *
500      * @return zero if successful, non-zero otherwise
501      */
502     virtual int set_midi_option (const std::string& option) = 0;
503
504     virtual std::string midi_option () const = 0;
505
506     /** Detailed MIDI device list - if available */
507     virtual std::vector<DeviceStatus> enumerate_midi_devices () const = 0;
508
509     /** mark a midi-devices as enabled */
510     virtual int set_midi_device_enabled (std::string const, bool) = 0;
511
512     /** query if a midi-device is enabled */
513     virtual bool midi_device_enabled (std::string const) const = 0;
514
515     /** if backend supports systemic_midi_[in|ou]tput_latency() */
516     virtual bool can_set_systemic_midi_latencies () const = 0;
517
518     /* State Control */
519
520     /** Start using the device named in the most recent call
521      * to set_device(), with the parameters set by various
522      * the most recent calls to set_sample_rate() etc. etc.
523      *
524      * At some undetermined time after this function is successfully called,
525      * the backend will start calling the ::process_callback() method of
526      * the AudioEngine referenced by @param engine. These calls will
527      * occur in a thread created by and/or under the control of the backend.
528      *
529      * @param for_latency_measurement if true, the device is being started
530      *        to carry out latency measurements and the backend should this
531      *        take care to return latency numbers that do not reflect
532      *        any existing systemic latency settings.
533      *
534      * Return zero if successful, negative values otherwise.
535      *
536      *
537      *
538      *
539      * Why is this non-virtual but ::_start() is virtual ?
540      * Virtual methods with default parameters create possible ambiguity
541      * because a derived class may implement the same method with a different
542      * type or value of default parameter.
543      *
544      * So we make this non-virtual method to avoid possible overrides of
545      * default parameters. See Scott Meyers or other books on C++ to understand
546      * this pattern, or possibly just this:
547      *
548      * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
549      */
550     int start (bool for_latency_measurement=false) {
551             return _start (for_latency_measurement);
552     }
553
554     /** Stop using the device currently in use.
555      *
556      * If the function is successfully called, no subsequent calls to the
557      * process_callback() of @param engine will be made after the function
558      * returns, until parameters are reset and start() are called again.
559      *
560      * The backend is considered to be un-configured after a successful
561      * return, and requires calls to set hardware parameters before it can be
562      * start()-ed again. See pause() for a way to avoid this. stop() should
563      * only be used when reconfiguration is required OR when there are no
564      * plans to use the backend in the future with a reconfiguration.
565      *
566      * Return zero if successful, 1 if the device is not in use, negative values on error
567      */
568     virtual int stop () = 0;
569
570          /** Reset device.
571      *
572      * Return zero if successful, negative values on error
573      */
574         virtual int reset_device() = 0;
575
576     /** While remaining connected to the device, and without changing its
577      * configuration, start (or stop) calling the process_callback() of @param engine
578      * without waiting for the device. Once process_callback() has returned, it
579      * will be called again immediately, thus allowing for faster-than-realtime
580      * processing.
581      *
582      * All registered ports remain in existence and all connections remain
583      * unaltered. However, any physical ports should NOT be used by the
584      * process_callback() during freewheeling - the data behaviour is undefined.
585      *
586      * If @param start_stop is true, begin this behaviour; otherwise cease this
587      * behaviour if it currently occuring, and return to calling
588      * process_callback() of @param engine by waiting for the device.
589      *
590      * Return zero on success, non-zero otherwise.
591      */
592     virtual int freewheel (bool start_stop) = 0;
593
594     /** return the fraction of the time represented by the current buffer
595      * size that is being used for each buffer process cycle, as a value
596      * from 0.0 to 1.0
597      *
598      * E.g. if the buffer size represents 5msec and current processing
599      * takes 1msec, the returned value should be 0.2.
600      *
601      * Implementations can feel free to smooth the values returned over
602      * time (e.g. high pass filtering, or its equivalent).
603      */
604     virtual float dsp_load() const  = 0;
605
606     /* Transport Control (JACK is the only audio API that currently offers
607        the concept of shared transport control)
608     */
609
610     /** Attempt to change the transport state to TransportRolling.
611      */
612     virtual void transport_start () {}
613     /** Attempt to change the transport state to TransportStopped.
614      */
615     virtual void transport_stop () {}
616     /** return the current transport state
617      */
618     virtual TransportState transport_state () const { return TransportStopped; }
619     /** Attempt to locate the transport to @param pos
620      */
621     virtual void transport_locate (framepos_t /*pos*/) {}
622     /** Return the current transport location, in samples measured
623      * from the origin (defined by the transport time master)
624      */
625     virtual framepos_t transport_frame() const { return 0; }
626
627     /** If @param yn is true, become the time master for any inter-application transport
628      * timebase, otherwise cease to be the time master for the same.
629      *
630      * Return zero on success, non-zero otherwise
631      *
632      * JACK is the only currently known audio API with the concept of a shared
633      * transport timebase.
634      */
635     virtual int set_time_master (bool /*yn*/) { return 0; }
636
637     virtual int        usecs_per_cycle () const { return 1000000 * (buffer_size() / sample_rate()); }
638     virtual size_t     raw_buffer_size (DataType t) = 0;
639
640     /* Process time */
641
642     /** return the time according to the sample clock in use, measured in
643      * samples since an arbitrary zero time in the past. The value should
644      * increase monotonically and linearly, without interruption from any
645      * source (including CPU frequency scaling).
646      *
647      * It is extremely likely that any implementation will use a DLL, since
648      * this function can be called from any thread, at any time, and must be
649      * able to accurately determine the correct sample time.
650      *
651      * Can be called from any thread.
652      */
653     virtual framepos_t sample_time () = 0;
654
655     /** Return the time according to the sample clock in use when the most
656      * recent buffer process cycle began. Can be called from any thread.
657      */
658     virtual framepos_t sample_time_at_cycle_start () = 0;
659
660     /** Return the time since the current buffer process cycle started,
661      * in samples, according to the sample clock in use.
662      *
663      * Can ONLY be called from within a process() callback tree (which
664      * implies that it can only be called by a process thread)
665      */
666     virtual pframes_t samples_since_cycle_start () = 0;
667
668     /** Return true if it possible to determine the offset in samples of the
669      * first video frame that starts within the current buffer process cycle,
670      * measured from the first sample of the cycle. If returning true,
671      * set @param offset to that offset.
672      *
673      * Eg. if it can be determined that the first video frame within the cycle
674      * starts 28 samples after the first sample of the cycle, then this method
675      * should return true and set @param offset to 28.
676      *
677      * May be impossible to support outside of JACK, which has specific support
678      * (in some cases, hardware support) for this feature.
679      *
680      * Can ONLY be called from within a process() callback tree (which implies
681      * that it can only be called by a process thread)
682      */
683     virtual bool get_sync_offset (pframes_t& /*offset*/) const { return false; }
684
685     /** Create a new thread suitable for running part of the buffer process
686      * cycle (i.e. Realtime scheduling, memory allocation, etc. etc are all
687      * correctly setup), with a stack size given in bytes by specified @param
688      * stacksize. The thread will begin executing @param func, and will exit
689      * when that function returns.
690      */
691     virtual int create_process_thread (boost::function<void()> func) = 0;
692
693     /** Wait for all processing threads to exit.
694      *
695      * Return zero on success, non-zero on failure.
696      */
697     virtual int join_process_threads () = 0;
698
699     /** Return true if execution context is in a backend thread
700      */
701     virtual bool in_process_thread () = 0;
702
703     /** Return the minimum stack size of audio threads in bytes
704      */
705     static size_t thread_stack_size () { return 100000; }
706
707     /** Return number of processing threads
708      */
709     virtual uint32_t process_thread_count () = 0;
710
711     virtual void update_latencies () = 0;
712
713     /** Set @param speed and @param position to the current speed and position
714      * indicated by some transport sync signal.  Return whether the current
715      * transport state is pending, or finalized.
716      *
717      * Derived classes only need implement this if they provide some way to
718      * sync to a transport sync signal (e.g. Sony 9 Pin) that is not
719      * handled by Ardour itself (LTC and MTC are both handled by Ardour).
720      * The canonical example is JACK Transport.
721      */
722      virtual bool speed_and_position (double& speed, framepos_t& position) {
723              speed = 0.0;
724              position = 0;
725              return false;
726      }
727
728   protected:
729      AudioBackendInfo&  _info;
730      AudioEngine&        engine;
731
732      virtual int _start (bool for_latency_measurement) = 0;
733 };
734
735 } // namespace
736
737 #endif /* __libardour_audiobackend_h__ */
738