summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2012-10-17 15:57:51 +0000
committerRobin Gareus <robin@gareus.org>2012-10-17 15:57:51 +0000
commitc4cb4fa1417bd2c19654e449b285b171e2130eca (patch)
tree3d310e739f9ff38c95f549fdf86b2bf323be9009
parent501d870b3c7e01756a22faaa5b446bd36b331259 (diff)
slave delta display
impl MClk slave, update format for LTC, MTC negative delta: Ardour is behind, positive delta: Ardour is ahead of ext clock. git-svn-id: svn://localhost/ardour2/branches/3.0@13299 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/ardour/slave.h6
-rw-r--r--libs/ardour/ltc_slave.cc5
-rw-r--r--libs/ardour/midi_clock_slave.cc15
-rw-r--r--libs/ardour/mtc_slave.cc5
4 files changed, 27 insertions, 4 deletions
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index ba9ec8fe27..8589473d3b 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -38,6 +38,9 @@
#include <ltc.h>
#endif
+// used for approximate_current_delta():
+#define PLUSMINUS(A) ( ((A)<0) ? "\u2012" : (((A)>0) ? "+" : "\u00B1") )
+
namespace MIDI {
class Port;
}
@@ -419,6 +422,7 @@ class MIDIClock_Slave : public Slave {
bool give_slave_full_control_over_transport_speed() const { return true; }
void set_bandwidth (double a_bandwith) { bandwidth = a_bandwith; }
+ std::string approximate_current_delta() const;
protected:
ISlaveSessionProxy* session;
@@ -462,6 +466,8 @@ class MIDIClock_Slave : public Slave {
/// DLL filter coefficients
double b, c, omega;
+ frameoffset_t current_delta;
+
void reset ();
void start (MIDI::Parser& parser, framepos_t timestamp);
void contineu (MIDI::Parser& parser, framepos_t timestamp);
diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc
index 0e4f50b55a..0247a5168f 100644
--- a/libs/ardour/ltc_slave.cc
+++ b/libs/ardour/ltc_slave.cc
@@ -549,13 +549,14 @@ LTC_Slave::approximate_current_delta() const
{
char delta[24];
if (last_timestamp == 0 || frames_in_sequence < 2) {
- snprintf(delta, sizeof(delta), "---");
+ snprintf(delta, sizeof(delta), "\u2012\u2012\u2012\u2012");
} else if ((monotonic_cnt - last_timestamp) > 2 * frames_per_ltc_frame) {
snprintf(delta, sizeof(delta), "flywheel");
} else {
// TODO if current_delta > 1 frame -> display timecode.
// delta >0 if A3's transport is _behind_ LTC
- snprintf(delta, sizeof(delta), "%+4" PRIi64 " sm", current_delta);
+ snprintf(delta, sizeof(delta), "%s%4" PRIi64 " sm",
+ PLUSMINUS(-current_delta), abs(current_delta));
}
return std::string(delta);
}
diff --git a/libs/ardour/midi_clock_slave.cc b/libs/ardour/midi_clock_slave.cc
index 05c0e9e2ac..a54965557a 100644
--- a/libs/ardour/midi_clock_slave.cc
+++ b/libs/ardour/midi_clock_slave.cc
@@ -205,6 +205,7 @@ MIDIClock_Slave::reset ()
_started = true;
// session->request_locate(0, false);
+ current_delta = 0;
}
void
@@ -343,6 +344,7 @@ MIDIClock_Slave::speed_and_position (double& speed, framepos_t& pos)
}
DEBUG_TRACE (DEBUG::MidiClock, string_compose ("speed_and_position: %1 & %2 <-> %3 (transport)\n", speed, pos, session->transport_frame()));
+ current_delta = pos - session->transport_frame();
return true;
}
@@ -354,3 +356,16 @@ MIDIClock_Slave::resolution() const
return (framecnt_t) one_ppqn_in_frames * ppqn;
}
+std::string
+MIDIClock_Slave::approximate_current_delta() const
+{
+ char delta[24];
+ if (last_timestamp == 0 || _starting) {
+ snprintf(delta, sizeof(delta), "\u2012\u2012\u2012\u2012");
+ } else {
+ snprintf(delta, sizeof(delta), "%s%4" PRIi64 " sm",
+ PLUSMINUS(-current_delta), abs(current_delta));
+ }
+ return std::string(delta);
+}
+
diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc
index 9b81acf67c..79f985e0a2 100644
--- a/libs/ardour/mtc_slave.cc
+++ b/libs/ardour/mtc_slave.cc
@@ -664,10 +664,11 @@ MTC_Slave::approximate_current_delta() const
SafeTime last;
read_current (&last);
if (last.timestamp == 0 || reset_pending) {
- snprintf(delta, sizeof(delta), "---");
+ snprintf(delta, sizeof(delta), "\u2012\u2012\u2012\u2012");
} else {
// TODO if current_delta > 1 frame -> display timecode.
- snprintf(delta, sizeof(delta), "%+4" PRIi64 " sm", current_delta);
+ snprintf(delta, sizeof(delta), "%s%4" PRIi64 " sm",
+ PLUSMINUS(-current_delta), abs(current_delta));
}
return std::string(delta);
}