Files
obs-studio/obs/window-basic-settings.hpp
jp9000 8b2614ddc2 UI: Add advanced output settings
Adds an 'advanced' mode to the output settings to allow more powerful
and complex streaming and recording options:

- Optionally use a different encoder for recording than for streaming to
  allow the recording to use a different encoder or encoder settings if
  desired (though at the cost if increased CPU usage depending on the
  encoders being used)

- Use encoders other than x264

- Rescale the recording or streaming encoders in case the user wishes to
  stream and record at different resolutions

- Select the specific mixer to use for recording and for streaming,
  allowing the stream and recording to use separate mixers (to for
  example allow a user to stream the game/mic audio but only record the
  game audio)

- Use FFmpeg output for the recording button instead of only recording
  h264/aac to FLV, allowing the user to output to various different
  types of file formats or remote URLs, as well as allowing the user to
  select and use different encoders and encoder settings that are
  available in the FFmpeg library

- Optionally allow the use of multiple audio tracks in a single output
  if the file formats or stream services support it
2015-02-06 11:55:48 -08:00

159 lines
4.3 KiB
C++

/******************************************************************************
Copyright (C) 2013 by Hugh Bailey <obs.jim@gmail.com>
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 2 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/>.
******************************************************************************/
#pragma once
#include <util/util.hpp>
#include <QDialog>
#include <memory>
#include <obs.h>
class OBSBasic;
class QAbstractButton;
class QComboBox;
class OBSPropertiesView;
#include "ui_OBSBasicSettings.h"
class OBSBasicSettings : public QDialog {
Q_OBJECT
private:
OBSBasic *main;
std::unique_ptr<Ui::OBSBasicSettings> ui;
bool generalChanged = false;
bool outputsChanged = false;
bool audioChanged = false;
bool videoChanged = false;
int pageIndex = 0;
bool loading = true;
OBSPropertiesView *streamProperties = nullptr;
OBSPropertiesView *streamEncoderProps = nullptr;
OBSPropertiesView *recordEncoderProps = nullptr;
void SaveCombo(QComboBox *widget, const char *section,
const char *value);
void SaveComboData(QComboBox *widget, const char *section,
const char *value);
void SaveCheckBox(QAbstractButton *widget, const char *section,
const char *value, bool invert = false);
void SaveEdit(QLineEdit *widget, const char *section,
const char *value);
void SaveSpinBox(QSpinBox *widget, const char *section,
const char *value);
inline bool Changed() const
{
return generalChanged || outputsChanged ||
audioChanged || videoChanged;
}
inline void EnableApplyButton(bool en)
{
ui->buttonBox->button(QDialogButtonBox::Apply)->setEnabled(en);
}
inline void ClearChanged()
{
generalChanged = false;
outputsChanged = false;
audioChanged = false;
videoChanged = false;
EnableApplyButton(false);
}
void HookWidget(QWidget *widget, const char *signal, const char *slot);
bool QueryChanges();
void LoadServiceTypes();
void LoadServiceInfo();
void LoadEncoderTypes();
void LoadGeneralSettings();
void LoadOutputSettings();
void LoadAudioSettings();
void LoadVideoSettings();
void LoadSettings(bool changedOnly);
OBSPropertiesView *CreateEncoderPropertyView(const char *encoder,
const char *path, bool changed = false);
/* general */
void LoadLanguageList();
/* output */
void LoadSimpleOutputSettings();
void LoadAdvOutputStreamingSettings();
void LoadAdvOutputStreamingEncoderProperties();
void LoadAdvOutputRecordingSettings();
void LoadAdvOutputRecordingEncoderProperties();
void LoadAdvOutputFFmpegSettings();
void LoadAdvOutputAudioSettings();
/* audio */
void LoadListValues(QComboBox *widget, obs_property_t *prop,
const char *configName);
void LoadAudioDevices();
/* video */
void LoadRendererList();
void ResetDownscales(uint32_t cx, uint32_t cy);
void LoadDownscaleFilters();
void LoadResolutionLists();
void LoadFPSData();
void SaveGeneralSettings();
void SaveOutputSettings();
void SaveAudioSettings();
void SaveVideoSettings();
void SaveSettings();
private slots:
void on_simpleOutUseBufsize_toggled(bool checked);
void on_simpleOutputVBitrate_valueChanged(int val);
void on_listWidget_itemSelectionChanged();
void on_buttonBox_clicked(QAbstractButton *button);
void on_streamType_currentIndexChanged(int idx);
void on_simpleOutputBrowse_clicked();
void on_advOutRecPathBrowse_clicked();
void on_advOutFFPathBrowse_clicked();
void on_advOutEncoder_currentIndexChanged(int idx);
void on_advOutRecEncoder_currentIndexChanged(int idx);
void on_baseResolution_editTextChanged(const QString &text);
void GeneralChanged();
void AudioChanged();
void AudioChangedRestart();
void OutputsChanged();
void VideoChanged();
void VideoChangedResolution();
void VideoChangedRestart();
protected:
virtual void closeEvent(QCloseEvent *event);
public:
OBSBasicSettings(QWidget *parent);
};