Overhaul platform and decoder/renderer detection

This commit is contained in:
Cameron Gutman 2018-07-21 17:00:09 -07:00
parent c816a6198c
commit eb536c2273
4 changed files with 50 additions and 27 deletions

View File

@ -34,15 +34,26 @@ macx {
unix:!macx { unix:!macx {
CONFIG += link_pkgconfig CONFIG += link_pkgconfig
PKGCONFIG += openssl sdl2 libavcodec libavdevice libavformat libavutil PKGCONFIG += openssl sdl2
LIBS += -ldl LIBS += -ldl
packagesExist(libavcodec) {
PKGCONFIG += libavcodec libavdevice libavformat libavutil
CONFIG += ffmpeg
packagesExist(libva) {
CONFIG += libva
}
}
} }
win32 { win32 {
LIBS += -llibssl -llibcrypto -lSDL2 -lavcodec -lavdevice -lavformat -lavutil LIBS += -llibssl -llibcrypto -lSDL2 -lavcodec -lavdevice -lavformat -lavutil
CONFIG += ffmpeg
} }
macx { macx {
LIBS += -lssl -lcrypto -lSDL2 -lavcodec.58 -lavdevice.58 -lavformat.58 -lavutil.56 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 LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit
CONFIG += ffmpeg
} }
SOURCES += \ SOURCES += \
@ -56,20 +67,8 @@ SOURCES += \
streaming/input.cpp \ streaming/input.cpp \
streaming/session.cpp \ streaming/session.cpp \
streaming/audio.cpp \ streaming/audio.cpp \
streaming/video/ffmpeg.cpp \
gui/computermodel.cpp \ gui/computermodel.cpp \
gui/appmodel.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
}
HEADERS += \ HEADERS += \
utils.h \ utils.h \
@ -83,19 +82,38 @@ HEADERS += \
streaming/session.hpp \ streaming/session.hpp \
gui/computermodel.h \ gui/computermodel.h \
gui/appmodel.h \ gui/appmodel.h \
streaming/video/decoder.h \ streaming/video/decoder.h
streaming/video/ffmpeg.h \
streaming/video/ffmpeg-renderers/renderer.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 { win32 {
message(DXVA2 renderer selected)
SOURCES += streaming/video/ffmpeg-renderers/dxva2.cpp
HEADERS += streaming/video/ffmpeg-renderers/dxva2.h HEADERS += streaming/video/ffmpeg-renderers/dxva2.h
} }
macx { macx {
message(VideoToolbox renderer selected)
SOURCES += streaming/video/ffmpeg-renderers/vt.mm
HEADERS += streaming/video/ffmpeg-renderers/vt.h HEADERS += streaming/video/ffmpeg-renderers/vt.h
} }
unix {
HEADERS += streaming/video/ffmpeg-renderers/vaapi.h
}
RESOURCES += \ RESOURCES += \
resources.qrc \ resources.qrc \

View File

@ -127,7 +127,7 @@ int Session::sdlAudioInit(int /* audioConfiguration */,
// pending data count. Get a baseline so we // pending data count. Get a baseline so we
// can exclude that data. // can exclude that data.
s_BaselinePendingData = 0; s_BaselinePendingData = 0;
#ifdef _WIN32 #ifdef Q_OS_WIN32
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
s_BaselinePendingData = qMax(s_BaselinePendingData, SDL_GetQueuedAudioSize(s_AudioDevice)); s_BaselinePendingData = qMax(s_BaselinePendingData, SDL_GetQueuedAudioSize(s_AudioDevice));
SDL_Delay(10); SDL_Delay(10);

View File

@ -82,6 +82,7 @@ bool Session::chooseDecoder(StreamingPreferences::VideoDecoderSelection vds,
SDL_Window* window, int videoFormat, int width, int height, SDL_Window* window, int videoFormat, int width, int height,
int frameRate, IVideoDecoder*& chosenDecoder) int frameRate, IVideoDecoder*& chosenDecoder)
{ {
#ifdef HAVE_FFMPEG
chosenDecoder = new FFmpegVideoDecoder(); chosenDecoder = new FFmpegVideoDecoder();
if (chosenDecoder->initialize(vds, window, videoFormat, width, height, frameRate)) { if (chosenDecoder->initialize(vds, window, videoFormat, width, height, frameRate)) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
@ -94,6 +95,7 @@ bool Session::chooseDecoder(StreamingPreferences::VideoDecoderSelection vds,
delete chosenDecoder; delete chosenDecoder;
chosenDecoder = nullptr; chosenDecoder = nullptr;
} }
#endif
// If we reach this, we didn't initialize any decoders successfully // If we reach this, we didn't initialize any decoders successfully
return false; return false;

View File

@ -1,13 +1,15 @@
#include <Limelight.h> #include <Limelight.h>
#include "ffmpeg.h" #include "ffmpeg.h"
#ifdef _WIN32 #ifdef Q_OS_WIN32
#include "ffmpeg-renderers/dxva2.h" #include "ffmpeg-renderers/dxva2.h"
#endif #endif
#ifdef __APPLE__ #ifdef Q_OS_DARWIN
#include "ffmpeg-renderers/vt.h" #include "ffmpeg-renderers/vt.h"
#elif defined Q_OS_UNIX #endif
#ifdef HAVE_LIBVA
#include "ffmpeg-renderers/vaapi.h" #include "ffmpeg-renderers/vaapi.h"
#endif #endif
@ -62,16 +64,17 @@ bool FFmpegVideoDecoder::chooseDecoder(
// Look for acceleration types we support // Look for acceleration types we support
switch (config->device_type) { switch (config->device_type) {
#ifdef _WIN32 #ifdef Q_OS_WIN32
case AV_HWDEVICE_TYPE_DXVA2: case AV_HWDEVICE_TYPE_DXVA2:
newRenderer = new DXVA2Renderer(); newRenderer = new DXVA2Renderer();
break; break;
#endif #endif
#ifdef __APPLE__ #ifdef Q_OS_DARWIN
case AV_HWDEVICE_TYPE_VIDEOTOOLBOX: case AV_HWDEVICE_TYPE_VIDEOTOOLBOX:
newRenderer = VTRendererFactory::createRenderer(); newRenderer = VTRendererFactory::createRenderer();
break; break;
#elif defined Q_OS_UNIX #endif
#ifdef HAVE_LIBVA
case AV_HWDEVICE_TYPE_VAAPI: case AV_HWDEVICE_TYPE_VAAPI:
newRenderer = new VAAPIRenderer(); newRenderer = new VAAPIRenderer();
break; break;