| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 | 
							- /******************************************************************************
 
-     Copyright (C) 2013 by Hugh Bailey <[email protected]>
 
-                           Philippe Groarke <[email protected]>
 
-     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 <QPointer>
 
- #include <memory>
 
- #include <string>
 
- #include <libff/ff-util.h>
 
- #include <obs.hpp>
 
- #include "auth-base.hpp"
 
- class OBSBasic;
 
- class QAbstractButton;
 
- class QRadioButton;
 
- class QComboBox;
 
- class QCheckBox;
 
- class QLabel;
 
- class OBSPropertiesView;
 
- class OBSHotkeyWidget;
 
- #include "ui_OBSBasicSettings.h"
 
- #define VOLUME_METER_DECAY_FAST 23.53
 
- #define VOLUME_METER_DECAY_MEDIUM 11.76
 
- #define VOLUME_METER_DECAY_SLOW 8.57
 
- class SilentUpdateCheckBox : public QCheckBox {
 
- 	Q_OBJECT
 
- public slots:
 
- 	void setCheckedSilently(bool checked)
 
- 	{
 
- 		bool blocked = blockSignals(true);
 
- 		setChecked(checked);
 
- 		blockSignals(blocked);
 
- 	}
 
- };
 
- class SilentUpdateSpinBox : public QSpinBox {
 
- 	Q_OBJECT
 
- public slots:
 
- 	void setValueSilently(int val)
 
- 	{
 
- 		bool blocked = blockSignals(true);
 
- 		setValue(val);
 
- 		blockSignals(blocked);
 
- 	}
 
- };
 
- class OBSFFDeleter {
 
- public:
 
- 	void operator()(const ff_format_desc *format)
 
- 	{
 
- 		ff_format_desc_free(format);
 
- 	}
 
- 	void operator()(const ff_codec_desc *codec)
 
- 	{
 
- 		ff_codec_desc_free(codec);
 
- 	}
 
- };
 
- using OBSFFCodecDesc = std::unique_ptr<const ff_codec_desc, OBSFFDeleter>;
 
- using OBSFFFormatDesc = std::unique_ptr<const ff_format_desc, OBSFFDeleter>;
 
- class OBSBasicSettings : public QDialog {
 
- 	Q_OBJECT
 
- 	Q_PROPERTY(QIcon generalIcon READ GetGeneralIcon WRITE SetGeneralIcon
 
- 			   DESIGNABLE true)
 
- 	Q_PROPERTY(QIcon streamIcon READ GetStreamIcon WRITE SetStreamIcon
 
- 			   DESIGNABLE true)
 
- 	Q_PROPERTY(QIcon outputIcon READ GetOutputIcon WRITE SetOutputIcon
 
- 			   DESIGNABLE true)
 
- 	Q_PROPERTY(QIcon audioIcon READ GetAudioIcon WRITE SetAudioIcon
 
- 			   DESIGNABLE true)
 
- 	Q_PROPERTY(QIcon videoIcon READ GetVideoIcon WRITE SetVideoIcon
 
- 			   DESIGNABLE true)
 
- 	Q_PROPERTY(QIcon hotkeysIcon READ GetHotkeysIcon WRITE SetHotkeysIcon
 
- 			   DESIGNABLE true)
 
- 	Q_PROPERTY(QIcon advancedIcon READ GetAdvancedIcon WRITE SetAdvancedIcon
 
- 			   DESIGNABLE true)
 
- private:
 
- 	OBSBasic *main;
 
- 	std::unique_ptr<Ui::OBSBasicSettings> ui;
 
- 	std::shared_ptr<Auth> auth;
 
- 	bool generalChanged = false;
 
- 	bool stream1Changed = false;
 
- 	bool outputsChanged = false;
 
- 	bool audioChanged = false;
 
- 	bool videoChanged = false;
 
- 	bool hotkeysChanged = false;
 
- 	bool advancedChanged = false;
 
- 	int pageIndex = 0;
 
- 	bool loading = true;
 
- 	bool forceAuthReload = false;
 
- 	std::string savedTheme;
 
- 	int sampleRateIndex = 0;
 
- 	int channelIndex = 0;
 
- 	int lastSimpleRecQualityIdx = 0;
 
- 	int lastChannelSetupIdx = 0;
 
- 	OBSFFFormatDesc formats;
 
- 	OBSPropertiesView *streamProperties = nullptr;
 
- 	OBSPropertiesView *streamEncoderProps = nullptr;
 
- 	OBSPropertiesView *recordEncoderProps = nullptr;
 
- 	QPointer<QLabel> advOutRecWarning;
 
- 	QPointer<QLabel> simpleOutRecWarning;
 
- 	QString curPreset;
 
- 	QString curQSVPreset;
 
- 	QString curNVENCPreset;
 
- 	QString curAMDPreset;
 
- 	QString curAdvStreamEncoder;
 
- 	QString curAdvRecordEncoder;
 
- 	using AudioSource_t =
 
- 		std::tuple<OBSWeakSource, QPointer<QCheckBox>,
 
- 			   QPointer<QSpinBox>, QPointer<QCheckBox>,
 
- 			   QPointer<QSpinBox>>;
 
- 	std::vector<AudioSource_t> audioSources;
 
- 	std::vector<OBSSignal> audioSourceSignals;
 
- 	OBSSignal sourceCreated;
 
- 	OBSSignal channelChanged;
 
- 	std::vector<std::pair<bool, QPointer<OBSHotkeyWidget>>> hotkeys;
 
- 	OBSSignal hotkeyRegistered;
 
- 	OBSSignal hotkeyUnregistered;
 
- 	uint32_t outputCX = 0;
 
- 	uint32_t outputCY = 0;
 
- 	QPointer<QCheckBox> vodTrackCheckbox;
 
- 	QPointer<QWidget> vodTrackContainer;
 
- 	QPointer<QRadioButton> vodTrack[MAX_AUDIO_MIXES];
 
- 	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);
 
- 	void SaveFormat(QComboBox *combo);
 
- 	void SaveEncoder(QComboBox *combo, const char *section,
 
- 			 const char *value);
 
- 	inline bool Changed() const
 
- 	{
 
- 		return generalChanged || outputsChanged || stream1Changed ||
 
- 		       audioChanged || videoChanged || advancedChanged ||
 
- 		       hotkeysChanged;
 
- 	}
 
- 	inline void EnableApplyButton(bool en)
 
- 	{
 
- 		ui->buttonBox->button(QDialogButtonBox::Apply)->setEnabled(en);
 
- 	}
 
- 	inline void ClearChanged()
 
- 	{
 
- 		generalChanged = false;
 
- 		stream1Changed = false;
 
- 		outputsChanged = false;
 
- 		audioChanged = false;
 
- 		videoChanged = false;
 
- 		hotkeysChanged = false;
 
- 		advancedChanged = false;
 
- 		EnableApplyButton(false);
 
- 	}
 
- #ifdef _WIN32
 
- 	bool aeroWasDisabled = false;
 
- 	QCheckBox *toggleAero = nullptr;
 
- 	void ToggleDisableAero(bool checked);
 
- #endif
 
- 	void HookWidget(QWidget *widget, const char *signal, const char *slot);
 
- 	bool QueryChanges();
 
- 	void LoadEncoderTypes();
 
- 	void LoadColorRanges();
 
- 	void LoadFormats();
 
- 	void ReloadCodecs(const ff_format_desc *formatDesc);
 
- 	void LoadGeneralSettings();
 
- 	void LoadStream1Settings();
 
- 	void LoadOutputSettings();
 
- 	void LoadAudioSettings();
 
- 	void LoadVideoSettings();
 
- 	void
 
- 	LoadHotkeySettings(obs_hotkey_id ignoreKey = OBS_INVALID_HOTKEY_ID);
 
- 	void LoadAdvancedSettings();
 
- 	void LoadSettings(bool changedOnly);
 
- 	OBSPropertiesView *CreateEncoderPropertyView(const char *encoder,
 
- 						     const char *path,
 
- 						     bool changed = false);
 
- 	/* general */
 
