mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2026-06-05 15:35:01 -04:00
Linux somewhat functional
This commit is contained in:
+8
-1
@@ -13,10 +13,17 @@ const char filePathSeparator =
|
||||
#ifdef __APPLE__
|
||||
#define BUF_SIZE (16384*2)
|
||||
#define DEFAULT_SAMPLE_RATE 2000000
|
||||
#else
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
#define BUF_SIZE (16384*6)
|
||||
#define DEFAULT_SAMPLE_RATE 2000000
|
||||
#endif
|
||||
|
||||
#ifndef BUF_SIZE
|
||||
#define BUF_SIZE (16384*5)
|
||||
#define DEFAULT_SAMPLE_RATE 2500000
|
||||
#endif
|
||||
|
||||
#define DEFAULT_FFT_SIZE 2048
|
||||
|
||||
#define DEFAULT_FREQ 100000000
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <algorithm>
|
||||
#include "DemodulatorThread.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
std::map<int, AudioThread *> AudioThread::deviceController;
|
||||
std::map<int, std::thread *> AudioThread::deviceThread;
|
||||
#endif
|
||||
@@ -12,18 +12,18 @@ std::map<int, std::thread *> AudioThread::deviceThread;
|
||||
AudioThread::AudioThread(AudioThreadInputQueue *inputQueue, DemodulatorThreadCommandQueue* threadQueueNotify) :
|
||||
currentInput(NULL), inputQueue(inputQueue), audioQueuePtr(0), underflowCount(0), terminated(false), active(false), outputDevice(-1), gain(
|
||||
1.0), threadQueueNotify(threadQueueNotify) {
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
boundThreads = new std::vector<AudioThread *>;
|
||||
#endif
|
||||
}
|
||||
|
||||
AudioThread::~AudioThread() {
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
delete boundThreads.load();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
void AudioThread::bindThread(AudioThread *other) {
|
||||
if (std::find(boundThreads.load()->begin(), boundThreads.load()->end(), other) == boundThreads.load()->end()) {
|
||||
boundThreads.load()->push_back(other);
|
||||
@@ -306,7 +306,7 @@ void AudioThread::setupDevice(int deviceId) {
|
||||
|
||||
try {
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
if (deviceController.find(outputDevice.load()) != deviceController.end()) {
|
||||
deviceController[outputDevice.load()]->removeThread(this);
|
||||
}
|
||||
@@ -388,12 +388,12 @@ void AudioThread::threadMain() {
|
||||
}
|
||||
}
|
||||
|
||||
#if !__APPLE__
|
||||
#if !USE_MIXER
|
||||
AudioThreadInput dummy;
|
||||
inputQueue->push(&dummy);
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
if (deviceController[parameters.deviceId] != this) {
|
||||
deviceController[parameters.deviceId]->removeThread(this);
|
||||
} else {
|
||||
@@ -440,7 +440,7 @@ bool AudioThread::isActive() {
|
||||
}
|
||||
|
||||
void AudioThread::setActive(bool state) {
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
AudioThreadInput *dummy;
|
||||
if (state && !active) {
|
||||
while (!inputQueue->empty()) { // flush queue
|
||||
|
||||
@@ -18,6 +18,14 @@
|
||||
#include "RtAudio.h"
|
||||
#include "DemodDefs.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define USE_MIXER 1
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#define USE_MIXER 1
|
||||
#endif
|
||||
|
||||
class AudioThreadInput: public ReferenceCounter {
|
||||
public:
|
||||
long long frequency;
|
||||
@@ -90,7 +98,7 @@ private:
|
||||
AudioThreadCommandQueue cmdQueue;
|
||||
DemodulatorThreadCommandQueue* threadQueueNotify;
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef USE_MIXER
|
||||
public:
|
||||
void bindThread(AudioThread *other);
|
||||
void removeThread(AudioThread *other);
|
||||
|
||||
@@ -54,11 +54,13 @@ void PrimaryGLContext::CheckGLError() {
|
||||
PrimaryGLContext::PrimaryGLContext(wxGLCanvas *canvas, wxGLContext *sharedContext) :
|
||||
wxGLContext(canvas, sharedContext) {
|
||||
SetCurrent(*canvas);
|
||||
#ifndef __linux__
|
||||
// Pre-load fonts
|
||||
for (int i = 0; i < GLFONT_MAX; i++) {
|
||||
getFont((GLFontSize) i);
|
||||
}
|
||||
CheckGLError();
|
||||
#endif
|
||||
}
|
||||
|
||||
GLFont &PrimaryGLContext::getFont(GLFontSize esize) {
|
||||
|
||||
@@ -20,23 +20,6 @@ void WaterfallContext::Setup(int fft_size_in, int num_waterfall_lines_in) {
|
||||
|
||||
waterfall_tex = new unsigned char[fft_size * waterfall_lines];
|
||||
memset(waterfall_tex, 0, fft_size * waterfall_lines);
|
||||
|
||||
glDisable(GL_CULL_FACE);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
|
||||
glGenTextures(1, &waterfall);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, waterfall);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
}
|
||||
|
||||
void WaterfallContext::refreshTheme() {
|
||||
@@ -51,6 +34,19 @@ void WaterfallContext::refreshTheme() {
|
||||
|
||||
void WaterfallContext::Draw(std::vector<float> &points) {
|
||||
|
||||
if (!waterfall) {
|
||||
glGenTextures(1, &waterfall);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, waterfall);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
}
|
||||
|
||||
if (activeTheme != ThemeMgr::mgr.currentTheme) {
|
||||
refreshTheme();
|
||||
activeTheme = ThemeMgr::mgr.currentTheme;
|
||||
|
||||
Reference in New Issue
Block a user