diff --git a/.travis.yml b/.travis.yml index cd2f7c92..cf1fa282 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ matrix: - libavutil-dev - libva-dev - libvdpau-dev + - portaudio19-dev install: - '[ "$TRAVIS_OS_NAME" != osx ] || brew install qt5' diff --git a/README.md b/README.md index d5de258f..9e5c81da 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ You can follow development on our [Discord server](https://discord.gg/6ERtzFY). 1. Install the latest Qt SDK (and optionally, the Qt Creator IDE) from https://www.qt.io/download - On Windows, install Visual Studio 2017 and select MSVC 2017 toolchain during Qt installation - On Mac, install the latest version of XCode - - On Linux, install your distro equivalents of: `openssl-devel qt5-devel SDL2-devel ffmpeg-devel qt5-qtquickcontrols2-devel libva-devel libvdpau-devel` + - On Linux, install your distro equivalents of: `openssl-devel qt5-devel SDL2-devel ffmpeg-devel qt5-qtquickcontrols2-devel libva-devel libvdpau-devel opus-devel portaudio-devel` 2. Run `git submodule update --init --recursive` from within `moonlight-qt/` 3. Open the project in Qt Creator or build from qmake on the command line diff --git a/app/app.pro b/app/app.pro index a9596ca8..95128b4a 100644 --- a/app/app.pro +++ b/app/app.pro @@ -55,6 +55,11 @@ unix:!macx { CONFIG += link_pkgconfig PKGCONFIG += openssl sdl2 opus + packagesExist(portaudio-2.0) { + PKGCONFIG += portaudio-2.0 + CONFIG += portaudio + } + packagesExist(libavcodec) { PKGCONFIG += libavcodec libavutil CONFIG += ffmpeg @@ -75,13 +80,13 @@ unix:!macx { } } win32 { - LIBS += -llibssl -llibcrypto -lSDL2 -lavcodec -lavutil -lopus - CONFIG += ffmpeg + LIBS += -llibssl -llibcrypto -lSDL2 -lavcodec -lavutil -lopus -lportaudio + CONFIG += ffmpeg portaudio } macx { - LIBS += -lssl -lcrypto -lavcodec.58 -lavutil.56 -lopus -framework SDL2 + LIBS += -lssl -lcrypto -lavcodec.58 -lavutil.56 -lopus -lportaudio -framework SDL2 LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit - CONFIG += ffmpeg + CONFIG += ffmpeg portaudio } SOURCES += \ @@ -95,7 +100,6 @@ SOURCES += \ streaming/input.cpp \ streaming/session.cpp \ streaming/audio/audio.cpp \ - streaming/audio/renderers/sdlaud.cpp \ gui/computermodel.cpp \ gui/appmodel.cpp \ streaming/streamutils.cpp \ @@ -113,7 +117,6 @@ HEADERS += \ streaming/input.hpp \ streaming/session.hpp \ streaming/audio/renderers/renderer.h \ - streaming/audio/renderers/sdl.h \ gui/computermodel.h \ gui/appmodel.h \ streaming/video/decoder.h \ @@ -171,8 +174,14 @@ config_SLVideo { DEFINES += HAVE_SLVIDEO LIBS += -lSLVideo - SOURCES += streaming/video/sl.cpp - HEADERS += streaming/video/sl.h + + SOURCES += \ + streaming/video/sl.cpp \ + streaming/audio/renderers/sdlaud.cpp + + HEADERS += \ + streaming/video/sl.h \ + streaming/audio/renderers/sdl.h } win32 { message(DXVA2 renderer selected) @@ -196,6 +205,13 @@ macx { streaming/video/ffmpeg-renderers/vt.h \ streaming/video/ffmpeg-renderers/pacer/displaylinkvsyncsource.h } +portaudio { + message(PortAudio audio renderer selected) + + DEFINES += HAVE_PORTAUDIO + SOURCES += streaming/audio/renderers/portaudiorenderer.cpp + HEADERS += streaming/audio/renderers/portaudiorenderer.h +} RESOURCES += \ resources.qrc \ diff --git a/app/streaming/audio/audio.cpp b/app/streaming/audio/audio.cpp index ba6c2f59..df9d0e15 100644 --- a/app/streaming/audio/audio.cpp +++ b/app/streaming/audio/audio.cpp @@ -1,12 +1,21 @@ #include "../session.hpp" #include "renderers/renderer.h" + +#ifdef HAVE_PORTAUDIO +#include "renderers/portaudiorenderer.h" +#else #include "renderers/sdl.h" +#endif #include IAudioRenderer* Session::createAudioRenderer() { +#ifdef HAVE_PORTAUDIO + return new PortAudioRenderer(); +#else return new SdlAudioRenderer(); +#endif } bool Session::testAudio(int audioConfiguration) diff --git a/app/streaming/audio/renderers/portaudiorenderer.cpp b/app/streaming/audio/renderers/portaudiorenderer.cpp index 70bb8e79..05446526 100644 --- a/app/streaming/audio/renderers/portaudiorenderer.cpp +++ b/app/streaming/audio/renderers/portaudiorenderer.cpp @@ -164,7 +164,7 @@ int PortAudioRenderer::detectAudioConfiguration() } } -int PortAudioRenderer::paStreamCallback(const void*, void* output, unsigned long frameCount, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags statusFlags, void* userData) +int PortAudioRenderer::paStreamCallback(const void*, void* output, unsigned long frameCount, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags, void* userData) { auto me = reinterpret_cast(userData); diff --git a/app/streaming/audio/renderers/sdl.h b/app/streaming/audio/renderers/sdl.h index 614919a0..b210a4c2 100644 --- a/app/streaming/audio/renderers/sdl.h +++ b/app/streaming/audio/renderers/sdl.h @@ -3,6 +3,11 @@ #include "renderer.h" #include +#ifndef HAVE_SLVIDEO +#error SDL audio backend is only available for Steam Link +#error Please install PortAudio to build for Linux +#endif + class SdlAudioRenderer : public IAudioRenderer { public: