#include "ardour/audioengine.h"
#include "ardour/audio_port.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace std;
using namespace ARDOUR;
LTC_Slave::LTC_Slave (Session& s)
: session (s)
{
- frames_per_ltc_frame = session.frames_per_timecode_frame();
+ frames_per_ltc_frame = session.samples_per_timecode_frame();
timecode.rate = session.timecode_frames_per_second();
timecode.drop = session.timecode_drop_frames();
}
void
-LTC_Slave::reset()
+LTC_Slave::reset (bool with_ts)
{
DEBUG_TRACE (DEBUG::LTC, "LTC reset()\n");
- last_timestamp = 0;
- current_delta = 0;
+ if (with_ts) {
+ last_timestamp = 0;
+ current_delta = 0;
+ }
transport_direction = 0;
ltc_speed = 0;
engine_dll_initstate = 0;
ltc_frame_increment(&frame.ltc, fps_i, tv_standard, 0);
ltc_frame_to_time(&stime, &frame.ltc, 0);
transport_direction = 1;
- frame.off_start -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
- frame.off_end -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
+ frame.off_start -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
+ frame.off_end -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
} else {
ltc_frame_decrement(&frame.ltc, fps_i, tv_standard, 0);
int off = frame.off_end - frame.off_start;
- frame.off_start += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
- frame.off_end += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
+ frame.off_start += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
+ frame.off_end += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
transport_direction = -1;
}
DEBUG_TRACE (DEBUG::LTC, string_compose("engine skipped %1 frames. Feeding silence to LTC parser.\n", skip));
if (skip >= 8192) skip = 8192;
unsigned char sound[8192];
- memset(sound, 0, sizeof(char) * skip);
+ memset(sound, 0x80, sizeof(char) * skip);
ltc_decoder_write(decoder, sound, nframes, now);
} else if (skip != 0) {
/* this should never happen. it may if monotonic_cnt, now overflow on 64bit */
if (((pos < 0) || (labs(current_delta) > 2 * session.frame_rate()))) {
DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC large drift: %1\n", current_delta));
- reset();
+ reset(false);
speed = 0;
- pos = session.transport_frame();
return true;
}
speed = 1.0;
}
- if (speed != 0 && delayedlocked == 0 && fabsf(speed) != 1.0) {
+ if (speed != 0 && delayedlocked == 0 && fabs(speed) != 1.0) {
sync_lock_broken = true;
DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC speed not locked %1 %2\n", speed, ltc_speed));
}
} else {
snprintf(delta, sizeof(delta), "\u0394<span foreground=\"%s\" face=\"monospace\" >%s%s%lld</span>sm",
sync_lock_broken ? "red" : "green",
- LEADINGZERO(llabs(current_delta)), PLUSMINUS(-current_delta), llabs(current_delta));
+ LEADINGZERO(::llabs(current_delta)), PLUSMINUS(-current_delta), ::llabs(current_delta));
}
return std::string(delta);
}