{
QPainter painter(this);
- float level_lufs;
+ float level_lufs[2];
{
unique_lock<mutex> lock(level_mutex);
- level_lufs = this->level_lufs;
+ level_lufs[0] = this->level_lufs[0];
+ level_lufs[1] = this->level_lufs[1];
}
- float level_lu = level_lufs - ref_level_lufs;
- int on_pos = lrint(lufs_to_pos(level_lu, height()));
+ int mid = width() / 2;
- if (flip) {
- QRect on_rect(0, 0, width(), height() - on_pos);
- QRect off_rect(0, height() - on_pos, width(), height());
+ for (unsigned channel = 0; channel < 2; ++channel) {
+ int left = (channel == 0) ? 0 : mid;
+ int right = (channel == 0) ? mid : width();
+ float level_lu = level_lufs[channel] - ref_level_lufs;
+ int on_pos = lrint(lufs_to_pos(level_lu, height()));
- painter.drawPixmap(on_rect, on_pixmap, on_rect);
- painter.drawPixmap(off_rect, off_pixmap, off_rect);
- } else {
- QRect off_rect(0, 0, width(), on_pos);
- QRect on_rect(0, on_pos, width(), height() - on_pos);
+ if (flip) {
+ QRect on_rect(left, 0, right, height() - on_pos);
+ QRect off_rect(left, height() - on_pos, right, height());
- painter.drawPixmap(off_rect, off_pixmap, off_rect);
- painter.drawPixmap(on_rect, on_pixmap, on_rect);
+ painter.drawPixmap(on_rect, on_pixmap, on_rect);
+ painter.drawPixmap(off_rect, off_pixmap, off_rect);
+ } else {
+ QRect off_rect(left, 0, right, on_pos);
+ QRect on_rect(left, on_pos, right, height() - on_pos);
+
+ painter.drawPixmap(off_rect, off_pixmap, off_rect);
+ painter.drawPixmap(on_rect, on_pixmap, on_rect);
+ }
}
}
VUMeter(QWidget *parent);
void set_level(float level_lufs) {
+ set_level(level_lufs, level_lufs);
+ }
+
+ void set_level(float level_lufs_left, float level_lufs_right) {
std::unique_lock<std::mutex> lock(level_mutex);
- this->level_lufs = level_lufs;
+ this->level_lufs[0] = level_lufs_left;
+ this->level_lufs[1] = level_lufs_right;
QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
}
void recalculate_pixmaps();
std::mutex level_mutex;
- float level_lufs = -HUGE_VAL;
+ float level_lufs[2] { -HUGE_VALF, -HUGE_VALF };
float min_level = -18.0f, max_level = 9.0f, ref_level_lufs = -23.0f;
bool flip = false;