mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2025-07-02 15:55:39 +00:00
Overhaul platform and decoder/renderer detection
This commit is contained in:
parent
c816a6198c
commit
eb536c2273
58
app/app.pro
58
app/app.pro
@ -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 \
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user