summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_clock_slave.cc
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-10-25 08:28:10 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-10-25 08:28:10 +0000
commitfd824717a73676e2da3ff05eaba3dd4214239863 (patch)
treefb057077f6659d68f775e007cd17bafa7e4efde2 /libs/ardour/midi_clock_slave.cc
parent33d02c79023f0763321ffc31024ead0f11999f29 (diff)
* fixed jitter problems for midi clock and removed superfluous UI elements
git-svn-id: svn://localhost/ardour2/branches/3.0@4008 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_clock_slave.cc')
-rw-r--r--libs/ardour/midi_clock_slave.cc23
1 files changed, 16 insertions, 7 deletions
diff --git a/libs/ardour/midi_clock_slave.cc b/libs/ardour/midi_clock_slave.cc
index 42ce24c438..aee640e16e 100644
--- a/libs/ardour/midi_clock_slave.cc
+++ b/libs/ardour/midi_clock_slave.cc
@@ -26,12 +26,14 @@
#include <pbd/pthread_utils.h>
#include <midi++/port.h>
+#include <midi++/jack.h>
#include <ardour/slave.h>
#include <ardour/session.h>
#include <ardour/audioengine.h>
#include <ardour/cycles.h>
#include <ardour/tempo.h>
+
#include "i18n.h"
using namespace ARDOUR;
@@ -73,9 +75,9 @@ MIDIClock_Slave::rebind (MIDI::Port& p)
}
void
-MIDIClock_Slave::update_midi_clock (Parser& parser)
+MIDIClock_Slave::update_midi_clock (Parser& parser, nframes_t timestamp)
{
- nframes_t now = session.engine().frame_time();
+ nframes_t now = timestamp;
SafeTime last;
read_current (&last);
@@ -109,8 +111,14 @@ MIDIClock_Slave::update_midi_clock (Parser& parser)
average += accumulator[i];
average /= accumulator_size;
+ JACK_MidiPort *jack_port = dynamic_cast<JACK_MidiPort *>(port);
+ pthread_t process_thread_id = 0;
+ if(jack_port) {
+ process_thread_id = jack_port->get_process_thread();
+ }
- std::cerr << "got MIDI Clock message at time " << now
+ std::cerr << "Thread " << pthread_name() << " with id " << pthread_self() << " process Thread ID: " << process_thread_id
+ << " got MIDI Clock message at time " << now
<< " real delta: " << midi_clock_frame
<< " reference: " << one_ppqn_in_frames
<< " accu index: " << accumulator_index
@@ -127,7 +135,7 @@ MIDIClock_Slave::update_midi_clock (Parser& parser)
}
void
-MIDIClock_Slave::start (Parser& parser)
+MIDIClock_Slave::start (Parser& parser, nframes_t timestamp)
{
nframes_t now = session.engine().frame_time();
@@ -154,7 +162,7 @@ MIDIClock_Slave::start (Parser& parser)
}
void
-MIDIClock_Slave::stop (Parser& parser)
+MIDIClock_Slave::stop (Parser& parser, nframes_t timestamp)
{
std::cerr << "MIDIClock_Slave got stop message" << endl;
@@ -225,7 +233,7 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos)
pos = last.position;
session.request_locate (pos, false);
session.request_transport_speed (0);
- this->stop(*port->input());
+ this->stop(*port->input(), now);
reset();
return false;
}
@@ -238,7 +246,8 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos)
speed = midi_clock_speed;
- cerr << " final speed: " << speed << " elapsed: " << elapsed << " elapsed (scaled) " << elapsed * speed << " position: " << pos << endl;
+ cerr << " final speed: " << speed << " elapsed: " << elapsed << " elapsed (scaled) " << elapsed * speed << " position: " << pos
+ << " Thread ID: " << pthread_self() << endl;
return true;
}