prepare reporting slave delta & MTC slave implementation
authorRobin Gareus <robin@gareus.org>
Sun, 14 Oct 2012 23:23:53 +0000 (23:23 +0000)
committerRobin Gareus <robin@gareus.org>
Sun, 14 Oct 2012 23:23:53 +0000 (23:23 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@13276 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/audio_clock.cc
libs/ardour/ardour/slave.h
libs/ardour/mtc_slave.cc

index b19942c6648b4ba39d620e5d6f727cac72a72b46..2e5628214d863e477f3219f215c4d104fbefa685 100644 (file)
@@ -1121,7 +1121,7 @@ AudioClock::set_timecode (framepos_t when, bool /*force*/)
                                        _left_layout->set_text (string_compose ("%1 %2",
                                                                sync_source_to_string(sync_src, true),
                                                                dynamic_cast<TimecodeSlave*>(slave)->approximate_current_position()));
-                                       _right_layout->set_text ("+- 0"); // XXX
+                                       _right_layout->set_text (slave->approximate_current_delta());
                                } else {
                                        _left_layout->set_text (string_compose ("%1 --pending--",
                                                                sync_source_to_string(sync_src, true)));
@@ -1131,14 +1131,14 @@ AudioClock::set_timecode (framepos_t when, bool /*force*/)
                        case MIDIClock:
                                _left_layout->set_text (string_compose ("%1",
                                                        sync_source_to_string(sync_src, true)));
-                               _right_layout->set_text ("");
+                               _right_layout->set_text (slave->approximate_current_delta());
                                break;
                        case LTC:
                                if (slave) {
                                        _left_layout->set_text (string_compose ("%1 %2",
                                                                sync_source_to_string(sync_src, true),
                                                                dynamic_cast<TimecodeSlave*>(slave)->approximate_current_position()));
-                                       _right_layout->set_text ("+- 0"); // XXX
+                                       _right_layout->set_text (slave->approximate_current_delta());
                                } else {
                                        _left_layout->set_text (string_compose ("%1 --pending--",
                                                                sync_source_to_string(sync_src, true)));
index 8f4ac1384b12e8ff91e31fb002d924f58644a916..85730e78b68c83f87d3bb92c1b5cf1f28bb05f61 100644 (file)
@@ -171,6 +171,12 @@ class Slave {
         * @return - whether ARDOUR should use the slave speed without any adjustments
         */
        virtual bool give_slave_full_control_over_transport_speed() const { return false; }
+
+       /**
+        * @return - current time-delta between engine and sync-source
+        */
+       virtual std::string approximate_current_delta() const { return ""; }
+
 };
 
 /// We need this wrapper for testability, it's just too hard to mock up a session class
@@ -255,6 +261,7 @@ class MTC_Slave : public TimecodeSlave {
        bool requires_seekahead () const { return true; }
        framecnt_t seekahead_distance() const;
        bool give_slave_full_control_over_transport_speed() const;
+       std::string approximate_current_delta() const;
 
         Timecode::TimecodeFormat apparent_timecode_format() const;
         std::string approximate_current_position() const;
@@ -289,6 +296,7 @@ class MTC_Slave : public TimecodeSlave {
        Timecode::TimecodeFormat a3e_timecode;
        Timecode::Time timecode;
        bool           printed_timecode_warning;
+       frameoffset_t  current_delta;
 
        /* DLL - chase MTC */
        double t0; ///< time at the beginning of the MTC quater frame
index 4696f1e936a074f6696f4a323f8c6c5d9a3efa8f..5eee8381bb6ba077fb271517bf5e98a00eca55cc 100644 (file)
@@ -183,6 +183,7 @@ MTC_Slave::reset (bool with_position)
        window_begin = 0;
        window_end = 0;
        transport_direction = 1;
+       current_delta = 0;
 }
 
 void
@@ -629,6 +630,8 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos)
        DEBUG_TRACE (DEBUG::MTC, string_compose ("MTCsync spd: %1 pos: %2 | last-pos: %3 elapsed: %4 delta: %5\n",
                                                 speed, pos, last.position, elapsed,  pos - sess_pos));
 
+       current_delta = (pos - sess_pos);
+
        return true;
 }
 
@@ -652,3 +655,11 @@ MTC_Slave::approximate_current_position() const
                Timecode::timecode_to_frames_per_second(mtc_timecode),
                Timecode::timecode_has_drop_frames(mtc_timecode));
 }
+
+std::string
+MTC_Slave::approximate_current_delta() const
+{
+       char delta[24];
+       snprintf(delta, sizeof(delta), "%+" PRIi64, current_delta); // XXX TODO unit, refine
+       return std::string(delta);
+}