mirror of
https://github.com/wang-bin/QtAV.git
synced 2026-10-19 05:31:30 +08:00
162 lines
4.6 KiB
C++
162 lines
4.6 KiB
C++
/******************************************************************************
|
|
QtAV Player Demo: this file is part of QtAV examples
|
|
Copyright (C) 2012-2015 Wang Bin <wbsecg1@gmail.com>
|
|
|
|
* This file is part of QtAV
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
******************************************************************************/
|
|
|
|
|
|
#include "VideoEQConfigPage.h"
|
|
#include <QComboBox>
|
|
#include <QCheckBox>
|
|
#include <QPushButton>
|
|
#include <QLabel>
|
|
#include <QLayout>
|
|
#include "../Slider.h"
|
|
|
|
VideoEQConfigPage::VideoEQConfigPage(QWidget *parent) :
|
|
QWidget(parent)
|
|
{
|
|
mEngine = SWScale;
|
|
QGridLayout *gl = new QGridLayout();
|
|
setLayout(gl);
|
|
|
|
QLabel *label = new QLabel();
|
|
label->setText(tr("Engine"));
|
|
mpEngine = new QComboBox();
|
|
setEngines(QVector<Engine>(1, SWScale));
|
|
connect(mpEngine, SIGNAL(currentIndexChanged(int)), SLOT(onEngineChangedByUI()));
|
|
|
|
int r = 0, c = 0;
|
|
gl->addWidget(label, r, c);
|
|
gl->addWidget(mpEngine, r, c+1);
|
|
r++;
|
|
|
|
|
|
struct {
|
|
QSlider **slider;
|
|
QString text;
|
|
} sliders[] = {
|
|
{ &mpBSlider, tr("Brightness") },
|
|
{ &mpCSlider, tr("Constrast") },
|
|
{ &mpHSlider, tr("Hue") },
|
|
{ &mpSSlider, tr("Saturation") },
|
|
{ 0, QString() }
|
|
};
|
|
for (int i = 0; sliders[i].slider; ++i) {
|
|
QLabel *label = new QLabel(sliders[i].text);
|
|
*sliders[i].slider = new Slider();
|
|
QSlider *slider = *sliders[i].slider;
|
|
slider->setOrientation(Qt::Horizontal);
|
|
slider->setTickInterval(2);
|
|
slider->setRange(-100, 100);
|
|
slider->setValue(0);
|
|
|
|
gl->addWidget(label, r, c);
|
|
gl->addWidget(slider, r, c+1);
|
|
r++;
|
|
}
|
|
mpGlobal = new QCheckBox(tr("Global"));
|
|
mpGlobal->setEnabled(false);
|
|
mpGlobal->setChecked(false);
|
|
mpResetButton = new QPushButton(tr("Reset"));
|
|
|
|
gl->addWidget(mpGlobal, r, c, Qt::AlignLeft);
|
|
gl->addWidget(mpResetButton, r, c+1, Qt::AlignRight);
|
|
r++;
|
|
|
|
connect(mpBSlider, SIGNAL(valueChanged(int)), SIGNAL(brightnessChanged(int)));
|
|
connect(mpCSlider, SIGNAL(valueChanged(int)), SIGNAL(contrastChanged(int)));
|
|
connect(mpHSlider, SIGNAL(valueChanged(int)), SIGNAL(hueChanegd(int)));
|
|
connect(mpSSlider, SIGNAL(valueChanged(int)), SIGNAL(saturationChanged(int)));
|
|
connect(mpGlobal, SIGNAL(toggled(bool)), SLOT(onGlobalSet(bool)));
|
|
connect(mpResetButton, SIGNAL(clicked()), SLOT(onReset()));
|
|
}
|
|
|
|
void VideoEQConfigPage::onGlobalSet(bool g)
|
|
{
|
|
Q_UNUSED(g);
|
|
}
|
|
|
|
void VideoEQConfigPage::setEngines(const QVector<Engine> &engines)
|
|
{
|
|
mpEngine->clear();
|
|
QVector<Engine> es(engines);
|
|
qSort(es);
|
|
mEngines = es;
|
|
foreach (Engine e, es) {
|
|
if (e == SWScale) {
|
|
mpEngine->addItem(QString::fromLatin1("libswscale"));
|
|
} else if (e == GLSL) {
|
|
mpEngine->addItem(QString::fromLatin1("GLSL"));
|
|
} else if (e == XV) {
|
|
mpEngine->addItem(QString::fromLatin1("XV"));
|
|
}
|
|
}
|
|
}
|
|
|
|
void VideoEQConfigPage::setEngine(Engine engine)
|
|
{
|
|
if (engine == mEngine)
|
|
return;
|
|
mEngine = engine;
|
|
if (!mEngines.isEmpty()) {
|
|
mpEngine->setCurrentIndex(mEngines.indexOf(engine));
|
|
}
|
|
emit engineChanged();
|
|
}
|
|
|
|
VideoEQConfigPage::Engine VideoEQConfigPage::engine() const
|
|
{
|
|
return mEngine;
|
|
}
|
|
|
|
qreal VideoEQConfigPage::brightness() const
|
|
{
|
|
return (qreal)mpBSlider->value()/100.0;
|
|
}
|
|
|
|
qreal VideoEQConfigPage::contrast() const
|
|
{
|
|
return (qreal)mpCSlider->value()/100.0;
|
|
}
|
|
|
|
qreal VideoEQConfigPage::hue() const
|
|
{
|
|
return (qreal)mpHSlider->value()/100.0;
|
|
}
|
|
|
|
qreal VideoEQConfigPage::saturation() const
|
|
{
|
|
return (qreal)mpSSlider->value()/100.0;
|
|
}
|
|
|
|
void VideoEQConfigPage::onReset()
|
|
{
|
|
mpBSlider->setValue(0);
|
|
mpCSlider->setValue(0);
|
|
mpHSlider->setValue(0);
|
|
mpSSlider->setValue(0);
|
|
}
|
|
|
|
void VideoEQConfigPage::onEngineChangedByUI()
|
|
{
|
|
if (mpEngine->currentIndex() >= mEngines.size() || mpEngine->currentIndex() < 0)
|
|
return;
|
|
mEngine = mEngines.at(mpEngine->currentIndex());
|
|
emit engineChanged();
|
|
}
|