- 	void LoadLanguageList();
 
- 	void LoadThemeList();
 
- 	/* stream */
 
- 	void InitStreamPage();
 
- 	inline bool IsCustomService() const;
 
- 	void LoadServices(bool showAll);
 
- 	void OnOAuthStreamKeyConnected();
 
- 	void OnAuthConnected();
 
- 	QString lastService;
 
- 	int prevLangIndex;
 
- 	bool prevBrowserAccel;
 
- private slots:
 
- 	void UpdateServerList();
 
- 	void UpdateKeyLink();
 
- 	void UpdateVodTrackSetting();
 
- 	void UpdateMoreInfoLink();
 
- 	void on_show_clicked();
 
- 	void on_authPwShow_clicked();
 
- 	void on_connectAccount_clicked();
 
- 	void on_disconnectAccount_clicked();
 
- 	void on_useStreamKey_clicked();
 
- 	void on_useAuth_toggled();
 
- private:
 
- 	/* output */
 
- 	void LoadSimpleOutputSettings();
 
- 	void LoadAdvOutputStreamingSettings();
 
- 	void LoadAdvOutputStreamingEncoderProperties();
 
- 	void LoadAdvOutputRecordingSettings();
 
- 	void LoadAdvOutputRecordingEncoderProperties();
 
- 	void LoadAdvOutputFFmpegSettings();
 
- 	void LoadAdvOutputAudioSettings();
 
- 	void SetAdvOutputFFmpegEnablement(ff_codec_type encoderType,
 
- 					  bool enabled,
 
- 					  bool enableEncode = false);
 
- 	/* audio */
 
