功能:完善2K串流、显示恢复与输入优化
This commit is contained in:
1 parent
e47b01beec
commit
938ec97cce
95 files changed
+5788
-72
No files matched your search
@@ -10,7 +10,11 @@ class MoonlightSessionTest : public QObject {
|
||||
private slots:
|
||||
void parsesSplitReadyMarkers();
|
||||
void requiresBothReadyMarkers();
|
||||
void acceptsSeparateHardwareTestDecoder();
|
||||
void rejectsSecondStart();
|
||||
void buildsConsistentStreamArguments();
|
||||
void selectsProfileWithoutLosingStats();
|
||||
void rejectsInvalidDecoderOverride();
|
||||
};
|
||||
|
||||
void MoonlightSessionTest::parsesSplitReadyMarkers() {
|
||||
@@ -38,6 +42,19 @@ void MoonlightSessionTest::requiresBothReadyMarkers() {
|
||||
QVERIFY(!parser.isReady());
|
||||
}
|
||||
|
||||
void MoonlightSessionTest::acceptsSeparateHardwareTestDecoder() {
|
||||
MoonlightOutputParser parser;
|
||||
parser.append("Using custom H.264 decoder (H264_DECODER_HINT): h264_rkmpp\n");
|
||||
QVERIFY(!parser.isReady());
|
||||
parser.append("Not reusing test decoder for h264_rkmpp\n");
|
||||
QVERIFY(parser.hasTestDecode());
|
||||
QVERIFY(!parser.isReady());
|
||||
parser.append("Renderer 'EGL' with 'DRM' backend chosen\n");
|
||||
QVERIFY(parser.isReady());
|
||||
parser.append("Connection terminated: -1\n");
|
||||
QVERIFY(!parser.isReady());
|
||||
}
|
||||
|
||||
void MoonlightSessionTest::rejectsSecondStart() {
|
||||
QTemporaryDir tempDir;
|
||||
QVERIFY(tempDir.isValid());
|
||||
@@ -90,5 +107,61 @@ void MoonlightSessionTest::rejectsSecondStart() {
|
||||
qputenv("PATH", oldPath);
|
||||
}
|
||||
|
||||
void MoonlightSessionTest::buildsConsistentStreamArguments() {
|
||||
ConnectionTicket ticket;
|
||||
ticket.endpoint = QStringLiteral("192.168.1.70");
|
||||
ticket.app = QStringLiteral("Desktop");
|
||||
ticket.width = 2560;
|
||||
ticket.height = 1440;
|
||||
ticket.fps = 30;
|
||||
|
||||
MoonlightSession::Options options;
|
||||
options.profile = QStringLiteral("low-latency");
|
||||
options.decoder = QStringLiteral("software");
|
||||
options.videoCodec = QStringLiteral("H.264");
|
||||
options.vsync = false;
|
||||
options.framePacing = false;
|
||||
options.performanceOverlay = true;
|
||||
|
||||
const QStringList args = MoonlightSession::buildStreamArguments(ticket, options);
|
||||
QVERIFY(args.contains(QStringLiteral("--resolution")));
|
||||
QVERIFY(args.contains(QStringLiteral("2560x1440")));
|
||||
QVERIFY(args.contains(QStringLiteral("--fps")));
|
||||
QVERIFY(args.contains(QStringLiteral("30")));
|
||||
QVERIFY(args.contains(QStringLiteral("--bitrate")));
|
||||
QVERIFY(args.contains(QStringLiteral("30000")));
|
||||
QVERIFY(args.contains(QStringLiteral("--no-vsync")));
|
||||
QVERIFY(args.contains(QStringLiteral("--no-frame-pacing")));
|
||||
QVERIFY(args.contains(QStringLiteral("--performance-overlay")));
|
||||
QVERIFY(args.contains(QStringLiteral("--absolute-mouse")));
|
||||
}
|
||||
|
||||
void MoonlightSessionTest::selectsProfileWithoutLosingStats() {
|
||||
QProcessEnvironment environment;
|
||||
environment.insert(QStringLiteral("VDI_STREAM_PROFILE"), QStringLiteral("low-latency"));
|
||||
environment.insert(QStringLiteral("VDI_STREAM_STATS"), QStringLiteral("1"));
|
||||
auto options = MoonlightSession::optionsFromEnvironment(environment);
|
||||
QVERIFY(!options.vsync);
|
||||
QVERIFY(!options.framePacing);
|
||||
QVERIFY(options.performanceOverlay);
|
||||
environment.insert(QStringLiteral("VDI_STREAM_PROFILE"), QStringLiteral("smooth"));
|
||||
options = MoonlightSession::optionsFromEnvironment(environment);
|
||||
QVERIFY(options.vsync);
|
||||
QVERIFY(options.framePacing);
|
||||
QVERIFY(options.performanceOverlay);
|
||||
}
|
||||
|
||||
void MoonlightSessionTest::rejectsInvalidDecoderOverride() {
|
||||
QProcessEnvironment environment;
|
||||
environment.insert(QStringLiteral("VDI_MOONLIGHT_DECODER"), QStringLiteral("h264_rkmpp"));
|
||||
environment.insert(QStringLiteral("VDI_STREAM_PROFILE"), QStringLiteral("invalid"));
|
||||
auto options = MoonlightSession::optionsFromEnvironment(environment);
|
||||
QCOMPARE(options.decoder, QStringLiteral("software"));
|
||||
QCOMPARE(options.profile, QStringLiteral("smooth"));
|
||||
environment.insert(QStringLiteral("VDI_MOONLIGHT_DECODER"), QStringLiteral("hardware"));
|
||||
options = MoonlightSession::optionsFromEnvironment(environment);
|
||||
QCOMPARE(options.decoder, QStringLiteral("hardware"));
|
||||
}
|
||||
|
||||
QTEST_GUILESS_MAIN(MoonlightSessionTest)
|
||||
#include "test_moonlight_session.moc"
|
||||
Reference in new issue
Block a user