rename Session::add_session_range_location() to ::set_session_range_location()
[ardour.git] / libs / midi++2 / mtc.cc
index e12608de7dc7454a8ab6de86999485a21358cad1..e2a018ca51ddda65af2b8ae18706279194a152c8 100644 (file)
@@ -33,10 +33,10 @@ using namespace std;
 using namespace sigc;
 using namespace MIDI;
 
-#define DEBUG_MTC
+#undef DEBUG_MTC
 
 bool
-Parser::possible_mtc (byte *sysex_buf, size_t msglen)
+Parser::possible_mtc (MIDI::byte *sysex_buf, size_t msglen)
 {
        byte fake_mtc_time[5];
 
@@ -91,7 +91,7 @@ Parser::reset_mtc_state ()
 }
 
 void
-Parser::process_mtc_quarter_frame (byte *msg)
+Parser::process_mtc_quarter_frame (MIDI::byte *msg)
 {
        int which_quarter_frame = (msg[1] & 0xf0) >> 4;
 
@@ -129,14 +129,17 @@ Parser::process_mtc_quarter_frame (byte *msg)
 
                        /* third quarter frame */
                        
-                       // cerr << "second seen qframe = " << (int) which_quarter_frame << endl;
-
+#ifdef DEBUG_MTC
+                       cerr << "second seen qframe = " << (int) which_quarter_frame << endl;
+#endif
                        if (last_qtr_frame < which_quarter_frame) {
                                _mtc_running = MTC_Forward;
                        } else if (last_qtr_frame > which_quarter_frame) {
                                _mtc_running = MTC_Backward;
                        }
-                       
+#ifdef DEBUG_MTC
+                       cerr << "Send MTC status as " << _mtc_running << endl;
+#endif
                        mtc_status (_mtc_running);
                } 
 
@@ -182,7 +185,9 @@ Parser::process_mtc_quarter_frame (byte *msg)
                           true, just ignore this in terms of it being an error.
                        */
 
-                       if (1) { /* mtc_skipped () */
+                       boost::optional<bool> res = mtc_skipped ();
+                       
+                       if (res.get_value_or (false)) {
 
                                /* no error, reset next expected frame */
 
@@ -214,17 +219,12 @@ Parser::process_mtc_quarter_frame (byte *msg)
                                return;
                        }
 
-                       /* go back to waiting for the first frame */
-
-                       expected_mtc_quarter_frame_code = 0;
-                       memset (_qtr_mtc_time, 0, sizeof (_qtr_mtc_time));
-
-                       _mtc_running = MTC_Stopped;
-                       _mtc_locked = false;
+                       /* skip counts as an error ... go back to waiting for the first frame */
 
 #ifdef DEBUG_MTC
                        cerr << "Skipped MTC qtr frame, return to stopped state" << endl;
 #endif
+                       reset_mtc_state ();
                        mtc_status (MTC_Stopped);
                        
                        return;
@@ -240,7 +240,7 @@ Parser::process_mtc_quarter_frame (byte *msg)
        /* time code is looking good */
 
 #ifdef DEBUG_MTC
-       // cerr << "for quarter frame " << which_quarter_frame << " byte = " << hex << (int) msg[1] << dec << endl;
+       cerr << "for quarter frame " << which_quarter_frame << " byte = " << hex << (int) msg[1] << dec << endl;
 #endif
 
        switch (which_quarter_frame) {
@@ -285,7 +285,7 @@ Parser::process_mtc_quarter_frame (byte *msg)
                break;
 
        default:
-               /*NOTREACHED*/
+               abort(); /*NOTREACHED*/
                break;
 
        } 
@@ -300,7 +300,7 @@ Parser::process_mtc_quarter_frame (byte *msg)
 
        switch (_mtc_running) {
        case MTC_Forward:
-               if ((which_quarter_frame == 7)) {
+               if (which_quarter_frame == 7) {
                        
                        /* we've reached the final of 8 quarter frame messages.
                           store the time, reset the pending time holder,