mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-03 21:57:51 -04:00
Channel Analyzer: display trace max and average power. Interim state #2
This commit is contained in:
parent
ed6e078cff
commit
70700ee4dc
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
class DSPEngine;
|
class DSPEngine;
|
||||||
class ScopeVis;
|
class ScopeVis;
|
||||||
|
class QPainter;
|
||||||
|
|
||||||
class SDRANGEL_API GLScope: public QGLWidget {
|
class SDRANGEL_API GLScope: public QGLWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -124,18 +125,22 @@ private:
|
|||||||
QRectF m_glLeft2ScaleRect;
|
QRectF m_glLeft2ScaleRect;
|
||||||
QRectF m_glBot1ScaleRect;
|
QRectF m_glBot1ScaleRect;
|
||||||
QRectF m_glBot2ScaleRect;
|
QRectF m_glBot2ScaleRect;
|
||||||
|
QRectF m_glPowerOverlay1;
|
||||||
QPixmap m_left1ScalePixmap;
|
QPixmap m_left1ScalePixmap;
|
||||||
QPixmap m_left2ScalePixmap;
|
QPixmap m_left2ScalePixmap;
|
||||||
QPixmap m_bot1ScalePixmap;
|
QPixmap m_bot1ScalePixmap;
|
||||||
QPixmap m_bot2ScalePixmap;
|
QPixmap m_bot2ScalePixmap;
|
||||||
|
QPixmap m_powerOverlayPixmap1;
|
||||||
bool m_left1ScaleTextureAllocated;
|
bool m_left1ScaleTextureAllocated;
|
||||||
bool m_left2ScaleTextureAllocated;
|
bool m_left2ScaleTextureAllocated;
|
||||||
bool m_bot1ScaleTextureAllocated;
|
bool m_bot1ScaleTextureAllocated;
|
||||||
bool m_bot2ScaleTextureAllocated;
|
bool m_bot2ScaleTextureAllocated;
|
||||||
|
bool m_powerOverlayTextureAllocated1;
|
||||||
GLuint m_left1ScaleTexture;
|
GLuint m_left1ScaleTexture;
|
||||||
GLuint m_left2ScaleTexture;
|
GLuint m_left2ScaleTexture;
|
||||||
GLuint m_bot1ScaleTexture;
|
GLuint m_bot1ScaleTexture;
|
||||||
GLuint m_bot2ScaleTexture;
|
GLuint m_bot2ScaleTexture;
|
||||||
|
GLuint m_powerOverlayTexture1;
|
||||||
ScaleEngine m_x1Scale;
|
ScaleEngine m_x1Scale;
|
||||||
ScaleEngine m_x2Scale;
|
ScaleEngine m_x2Scale;
|
||||||
ScaleEngine m_y1Scale;
|
ScaleEngine m_y1Scale;
|
||||||
@ -149,7 +154,7 @@ private:
|
|||||||
|
|
||||||
void handleMode();
|
void handleMode();
|
||||||
void applyConfig();
|
void applyConfig();
|
||||||
void drawPowerOverlay();
|
void drawPowerOverlay(QPainter *painter);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void tick();
|
void tick();
|
||||||
|
@ -422,7 +422,9 @@ void GLScope::paintGL()
|
|||||||
{
|
{
|
||||||
if (m_nbPow > 0)
|
if (m_nbPow > 0)
|
||||||
{
|
{
|
||||||
qDebug("%.1f %.1f", 10.0f * log10f(m_maxPow), 10.0f * log10f(m_sumPow / m_nbPow));
|
QPainter painter(this);
|
||||||
|
drawPowerOverlay(&painter);
|
||||||
|
painter.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -805,9 +807,21 @@ void GLScope::handleMode()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLScope::drawPowerOverlay()
|
void GLScope::drawPowerOverlay(QPainter *painter)
|
||||||
{
|
{
|
||||||
|
//qDebug("%.1f %.1f", 10.0f * log10f(m_maxPow), 10.0f * log10f(m_sumPow / m_nbPow));
|
||||||
|
double maxPow = 10.0f * log10f(m_maxPow);
|
||||||
|
double avgPow = 10.0f * log10f(m_sumPow / m_nbPow);
|
||||||
|
double peakToAvgPow = maxPow - avgPow;
|
||||||
|
|
||||||
|
QString text("test");
|
||||||
|
|
||||||
|
QFontMetrics metrics = QFontMetrics(font());
|
||||||
|
QRect rect = metrics.boundingRect(0, 0, width(), int(height()*0.125), Qt::AlignLeft | Qt::TextWordWrap, text);
|
||||||
|
painter->setRenderHint(QPainter::TextAntialiasing);
|
||||||
|
painter->fillRect(QRect(0, 0, width(), rect.height()), QColor(0, 0, 0, 127));
|
||||||
|
painter->setPen(Qt::white);
|
||||||
|
painter->drawText(0, 0, rect.width(), rect.height(), Qt::AlignLeft | Qt::TextWordWrap, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLScope::applyConfig()
|
void GLScope::applyConfig()
|
||||||
@ -816,11 +830,14 @@ void GLScope::applyConfig()
|
|||||||
|
|
||||||
QFontMetrics fm(font());
|
QFontMetrics fm(font());
|
||||||
int M = fm.width("-");
|
int M = fm.width("-");
|
||||||
|
int H = fm.height();
|
||||||
|
|
||||||
int topMargin = 5;
|
int topMargin = 5;
|
||||||
int botMargin = 20;
|
int botMargin = 20;
|
||||||
int leftMargin = 35;
|
int leftMargin = 35;
|
||||||
int rightMargin = 5;
|
int rightMargin = 5;
|
||||||
|
int powerOverlayWidth = 20*M;
|
||||||
|
int powerOverlayHeight = 2*H;
|
||||||
|
|
||||||
float pow_floor = -100.0 + m_ofs * 100.0;
|
float pow_floor = -100.0 + m_ofs * 100.0;
|
||||||
float pow_range = 100.0 / m_amp;
|
float pow_range = 100.0 / m_amp;
|
||||||
@ -905,6 +922,12 @@ void GLScope::applyConfig()
|
|||||||
(float) scopeWidth / (float) width(),
|
(float) scopeWidth / (float) width(),
|
||||||
(float) (botMargin - 1) / (float) height()
|
(float) (botMargin - 1) / (float) height()
|
||||||
);
|
);
|
||||||
|
m_glPowerOverlay1 = QRectF(
|
||||||
|
(float) leftMargin / (float) width(),
|
||||||
|
(float) topMargin / (float) height(),
|
||||||
|
(float) powerOverlayWidth / (float) width(),
|
||||||
|
(float) powerOverlayHeight / (float) height()
|
||||||
|
);
|
||||||
|
|
||||||
{ // Y1 scale
|
{ // Y1 scale
|
||||||
m_y1Scale.setSize(scopeHeight);
|
m_y1Scale.setSize(scopeHeight);
|
||||||
@ -1090,6 +1113,12 @@ void GLScope::applyConfig()
|
|||||||
(float) scopeWidth / (float) width(),
|
(float) scopeWidth / (float) width(),
|
||||||
(float) (botMargin - 1) / (float) height()
|
(float) (botMargin - 1) / (float) height()
|
||||||
);
|
);
|
||||||
|
m_glPowerOverlay1 = QRectF(
|
||||||
|
(float) leftMargin / (float) width(),
|
||||||
|
(float) topMargin / (float) height(),
|
||||||
|
(float) powerOverlayWidth / (float) width(),
|
||||||
|
(float) powerOverlayHeight / (float) height()
|
||||||
|
);
|
||||||
|
|
||||||
{ // Y1 scale
|
{ // Y1 scale
|
||||||
m_y1Scale.setSize(scopeHeight);
|
m_y1Scale.setSize(scopeHeight);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user