From b9e4ff1ffb90d499e0786688df85d09ea85fc031 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sun, 10 Apr 2016 03:12:25 -0700 Subject: [PATCH] UI: Warn if streaming audio/video bitrate is too high Allows the user to know that the maximum bitrate limit for a streaming service is being enforced. --- obs/data/locale/en-US.ini | 2 ++ obs/window-basic-settings.cpp | 62 +++++++++++++++++++++++++++++------ 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini index 1e3555587..18e3ebef4 100644 --- a/obs/data/locale/en-US.ini +++ b/obs/data/locale/en-US.ini @@ -382,6 +382,8 @@ Basic.Settings.Output.Simple.RecordingQuality.Stream="Same as stream" Basic.Settings.Output.Simple.RecordingQuality.Small="High Quality, Medium File Size" Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size" Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Tremendously Large File Size" +Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The video bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"." +Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The audio bitrate will be set to %1, which is the upper limit for the current streaming service. If you're sure you want to go above %1, enable advanced encoder options and uncheck \"Enforce streaming service bitrate limits\"." Basic.Settings.Output.Simple.Warn.Encoder="Warning: Recording with a software encoder at a different quality than the stream will require extra CPU usage if you stream and record at the same time." Basic.Settings.Output.Simple.Warn.Lossless="Warning: Lossless quality generates tremendously large file sizes! Lossless quality can use upward of 7 gigabytes of disk space per minute at high resolutions and framerates. Lossless is not recommended for long recordings unless you have a very large amount of disk space available." Basic.Settings.Output.Simple.Warn.Lossless.Msg="Are you sure you want to use lossless quality?" diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index 882a1bccc..bacf3796d 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -472,6 +472,14 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) this, SLOT(SimpleRecordingQualityLosslessWarning(int))); connect(ui->simpleOutRecEncoder, SIGNAL(currentIndexChanged(int)), this, SLOT(SimpleRecordingEncoderChanged())); + connect(ui->simpleOutputVBitrate, SIGNAL(valueChanged(int)), + this, SLOT(SimpleRecordingEncoderChanged())); + connect(ui->simpleOutputABitrate, SIGNAL(currentIndexChanged(int)), + this, SLOT(SimpleRecordingEncoderChanged())); + connect(ui->simpleOutAdvanced, SIGNAL(toggled(bool)), + this, SLOT(SimpleRecordingEncoderChanged())); + connect(ui->simpleOutEnforce, SIGNAL(toggled(bool)), + this, SLOT(SimpleRecordingEncoderChanged())); LoadSettings(false); @@ -3053,26 +3061,60 @@ void OBSBasicSettings::SimpleRecordingEncoderChanged() { QString qual = ui->simpleOutRecQuality->currentData().toString(); QString warning; + bool advanced = ui->simpleOutAdvanced->isChecked(); + bool enforceBitrate = ui->simpleOutEnforce->isChecked() || !advanced; + obs_service_t *service = main->GetService(); delete simpleOutRecWarning; - if (qual == "Stream") { - return; + if (enforceBitrate && service) { + obs_data_t *videoSettings = obs_data_create(); + obs_data_t *audioSettings = obs_data_create(); + int oldVBitrate = ui->simpleOutputVBitrate->value(); + int oldABitrate = ui->simpleOutputABitrate->currentText().toInt(); + obs_data_set_int(videoSettings, "bitrate", oldVBitrate); + obs_data_set_int(audioSettings, "bitrate", oldABitrate); - } else if (qual == "Lossless") { - warning = SIMPLE_OUTPUT_WARNING("Lossless"); + obs_service_apply_encoder_settings(service, videoSettings, + audioSettings); + + int newVBitrate = obs_data_get_int(videoSettings, "bitrate"); + int newABitrate = obs_data_get_int(audioSettings, "bitrate"); + + if (newVBitrate < oldVBitrate) + warning = SIMPLE_OUTPUT_WARNING("VideoBitrate") + .arg(newVBitrate); + if (newABitrate < oldABitrate) { + if (!warning.isEmpty()) + warning += "\n\n"; + warning += SIMPLE_OUTPUT_WARNING("AudioBitrate") + .arg(newABitrate); + } + + obs_data_release(videoSettings); + obs_data_release(audioSettings); + } + + if (qual == "Lossless") { + if (!warning.isEmpty()) + warning += "\n\n"; + warning += SIMPLE_OUTPUT_WARNING("Lossless"); warning += "\n\n"; warning += SIMPLE_OUTPUT_WARNING("Encoder"); - } else { + } else if (qual != "Stream") { QString enc = ui->simpleOutRecEncoder->currentData().toString(); - if (enc != SIMPLE_ENCODER_X264 && - enc != SIMPLE_ENCODER_X264_LOWCPU) - return; - - warning = SIMPLE_OUTPUT_WARNING("Encoder"); + if (enc == SIMPLE_ENCODER_X264 || + enc == SIMPLE_ENCODER_X264_LOWCPU) { + if (!warning.isEmpty()) + warning += "\n\n"; + warning += SIMPLE_OUTPUT_WARNING("Encoder"); + } } + if (warning.isEmpty()) + return; + simpleOutRecWarning = new QLabel(warning, this); simpleOutRecWarning->setObjectName("warningLabel"); simpleOutRecWarning->setWordWrap(true);