X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=vumeter.h;h=9b17f43d2c7c2c81fd9d9c4487303045499b5189;hb=54067dbc70999d936adf9d263b5ff2b1efb4dfd0;hp=f9be2920493667e2053ddb2e954d521b21226eed;hpb=94c0099fc26cb9c55c2a9a1436a3e8f740a4bb8a;p=nageru diff --git a/vumeter.h b/vumeter.h index f9be292..9b17f43 100644 --- a/vumeter.h +++ b/vumeter.h @@ -1,11 +1,14 @@ #ifndef VUMETER_H #define VUMETER_H -#include +#include +#include #include - +#include #include +#include "vu_common.h" + class VUMeter : public QWidget { Q_OBJECT @@ -14,18 +17,67 @@ 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 lock(level_mutex); - this->level_lufs = level_lufs; - update(); + 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 lock(level_mutex); + this->peak_lufs[0] = peak_lufs_left; + this->peak_lufs[1] = peak_lufs_right; + QMetaObject::invokeMethod(this, "update", Qt::AutoConnection); + } + + double lufs_to_pos(float level_lu, int height) + { + return ::lufs_to_pos(level_lu, height, min_level, max_level); + } + + void set_min_level(float min_level) + { + this->min_level = min_level; + recalculate_pixmaps(); + } + + void set_max_level(float max_level) + { + this->max_level = max_level; + recalculate_pixmaps(); + } + + void set_ref_level(float ref_level_lufs) + { + 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; -extern VUMeter *global_vu_meter; + QPixmap full_on_pixmap, on_pixmap, off_pixmap; +}; #endif