Erster Teststream absolviert. Positives Ergebnis
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
#include "DeviceDialog.h"
|
||||
#include "VideoWidget.h" // für kBrightnessMin/Max, kSharpenMin/Max (eine Quelle der Wahrheit)
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QFormLayout>
|
||||
#include <QComboBox>
|
||||
#include <QCheckBox>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QSpinBox>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QDir>
|
||||
@@ -51,11 +55,79 @@ DeviceDialog::DeviceDialog(QWidget* parent)
|
||||
form->addRow("Audio-Gerät (ALSA):", m_audioCombo);
|
||||
form->addRow("Ziel-Framerate:", m_fpsCombo);
|
||||
|
||||
m_smoothCheck = new QCheckBox("Bildglättung aktivieren (empfohlen)", this);
|
||||
m_smoothCheck->setChecked(true);
|
||||
m_smoothCheck->setToolTip(
|
||||
"Reduziert live Kompressions-/Scaler-Artefakte deines HDMI-Upscalers:\n"
|
||||
"Farbrauschen/Dot-Crawl wird weicher gezeichnet, harte blockige\n"
|
||||
"Pixelkanten werden geglättet und dezent gegengeschärft.\n"
|
||||
"Das ist keine Optik-Spielerei, sondern eine Bildverbesserung –\n"
|
||||
"empfohlen für Composite-Quellen wie PS1/PS2 an billigen Scalern.\n"
|
||||
"Umschaltbar im laufenden Betrieb mit [S].");
|
||||
form->addRow("", m_smoothCheck);
|
||||
|
||||
m_retroCheck = new QCheckBox("Retro-Optik (Scanlines/Maske) aktivieren", this);
|
||||
m_retroCheck->setToolTip(
|
||||
"Rein optischer Nostalgie-Look: Scanlines, Phosphor-Maske,\n"
|
||||
"leichte Wölbung wie bei einem alten Röhrenfernseher.\n"
|
||||
"Lässt sich mit der Bildglättung kombinieren.\n"
|
||||
"Umschaltbar im laufenden Betrieb mit [C].");
|
||||
form->addRow("", m_retroCheck);
|
||||
|
||||
m_sharpenSpin = new QDoubleSpinBox(this);
|
||||
m_sharpenSpin->setRange(VideoWidget::kSharpenMin, VideoWidget::kSharpenMax);
|
||||
m_sharpenSpin->setSingleStep(VideoWidget::kSharpenStep);
|
||||
m_sharpenSpin->setDecimals(1);
|
||||
m_sharpenSpin->setValue(0.0);
|
||||
m_sharpenSpin->setSpecialValueText("aus");
|
||||
m_sharpenSpin->setToolTip(
|
||||
"Unsharp Mask übers gesamte Bild, unabhängig von der Bildglättung.\n"
|
||||
"0 = aus. Im laufenden Betrieb mit [X]/[+]/[-] änderbar.");
|
||||
form->addRow("Nachschärfen:", m_sharpenSpin);
|
||||
|
||||
m_brightnessSpin = new QDoubleSpinBox(this);
|
||||
m_brightnessSpin->setRange(VideoWidget::kBrightnessMin * 100.0, VideoWidget::kBrightnessMax * 100.0);
|
||||
m_brightnessSpin->setSingleStep(VideoWidget::kBrightnessStep * 100.0);
|
||||
m_brightnessSpin->setDecimals(0);
|
||||
m_brightnessSpin->setSuffix(" %");
|
||||
m_brightnessSpin->setValue(100.0);
|
||||
m_brightnessSpin->setToolTip(
|
||||
"Gamma-Helligkeit, 100 % = unverändert. Im laufenden Betrieb\n"
|
||||
"mit [,]/[.] änderbar.");
|
||||
form->addRow("Helligkeit:", m_brightnessSpin);
|
||||
|
||||
m_hwContrastSpin = new QSpinBox(this);
|
||||
m_hwContrastSpin->setRange(-1, 100);
|
||||
m_hwContrastSpin->setValue(-1);
|
||||
m_hwContrastSpin->setSpecialValueText("unverändert");
|
||||
m_hwContrastSpin->setToolTip(
|
||||
"Hardware-Kontrast direkt am Grabber-Chip, VOR der JPEG-Kompression\n"
|
||||
"(Wertebereich hängt vom jeweiligen Chip ab, hier 0-100 angenommen).\n"
|
||||
"\"unverändert\" lässt den aktuellen Chip-Wert einfach in Ruhe.\n"
|
||||
"Im laufenden Betrieb mit [1]/[2] änderbar. hdmi-viewer merkt sich\n"
|
||||
"beim Start den Ausgangswert und stellt ihn beim Beenden wieder her.");
|
||||
form->addRow("Hardware-Kontrast:", m_hwContrastSpin);
|
||||
|
||||
m_hwSaturationSpin = new QSpinBox(this);
|
||||
m_hwSaturationSpin->setRange(-1, 100);
|
||||
m_hwSaturationSpin->setValue(-1);
|
||||
m_hwSaturationSpin->setSpecialValueText("unverändert");
|
||||
m_hwSaturationSpin->setToolTip(
|
||||
"Hardware-Sättigung direkt am Grabber-Chip, VOR der JPEG-Kompression.\n"
|
||||
"\"unverändert\" lässt den aktuellen Chip-Wert einfach in Ruhe.\n"
|
||||
"Im laufenden Betrieb mit [3]/[4] änderbar. hdmi-viewer merkt sich\n"
|
||||
"beim Start den Ausgangswert und stellt ihn beim Beenden wieder her.");
|
||||
form->addRow("Hardware-Sättigung:", m_hwSaturationSpin);
|
||||
|
||||
auto* hint = new QLabel(
|
||||
"<small><b>Hinweis:</b> Der Grabber liefert die gewünschte FPS-Zahl nur wenn "
|
||||
"genug USB-Bandbreite vorhanden ist. Die tatsächliche Rate wird in der "
|
||||
"Titelleiste angezeigt.<br>"
|
||||
"<b>F</b> = Vollbild · <b>Esc</b> = zurück hierher</small>",
|
||||
"<b>F</b> Vollbild · <b>S</b> Glättung · "
|
||||
"<b>C</b> Retro · <b>X/+/-</b> Schärfen · "
|
||||
"<b>,/.</b> Helligkeit · <b>1/2</b> HW-Kontrast · "
|
||||
"<b>3/4</b> HW-Sättigung · <b>V</b> Vergleich · "
|
||||
"<b>P</b> Screenshot · <b>Esc</b> zurück hierher</small>",
|
||||
this);
|
||||
hint->setWordWrap(true);
|
||||
|
||||
@@ -81,10 +153,22 @@ DeviceDialog::DeviceDialog(QWidget* parent)
|
||||
QString DeviceDialog::selectedVideoDevice() const { return m_videoCombo->currentData().toString(); }
|
||||
QString DeviceDialog::selectedAudioDevice() const { return m_audioCombo->currentData().toString(); }
|
||||
int DeviceDialog::selectedFps() const { return m_fpsCombo->currentData().toInt(); }
|
||||
bool DeviceDialog::selectedSmoothMode() const { return m_smoothCheck->isChecked(); }
|
||||
bool DeviceDialog::selectedRetroMode() const { return m_retroCheck->isChecked(); }
|
||||
float DeviceDialog::selectedSharpenAmount() const { return static_cast<float>(m_sharpenSpin->value()); }
|
||||
float DeviceDialog::selectedBrightness() const { return static_cast<float>(m_brightnessSpin->value() / 100.0); }
|
||||
int DeviceDialog::selectedHwContrast() const { return m_hwContrastSpin->value(); }
|
||||
int DeviceDialog::selectedHwSaturation() const { return m_hwSaturationSpin->value(); }
|
||||
|
||||
void DeviceDialog::setPreselectedVideo(const QString& device) { selectByData(m_videoCombo, device); }
|
||||
void DeviceDialog::setPreselectedAudio(const QString& device) { selectByData(m_audioCombo, device); }
|
||||
void DeviceDialog::setPreselectedFps(int fps) { selectByData(m_fpsCombo, QString::number(fps)); }
|
||||
void DeviceDialog::setPreselectedSmoothMode(bool enabled) { m_smoothCheck->setChecked(enabled); }
|
||||
void DeviceDialog::setPreselectedRetroMode(bool enabled) { m_retroCheck->setChecked(enabled); }
|
||||
void DeviceDialog::setPreselectedSharpenAmount(float amount) { m_sharpenSpin->setValue(amount); }
|
||||
void DeviceDialog::setPreselectedBrightness(float gamma) { m_brightnessSpin->setValue(gamma * 100.0); }
|
||||
void DeviceDialog::setPreselectedHwContrast(int value) { m_hwContrastSpin->setValue(value); }
|
||||
void DeviceDialog::setPreselectedHwSaturation(int value) { m_hwSaturationSpin->setValue(value); }
|
||||
|
||||
void DeviceDialog::selectByData(QComboBox* combo, const QString& data)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user