#pragma once #include #include #include "backend/computermanager.h" #include "input.hpp" class Session : public QObject { Q_OBJECT public: explicit Session(NvComputer* computer, NvApp& app); Q_INVOKABLE void exec(); signals: void stageStarting(QString stage); void stageFailed(QString stage, long errorCode); void connectionStarted(); void displayLaunchError(QString text); void displayLaunchWarning(QString text); private: bool validateLaunch(); static void clStageStarting(int stage); static void clStageFailed(int stage, long errorCode); static void clConnectionTerminated(long errorCode); static void clLogMessage(const char* format, ...); static int sdlDetermineAudioConfiguration(); static int sdlAudioInit(int audioConfiguration, POPUS_MULTISTREAM_CONFIGURATION opusConfig, void* arContext, int arFlags); static void sdlAudioStart(); static void sdlAudioStop(); static void sdlAudioCleanup(); static void sdlAudioDecodeAndPlaySample(char* sampleData, int sampleLength); STREAM_CONFIGURATION m_StreamConfig; NvComputer* m_Computer; NvApp m_App; static SDL_AudioDeviceID s_AudioDevice; static OpusMSDecoder* s_OpusDecoder; static short s_OpusDecodeBuffer[]; static int s_ChannelCount; static AUDIO_RENDERER_CALLBACKS k_AudioCallbacks; static DECODER_RENDERER_CALLBACKS k_VideoCallbacks; static CONNECTION_LISTENER_CALLBACKS k_ConnCallbacks; static Session* s_ActiveSession; };