diff --git a/app/app.pro b/app/app.pro index 7f0dcebb..3934a483 100644 --- a/app/app.pro +++ b/app/app.pro @@ -34,15 +34,26 @@ macx { unix:!macx { CONFIG += link_pkgconfig - PKGCONFIG += openssl sdl2 libavcodec libavdevice libavformat libavutil + PKGCONFIG += openssl sdl2 LIBS += -ldl + + packagesExist(libavcodec) { + PKGCONFIG += libavcodec libavdevice libavformat libavutil + CONFIG += ffmpeg + + packagesExist(libva) { + CONFIG += libva + } + } } win32 { LIBS += -llibssl -llibcrypto -lSDL2 -lavcodec -lavdevice -lavformat -lavutil + CONFIG += ffmpeg } macx { LIBS += -lssl -lcrypto -lSDL2 -lavcodec.58 -lavdevice.58 -lavformat.58 -lavutil.56 LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit + CONFIG += ffmpeg } SOURCES += \ @@ -56,20 +67,8 @@ SOURCES += \ streaming/input.cpp \ streaming/session.cpp \ streaming/audio.cpp \ - streaming/video/ffmpeg.cpp \ gui/computermodel.cpp \ - gui/appmodel.cpp \ - streaming/video/ffmpeg-renderers/sdl.cpp - -win32 { - SOURCES += streaming/video/ffmpeg-renderers/dxva2.cpp -} -macx { - SOURCES += streaming/video/ffmpeg-renderers/vt.mm -} -unix:!macx { - SOURCES += streaming/video/ffmpeg-renderers/vaapi.cpp -} + gui/appmodel.cpp HEADERS += \ utils.h \ @@ -83,19 +82,38 @@ HEADERS += \ streaming/session.hpp \ gui/computermodel.h \ gui/appmodel.h \ - streaming/video/decoder.h \ - streaming/video/ffmpeg.h \ - streaming/video/ffmpeg-renderers/renderer.h + streaming/video/decoder.h +# Platform-specific renderers and decoders +ffmpeg { + message(FFmpeg decoder selected) + + DEFINES += HAVE_FFMPEG + SOURCES += \ + streaming/video/ffmpeg.cpp \ + streaming/video/ffmpeg-renderers/sdl.cpp + HEADERS += \ + streaming/video/ffmpeg.h \ + streaming/video/ffmpeg-renderers/renderer.h +} +libva { + message(VAAPI renderer selected) + + DEFINES += HAVE_LIBVA + SOURCES += streaming/video/ffmpeg-renderers/vaapi.cpp +} win32 { + message(DXVA2 renderer selected) + + SOURCES += streaming/video/ffmpeg-renderers/dxva2.cpp HEADERS += streaming/video/ffmpeg-renderers/dxva2.h } macx { + message(VideoToolbox renderer selected) + + SOURCES += streaming/video/ffmpeg-renderers/vt.mm HEADERS += streaming/video/ffmpeg-renderers/vt.h } -unix { - HEADERS += streaming/video/ffmpeg-renderers/vaapi.h -} RESOURCES += \ resources.qrc \ diff --git a/app/streaming/audio.cpp b/app/streaming/audio.cpp index 7a372453..11c1aaac 100644 --- a/app/streaming/audio.cpp +++ b/app/streaming/audio.cpp @@ -127,7 +127,7 @@ int Session::sdlAudioInit(int /* audioConfiguration */, // pending data count. Get a baseline so we // can exclude that data. s_BaselinePendingData = 0; -#ifdef _WIN32 +#ifdef Q_OS_WIN32 for (int i = 0; i < 100; i++) { s_BaselinePendingData = qMax(s_BaselinePendingData, SDL_GetQueuedAudioSize(s_AudioDevice)); SDL_Delay(10); diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index bf4fda81..9d3d7a51 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -82,6 +82,7 @@ bool Session::chooseDecoder(StreamingPreferences::VideoDecoderSelection vds, SDL_Window* window, int videoFormat, int width, int height, int frameRate, IVideoDecoder*& chosenDecoder) { +#ifdef HAVE_FFMPEG chosenDecoder = new FFmpegVideoDecoder(); if (chosenDecoder->initialize(vds, window, videoFormat, width, height, frameRate)) { SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, @@ -94,6 +95,7 @@ bool Session::chooseDecoder(StreamingPreferences::VideoDecoderSelection vds, delete chosenDecoder; chosenDecoder = nullptr; } +#endif // If we reach this, we didn't initialize any decoders successfully return false; diff --git a/app/streaming/video/ffmpeg.cpp b/app/streaming/video/ffmpeg.cpp index ec044085..0bd9d6e1 100644 --- a/app/streaming/video/ffmpeg.cpp +++ b/app/streaming/video/ffmpeg.cpp @@ -1,13 +1,15 @@ #include #include "ffmpeg.h" -#ifdef _WIN32 +#ifdef Q_OS_WIN32 #include "ffmpeg-renderers/dxva2.h" #endif -#ifdef __APPLE__ +#ifdef Q_OS_DARWIN #include "ffmpeg-renderers/vt.h" -#elif defined Q_OS_UNIX +#endif + +#ifdef HAVE_LIBVA #include "ffmpeg-renderers/vaapi.h" #endif @@ -62,16 +64,17 @@ bool FFmpegVideoDecoder::chooseDecoder( // Look for acceleration types we support switch (config->device_type) { -#ifdef _WIN32 +#ifdef Q_OS_WIN32 case AV_HWDEVICE_TYPE_DXVA2: newRenderer = new DXVA2Renderer(); break; #endif -#ifdef __APPLE__ +#ifdef Q_OS_DARWIN case AV_HWDEVICE_TYPE_VIDEOTOOLBOX: newRenderer = VTRendererFactory::createRenderer(); break; -#elif defined Q_OS_UNIX +#endif +#ifdef HAVE_LIBVA case AV_HWDEVICE_TYPE_VAAPI: newRenderer = new VAAPIRenderer(); break;