summaryrefslogtreecommitdiff
path: root/libs/ardour
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
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')
-rw-r--r--libs/ardour/ardour/configuration_vars.h1
-rw-r--r--libs/ardour/ardour/session.h10
-rw-r--r--libs/ardour/ardour/slave.h6
-rw-r--r--libs/ardour/midi_clock_slave.cc23
-rw-r--r--libs/ardour/session_midi.cc27
5 files changed, 34 insertions, 33 deletions
diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h
index f433cf94a7..055d47b7c1 100644
--- a/libs/ardour/ardour/configuration_vars.h
+++ b/libs/ardour/ardour/configuration_vars.h
@@ -36,7 +36,6 @@ CONFIG_VARIABLE (bool, trace_midi_output, "trace-midi-output", false)
CONFIG_VARIABLE (bool, send_mtc, "send-mtc", false)
CONFIG_VARIABLE (bool, send_mmc, "send-mmc", true)
CONFIG_VARIABLE (bool, mmc_control, "mmc-control", true)
-CONFIG_VARIABLE (bool, midi_clock_control, "midi-clock-control", false)
CONFIG_VARIABLE (bool, midi_feedback, "midi-feedback", false)
CONFIG_VARIABLE (uint8_t, mmc_receive_device_id, "mmc-receive-device-id", 0)
CONFIG_VARIABLE (uint8_t, mmc_send_device_id, "mmc-send-device-id", 0)
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index dff59e0243..ff2bc9c127 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -1306,13 +1306,9 @@ class Session : public PBD::StatefulDestructible
void deliver_mmc (MIDI::MachineControl::Command, nframes_t);
- void spp_start (MIDI::Parser&);
- void spp_continue (MIDI::Parser&);
- void spp_stop (MIDI::Parser&);
-
- void midi_clock_start (MIDI::Parser&);
- void midi_clock_continue (MIDI::Parser&);
- void midi_clock_stop (MIDI::Parser&);
+ void spp_start (MIDI::Parser&, nframes_t timestamp);
+ void spp_continue (MIDI::Parser&, nframes_t timestamp);
+ void spp_stop (MIDI::Parser&, nframes_t timestamp);
void mmc_deferred_play (MIDI::MachineControl &);
void mmc_stop (MIDI::MachineControl &);
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index 7c7f1d98ce..9460d4d83c 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -143,9 +143,9 @@ class MIDIClock_Slave : public Slave, public sigc::trackable {
float average;
void reset ();
- void start (MIDI::Parser& parser);
- void stop (MIDI::Parser& parser);
- void update_midi_clock (MIDI::Parser& parser);
+ void start (MIDI::Parser& parser, nframes_t timestamp);
+ void stop (MIDI::Parser& parser, nframes_t timestamp);
+ void update_midi_clock (MIDI::Parser& parser, nframes_t timestamp);
void read_current (SafeTime *) const;
bool _started;
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;
}
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc
index dd927a3add..64903f24a2 100644
--- a/libs/ardour/session_midi.cc
+++ b/libs/ardour/session_midi.cc
@@ -317,10 +317,6 @@ Session::set_midi_clock_port (string port_tag)
Config->set_midi_clock_port_name (port_tag);
- _midi_clock_port->input()->start.connect (mem_fun (*this, &Session::midi_clock_start));
- _midi_clock_port->input()->contineu.connect (mem_fun (*this, &Session::midi_clock_continue));
- _midi_clock_port->input()->stop.connect (mem_fun (*this, &Session::midi_clock_stop));
-
out:
MIDIClock_PortChanged(); /* EMIT SIGNAL */
change_midi_ports ();
@@ -496,7 +492,7 @@ Session::setup_midi_control ()
}
void
-Session::spp_start (Parser& ignored)
+Session::spp_start (Parser& ignored, nframes_t timestamp)
{
if (Config->get_mmc_control() && (Config->get_slave_source() != MTC)) {
request_transport_speed (1.0);
@@ -504,40 +500,41 @@ Session::spp_start (Parser& ignored)
}
void
-Session::spp_continue (Parser& ignored)
+Session::spp_continue (Parser& ignored, nframes_t timestamp)
{
- spp_start (ignored);
+ spp_start (ignored, timestamp);
}
void
-Session::spp_stop (Parser& ignored)
+Session::spp_stop (Parser& ignored, nframes_t timestamp)
{
if (Config->get_mmc_control()) {
request_stop ();
}
}
-
+/*
void
-Session::midi_clock_start (Parser& ignored)
+Session::midi_clock_start (Parser& ignored, nframes_t timestamp)
{
- if (Config->get_midi_clock_control() && (Config->get_slave_source() == MIDIClock)) {
+ if (Config->get_slave_source() == MIDIClock) {
request_transport_speed (1.0);
}
}
void
-Session::midi_clock_continue (Parser& ignored)
+Session::midi_clock_continue (Parser& parser, nframes_t timestamp)
{
- midi_clock_start (ignored);
+ midi_clock_start (parser, 0);
}
void
-Session::midi_clock_stop (Parser& ignored)
+Session::midi_clock_stop (Parser& ignored, nframes_t timestamp)
{
- if (Config->get_midi_clock_control()) {
+ if (Config->get_slave_source() == MIDIClock) {
request_stop ();
}
}
+*/
void
Session::mmc_deferred_play (MIDI::MachineControl &mmc)