// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include "codec.hpp" #include "libvideostitch/parse.hpp" #include <QGridLayout> #include <QSpinBox> #include <QLabel> static const unsigned JPEG_WRITER_DEFAULT_QUALITY(90); static const unsigned JPEG_QUALITY_MIN_VALUE(1); static const unsigned JPEG_QUALITY_MAX_VALUE(100); /** * @brief The JpegCodec class represents a widget holding the properties of the jpeg codec */ class JpegCodec : public Codec { Q_OBJECT public: explicit JpegCodec(QWidget* const parent = nullptr) : Codec(parent), mainLayout(new QGridLayout(this)), sliderQuality(new QSlider(Qt::Horizontal, this)), labelValue(new QLabel(this)), labelQuality(new QLabel(tr("Quality:"), this)) { sliderQuality->setMinimum(JPEG_QUALITY_MIN_VALUE); sliderQuality->setMaximum(JPEG_QUALITY_MAX_VALUE); setContentsMargins(0, 0, 0, 0); connect(sliderQuality, &QSlider::valueChanged, this, [=](int value) { labelValue->setText(QString::number(value)); }); connect(sliderQuality, &QSlider::sliderReleased, this, [=]() { emit valueChanged(); }); } virtual void setup() override { mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->setSpacing(CONTROLS_SPACING); labelQuality->setFixedWidth(LABEL_WIDTH); sliderQuality->setFixedWidth(CONTROL_WIDTH); labelValue->setFixedWidth(CONTROL_WIDTH - 2 * CONTROLS_SPACING); sliderQuality->setValue(JPEG_WRITER_DEFAULT_QUALITY); mainLayout->addWidget(labelQuality, 0, 0); mainLayout->addWidget(sliderQuality, 0, 1); mainLayout->addWidget(labelValue, 0, 2); setLayout(mainLayout); } virtual bool hasConfiguration() const override { return true; } virtual VideoStitch::Ptv::Value* getOutputConfig() const override { VideoStitch::Ptv::Value* outputConfig = VideoStitch::Ptv::Value::emptyObject(); outputConfig->get("quality")->asInt() = sliderQuality->value(); return outputConfig; } virtual bool setFromOutputConfig(const VideoStitch::Ptv::Value* config) override { int quality = JPEG_QUALITY_MIN_VALUE; if (VideoStitch::Parse::populateInt("Ptv", *config, "quality", quality, false) != VideoStitch::Parse::PopulateResult_Ok) { return false; } sliderQuality->setValue(quality); labelQuality->setText(QString::number(quality)); return true; } virtual QString getKey() const override { return QStringLiteral("jpg"); } private: QGridLayout* mainLayout; QSlider* sliderQuality; QLabel* labelValue; QLabel* labelQuality; };