#pragma once #include #include class StreamingPreferences : public QObject { Q_OBJECT public: StreamingPreferences(QObject *parent = nullptr); Q_INVOKABLE static int getDefaultBitrate(int width, int height, int fps); Q_INVOKABLE void save(); void reload(); enum AudioConfig { AC_STEREO, AC_51_SURROUND, AC_71_SURROUND }; Q_ENUM(AudioConfig) enum VideoCodecConfig { VCC_AUTO, VCC_FORCE_H264, VCC_FORCE_HEVC, VCC_FORCE_HEVC_HDR }; Q_ENUM(VideoCodecConfig) enum VideoDecoderSelection { VDS_AUTO, VDS_FORCE_HARDWARE, VDS_FORCE_SOFTWARE }; Q_ENUM(VideoDecoderSelection) enum WindowMode { WM_FULLSCREEN, WM_FULLSCREEN_DESKTOP, WM_WINDOWED }; Q_ENUM(WindowMode) Q_PROPERTY(int width MEMBER width NOTIFY displayModeChanged) Q_PROPERTY(int height MEMBER height NOTIFY displayModeChanged) Q_PROPERTY(int fps MEMBER fps NOTIFY displayModeChanged) Q_PROPERTY(int bitrateKbps MEMBER bitrateKbps NOTIFY bitrateChanged) Q_PROPERTY(bool enableVsync MEMBER enableVsync NOTIFY enableVsyncChanged) Q_PROPERTY(bool gameOptimizations MEMBER gameOptimizations NOTIFY gameOptimizationsChanged) Q_PROPERTY(bool playAudioOnHost MEMBER playAudioOnHost NOTIFY playAudioOnHostChanged) Q_PROPERTY(bool multiController MEMBER multiController NOTIFY multiControllerChanged) Q_PROPERTY(bool unsupportedFps MEMBER unsupportedFps NOTIFY unsupportedFpsChanged) Q_PROPERTY(bool enableMdns MEMBER enableMdns NOTIFY enableMdnsChanged) Q_PROPERTY(bool quitAppAfter MEMBER quitAppAfter NOTIFY quitAppAfterChanged) Q_PROPERTY(bool absoluteMouseMode MEMBER absoluteMouseMode NOTIFY absoluteMouseModeChanged) Q_PROPERTY(bool absoluteTouchMode MEMBER absoluteTouchMode NOTIFY absoluteTouchModeChanged) Q_PROPERTY(bool startWindowed MEMBER startWindowed NOTIFY startWindowedChanged) Q_PROPERTY(bool framePacing MEMBER framePacing NOTIFY framePacingChanged) Q_PROPERTY(bool connectionWarnings MEMBER connectionWarnings NOTIFY connectionWarningsChanged) Q_PROPERTY(bool richPresence MEMBER richPresence NOTIFY richPresenceChanged) Q_PROPERTY(bool gamepadMouse MEMBER gamepadMouse NOTIFY gamepadMouseChanged) Q_PROPERTY(bool detectNetworkBlocking MEMBER detectNetworkBlocking NOTIFY detectNetworkBlockingChanged); Q_PROPERTY(AudioConfig audioConfig MEMBER audioConfig NOTIFY audioConfigChanged) Q_PROPERTY(VideoCodecConfig videoCodecConfig MEMBER videoCodecConfig NOTIFY videoCodecConfigChanged) Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged) Q_PROPERTY(WindowMode windowMode MEMBER windowMode NOTIFY windowModeChanged) Q_PROPERTY(WindowMode recommendedFullScreenMode MEMBER recommendedFullScreenMode CONSTANT) Q_PROPERTY(bool swapMouseButtons MEMBER swapMouseButtons NOTIFY mouseButtonsChanged) // Directly accessible members for preferences int width; int height; int fps; int bitrateKbps; bool enableVsync; bool gameOptimizations; bool playAudioOnHost; bool multiController; bool unsupportedFps; bool enableMdns; bool quitAppAfter; bool absoluteMouseMode; bool absoluteTouchMode; bool startWindowed; bool framePacing; bool connectionWarnings; bool richPresence; bool gamepadMouse; bool detectNetworkBlocking; bool swapMouseButtons; int packetSize; AudioConfig audioConfig; VideoCodecConfig videoCodecConfig; VideoDecoderSelection videoDecoderSelection; WindowMode windowMode; WindowMode recommendedFullScreenMode; signals: void displayModeChanged(); void bitrateChanged(); void enableVsyncChanged(); void gameOptimizationsChanged(); void playAudioOnHostChanged(); void multiControllerChanged(); void unsupportedFpsChanged(); void enableMdnsChanged(); void quitAppAfterChanged(); void absoluteMouseModeChanged(); void absoluteTouchModeChanged(); void audioConfigChanged(); void videoCodecConfigChanged(); void videoDecoderSelectionChanged(); void windowModeChanged(); void startWindowedChanged(); void framePacingChanged(); void connectionWarningsChanged(); void richPresenceChanged(); void gamepadMouseChanged(); void detectNetworkBlockingChanged(); void mouseButtonsChanged(); };