nominal improvement for MTC master: use port latency to adjust sampletimes that MTC events "occured at"
This commit is contained in:
@@ -501,6 +501,9 @@ class LIBARDOUR_API MTC_TransportMaster : public TimecodeTransportMaster, public
|
||||
void init_mtc_dll(samplepos_t, double);
|
||||
void parse_timecode_offset();
|
||||
void parameter_changed(std::string const & p);
|
||||
|
||||
void resync_latency();
|
||||
LatencyRange mtc_slave_latency;
|
||||
};
|
||||
|
||||
class LIBARDOUR_API LTC_TransportMaster : public TimecodeTransportMaster {
|
||||
|
||||
@@ -70,6 +70,10 @@ MTC_TransportMaster::MTC_TransportMaster (std::string const & name)
|
||||
, printed_timecode_warning (false)
|
||||
{
|
||||
init ();
|
||||
|
||||
resync_latency();
|
||||
|
||||
AudioEngine::instance()->GraphReordered.connect_same_thread (port_connections, boost::bind (&MTC_TransportMaster::resync_latency, this));
|
||||
}
|
||||
|
||||
MTC_TransportMaster::~MTC_TransportMaster()
|
||||
@@ -88,6 +92,16 @@ MTC_TransportMaster::init ()
|
||||
reset (true);
|
||||
}
|
||||
|
||||
void
|
||||
MTC_TransportMaster::resync_latency()
|
||||
{
|
||||
DEBUG_TRACE (DEBUG::MTC, "MTC resync_latency()\n");
|
||||
|
||||
if (_port) {
|
||||
_port->get_connected_latency_range (mtc_slave_latency, false);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MTC_TransportMaster::create_port ()
|
||||
{
|
||||
@@ -129,6 +143,8 @@ MTC_TransportMaster::pre_process (MIDI::pframes_t nframes, samplepos_t now, boos
|
||||
|
||||
maybe_reset ();
|
||||
|
||||
now -= mtc_slave_latency.max;
|
||||
|
||||
_midi_port->read_and_parse_entire_midi_buffer_with_no_speed_adjustment (nframes, parser, now);
|
||||
|
||||
if (session_pos) {
|
||||
|
||||
Reference in New Issue
Block a user