New upstream version 18.0.1+dfsg1
This commit is contained in:
parent
6efda2859e
commit
f2cf6cce50
1337 changed files with 41178 additions and 84670 deletions
|
|
@ -1,8 +1,10 @@
|
|||
#include "volume-control.hpp"
|
||||
#include "qt-wrappers.hpp"
|
||||
#include "obs-app.hpp"
|
||||
#include "mute-checkbox.hpp"
|
||||
#include "slider-absoluteset-style.hpp"
|
||||
#include <util/platform.h>
|
||||
#include <util/threading.h>
|
||||
#include <QHBoxLayout>
|
||||
#include <QVBoxLayout>
|
||||
#include <QPushButton>
|
||||
|
|
@ -16,6 +18,8 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
QWeakPointer<VolumeMeterTimer> VolumeMeter::updateTimer;
|
||||
|
||||
void VolControl::OBSVolumeChanged(void *data, float db)
|
||||
{
|
||||
Q_UNUSED(db);
|
||||
|
|
@ -29,11 +33,10 @@ void VolControl::OBSVolumeLevel(void *data, float level, float mag,
|
|||
{
|
||||
VolControl *volControl = static_cast<VolControl*>(data);
|
||||
|
||||
QMetaObject::invokeMethod(volControl, "VolumeLevel",
|
||||
Q_ARG(float, mag),
|
||||
Q_ARG(float, level),
|
||||
Q_ARG(float, peak),
|
||||
Q_ARG(bool, muted));
|
||||
if (muted)
|
||||
level = mag = peak = 0.0f;
|
||||
|
||||
volControl->volMeter->setLevels(mag, level, peak);
|
||||
}
|
||||
|
||||
void VolControl::OBSVolumeMuted(void *data, calldata_t *calldata)
|
||||
|
|
@ -84,8 +87,19 @@ void VolControl::SliderChanged(int vol)
|
|||
|
||||
void VolControl::updateText()
|
||||
{
|
||||
volLabel->setText(QString::number(obs_fader_get_db(obs_fader), 'f', 1)
|
||||
.append(" dB"));
|
||||
QString db = QString::number(obs_fader_get_db(obs_fader), 'f', 1)
|
||||
.append(" dB");
|
||||
volLabel->setText(db);
|
||||
|
||||
bool muted = obs_source_muted(source);
|
||||
const char *accTextLookup = muted
|
||||
? "VolControl.SliderMuted"
|
||||
: "VolControl.SliderUnmuted";
|
||||
|
||||
QString sourceName = obs_source_get_name(source);
|
||||
QString accText = QTStr(accTextLookup).arg(sourceName, db);
|
||||
|
||||
slider->setAccessibleName(accText);
|
||||
}
|
||||
|
||||
QString VolControl::GetName() const
|
||||
|
|
@ -124,7 +138,9 @@ VolControl::VolControl(OBSSource source_, bool showConfig)
|
|||
QFont font = nameLabel->font();
|
||||
font.setPointSize(font.pointSize()-1);
|
||||
|
||||
nameLabel->setText(obs_source_get_name(source));
|
||||
QString sourceName = obs_source_get_name(source);
|
||||
|
||||
nameLabel->setText(sourceName);
|
||||
nameLabel->setFont(font);
|
||||
volLabel->setFont(font);
|
||||
slider->setMinimum(0);
|
||||
|
|
@ -138,7 +154,10 @@ VolControl::VolControl(OBSSource source_, bool showConfig)
|
|||
textLayout->setAlignment(nameLabel, Qt::AlignLeft);
|
||||
textLayout->setAlignment(volLabel, Qt::AlignRight);
|
||||
|
||||
mute->setChecked(obs_source_muted(source));
|
||||
bool muted = obs_source_muted(source);
|
||||
mute->setChecked(muted);
|
||||
mute->setAccessibleName(
|
||||
QTStr("VolControl.Mute").arg(sourceName));
|
||||
|
||||
volLayout->addWidget(slider);
|
||||
volLayout->addWidget(mute);
|
||||
|
|
@ -157,6 +176,9 @@ VolControl::VolControl(OBSSource source_, bool showConfig)
|
|||
config->setMaximumSize(22, 22);
|
||||
config->setAutoDefault(false);
|
||||
|
||||
config->setAccessibleName(QTStr("VolControl.Properties")
|
||||
.arg(sourceName));
|
||||
|
||||
connect(config, &QAbstractButton::clicked,
|
||||
this, &VolControl::EmitConfigClicked);
|
||||
|
||||
|
|
@ -255,30 +277,51 @@ VolumeMeter::VolumeMeter(QWidget *parent)
|
|||
peakColor.setRgb(0x3E, 0xF1, 0x2B);
|
||||
peakHoldColor.setRgb(0x00, 0x00, 0x00);
|
||||
|
||||
resetTimer = new QTimer(this);
|
||||
connect(resetTimer, SIGNAL(timeout()), this, SLOT(resetState()));
|
||||
updateTimerRef = updateTimer.toStrongRef();
|
||||
if (!updateTimerRef) {
|
||||
updateTimerRef = QSharedPointer<VolumeMeterTimer>::create();
|
||||
updateTimerRef->start(34);
|
||||
updateTimer = updateTimerRef;
|
||||
}
|
||||
|
||||
resetState();
|
||||
updateTimerRef->AddVolControl(this);
|
||||
}
|
||||
|
||||
void VolumeMeter::resetState(void)
|
||||
VolumeMeter::~VolumeMeter()
|
||||
{
|
||||
setLevels(0.0f, 0.0f, 0.0f);
|
||||
if (resetTimer->isActive())
|
||||
resetTimer->stop();
|
||||
updateTimerRef->RemoveVolControl(this);
|
||||
}
|
||||
|
||||
void VolumeMeter::setLevels(float nmag, float npeak, float npeakHold)
|
||||
{
|
||||
mag = nmag;
|
||||
peak = npeak;
|
||||
peakHold = npeakHold;
|
||||
uint64_t ts = os_gettime_ns();
|
||||
QMutexLocker locker(&dataMutex);
|
||||
|
||||
update();
|
||||
mag += nmag;
|
||||
peak += npeak;
|
||||
peakHold += npeakHold;
|
||||
multiple += 1.0f;
|
||||
lastUpdateTime = ts;
|
||||
}
|
||||
|
||||
if (resetTimer->isActive())
|
||||
resetTimer->stop();
|
||||
resetTimer->start(1000);
|
||||
inline void VolumeMeter::calcLevels()
|
||||
{
|
||||
uint64_t ts = os_gettime_ns();
|
||||
QMutexLocker locker(&dataMutex);
|
||||
|
||||
if (lastUpdateTime && ts - lastUpdateTime > 1000000000) {
|
||||
mag = peak = peakHold = 0.0f;
|
||||
multiple = 1.0f;
|
||||
lastUpdateTime = 0;
|
||||
}
|
||||
|
||||
if (multiple > 0.0f) {
|
||||
curMag = mag / multiple;
|
||||
curPeak = peak / multiple;
|
||||
curPeakHold = peakHold / multiple;
|
||||
|
||||
mag = peak = peakHold = multiple = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::paintEvent(QPaintEvent *event)
|
||||
|
|
@ -291,9 +334,11 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
|
|||
int width = size().width();
|
||||
int height = size().height();
|
||||
|
||||
int scaledMag = int((float)width * mag);
|
||||
int scaledPeak = int((float)width * peak);
|
||||
int scaledPeakHold = int((float)width * peakHold);
|
||||
calcLevels();
|
||||
|
||||
int scaledMag = int((float)width * curMag);
|
||||
int scaledPeak = int((float)width * curPeak);
|
||||
int scaledPeakHold = int((float)width * curPeakHold);
|
||||
|
||||
gradient.setStart(qreal(scaledMag), 0);
|
||||
gradient.setFinalStop(qreal(scaledPeak), 0);
|
||||
|
|
@ -324,3 +369,19 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
|
|||
scaledPeakHold, height);
|
||||
|
||||
}
|
||||
|
||||
void VolumeMeterTimer::AddVolControl(VolumeMeter *meter)
|
||||
{
|
||||
volumeMeters.push_back(meter);
|
||||
}
|
||||
|
||||
void VolumeMeterTimer::RemoveVolControl(VolumeMeter *meter)
|
||||
{
|
||||
volumeMeters.removeOne(meter);
|
||||
}
|
||||
|
||||
void VolumeMeterTimer::timerEvent(QTimerEvent*)
|
||||
{
|
||||
for (VolumeMeter *meter : volumeMeters)
|
||||
meter->update();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue