New upstream version 18.0.1+dfsg1

This commit is contained in:
Sebastian Ramacher 2017-04-19 21:54:15 +02:00
parent 6efda2859e
commit f2cf6cce50
1337 changed files with 41178 additions and 84670 deletions

View file

@ -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();
}