]> git.sesse.net Git - nageru/blobdiff - vumeter.h
Replace the R128 meters for each channel with a digital peak meter.
[nageru] / vumeter.h
index 341f60fb3d8c4a49716f3a6c388fdccb27e58961..9b17f43d2c7c2c81fd9d9c4487303045499b5189 100644 (file)
--- a/vumeter.h
+++ b/vumeter.h
@@ -17,8 +17,24 @@ public:
        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[0] = level_lufs_left;
+               this->level_lufs[1] = level_lufs_right;
+               QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
+       }
+
+       void set_peak(float peak_lufs) {
+               set_peak(peak_lufs, peak_lufs);
+       }
+
+       void set_peak(float peak_lufs_left, float peak_lufs_right) {
                std::unique_lock<std::mutex> lock(level_mutex);
-               this->level_lufs = level_lufs;
+               this->peak_lufs[0] = peak_lufs_left;
+               this->peak_lufs[1] = peak_lufs_right;
                QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
        }
 
@@ -44,16 +60,24 @@ public:
                this->ref_level_lufs = ref_level_lufs;
        }
 
+       void set_flip(bool flip)
+       {
+               this->flip = flip;
+               recalculate_pixmaps();
+       }
+
 private:
        void resizeEvent(QResizeEvent *event) override;
        void paintEvent(QPaintEvent *event) override;
        void recalculate_pixmaps();
 
        std::mutex level_mutex;
-       float level_lufs = -HUGE_VAL;
+       float level_lufs[2] { -HUGE_VALF, -HUGE_VALF };
+       float peak_lufs[2] { -HUGE_VALF, -HUGE_VALF };
        float min_level = -18.0f, max_level = 9.0f, ref_level_lufs = -23.0f;
+       bool flip = false;
 
-       QPixmap on_pixmap, off_pixmap;
+       QPixmap full_on_pixmap, on_pixmap, off_pixmap;
 };
 
 #endif