MMC related fixes
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 28 Nov 2009 00:39:03 +0000 (00:39 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 28 Nov 2009 00:39:03 +0000 (00:39 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6192 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/session_midi.cc
libs/ardour/session_process.cc
libs/ardour/session_transport.cc

index 1fe360e397cf8d56c5b7051dcff79b62162f692f..2e8915cdb5f20776b3419e3ad728f073d7c5ae56 100644 (file)
@@ -494,7 +494,7 @@ Session::setup_midi_control ()
 void
 Session::spp_start (Parser &, nframes_t /*timestamp*/)
 {
-       if (Config->get_mmc_control() && (config.get_external_sync() && config.get_sync_source() != MTC)) {
+       if (Config->get_mmc_control() && (!config.get_external_sync() || config.get_sync_source() != JACK)) {
                request_transport_speed (1.0);
        }
 }
@@ -539,7 +539,7 @@ Session::midi_clock_stop (Parser& ignored, nframes_t timestamp)
 void
 Session::mmc_deferred_play (MIDI::MachineControl &/*mmc*/)
 {
-       if (Config->get_mmc_control() && (config.get_external_sync() && (config.get_sync_source() != MTC))) {
+       if (Config->get_mmc_control() && (!config.get_external_sync() || (config.get_sync_source() != JACK))) {
                request_transport_speed (1.0);
        }
 }
index a79a2e4cd8744460c1f85dab6f4a5e9a62bb9101..61829274048af8dc7c49feb7ffeaaedb87ffcc38 100644 (file)
@@ -311,6 +311,7 @@ Session::process_with_events (nframes_t nframes)
         */
        if (_send_timecode_update) {
                send_full_time_code(nframes);
+               deliver_mmc (MIDI::MachineControl::cmdLocate, _transport_frame);
        }
 
        if (!process_can_proceed()) {
index b7377d7dc60d3b834158c40aaf01e00a0a500d62..0eaf8125a4e2085cf90962c80851df330b4f59a3 100644 (file)
@@ -946,7 +946,9 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state)
 
        } else {
 
-               if (!get_record_enabled() && Config->get_stop_at_session_end() && _transport_frame >= current_end_frame()) {
+               /* if not recording, don't roll forward past end if told to stop there */
+
+               if (!get_record_enabled() && (speed > 0.0 && Config->get_stop_at_session_end() && _transport_frame >= current_end_frame())) {
                        return;
                }