static std::once_flag flag;
std::call_once(flag, [this]{
global_mixer = new Mixer(QGLFormat::toSurfaceFormat(format()));
- global_mixer->set_audio_level_callback([this](float level){
- global_vu_meter->set_level(level);
+ global_mixer->set_audio_level_callback([this](float level_lufs, float peak_db){
+ global_vu_meter->set_level(level_lufs);
+
+ char buf[256];
+ snprintf(buf, sizeof(buf), "%.1f", peak_db);
+ global_peak_display->setText(buf);
});
global_mixer->start();
});
connect(ui->preview1, SIGNAL(transition_names_updated(std::vector<std::string>)),
this, SLOT(set_transition_names(std::vector<std::string>)));
- global_vu_meter = ui->vu_meter; // global_mixer does not exist yet, so need to delay the hookup.
+ // global_mixer does not exist yet, so need to delay the actual hookups.
+ global_vu_meter = ui->vu_meter;
+ global_peak_display = ui->peak_display;
}
void MainWindow::resizeEvent(QResizeEvent* event)
output_channel[output].set_frame_ready_callback(callback);
}
- typedef std::function<void(float)> audio_level_callback_t;
+ typedef std::function<void(float, float)> audio_level_callback_t;
void set_audio_level_callback(audio_level_callback_t callback)
{
audio_level_callback = callback;
</layout>
</item>
<item>
- <widget class="VUMeter" name="vu_meter" native="true">
- <property name="minimumSize">
- <size>
- <width>20</width>
- <height>0</height>
- </size>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <property name="leftMargin">
+ <number>0</number>
</property>
- </widget>
+ <item>
+ <widget class="VUMeter" name="vu_meter" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <zorder>peak_display</zorder>
+ <zorder>peak_display</zorder>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="peak_display">
+ <property name="text">
+ <string>-0.0</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</item>
} // namespace
VUMeter *global_vu_meter = nullptr;
+QLabel *global_peak_display = nullptr;
VUMeter::VUMeter(QWidget *parent)
: QWidget(parent)
#define VUMETER_H
#include <QWidget>
+#include <QLabel>
#include <QPaintEvent>
#include <mutex>
};
extern VUMeter *global_vu_meter;
+extern QLabel *global_peak_display;
#endif