mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2026-08-06 19:06:19 -04:00
Changed data transaction objects to use pointers
This commit is contained in:
+25
-11
@@ -45,7 +45,7 @@ void SDRPostThread::threadMain() {
|
||||
#ifdef __APPLE__
|
||||
pthread_t tID = pthread_self(); // ID of this thread
|
||||
int priority = sched_get_priority_max( SCHED_FIFO) - 1;
|
||||
sched_param prio = { priority }; // scheduling priority of thread
|
||||
sched_param prio = {priority}; // scheduling priority of thread
|
||||
pthread_setschedparam(tID, SCHED_FIFO, &prio);
|
||||
#endif
|
||||
|
||||
@@ -60,33 +60,39 @@ void SDRPostThread::threadMain() {
|
||||
|
||||
iqDataInQueue.load()->pop(data_in);
|
||||
|
||||
if (data_in.data.size()) {
|
||||
if (data_in.data && data_in.data->size()) {
|
||||
SDRThreadIQData dataOut;
|
||||
|
||||
dataOut.frequency = data_in.frequency;
|
||||
dataOut.bandwidth = data_in.bandwidth;
|
||||
dataOut.data = data_in.data;
|
||||
|
||||
for (int i = 0, iMax = dataOut.data.size() / 2; i < iMax; i++) {
|
||||
x.real = (float) dataOut.data[i * 2] / 127.0;
|
||||
x.imag = (float) dataOut.data[i * 2 + 1] / 127.0;
|
||||
for (int i = 0, iMax = dataOut.data->size() / 2; i < iMax; i++) {
|
||||
x.real = (float) (*dataOut.data)[i * 2] / 127.0;
|
||||
x.imag = (float) (*dataOut.data)[i * 2 + 1] / 127.0;
|
||||
|
||||
iirfilt_crcf_execute(dcFilter, x, &y);
|
||||
|
||||
dataOut.data[i * 2] = (signed char) floor(y.real * 127.0);
|
||||
dataOut.data[i * 2 + 1] = (signed char) floor(y.imag * 127.0);
|
||||
(*dataOut.data)[i * 2] = (signed char) floor(y.real * 127.0);
|
||||
(*dataOut.data)[i * 2 + 1] = (signed char) floor(y.imag * 127.0);
|
||||
}
|
||||
|
||||
if (iqDataOutQueue != NULL) {
|
||||
iqDataOutQueue.load()->push(dataOut);
|
||||
}
|
||||
|
||||
if (iqVisualQueue != NULL) {
|
||||
if (iqVisualQueue.load()->empty()) {
|
||||
iqVisualQueue.load()->push(dataOut);
|
||||
}
|
||||
if (iqVisualQueue != NULL && iqVisualQueue.load()->empty()) {
|
||||
SDRThreadIQData visualDataOut;
|
||||
visualDataOut.data = new std::vector<signed char>;
|
||||
visualDataOut.data->assign(dataOut.data->begin(), dataOut.data->begin() + (FFT_SIZE * 2));
|
||||
iqVisualQueue.load()->push(visualDataOut);
|
||||
}
|
||||
|
||||
std::atomic<int> *c = new std::atomic<int>;
|
||||
c->store(demodulators.size());
|
||||
|
||||
bool demodActive = false;
|
||||
|
||||
if (demodulators.size()) {
|
||||
DemodulatorThreadIQData dummyDataOut;
|
||||
dummyDataOut.frequency = data_in.frequency;
|
||||
@@ -94,6 +100,7 @@ void SDRPostThread::threadMain() {
|
||||
DemodulatorThreadIQData demodDataOut;
|
||||
demodDataOut.frequency = data_in.frequency;
|
||||
demodDataOut.bandwidth = data_in.bandwidth;
|
||||
demodDataOut.setRefCount(c);
|
||||
demodDataOut.data = data_in.data;
|
||||
|
||||
std::vector<DemodulatorInstance *>::iterator i;
|
||||
@@ -106,6 +113,7 @@ void SDRPostThread::threadMain() {
|
||||
if (demod->isActive()) {
|
||||
demod->setActive(false);
|
||||
demodQueue->push(dummyDataOut);
|
||||
c->store(c->load() - 1);
|
||||
continue;
|
||||
}
|
||||
} else if (!demod->isActive()) {
|
||||
@@ -113,8 +121,14 @@ void SDRPostThread::threadMain() {
|
||||
}
|
||||
|
||||
demodQueue->push(demodDataOut);
|
||||
demodActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!demodActive) {
|
||||
delete dataOut.data;
|
||||
delete c;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << "SDR post-processing thread done." << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user