From 6109be8eebe318cd0d597d19b4fa68331ca238e6 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 11 Mar 2018 17:11:02 +0100 Subject: [PATCH] Unify TV screen (4) --- plugins/channelrx/demodatv/CMakeLists.txt | 3 - plugins/channelrx/demodatv/atvdemod.cpp | 12 +- plugins/channelrx/demodatv/atvdemod.h | 24 +- plugins/channelrx/demodatv/atvdemodgui.cpp | 2 +- plugins/channelrx/demodatv/atvdemodgui.ui | 16 +- plugins/channelrx/demodatv/atvscreen.cpp | 209 ------------------ plugins/channelrx/demodatv/atvscreen.h | 96 -------- .../channelrx/demodatv/atvscreeninterface.h | 46 ---- plugins/channelrx/demodatv/demodatv.pro | 7 +- 9 files changed, 29 insertions(+), 386 deletions(-) delete mode 100644 plugins/channelrx/demodatv/atvscreen.cpp delete mode 100644 plugins/channelrx/demodatv/atvscreen.h delete mode 100644 plugins/channelrx/demodatv/atvscreeninterface.h diff --git a/plugins/channelrx/demodatv/CMakeLists.txt b/plugins/channelrx/demodatv/CMakeLists.txt index 83ac99570..5683fbbad 100644 --- a/plugins/channelrx/demodatv/CMakeLists.txt +++ b/plugins/channelrx/demodatv/CMakeLists.txt @@ -5,7 +5,6 @@ set(atv_SOURCES atvdemodsettings.cpp atvdemodgui.cpp atvdemodplugin.cpp - atvscreen.cpp ) set(atv_HEADERS @@ -13,8 +12,6 @@ set(atv_HEADERS atvdemodsettings.h atvdemodgui.h atvdemodplugin.h - atvscreen.h - atvscreeninterface.h ) set(atv_FORMS diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 6855fd210..64b67cc71 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -42,7 +42,7 @@ ATVDemod::ATVDemod(DeviceSourceAPI *deviceAPI) : ChannelSinkAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_scopeSink(0), - m_registeredATVScreen(0), + m_registeredTVScreen(0), m_intNumberSamplePerTop(0), m_intImageIndex(0), m_intSynchroPoints(0), @@ -103,9 +103,9 @@ ATVDemod::~ATVDemod() delete m_channelizer; } -void ATVDemod::setATVScreen(ATVScreenInterface *objScreen) +void ATVDemod::setTVScreen(TVScreen *objScreen) { - m_registeredATVScreen = objScreen; + m_registeredTVScreen = objScreen; } void ATVDemod::configure( @@ -607,10 +607,10 @@ void ATVDemod::applySettings() m_configPrivate.m_intNumberSamplePerLine = (int) (m_config.m_fltLineDuration * m_config.m_intSampleRate); m_intNumberSamplePerTop = (int) (m_config.m_fltTopDuration * m_config.m_intSampleRate); - if (m_registeredATVScreen) + if (m_registeredTVScreen) { - m_registeredATVScreen->setRenderImmediate(!(m_config.m_fltFramePerS > 25.0f)); - m_registeredATVScreen->resizeATVScreen( + //m_registeredTVScreen->setRenderImmediate(!(m_config.m_fltFramePerS > 25.0f)); + m_registeredTVScreen->resizeTVScreen( m_configPrivate.m_intNumberSamplePerLine - m_intNumberSamplePerLineSignals, m_intNumberOfLines - m_intNumberOfBlackLines); } diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 22d348392..419c92623 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -37,7 +37,7 @@ #include "dsp/phasediscri.h" #include "audio/audiofifo.h" #include "util/message.h" -#include "atvscreeninterface.h" +#include "gui/tvscreen.h" class DeviceSourceAPI; class ThreadedBasebandSampleSink; @@ -231,7 +231,7 @@ public: virtual QByteArray serialize() const { return QByteArray(); } virtual bool deserialize(const QByteArray& data __attribute__((unused))) { return false; } - void setATVScreen(ATVScreenInterface *objScreen); + void setTVScreen(TVScreen *objScreen); int getSampleRate(); int getEffectiveSampleRate(); double getMagSq() const { return m_objMagSqAverage; } //!< Beware this is scaled to 2^30 @@ -413,7 +413,7 @@ private: SampleVector m_scopeSampleBuffer; //*************** ATV PARAMETERS *************** - ATVScreenInterface * m_registeredATVScreen; + TVScreen *m_registeredTVScreen; //int m_intNumberSamplePerLine; int m_intNumberSamplePerTop; @@ -497,7 +497,7 @@ private: inline void processHSkip(float& fltVal, int& intVal) { - m_registeredATVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop, intVal, intVal, intVal); + m_registeredTVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop, intVal, intVal, intVal); // Horizontal Synchro detection @@ -522,7 +522,7 @@ private: { //qDebug("VSync: %d %d %d", m_intColIndex, m_intSampleIndex, m_intLineIndex); m_intAvgColIndex = m_intColIndex; - m_registeredATVScreen->renderImage(0); + m_registeredTVScreen->renderImage(0); m_intImageIndex++; m_intLineIndex = 0; @@ -570,7 +570,7 @@ private: m_fltEffMax = -2000000.0f; } - m_registeredATVScreen->selectRow(m_intRowIndex); + m_registeredTVScreen->selectRow(m_intRowIndex); m_intLineIndex++; m_intRowIndex++; } @@ -658,7 +658,7 @@ private: if (m_intRowIndex < m_intNumberOfLines) { - m_registeredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines); + m_registeredTVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines); } m_intLineIndex++; @@ -667,7 +667,7 @@ private: // Filling pixels // +4 is to compensate shift due to hsync amortizing factor of 1/4 - m_registeredATVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop + 4, intVal, intVal, intVal); + m_registeredTVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop + 4, intVal, intVal, intVal); m_intColIndex++; // Vertical sync and image rendering @@ -686,7 +686,7 @@ private: if ((m_intLineIndex % 2 == 0) || !m_interleaved) // even => odd image { - m_registeredATVScreen->renderImage(0); + m_registeredTVScreen->renderImage(0); m_intRowIndex = 1; } else @@ -694,7 +694,7 @@ private: m_intRowIndex = 0; } - m_registeredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines); + m_registeredTVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines); m_intLineIndex = 0; m_intImageIndex++; } @@ -711,7 +711,7 @@ private: { if (m_intImageIndex % 2 == 1) // odd image { - m_registeredATVScreen->renderImage(0); + m_registeredTVScreen->renderImage(0); if (m_rfRunning.m_enmModulation == ATV_AM) { @@ -736,7 +736,7 @@ private: m_intRowIndex = 0; } - m_registeredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines); + m_registeredTVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines); m_intLineIndex = 0; m_intImageIndex++; } diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index c794eb420..c96727ec7 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -285,7 +285,7 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base m_atvDemod = (ATVDemod*) rxChannel; //new ATVDemod(m_deviceUISet->m_deviceSourceAPI); m_atvDemod->setMessageQueueToGUI(getInputMessageQueue()); m_atvDemod->setScopeSink(m_scopeVis); - m_atvDemod->setATVScreen(ui->screenTV); + m_atvDemod->setTVScreen(ui->screenTV); ui->glScope->connectTimer(MainWindow::getInstance()->getMasterTimer()); connect(&MainWindow::getInstance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); // 50 ms diff --git a/plugins/channelrx/demodatv/atvdemodgui.ui b/plugins/channelrx/demodatv/atvdemodgui.ui index 0f4b2d106..84dd0db70 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.ui +++ b/plugins/channelrx/demodatv/atvdemodgui.ui @@ -1011,7 +1011,7 @@ QTabWidget::West - 1 + 0 @@ -1037,7 +1037,7 @@ QLayout::SetMinimumSize - + 0 @@ -1116,12 +1116,6 @@ QToolButton
gui/buttonswitch.h
- - ATVScreen - QWidget -
atvscreen.h
- 1 -
GLScopeNG QWidget @@ -1140,6 +1134,12 @@
gui/valuedialz.h
1
+ + TVScreen + QWidget +
gui/tvscreen.h
+ 1 +
diff --git a/plugins/channelrx/demodatv/atvscreen.cpp b/plugins/channelrx/demodatv/atvscreen.cpp deleted file mode 100644 index 7e4b72c58..000000000 --- a/plugins/channelrx/demodatv/atvscreen.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017 F4HKW // -// for F4EXB / SDRAngel // -// // -// OpenGL interface modernization. // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include "atvscreen.h" - -#include -#include - -ATVScreen::ATVScreen(QWidget* parent) : - QGLWidget(parent), ATVScreenInterface(), m_objMutex(QMutex::NonRecursive), m_objGLShaderArray(false) -{ - setAttribute(Qt::WA_OpaquePaintEvent); - connect(&m_objTimer, SIGNAL(timeout()), this, SLOT(tick())); - m_objTimer.start(40); // capped at 25 FPS - - m_chrLastData = NULL; - m_blnConfigChanged = false; - m_blnDataChanged = false; - m_blnGLContextInitialized = false; - - //Par défaut - m_intAskedCols = ATV_COLS; - m_intAskedRows = ATV_ROWS; -} - -ATVScreen::~ATVScreen() -{ - cleanup(); -} - -QRgb* ATVScreen::getRowBuffer(int intRow) -{ - if (m_blnGLContextInitialized == false) - { - return NULL; - } - - return m_objGLShaderArray.GetRowBuffer(intRow); -} - -void ATVScreen::renderImage(unsigned char * objData) -{ - m_chrLastData = objData; - m_blnDataChanged = true; - if (m_blnRenderImmediate) update(); -} - -void ATVScreen::resetImage() -{ - m_objGLShaderArray.ResetPixels(); -} - -void ATVScreen::resizeATVScreen(int intCols, int intRows) -{ - m_intAskedCols = intCols; - m_intAskedRows = intRows; -} - -void ATVScreen::initializeGL() -{ - m_objMutex.lock(); - - QOpenGLContext *objGlCurrentContext = QOpenGLContext::currentContext(); - - if (objGlCurrentContext) - { - if (QOpenGLContext::currentContext()->isValid()) - { - qDebug() << "ATVScreen::initializeGL: context:" - << " major: " << (QOpenGLContext::currentContext()->format()).majorVersion() - << " minor: " << (QOpenGLContext::currentContext()->format()).minorVersion() - << " ES: " << (QOpenGLContext::currentContext()->isOpenGLES() ? "yes" : "no"); - } - else - { - qDebug() << "ATVScreen::initializeGL: current context is invalid"; - } - } - else - { - qCritical() << "ATVScreen::initializeGL: no current context"; - return; - } - - QSurface *objSurface = objGlCurrentContext->surface(); - - if (objSurface == NULL) - { - qCritical() << "ATVScreen::initializeGL: no surface attached"; - return; - } - else - { - if (objSurface->surfaceType() != QSurface::OpenGLSurface) - { - qCritical() << "ATVScreen::initializeGL: surface is not an OpenGLSurface: " - << objSurface->surfaceType() - << " cannot use an OpenGL context"; - return; - } - else - { - qDebug() << "ATVScreen::initializeGL: OpenGL surface:" - << " class: " << (objSurface->surfaceClass() == QSurface::Window ? "Window" : "Offscreen"); - } - } - - connect(objGlCurrentContext, &QOpenGLContext::aboutToBeDestroyed, this, - &ATVScreen::cleanup); // TODO: when migrating to QOpenGLWidget - - m_blnGLContextInitialized = true; - - m_objMutex.unlock(); -} - -void ATVScreen::resizeGL(int intWidth, int intHeight) -{ - QOpenGLFunctions *ptrF = QOpenGLContext::currentContext()->functions(); - ptrF->glViewport(0, 0, intWidth, intHeight); - m_blnConfigChanged = true; -} - -void ATVScreen::paintGL() -{ - if (!m_objMutex.tryLock(2)) - return; - - m_blnDataChanged = false; - - if ((m_intAskedCols != 0) && (m_intAskedRows != 0)) - { - m_objGLShaderArray.InitializeGL(m_intAskedCols, m_intAskedRows); - m_intAskedCols = 0; - m_intAskedRows = 0; - } - - m_objGLShaderArray.RenderPixels(m_chrLastData); - - m_objMutex.unlock(); -} - -void ATVScreen::mousePressEvent(QMouseEvent* event __attribute__((unused))) -{ -} - -void ATVScreen::tick() -{ - if (m_blnDataChanged) { - update(); - } -} - -void ATVScreen::connectTimer(const QTimer& objTimer) -{ - qDebug() << "ATVScreen::connectTimer"; - disconnect(&m_objTimer, SIGNAL(timeout()), this, SLOT(tick())); - connect(&objTimer, SIGNAL(timeout()), this, SLOT(tick())); - m_objTimer.stop(); -} - -void ATVScreen::cleanup() -{ - if (m_blnGLContextInitialized) - { - m_objGLShaderArray.Cleanup(); - } -} - -bool ATVScreen::selectRow(int intLine) -{ - if (m_blnGLContextInitialized) - { - return m_objGLShaderArray.SelectRow(intLine); - } - - return false; -} - -bool ATVScreen::setDataColor(int intCol, int intRed, int intGreen, int intBlue) -{ - if (m_blnGLContextInitialized) - { - return m_objGLShaderArray.SetDataColor(intCol, - qRgb(intRed, intGreen, intBlue)); - } - - return false; -} diff --git a/plugins/channelrx/demodatv/atvscreen.h b/plugins/channelrx/demodatv/atvscreen.h deleted file mode 100644 index 7b64a3e36..000000000 --- a/plugins/channelrx/demodatv/atvscreen.h +++ /dev/null @@ -1,96 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017 F4HKW // -// for F4EXB / SDRAngel // -// // -// OpenGL interface modernization. // -// See: http://doc.qt.io/qt-5/qopenglshaderprogram.html // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDE_ATVSCREEN_H -#define INCLUDE_ATVSCREEN_H - -#include -#include -#include -#include -#include -#include -#include "dsp/dsptypes.h" -#include "gui/glshadertextured.h" -#include "gui/glshadertvarray.h" -#include "util/export.h" -#include "util/bitfieldindex.h" - -#include "atvscreeninterface.h" - -class QPainter; - - - -class ATVScreen: public QGLWidget, public ATVScreenInterface -{ - Q_OBJECT - -public: - - ATVScreen(QWidget* parent = NULL); - virtual ~ATVScreen(); - - virtual void resizeATVScreen(int intCols, int intRows); - virtual void renderImage(unsigned char * objData); - QRgb* getRowBuffer(int intRow); - void resetImage(); - - virtual bool selectRow(int intLine); - virtual bool setDataColor(int intCol,int intRed, int intGreen, int intBlue); - - void connectTimer(const QTimer& timer); - - //Valeurs par défaut - static const int ATV_COLS=192; - static const int ATV_ROWS=625; - -signals: - void traceSizeChanged(int); - void sampleRateChanged(int); - -private: - bool m_blnGLContextInitialized; - int m_intAskedCols; - int m_intAskedRows; - - - // state - QTimer m_objTimer; - QMutex m_objMutex; - bool m_blnDataChanged; - bool m_blnConfigChanged; - - GLShaderTVArray m_objGLShaderArray; - - void initializeGL(); - void resizeGL(int width, int height); - void paintGL(); - - void mousePressEvent(QMouseEvent*); - - unsigned char *m_chrLastData; - -protected slots: - void cleanup(); - void tick(); -}; - -#endif // INCLUDE_ATVSCREEN_H diff --git a/plugins/channelrx/demodatv/atvscreeninterface.h b/plugins/channelrx/demodatv/atvscreeninterface.h deleted file mode 100644 index 3a16c59aa..000000000 --- a/plugins/channelrx/demodatv/atvscreeninterface.h +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017 F4HKW // -// for F4EXB / SDRAngel // -// // -// OpenGL interface modernization. // -// See: http://doc.qt.io/qt-5/qopenglshaderprogram.html // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef PLUGINS_CHANNELRX_DEMODATV_ATVSCREENINTERFACE_H_ -#define PLUGINS_CHANNELRX_DEMODATV_ATVSCREENINTERFACE_H_ - -class ATVScreenInterface -{ -public: - ATVScreenInterface() : - m_blnRenderImmediate(false) - {} - - virtual ~ATVScreenInterface() {} - - virtual void resizeATVScreen(int intCols __attribute__((unused)), int intRows __attribute__((unused))) {} - virtual void renderImage(unsigned char * objData __attribute__((unused))) {} - virtual bool selectRow(int intLine __attribute__((unused))) { return false; } - virtual bool setDataColor(int intCol __attribute__((unused)), int intRed __attribute__((unused)), int intGreen __attribute__((unused)), int intBlue __attribute__((unused))) { return false; } - void setRenderImmediate(bool blnRenderImmediate) { m_blnRenderImmediate = blnRenderImmediate; } - -protected: - bool m_blnRenderImmediate; - -}; - - - -#endif /* PLUGINS_CHANNELRX_DEMODATV_ATVSCREENINTERFACE_H_ */ diff --git a/plugins/channelrx/demodatv/demodatv.pro b/plugins/channelrx/demodatv/demodatv.pro index 6d9f6d146..1b7811c02 100644 --- a/plugins/channelrx/demodatv/demodatv.pro +++ b/plugins/channelrx/demodatv/demodatv.pro @@ -31,14 +31,11 @@ CONFIG(macx):INCLUDEPATH += "../../../../../boost_1_64_0" SOURCES += atvdemod.cpp\ atvdemodgui.cpp\ - atvdemodplugin.cpp\ - atvscreen.cpp + atvdemodplugin.cpp HEADERS += atvdemod.h\ atvdemodgui.h\ - atvdemodplugin.h\ - atvscreen.h\ - atvscreeninterface.h + atvdemodplugin.h FORMS += atvdemodgui.ui