X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fslave.h;h=cf8060d029efeb6dd98a4b810fe3b86be2da4425;hb=11da4a83e499db74e75d5b59973b0e52b0c1277a;hp=d736a0948a3a7c8a39c254c5c05a65518615296d;hpb=d826de83aedb357d9436fe75e6f3dccd0bb93456;p=ardour.git diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h index d736a0948a..cf8060d029 100644 --- a/libs/ardour/ardour/slave.h +++ b/libs/ardour/ardour/slave.h @@ -24,13 +24,13 @@ #include -#include #include #include "pbd/signals.h" #include "timecode/time.h" +#include "ardour/libardour_visibility.h" #include "ardour/types.h" #include "midi++/parser.h" #include "midi++/types.h" @@ -59,7 +59,7 @@ class MidiPort; * Therefore it is rather that class, that makes ARDOUR a slave by connecting it * to its external time master. */ -class Slave { +class LIBARDOUR_API Slave { public: Slave() { } virtual ~Slave() {} @@ -180,16 +180,17 @@ class Slave { }; /// We need this wrapper for testability, it's just too hard to mock up a session class -class ISlaveSessionProxy { +class LIBARDOUR_API ISlaveSessionProxy { public: virtual ~ISlaveSessionProxy() {} - virtual TempoMap& tempo_map() const { return *((TempoMap *) 0); } - virtual framecnt_t frame_rate() const { return 0; } - virtual pframes_t frames_per_cycle() const { return 0; } - virtual framepos_t audible_frame () const { return 0; } - virtual framepos_t transport_frame () const { return 0; } - virtual pframes_t frames_since_cycle_start () const { return 0; } - virtual framepos_t frame_time () const { return 0; } + virtual TempoMap& tempo_map() const { return *((TempoMap *) 0); } + virtual framecnt_t frame_rate() const { return 0; } + virtual pframes_t frames_per_cycle() const { return 0; } + virtual framepos_t audible_frame () const { return 0; } + virtual framepos_t transport_frame () const { return 0; } + virtual pframes_t frames_since_cycle_start () const { return 0; } + virtual framepos_t sample_time_at_cycle_start() const { return 0; } + virtual framepos_t frame_time () const { return 0; } virtual void request_locate (framepos_t /*frame*/, bool with_roll = false) { (void) with_roll; @@ -199,7 +200,7 @@ class ISlaveSessionProxy { /// The Session Proxy for use in real Ardour -class SlaveSessionProxy : public ISlaveSessionProxy { +class LIBARDOUR_API SlaveSessionProxy : public ISlaveSessionProxy { Session& session; public: @@ -211,13 +212,14 @@ class SlaveSessionProxy : public ISlaveSessionProxy { framepos_t audible_frame () const; framepos_t transport_frame () const; pframes_t frames_since_cycle_start () const; + framepos_t sample_time_at_cycle_start() const; framepos_t frame_time () const; void request_locate (framepos_t frame, bool with_roll = false); void request_transport_speed (double speed); }; -struct SafeTime { +struct LIBARDOUR_API SafeTime { volatile int guard1; framepos_t position; framepos_t timestamp; @@ -233,24 +235,26 @@ struct SafeTime { } }; -class TimecodeSlave : public Slave { +class LIBARDOUR_API TimecodeSlave : public Slave { public: - TimecodeSlave () {} + TimecodeSlave () {} - virtual Timecode::TimecodeFormat apparent_timecode_format() const = 0; + virtual Timecode::TimecodeFormat apparent_timecode_format() const = 0; - /* this is intended to be used by a UI and polled from a timeout. it should - return a string describing the current position of the TC source. it - should NOT do any computation, but should use a cached value - of the TC source position. - */ - virtual std::string approximate_current_position() const = 0; + /* this is intended to be used by a UI and polled from a timeout. it should + return a string describing the current position of the TC source. it + should NOT do any computation, but should use a cached value + of the TC source position. + */ + virtual std::string approximate_current_position() const = 0; - framepos_t timecode_offset; - bool timecode_negative_offset; + framepos_t timecode_offset; + bool timecode_negative_offset; + + PBD::Signal1 ActiveChanged; }; -class MTC_Slave : public TimecodeSlave { +class LIBARDOUR_API MTC_Slave : public TimecodeSlave { public: MTC_Slave (Session&, MidiPort&); ~MTC_Slave (); @@ -334,7 +338,7 @@ class MTC_Slave : public TimecodeSlave { void parameter_changed(std::string const & p); }; -class LTC_Slave : public TimecodeSlave { +class LIBARDOUR_API LTC_Slave : public TimecodeSlave { public: LTC_Slave (Session&); ~LTC_Slave (); @@ -386,6 +390,7 @@ public: int ltc_detect_fps_cnt; int ltc_detect_fps_max; bool printed_timecode_warning; + bool sync_lock_broken; Timecode::TimecodeFormat ltc_timecode; Timecode::TimecodeFormat a3e_timecode; @@ -402,7 +407,7 @@ public: double b, c; ///< DLL filter coefficients }; -class MIDIClock_Slave : public Slave { +class LIBARDOUR_API MIDIClock_Slave : public Slave { public: MIDIClock_Slave (Session&, MidiPort&, int ppqn = 24); @@ -488,7 +493,7 @@ class MIDIClock_Slave : public Slave { bool _starting; }; -class Engine_Slave : public Slave +class LIBARDOUR_API Engine_Slave : public Slave { public: Engine_Slave (AudioEngine&); @@ -505,7 +510,6 @@ class Engine_Slave : public Slave private: AudioEngine& engine; - double speed; bool _starting; };