diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp
index e3eecc3e9..cea17c719 100644
--- a/plugins/channelrx/demoddsd/dsddemod.cpp
+++ b/plugins/channelrx/demoddsd/dsddemod.cpp
@@ -206,7 +206,7 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
if (m_settings.m_syncOrConstellation)
{
- Sample s(sample, m_dsdDecoder.getSymbolSyncSample() * m_scaleFromShort);
+ Sample s(sample, m_dsdDecoder.getSymbolSyncSample() * m_scaleFromShort * 0.84);
m_scopeSampleBuffer.push_back(s);
}
else
diff --git a/plugins/channelrx/demoddsd/dsddemodgui.cpp b/plugins/channelrx/demoddsd/dsddemodgui.cpp
index a509e3201..166e039a9 100644
--- a/plugins/channelrx/demoddsd/dsddemodgui.cpp
+++ b/plugins/channelrx/demoddsd/dsddemodgui.cpp
@@ -162,6 +162,13 @@ void DSDDemodGUI::on_syncOrConstellation_toggled(bool checked)
applySettings();
}
+void DSDDemodGUI::on_traceLength_valueChanged(int value)
+{
+ m_settings.m_traceLengthMutliplier = value;
+ ui->traceLengthText->setText(QString("%1").arg(m_settings.m_traceLengthMutliplier*50));
+ m_scopeVisXY->setPixelsPerFrame(m_settings.m_traceLengthMutliplier*960); // 48000 / 50. Chunks of 50 ms.
+}
+
void DSDDemodGUI::on_slot1On_toggled(bool checked)
{
m_settings.m_slot1On = checked;
@@ -412,6 +419,9 @@ void DSDDemodGUI::displaySettings()
}
ui->baudRate->setCurrentIndex(DSDDemodBaudRates::getRateIndex(m_settings.m_baudRate));
+ ui->traceLength->setValue(m_settings.m_traceLengthMutliplier);
+ ui->traceLengthText->setText(QString("%1").arg(m_settings.m_traceLengthMutliplier*50));
+ m_scopeVisXY->setPixelsPerFrame(m_settings.m_traceLengthMutliplier*960); // 48000 / 50. Chunks of 50 ms.
blockApplySettings(false);
}
diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h
index ea2669e6f..4a739ec6f 100644
--- a/plugins/channelrx/demoddsd/dsddemodgui.h
+++ b/plugins/channelrx/demoddsd/dsddemodgui.h
@@ -119,6 +119,7 @@ private slots:
void on_baudRate_currentIndexChanged(int index);
void on_enableCosineFiltering_toggled(bool enable);
void on_syncOrConstellation_toggled(bool checked);
+ void on_traceLength_valueChanged(int value);
void on_slot1On_toggled(bool checked);
void on_slot2On_toggled(bool checked);
void on_tdmaStereoSplit_toggled(bool checked);
diff --git a/plugins/channelrx/demoddsd/dsddemodgui.ui b/plugins/channelrx/demoddsd/dsddemodgui.ui
index 3c8758fb0..aa0e91f2b 100644
--- a/plugins/channelrx/demoddsd/dsddemodgui.ui
+++ b/plugins/channelrx/demoddsd/dsddemodgui.ui
@@ -62,7 +62,16 @@
3
-
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
2
-
@@ -158,15 +167,15 @@
-
-
+
- 35
+ 40
0
- 0.00
+ 00.0k
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -554,10 +563,19 @@
- Discriminator Scope
+ Digital
-
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
2
-
@@ -846,7 +864,7 @@
50
- 105
+ 107
115
16
@@ -919,7 +937,7 @@
50
- 135
+ 137
115
16
@@ -949,32 +967,10 @@
Qt::Horizontal
-
-
-
- 180
- 130
- 40
- 30
-
-
-
-
- 40
- 0
-
-
-
- 00.0k
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- 40
+ 140
70
23
22
@@ -998,7 +994,7 @@
- 70
+ 170
70
23
22
@@ -1022,7 +1018,7 @@
- 100
+ 200
70
23
22
@@ -1043,6 +1039,78 @@
true
+
+
+
+ 40
+ 68
+ 24
+ 24
+
+
+
+
+ 24
+ 24
+
+
+
+ Display trace length (ms)
+
+
+ 1
+
+
+ 30
+
+
+ 1
+
+
+ 5
+
+
+
+
+
+ 70
+ 73
+ 31
+ 16
+
+
+
+ Display trace length (ms)
+
+
+ 0000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ 180
+ 130
+ 40
+ 29
+
+
+
+
+ 35
+ 0
+
+
+
+ 0.00
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.cpp b/plugins/channelrx/demoddsd/dsddemodsettings.cpp
index bd0d23c91..335c38654 100644
--- a/plugins/channelrx/demoddsd/dsddemodsettings.cpp
+++ b/plugins/channelrx/demoddsd/dsddemodsettings.cpp
@@ -53,6 +53,7 @@ void DSDDemodSettings::resetToDefaults()
m_rgbColor = QColor(0, 255, 255).rgb();
m_title = "DSD Demodulator";
m_highPassFilter = false;
+ m_traceLengthMutliplier = 5; // 250 ms
}
QByteArray DSDDemodSettings::serialize() const
@@ -85,6 +86,7 @@ QByteArray DSDDemodSettings::serialize() const
s.writeString(18, m_title);
s.writeBool(19, m_highPassFilter);
s.writeBool(20, m_copyAudioUseRTP);
+ s.writeS32(21, m_traceLengthMutliplier);
return s.final();
}
@@ -139,6 +141,8 @@ bool DSDDemodSettings::deserialize(const QByteArray& data)
d.readString(18, &m_title, "DSD Demodulator");
d.readBool(19, &m_highPassFilter, false);
d.readBool(20, &m_copyAudioUseRTP, false);
+ d.readS32(21, &tmp, 5);
+ m_traceLengthMutliplier = tmp < 1 ? 1 : tmp > 30 ? 30 : tmp;
return true;
}
diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.h b/plugins/channelrx/demoddsd/dsddemodsettings.h
index 58cb08c65..26093c700 100644
--- a/plugins/channelrx/demoddsd/dsddemodsettings.h
+++ b/plugins/channelrx/demoddsd/dsddemodsettings.h
@@ -46,6 +46,7 @@ struct DSDDemodSettings
quint32 m_rgbColor;
QString m_title;
bool m_highPassFilter;
+ int m_traceLengthMutliplier; // x 50ms
Serializable *m_channelMarker;
Serializable *m_scopeGUI;
diff --git a/sdrgui/dsp/scopevisxy.cpp b/sdrgui/dsp/scopevisxy.cpp
index 2758417e5..e856f2608 100644
--- a/sdrgui/dsp/scopevisxy.cpp
+++ b/sdrgui/dsp/scopevisxy.cpp
@@ -52,14 +52,14 @@ void ScopeVisXY::feed(const SampleVector::const_iterator& cbegin, const SampleVe
col = col < 0 ? 0 : col >= m_cols ? m_cols-1 : col;
m_tvScreen->selectRow(row);
- m_tvScreen->setDataColor(col, qRed(m_plotRGB), qGreen(m_plotRGB), qBlue(m_plotRGB));
+ m_tvScreen->setDataColor(col, qRed(m_plotRGB), qGreen(m_plotRGB), qBlue(m_plotRGB), 128); // FIXME: alpha does not work
m_pixelCount++;
if (m_pixelCount == m_pixelsPerFrame)
{
drawGraticule();
m_tvScreen->renderImage(0);
- usleep(10000);
+ usleep(50000);
m_tvScreen->getSize(m_cols, m_rows);
m_tvScreen->resetImage();
m_pixelCount = 0;
diff --git a/sdrgui/dsp/scopevisxy.h b/sdrgui/dsp/scopevisxy.h
index bea51e3c5..e9b22f001 100644
--- a/sdrgui/dsp/scopevisxy.h
+++ b/sdrgui/dsp/scopevisxy.h
@@ -39,7 +39,11 @@ public:
virtual bool handleMessage(const Message& message);
void setScale(float scale) { m_scale = scale; }
- void setPixelsPerFrame(int pixelsPerFrame) { m_pixelsPerFrame = pixelsPerFrame; }
+
+ void setPixelsPerFrame(int pixelsPerFrame) {
+ m_pixelsPerFrame = pixelsPerFrame;
+ m_pixelCount = 0;
+ }
void setPlotRGB(const QRgb& plotRGB) { m_plotRGB = plotRGB; }
void setGridRGB(const QRgb& gridRGB) { m_gridRGB = gridRGB; }
diff --git a/sdrgui/gui/glshadertvarray.cpp b/sdrgui/gui/glshadertvarray.cpp
index b0a45c190..22edc0ed5 100644
--- a/sdrgui/gui/glshadertvarray.cpp
+++ b/sdrgui/gui/glshadertvarray.cpp
@@ -45,7 +45,6 @@ GLShaderTVArray::GLShaderTVArray(bool blnColor) : m_blnColor(blnColor)
m_objCurrentRow = 0;
m_objTextureLoc = 0;
- m_objColorLoc = 0;
m_objMatrixLoc = 0;
}
@@ -100,7 +99,6 @@ void GLShaderTVArray::InitializeGL(int intCols, int intRows)
m_objMatrixLoc = m_objProgram->uniformLocation("uMatrix");
m_objTextureLoc = m_objProgram->uniformLocation("uTexture");
- m_objColorLoc = m_objProgram->uniformLocation("uColour");
if (m_objTexture != 0)
{
@@ -113,6 +111,7 @@ void GLShaderTVArray::InitializeGL(int intCols, int intRows)
m_objImage->fill(QColor(0, 0, 0));
m_objTexture = new QOpenGLTexture(*m_objImage);
+ m_objTexture->setFormat(QOpenGLTexture::RGBA8_UNorm);
m_objTexture->setMinificationFilter(QOpenGLTexture::Linear);
m_objTexture->setMagnificationFilter(QOpenGLTexture::Linear);
m_objTexture->setWrapMode(QOpenGLTexture::ClampToEdge);
@@ -210,6 +209,9 @@ void GLShaderTVArray::RenderPixels(unsigned char *chrData)
m_objProgram->setUniformValue(m_objMatrixLoc, objQMatrix);
m_objProgram->setUniformValue(m_objTextureLoc, 0);
+ ptrF->glClear(GL_COLOR_BUFFER_BIT);
+ ptrF->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ ptrF->glEnable(GL_BLEND);
m_objTexture->bind();
diff --git a/sdrgui/gui/glshadertvarray.h b/sdrgui/gui/glshadertvarray.h
index 408a62ef4..706401b53 100644
--- a/sdrgui/gui/glshadertvarray.h
+++ b/sdrgui/gui/glshadertvarray.h
@@ -60,7 +60,7 @@ protected:
QOpenGLShaderProgram *m_objProgram;
int m_objMatrixLoc;
int m_objTextureLoc;
- int m_objColorLoc;
+ //int m_objColorLoc;
static const QString m_strVertexShaderSourceArray;
static const QString m_strFragmentShaderSourceColored;
diff --git a/sdrgui/gui/tvscreen.cpp b/sdrgui/gui/tvscreen.cpp
index 729421a06..d00c17824 100644
--- a/sdrgui/gui/tvscreen.cpp
+++ b/sdrgui/gui/tvscreen.cpp
@@ -225,3 +225,15 @@ bool TVScreen::setDataColor(int intCol, int intRed, int intGreen, int intBlue)
return false;
}
}
+
+bool TVScreen::setDataColor(int intCol, int intRed, int intGreen, int intBlue, int intAlpha)
+{
+ if (m_blnGLContextInitialized)
+ {
+ return m_objGLShaderArray.SetDataColor(intCol, qRgba(intBlue, intGreen, intRed, intAlpha)); // FIXME: blue <> red inversion in shader
+ }
+ else
+ {
+ return false;
+ }
+}
diff --git a/sdrgui/gui/tvscreen.h b/sdrgui/gui/tvscreen.h
index da19c653d..1a3926990 100644
--- a/sdrgui/gui/tvscreen.h
+++ b/sdrgui/gui/tvscreen.h
@@ -52,7 +52,8 @@ public:
void resetImage();
bool selectRow(int intLine);
- bool setDataColor(int intCol,int intRed, int intGreen, int intBlue);
+ bool setDataColor(int intCol, int intRed, int intGreen, int intBlue);
+ bool setDataColor(int intCol, int intRed, int intGreen, int intBlue, int intAlpha);
void setRenderImmediate(bool blnRenderImmediate) { m_blnRenderImmediate = blnRenderImmediate; }
void connectTimer(const QTimer& timer);