- 	void LoadListValues(QComboBox *widget, obs_property_t *prop, int index);
 
- 	void LoadAudioDevices();
 
- 	void LoadAudioSources();
 
- 	/* video */
 
- 	void LoadRendererList();
 
- 	void ResetDownscales(uint32_t cx, uint32_t cy);
 
- 	void LoadDownscaleFilters();
 
- 	void LoadResolutionLists();
 
- 	void LoadFPSData();
 
- 	void SaveGeneralSettings();
 
- 	void SaveStream1Settings();
 
- 	void SaveOutputSettings();
 
- 	void SaveAudioSettings();
 
- 	void SaveVideoSettings();
 
- 	void SaveHotkeySettings();
 
- 	void SaveAdvancedSettings();
 
- 	void SaveSettings();
 
- 	void UpdateSimpleOutStreamDelayEstimate();
 
- 	void UpdateAdvOutStreamDelayEstimate();
 
- 	void FillSimpleRecordingValues();
 
- 	void FillSimpleStreamingValues();
 
- 	void FillAudioMonitoringDevices();
 
- 	void RecalcOutputResPixels(const char *resText);
 
- 	bool AskIfCanCloseSettings();
 
- 	QIcon generalIcon;
 
- 	QIcon streamIcon;
 
- 	QIcon outputIcon;
 
- 	QIcon audioIcon;
 
- 	QIcon videoIcon;
 
- 	QIcon hotkeysIcon;
 
- 	QIcon advancedIcon;
 
- 	QIcon GetGeneralIcon() const;
 
- 	QIcon GetStreamIcon() const;
 
- 	QIcon GetOutputIcon() const;
 
- 	QIcon GetAudioIcon() const;
 
- 	QIcon GetVideoIcon() const;
 
- 	QIcon GetHotkeysIcon() const;
 
- 	QIcon GetAdvancedIcon() const;
 
- 	int CurrentFLVTrack();
 
- private slots:
 
- 	void on_theme_activated(int idx);
 
- 	void on_listWidget_itemSelectionChanged();
 
- 	void on_buttonBox_clicked(QAbstractButton *button);
 
- 	void on_service_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_advOutFFIgnoreCompat_stateChanged(int state);
 
- 	void on_advOutFFFormat_currentIndexChanged(int idx);
 
- 	void on_advOutFFAEncoder_currentIndexChanged(int idx);
 
- 	void on_advOutFFVEncoder_currentIndexChanged(int idx);
 
- 	void on_advOutFFType_currentIndexChanged(int idx);
 
- 	void on_colorFormat_currentIndexChanged(const QString &text);
 
- 	void on_filenameFormatting_textEdited(const QString &text);
 
- 	void on_outputResolution_editTextChanged(const QString &text);
 
- 	void on_baseResolution_editTextChanged(const QString &text);
 
- 	void on_disableOSXVSync_clicked();
 
- 	void GeneralChanged();
 
- 	void AudioChanged();
 
- 	void AudioChangedRestart();
 
- 	void ReloadAudioSources();
 
- 	void SurroundWarning(int idx);
 
- 	void SpeakerLayoutChanged(int idx);
 
- 	void OutputsChanged();
 
- 	void Stream1Changed();
 
- 	void VideoChanged();
 
- 	void VideoChangedResolution();
 
- 	void VideoChangedRestart();
 
- 	void HotkeysChanged();
 
- 	void ReloadHotkeys(obs_hotkey_id ignoreKey = OBS_INVALID_HOTKEY_ID);
 
- 	void AdvancedChanged();
 
- 	void AdvancedChangedRestart();
 
- 	void UpdateStreamDelayEstimate();
 
- 	void UpdateAutomaticReplayBufferCheckboxes();
 
- 	void AdvOutRecCheckWarnings();
 
- 	void SimpleRecordingQualityChanged();
 
- 	void SimpleRecordingEncoderChanged();
 
- 	void SimpleRecordingQualityLosslessWarning(int idx);
 
- 	void SimpleReplayBufferChanged();
 
- 	void AdvReplayBufferChanged();
 
- 	void SimpleStreamingEncoderChanged();
 
- 	OBSService SpawnTempService();
 
- 	void SetGeneralIcon(const QIcon &icon);
 
- 	void SetStreamIcon(const QIcon &icon);
 
- 	void SetOutputIcon(const QIcon &icon);
 
- 	void SetAudioIcon(const QIcon &icon);
 
- 	void SetVideoIcon(const QIcon &icon);
 
- 	void SetHotkeysIcon(const QIcon &icon);
 
- 	void SetAdvancedIcon(const QIcon &icon);
 
- protected:
 
- 	virtual void closeEvent(QCloseEvent *event) override;
 
- 	void reject() override;
 
- public:
 
- 	OBSBasicSettings(QWidget *parent);
 
- 	~OBSBasicSettings();
 
- };
 
 
  |