projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add some comments.
[ardour.git]
/
libs
/
ardour
/
session_transport.cc
diff --git
a/libs/ardour/session_transport.cc
b/libs/ardour/session_transport.cc
index 22d30fda9d03bac595b54d5cfa7e4b2c87b8b907..d032e31b93febad22c2b8b90147888ab71d19ea4 100644
(file)
--- a/
libs/ardour/session_transport.cc
+++ b/
libs/ardour/session_transport.cc
@@
-134,6
+134,11
@@
void
Session::realtime_stop (bool abort)
{
/* assume that when we start, we'll be moving forwards */
Session::realtime_stop (bool abort)
{
/* assume that when we start, we'll be moving forwards */
+
+ // FIXME: where should this really be? [DR]
+ //send_full_time_code();
+ deliver_mmc (MIDI::MachineControl::cmdStop, _transport_frame);
+ deliver_mmc (MIDI::MachineControl::cmdLocate, _transport_frame);
if (_transport_speed < 0.0f) {
post_transport_work = PostTransportWork (post_transport_work | PostTransportStop | PostTransportReverse);
if (_transport_speed < 0.0f) {
post_transport_work = PostTransportWork (post_transport_work | PostTransportStop | PostTransportReverse);
@@
-405,16
+410,13
@@
Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
return;
}
}
return;
}
}
+
#ifdef LEAVE_TRANSPORT_UNADJUSTED
}
#endif
last_stop_frame = _transport_frame;
#ifdef LEAVE_TRANSPORT_UNADJUSTED
}
#endif
last_stop_frame = _transport_frame;
- send_full_time_code ();
- deliver_mmc (MIDI::MachineControl::cmdStop, 0);
- deliver_mmc (MIDI::MachineControl::cmdLocate, _transport_frame);
-
if (did_record) {
/* XXX its a little odd that we're doing this here
if (did_record) {
/* XXX its a little odd that we're doing this here
@@
-625,7
+627,12
@@
Session::locate (nframes_t target_frame, bool with_roll, bool with_flush, bool w
return;
}
return;
}
+ // Update SMPTE time
+ // [DR] FIXME: find out exactly where this should go below
_transport_frame = target_frame;
_transport_frame = target_frame;
+ smpte_time(_transport_frame, transmitting_smpte_time);
+ outbound_mtc_smpte_frame = _transport_frame;
+ next_quarter_frame_to_send = 0;
if (_transport_speed && (!with_loop || loop_changing)) {
/* schedule a declick. we'll be called again when its done */
if (_transport_speed && (!with_loop || loop_changing)) {
/* schedule a declick. we'll be called again when its done */
@@
-707,8
+714,14
@@
Session::locate (nframes_t target_frame, bool with_roll, bool with_flush, bool w
}
loop_changing = false;
}
loop_changing = false;
+
+ _send_smpte_update = true;
}
}
+/** Set the transport speed.
+ * @param speed New speed
+ * @param abort
+ */
void
Session::set_transport_speed (float speed, bool abort)
{
void
Session::set_transport_speed (float speed, bool abort)
{
@@
-724,6
+737,8
@@
Session::set_transport_speed (float speed, bool abort)
if (transport_rolling() && speed == 0.0) {
if (transport_rolling() && speed == 0.0) {
+ /* we are rolling and we want to stop */
+
if (Config->get_monitoring_model() == HardwareMonitoring)
{
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
if (Config->get_monitoring_model() == HardwareMonitoring)
{
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
@@
-744,6
+759,8
@@
Session::set_transport_speed (float speed, bool abort)
} else if (transport_stopped() && speed == 1.0) {
} else if (transport_stopped() && speed == 1.0) {
+ /* we are stopped and we want to start rolling at speed 1 */
+
if (!get_record_enabled() && Config->get_stop_at_session_end() && _transport_frame >= current_end_frame()) {
return;
}
if (!get_record_enabled() && Config->get_stop_at_session_end() && _transport_frame >= current_end_frame()) {
return;
}
@@
-816,6
+833,8
@@
Session::set_transport_speed (float speed, bool abort)
}
}
}
}
+
+/** Stop the transport. */
void
Session::stop_transport (bool abort)
{
void
Session::stop_transport (bool abort)
{
@@
-901,11
+920,14
@@
Session::actually_start_transport ()
(*i)->realtime_set_speed ((*i)->speed(), true);
}
(*i)->realtime_set_speed ((*i)->speed(), true);
}
-
send_mmc_in_another_thread (MIDI::MachineControl::cmdDeferredPlay, 0
);
-
+
deliver_mmc(MIDI::MachineControl::cmdDeferredPlay, _transport_frame
);
+
TransportStateChange (); /* EMIT SIGNAL */
}
TransportStateChange (); /* EMIT SIGNAL */
}
+/** Do any transport work in the audio thread that needs to be done after the
+ * transport thread is finished. Audio thread, realtime safe.
+ */
void
Session::post_transport ()
{
void
Session::post_transport ()
{