mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-03-04 14:46:09 -05:00
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
159 lines
4.3 KiB
C++
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);
|
|
};
|