mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2025-07-01 23:35:55 +00:00
More PoC streaming code (closer to final)
This commit is contained in:
parent
94ecc4a1c8
commit
cad95f12f6
@ -6,6 +6,9 @@
|
||||
#include "streaming/streaming.h"
|
||||
#include "backend/computermanager.h"
|
||||
#include "backend/boxartmanager.h"
|
||||
#include "settings/streamingpreferences.h"
|
||||
|
||||
#include <QRandomGenerator>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
@ -48,18 +51,68 @@ void MainWindow::computerStateChanged(NvComputer* computer)
|
||||
QString pin = pm.generatePinString();
|
||||
pm.pair(http.getServerInfo(), pin);
|
||||
}
|
||||
else {
|
||||
else if (!computer->appList.isEmpty()) {
|
||||
QImage im = m_BoxArtManager.loadBoxArt(computer, computer->appList[0]);
|
||||
|
||||
#if 0
|
||||
STREAM_CONFIGURATION sc;
|
||||
LiInitializeStreamConfiguration(&sc);
|
||||
sc.width = 1280;
|
||||
sc.height = 720;
|
||||
sc.fps = 60;
|
||||
sc.packetSize = 1024;
|
||||
sc.bitrate = 10000;
|
||||
sc.audioConfiguration = AUDIO_CONFIGURATION_51_SURROUND;
|
||||
// Stop polling before launching a game
|
||||
m_ComputerManager.stopPollingAsync();
|
||||
|
||||
#if 1
|
||||
STREAM_CONFIGURATION streamConfig;
|
||||
StreamingPreferences prefs;
|
||||
|
||||
LiInitializeStreamConfiguration(&streamConfig);
|
||||
// TODO: Validate 4K and 4K60 based on serverinfo
|
||||
streamConfig.width = prefs.width;
|
||||
streamConfig.height = prefs.height;
|
||||
streamConfig.fps = prefs.fps;
|
||||
streamConfig.bitrate = prefs.bitrateKbps;
|
||||
streamConfig.packetSize = 1024;
|
||||
streamConfig.hevcBitratePercentageMultiplier = 75;
|
||||
for (int i = 0; i < sizeof(streamConfig.remoteInputAesKey); i++) {
|
||||
streamConfig.remoteInputAesKey[i] =
|
||||
(char)(QRandomGenerator::global()->generate() % 256);
|
||||
}
|
||||
*(int*)streamConfig.remoteInputAesIv = qToBigEndian(QRandomGenerator::global()->generate());
|
||||
switch (prefs.audioConfig)
|
||||
{
|
||||
case StreamingPreferences::AC_AUTO:
|
||||
streamConfig.audioConfiguration = SdlDetermineAudioConfiguration();
|
||||
break;
|
||||
case StreamingPreferences::AC_FORCE_STEREO:
|
||||
streamConfig.audioConfiguration = AUDIO_CONFIGURATION_STEREO;
|
||||
break;
|
||||
case StreamingPreferences::AC_FORCE_SURROUND:
|
||||
streamConfig.audioConfiguration = AUDIO_CONFIGURATION_51_SURROUND;
|
||||
break;
|
||||
}
|
||||
switch (prefs.videoCodecConfig)
|
||||
{
|
||||
case StreamingPreferences::VCC_AUTO:
|
||||
// TODO: Determine if HEVC is better depending on the decoder
|
||||
streamConfig.supportsHevc = true;
|
||||
streamConfig.enableHdr = false;
|
||||
break;
|
||||
case StreamingPreferences::VCC_FORCE_H264:
|
||||
streamConfig.supportsHevc = false;
|
||||
streamConfig.enableHdr = false;
|
||||
break;
|
||||
case StreamingPreferences::VCC_FORCE_HEVC:
|
||||
streamConfig.supportsHevc = true;
|
||||
streamConfig.enableHdr = false;
|
||||
break;
|
||||
case StreamingPreferences::VCC_FORCE_HEVC_HDR:
|
||||
streamConfig.supportsHevc = true;
|
||||
streamConfig.enableHdr = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO: Validate HEVC support based on decoder caps
|
||||
// TODO: Validate HDR support based on decoder caps, display, server caps, and app
|
||||
|
||||
// Initialize the gamepad code with our preferences
|
||||
// Note: must be done before SdlGetAttachedGamepadMask!
|
||||
SdlInitializeGamepad(prefs.multiController);
|
||||
|
||||
QMessageBox* box = new QMessageBox(nullptr);
|
||||
box->setAttribute(Qt::WA_DeleteOnClose); //makes sure the msgbox is deleted automatically when closed
|
||||
@ -68,24 +121,27 @@ void MainWindow::computerStateChanged(NvComputer* computer)
|
||||
box->open();
|
||||
|
||||
if (computer->currentGameId != 0) {
|
||||
http.resumeApp(&sc);
|
||||
http.resumeApp(&streamConfig);
|
||||
}
|
||||
else {
|
||||
http.launchApp(999999, &sc, true, false, SdlGetAttachedGamepadMask());
|
||||
http.launchApp(999999, &streamConfig,
|
||||
prefs.enableGameOptimizations,
|
||||
prefs.playAudioOnHost,
|
||||
SdlGetAttachedGamepadMask());
|
||||
}
|
||||
|
||||
SERVER_INFORMATION si;
|
||||
SERVER_INFORMATION hostInfo;
|
||||
QString serverInfo = http.getServerInfo();
|
||||
|
||||
QByteArray hostnameStr = computer->activeAddress.toLatin1();
|
||||
QByteArray siAppVersion = http.getXmlString(serverInfo, "appversion").toLatin1();
|
||||
QByteArray siGfeVersion = http.getXmlString(serverInfo, "GfeVersion").toLatin1();
|
||||
|
||||
si.address = hostnameStr.data();
|
||||
si.serverInfoAppVersion = siAppVersion.data();
|
||||
si.serverInfoGfeVersion = siGfeVersion.data();
|
||||
hostInfo.address = hostnameStr.data();
|
||||
hostInfo.serverInfoAppVersion = siAppVersion.data();
|
||||
hostInfo.serverInfoGfeVersion = siGfeVersion.data();
|
||||
|
||||
StartConnection(&si, &sc, box);
|
||||
StartConnection(&hostInfo, &streamConfig, box);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -95,8 +151,6 @@ void MainWindow::on_newHostBtn_clicked()
|
||||
QString hostname = popupmanager::getHostnameDialog(this);
|
||||
if (!hostname.isEmpty()) {
|
||||
m_ComputerManager.addNewHost(hostname, false);
|
||||
QThread::sleep(10);
|
||||
m_ComputerManager.stopPollingAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user