Compare commits

..
14 Commits
15 changed files with 65 additions and 26 deletions

No files matched your search

+1
View File
@@ -8,6 +8,7 @@ You can follow development on our [Discord server](https://discord.gg/6ERtzFY).
[![Windows AppVeyor Status](https://ci.appveyor.com/api/projects/status/glj5cxqwy2w3bglv/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-qt/branch/master) [![Windows AppVeyor Status](https://ci.appveyor.com/api/projects/status/glj5cxqwy2w3bglv/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-qt/branch/master)
[![Mac and Linux Travis CI Status](https://travis-ci.org/moonlight-stream/moonlight-qt.svg?branch=master)](https://travis-ci.org/moonlight-stream/moonlight-qt) [![Mac and Linux Travis CI Status](https://travis-ci.org/moonlight-stream/moonlight-qt.svg?branch=master)](https://travis-ci.org/moonlight-stream/moonlight-qt)
[![Downloads](https://img.shields.io/github/downloads/moonlight-stream/moonlight-qt/total)](https://github.com/moonlight-stream/moonlight-qt/releases)
## Features ## Features
- Hardware accelerated video decoding on Windows, Mac, and Linux - Hardware accelerated video decoding on Windows, Mac, and Linux
+1
View File
@@ -21,6 +21,7 @@ RichPresenceManager::RichPresenceManager(StreamingPreferences& prefs, QString ga
DiscordRichPresence discordPresence = {}; DiscordRichPresence discordPresence = {};
discordPresence.state = stateStr.data(); discordPresence.state = stateStr.data();
discordPresence.startTimestamp = time(nullptr); discordPresence.startTimestamp = time(nullptr);
discordPresence.largeImageKey = "icon";
Discord_UpdatePresence(&discordPresence); Discord_UpdatePresence(&discordPresence);
} }
#endif #endif
@@ -33,6 +33,19 @@
</screenshots> </screenshots>
<releases> <releases>
<release version="1.1.1" date="2019-09-29">
<description>
<p>Bugfixes:</p>
<ul>
<li>Improved reliability of public IP address detection</li>
<li>Fixed connecting to a host PC with multiple network connections</li>
<li>Fixed a hang after exiting a full-screen stream with GNOME on Wayland</li>
<li>Fixed gamepad hotplugging</li>
<li>Updated to SDL 2.0.10</li>
<li>Updated to Qt 5.13.1</li>
</ul>
</description>
</release>
<release version="1.1.0" date="2019-08-05"> <release version="1.1.0" date="2019-08-05">
<description> <description>
<p>New features:</p> <p>New features:</p>
+2
View File
@@ -151,6 +151,8 @@ CenteredGridView {
text: model.name text: model.name
width: appIcon.width width: appIcon.width
height: model.running ? 175 : appIcon.height height: model.running ? 175 : appIcon.height
leftPadding: 20
rightPadding: 20
anchors.left: appIcon.left anchors.left: appIcon.left
anchors.right: appIcon.right anchors.right: appIcon.right
anchors.bottom: appIcon.bottom anchors.bottom: appIcon.bottom
+1 -1
View File
@@ -239,7 +239,7 @@ ApplicationWindow {
ToolTip.delay: 1000 ToolTip.delay: 1000
ToolTip.timeout: 3000 ToolTip.timeout: 3000
ToolTip.visible: hovered ToolTip.visible: hovered || visible
// Invisible until we get a callback notifying us that // Invisible until we get a callback notifying us that
// an update is available // an update is available
+3 -2
View File
@@ -55,8 +55,9 @@ IAudioRenderer* Session::createAudioRenderer(const POPUS_MULTISTREAM_CONFIGURATI
TRY_INIT_RENDERER(SLAudioRenderer, opusConfig) TRY_INIT_RENDERER(SLAudioRenderer, opusConfig)
#endif #endif
#ifdef Q_OS_LINUX #if !defined(Q_OS_WIN32) && !defined(Q_OS_DARWIN)
// Linux defaults to SDL and fall backs to libsoundio // Linux defaults to SDL due to persistent glitching issues under libsoundio.
// Platforms that libsoundio doesn't support also default to SDL.
TRY_INIT_RENDERER(SdlAudioRenderer, opusConfig) TRY_INIT_RENDERER(SdlAudioRenderer, opusConfig)
#ifdef HAVE_SOUNDIO #ifdef HAVE_SOUNDIO
TRY_INIT_RENDERER(SoundIoAudioRenderer, opusConfig) TRY_INIT_RENDERER(SoundIoAudioRenderer, opusConfig)
+23
View File
@@ -1024,8 +1024,12 @@ void Session::exec(int displayOriginX, int displayOriginY)
// This prevents the mouse from becoming trapped inside // This prevents the mouse from becoming trapped inside
// Moonlight when it's halted at a debug break. // Moonlight when it's halted at a debug break.
if (m_Preferences->windowMode != StreamingPreferences::WM_WINDOWED) { if (m_Preferences->windowMode != StreamingPreferences::WM_WINDOWED) {
// HACK: This doesn't work on Wayland until we render a frame, so
// just don't do it for now.
if (strcmp(SDL_GetCurrentVideoDriver(), "wayland") != 0) {
m_InputHandler->setCaptureActive(true); m_InputHandler->setCaptureActive(true);
} }
}
#endif #endif
// Stop text input. SDL enables it by default // Stop text input. SDL enables it by default
@@ -1268,6 +1272,25 @@ DispatchDeferredCleanup:
m_VideoDecoder = nullptr; m_VideoDecoder = nullptr;
SDL_AtomicUnlock(&m_DecoderLock); SDL_AtomicUnlock(&m_DecoderLock);
if (strcmp(SDL_GetCurrentVideoDriver(), "wayland") == 0) {
// HACK: SDL (as of 2.0.10) has a bug that causes Mutter not to destroy the window
// surface when in full-screen unless we render more frames after we request
// to exit full-screen. The amount of frames required is variable but 500 ms
// of frames seems sufficient in my testing.
SDL_SetWindowFullscreen(m_Window, 0);
SDL_Renderer* renderer = SDL_CreateRenderer(m_Window, -1, SDL_RENDERER_PRESENTVSYNC);
if (renderer != nullptr) {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
for (int i = 0; i < 10; i++)
{
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Delay(50);
}
SDL_DestroyRenderer(renderer);
}
}
// This must be called after the decoder is deleted, because // This must be called after the decoder is deleted, because
// the renderer may want to interact with the window // the renderer may want to interact with the window
SDL_DestroyWindow(m_Window); SDL_DestroyWindow(m_Window);
@@ -68,13 +68,6 @@ bool SdlRenderer::prepareDecoderContext(AVCodecContext*)
return true; return true;
} }
int SdlRenderer::getDecoderCapabilities()
{
// The FFmpeg CPU decoder can handle reference frame invalidation,
// but only for H.264.
return CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC;
}
void SdlRenderer::notifyOverlayUpdated(Overlay::OverlayType type) void SdlRenderer::notifyOverlayUpdated(Overlay::OverlayType type)
{ {
// Construct the required font to render the overlay // Construct the required font to render the overlay
@@ -11,7 +11,6 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params) override; virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool prepareDecoderContext(AVCodecContext* context) override; virtual bool prepareDecoderContext(AVCodecContext* context) override;
virtual void renderFrame(AVFrame* frame) override; virtual void renderFrame(AVFrame* frame) override;
virtual int getDecoderCapabilities() override;
virtual void notifyOverlayUpdated(Overlay::OverlayType) override; virtual void notifyOverlayUpdated(Overlay::OverlayType) override;
virtual bool isRenderThreadSupported() override; virtual bool isRenderThreadSupported() override;
+1 -1
View File
@@ -1 +1 @@
1.1.0 1.1.1
+1 -1
View File
@@ -8,7 +8,7 @@ fail()
} }
if [ "$BUILD_CONFIG" != "Debug" ] && [ "$BUILD_CONFIG" != "Release" ]; then if [ "$BUILD_CONFIG" != "Debug" ] && [ "$BUILD_CONFIG" != "Release" ]; then
fail "Invalid build configuration" fail "Invalid build configuration - expected 'Debug' or 'Release'"
fi fi
[ "$SIGNING_KEY" == "" ] || git diff-index --quiet HEAD -- || fail "Signed release builds must not have unstaged changes!" [ "$SIGNING_KEY" == "" ] || git diff-index --quiet HEAD -- || fail "Signed release builds must not have unstaged changes!"
+17 -11
View File
@@ -1,7 +1,7 @@
rem Run from Qt command prompt with working directory set to root of repo
setlocal enableDelayedExpansion
@echo off @echo off
setlocal enableDelayedExpansion
rem Run from Qt command prompt with working directory set to root of repo
set BUILD_CONFIG=%1 set BUILD_CONFIG=%1
set ARCH=%2 set ARCH=%2
@@ -25,7 +25,7 @@ if /I "%BUILD_CONFIG%"=="debug" (
exit /b 1 exit /b 1
) )
) else ( ) else (
echo Invalid build configuration echo Invalid build configuration - expected 'debug' or 'release'
exit /b 1 exit /b 1
) )
) )
@@ -33,17 +33,13 @@ if /I "%BUILD_CONFIG%"=="debug" (
if /I "%ARCH%" NEQ "x86" ( if /I "%ARCH%" NEQ "x86" (
if /I "%ARCH%" NEQ "x64" ( if /I "%ARCH%" NEQ "x64" (
echo Invalid build architecture echo Invalid build architecture - expected 'x86' or 'x64'
exit /b 1 exit /b 1
) )
) )
set VS_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community
set SIGNTOOL_PARAMS=sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 1B3C676E831A94EC0327C3347EB32C68C26B3A67 /v set SIGNTOOL_PARAMS=sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 1B3C676E831A94EC0327C3347EB32C68C26B3A67 /v
call "%VS_PATH%\VC\Auxiliary\Build\vcvarsall.bat" %ARCH%
if !ERRORLEVEL! NEQ 0 goto Error
set BUILD_ROOT=%cd%\build set BUILD_ROOT=%cd%\build
set SOURCE_ROOT=%cd% set SOURCE_ROOT=%cd%
set BUILD_FOLDER=%BUILD_ROOT%\build-%ARCH%-%BUILD_CONFIG% set BUILD_FOLDER=%BUILD_ROOT%\build-%ARCH%-%BUILD_CONFIG%
@@ -52,6 +48,16 @@ set INSTALLER_FOLDER=%BUILD_ROOT%\installer-%ARCH%-%BUILD_CONFIG%
set SYMBOLS_FOLDER=%BUILD_ROOT%\symbols-%ARCH%-%BUILD_CONFIG% set SYMBOLS_FOLDER=%BUILD_ROOT%\symbols-%ARCH%-%BUILD_CONFIG%
set /p VERSION=<%SOURCE_ROOT%\app\version.txt set /p VERSION=<%SOURCE_ROOT%\app\version.txt
rem Find Visual Studio and run vcvarsall.bat
set VSWHERE="%SOURCE_ROOT%\scripts\vswhere.exe"
for /f "usebackq delims=" %%i in (`%VSWHERE% -latest -property installationPath`) do (
call "%%i\VC\Auxiliary\Build\vcvarsall.bat" %ARCH%
)
if !ERRORLEVEL! NEQ 0 goto Error
rem Find VC redistributable DLLs
for /f "usebackq delims=" %%i in (`%VSWHERE% -latest -find VC\Redist\MSVC\*\%ARCH%\Microsoft.VC*.CRT`) do set VC_REDIST_DLL_PATH=%%i
echo Cleaning output directories echo Cleaning output directories
rmdir /s /q %DEPLOY_FOLDER% rmdir /s /q %DEPLOY_FOLDER%
rmdir /s /q %BUILD_FOLDER% rmdir /s /q %BUILD_FOLDER%
@@ -164,7 +170,6 @@ if "%SIGN%"=="1" (
) )
echo Building bundle echo Building bundle
set VCREDIST_INSTALLER=%VCToolsRedistDir%vcredist_%ARCH%.exe
rem Bundles are always x86 binaries rem Bundles are always x86 binaries
msbuild %SOURCE_ROOT%\wix\MoonlightSetup\MoonlightSetup.wixproj /p:Configuration=%BUILD_CONFIG% /p:Platform=x86 msbuild %SOURCE_ROOT%\wix\MoonlightSetup\MoonlightSetup.wixproj /p:Configuration=%BUILD_CONFIG% /p:Platform=x86
if !ERRORLEVEL! NEQ 0 goto Error if !ERRORLEVEL! NEQ 0 goto Error
@@ -187,7 +192,8 @@ ren %INSTALLER_FOLDER%\MoonlightSetup.exe MoonlightSetup-%ARCH%-%VERSION%.exe
echo Building portable package echo Building portable package
rem This must be done after WiX harvesting and signing, since the VCRT dlls are MS signed rem This must be done after WiX harvesting and signing, since the VCRT dlls are MS signed
rem and should not be harvested for inclusion in the full installer rem and should not be harvested for inclusion in the full installer
copy "%VCToolsRedistDir%%ARCH%\Microsoft.VC141.CRT\*.dll" %DEPLOY_FOLDER% copy "%VC_REDIST_DLL_PATH%\*.dll" %DEPLOY_FOLDER%
if !ERRORLEVEL! NEQ 0 goto Error
rem This file tells Moonlight that it's a portable installation rem This file tells Moonlight that it's a portable installation
echo. > %DEPLOY_FOLDER%\portable.dat echo. > %DEPLOY_FOLDER%\portable.dat
if !ERRORLEVEL! NEQ 0 goto Error if !ERRORLEVEL! NEQ 0 goto Error
Binary file not shown.
+1 -1
View File
@@ -86,7 +86,7 @@
InstallCondition="VCRedist_Present = 2" InstallCondition="VCRedist_Present = 2"
Vital="yes" Vital="yes"
Compressed="yes" Compressed="yes"
SourceFile="$(env.VCREDIST_INSTALLER)" SourceFile="$(env.VCToolsRedistDir)vcredist_$(env.ARCH).exe"
InstallCommand="/install /quiet /norestart"> InstallCommand="/install /quiet /norestart">
<!-- Newer version installed is fine --> <!-- Newer version installed is fine -->
<ExitCode Value="1638" Behavior="success" /> <ExitCode Value="1638" Behavior="success" />