From 195a3d15e490465b64a19d2f09e8a2d8d81e2b2a Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Mon, 6 Jun 2016 20:26:13 +0200 Subject: Add basic latency reporting methods. --- plugin/drumgizmo_plugin.cc | 2 ++ src/chresampler.cc | 14 ++++++++++++++ src/chresampler.h | 7 +++++++ src/drumgizmo.cc | 5 +++++ src/drumgizmo.h | 3 +++ src/inputprocessor.cc | 13 ++++++------- src/inputprocessor.h | 7 ++++++- 7 files changed, 43 insertions(+), 8 deletions(-) diff --git a/plugin/drumgizmo_plugin.cc b/plugin/drumgizmo_plugin.cc index 5c94db4..7202770 100644 --- a/plugin/drumgizmo_plugin.cc +++ b/plugin/drumgizmo_plugin.cc @@ -127,6 +127,8 @@ void DrumGizmoPlugin::process(size_t pos, const std::vector& output_samples, size_t count) { + setLatency(drumgizmo->getLatency()); + this->input_events = &input_events; this->output_samples = &output_samples; diff --git a/src/chresampler.cc b/src/chresampler.cc index c8323de..c3c19bf 100644 --- a/src/chresampler.cc +++ b/src/chresampler.cc @@ -139,6 +139,15 @@ void CHResampler::process() #endif } +std::size_t CHResampler::getLatency() const +{ +#if defined(USE_ZITA) + return prv->zita.inpdist(); +#elif defined(USE_SRC) + return 0; // TODO? +#endif +} + std::size_t CHResampler::getInputSampleCount() const { #if defined(USE_ZITA) @@ -172,6 +181,11 @@ void CHResampler::setInputSamples(float*, std::size_t) {} void CHResampler::setOutputSamples(float*, std::size_t) {} void CHResampler::process() {} +std::size_t CHResampler::getLatency() const +{ + return 0; +} + std::size_t CHResampler::getInputSampleCount() const { return 0; diff --git a/src/chresampler.h b/src/chresampler.h index 4148aee..d21d1cb 100644 --- a/src/chresampler.h +++ b/src/chresampler.h @@ -48,6 +48,8 @@ public: void process(); + std::size_t getLatency() const; + std::size_t getInputSampleCount() const; std::size_t getOutputSampleCount() const; @@ -96,5 +98,10 @@ public: return resamplers[0].getOutputSampleCount(); } + std::size_t getLatency() const + { + return resamplers[0].getLatency(); + } + std::array resamplers; }; diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index ef4d3b6..a1278a1 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -410,6 +410,11 @@ void DrumGizmo::stop() // engine.stop(); } +std::size_t DrumGizmo::getLatency() const +{ + return input_processor.getLatency() + resamplers.getLatency(); +} + int DrumGizmo::samplerate() { return settings.samplerate.load(); diff --git a/src/drumgizmo.h b/src/drumgizmo.h index 3f2d17c..63c0fb6 100644 --- a/src/drumgizmo.h +++ b/src/drumgizmo.h @@ -64,6 +64,9 @@ public: std::string configString(); bool setConfigString(std::string cfg); + //! Get the current engine latency in samples. + std::size_t getLatency() const; + int samplerate(); void setSamplerate(int samplerate); diff --git a/src/inputprocessor.cc b/src/inputprocessor.cc index 1676090..b83855f 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -61,13 +61,18 @@ bool InputProcessor::process(const std::vector& events, size_t pos, dou return true; } +std::size_t InputProcessor::getLatency() const +{ + return 0; +} + bool InputProcessor::processOnset(const event_t& event, size_t pos, double resample_ratio) { if(!kit.isValid()) { return false; } - size_t ev_instr = event.instrument; + size_t ev_instr = event.instrument; Instrument* instr = nullptr; if(ev_instr < kit.instruments.size()) @@ -115,12 +120,6 @@ bool InputProcessor::processOnset(const event_t& event, size_t pos, double resam for(Channel& ch: kit.channels) { AudioFile* af = sample->getAudioFile(&ch); - if(af != nullptr) - { - // LAZYLOAD: - // DEBUG(inputprocessor, "Requesting preparing of audio file\n"); - // loader.prepare(af); - } if(af == nullptr || !af->isValid()) { //DEBUG(inputprocessor, "Missing AudioFile.\n"); diff --git a/src/inputprocessor.h b/src/inputprocessor.h index da370ec..83a4f5b 100644 --- a/src/inputprocessor.h +++ b/src/inputprocessor.h @@ -37,7 +37,12 @@ class InputProcessor { public: InputProcessor(DrumKit& kit, std::list* activeevents); - bool process(const std::vector& events, size_t pos, double resample_ratio); + + bool process(const std::vector& events, size_t pos, + double resample_ratio); + + std::size_t getLatency() const; + private: DrumKit& kit; std::list* activeevents; -- cgit v1.2.3