[worker] more on removing qt dependency
This commit is contained in:
parent
60d64e97ef
commit
34f96b508a
3 changed files with 18 additions and 15 deletions
|
@ -1,4 +1,4 @@
|
||||||
#include "Amuencha.hpp"
|
#include "AmuenchaModel.hpp"
|
||||||
|
|
||||||
namespace Amuencha
|
namespace Amuencha
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,7 +84,8 @@ void Amuencha::Model::worker::new_data(float* chunk, int size)
|
||||||
if (waiting_time != CYCLE_PERIOD) {
|
if (waiting_time != CYCLE_PERIOD) {
|
||||||
// and now resume the cyclic scheduling
|
// and now resume the cyclic scheduling
|
||||||
waiting_time = CYCLE_PERIOD;
|
waiting_time = CYCLE_PERIOD;
|
||||||
condition.wakeOne();
|
// condition.wakeOne();
|
||||||
|
condition.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, do NOT wake the other thread, keep the low-freq cycle to decrease load
|
// Otherwise, do NOT wake the other thread, keep the low-freq cycle to decrease load
|
||||||
|
@ -161,7 +162,7 @@ void Amuencha::Model::worker::setup()
|
||||||
frequencies.resize(num_bins);
|
frequencies.resize(num_bins);
|
||||||
for (int b{0}; b < num_bins; ++b)
|
for (int b{0}; b < num_bins; ++b)
|
||||||
{
|
{
|
||||||
float bratio = (float)b / (num_bins - 1.);
|
float bratio = static_cast<float>(b / (num_bins - 1.));
|
||||||
frequencies[b] = exp2(log2_fmin + (log2_fmax - log2_fmin) * bratio);
|
frequencies[b] = exp2(log2_fmin + (log2_fmax - log2_fmin) * bratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,13 +201,13 @@ void Amuencha::Model::worker::setup()
|
||||||
if (i < window_size - 4)
|
if (i < window_size - 4)
|
||||||
{
|
{
|
||||||
v4sf tfs = {
|
v4sf tfs = {
|
||||||
(float)(i - window_size - 1) / sampling_rate,
|
(i - window_size - 1) / sampling_rate,
|
||||||
(float)(i + 1 - window_size - 1) / sampling_rate,
|
(i + 1 - window_size - 1) / sampling_rate,
|
||||||
(float)(i + 2 - window_size - 1) / sampling_rate,
|
(i + 2 - window_size - 1) / sampling_rate,
|
||||||
(float)(i + 3 - window_size - 1) / sampling_rate
|
(i + 3 - window_size - 1) / sampling_rate
|
||||||
};
|
};
|
||||||
|
|
||||||
tfs *= (float)(-two_pi * f);
|
tfs *= (-two_pi * f);
|
||||||
v4sf sin_tf, cos_tf;
|
v4sf sin_tf, cos_tf;
|
||||||
sincos_ps(tfs, &sin_tf, &cos_tf);
|
sincos_ps(tfs, &sin_tf, &cos_tf);
|
||||||
|
|
||||||
|
@ -224,7 +225,7 @@ void Amuencha::Model::worker::setup()
|
||||||
i += 4;
|
i += 4;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
float t = (float)(i - window_size - 1) / sampling_rate;
|
float t = (i - window_size - 1) / sampling_rate;
|
||||||
float re = cosf(-two_pi * t * f);
|
float re = cosf(-two_pi * t * f);
|
||||||
float im = sinf(-two_pi * t * f);
|
float im = sinf(-two_pi * t * f);
|
||||||
v4sf ws = {
|
v4sf ws = {
|
||||||
|
@ -250,7 +251,8 @@ void Amuencha::Model::worker::work()
|
||||||
{
|
{
|
||||||
// Solution with a wait condition + time
|
// Solution with a wait condition + time
|
||||||
// other possible solution = timer, but that would need to be stopped
|
// other possible solution = timer, but that would need to be stopped
|
||||||
mutex.lock();
|
std::unique_lock lk(mutex);
|
||||||
|
lk.lock();
|
||||||
|
|
||||||
// waiting_time is a mutex-protected info
|
// waiting_time is a mutex-protected info
|
||||||
waiting_time = CYCLE_PERIOD;
|
waiting_time = CYCLE_PERIOD;
|
||||||
|
@ -258,7 +260,7 @@ void Amuencha::Model::worker::work()
|
||||||
// loop starts with mutex locked
|
// loop starts with mutex locked
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
condition.wait_for(&mutex, waiting_time);
|
condition.wait_for(lk, std::chrono::milliseconds(waiting_time));
|
||||||
|
|
||||||
if (status == QUIT_NOW) break;
|
if (status == QUIT_NOW) break;
|
||||||
|
|
||||||
|
@ -270,7 +272,7 @@ void Amuencha::Model::worker::work()
|
||||||
vector<pair<float*, int>> chunks;
|
vector<pair<float*, int>> chunks;
|
||||||
chunks.swap(this->chunks);
|
chunks.swap(this->chunks);
|
||||||
status = NO_DATA; // will be updated if new data indeed arrives
|
status = NO_DATA; // will be updated if new data indeed arrives
|
||||||
mutex.unlock();
|
lk.unlock();
|
||||||
|
|
||||||
// Now, we can take the time to do the frequency computations
|
// Now, we can take the time to do the frequency computations
|
||||||
data_mutex.lock();
|
data_mutex.lock();
|
||||||
|
@ -329,7 +331,7 @@ void Amuencha::Model::worker::work()
|
||||||
data_mutex.unlock();
|
data_mutex.unlock();
|
||||||
|
|
||||||
// relock for the condition wait
|
// relock for the condition wait
|
||||||
mutex.lock();
|
lk.lock();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +339,7 @@ void Amuencha::Model::worker::work()
|
||||||
waiting_time = ULONG_MAX;
|
waiting_time = ULONG_MAX;
|
||||||
// keep the lock for next loop
|
// keep the lock for next loop
|
||||||
}
|
}
|
||||||
mutex.unlock();
|
lk.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Amuencha::Model::worker::invalidate_samples()
|
void Amuencha::Model::worker::invalidate_samples()
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <complex>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
#include <Amuencha/AmuenchaModel.hpp>
|
#include <Amuencha/AmuenchaModel.hpp>
|
||||||
|
@ -37,6 +36,8 @@ public:
|
||||||
worker();
|
worker();
|
||||||
~worker();
|
~worker();
|
||||||
|
|
||||||
|
void work();
|
||||||
|
|
||||||
void new_data(float *chunk, int size);
|
void new_data(float *chunk, int size);
|
||||||
|
|
||||||
// Called from DSP thread
|
// Called from DSP thread
|
||||||
|
|
Loading…
Add table
Reference in a new issue