mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-07-29 08:53:03 +02:00
Runtime Implib detection
This commit is contained in:
parent
56ff5808a3
commit
3896f0995c
2 changed files with 26 additions and 23 deletions
|
@ -10,10 +10,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "base/algorithm.h"
|
#include "base/algorithm.h"
|
||||||
#include "logs.h"
|
#include "logs.h"
|
||||||
|
|
||||||
#ifdef LIB_FFMPEG_USE_IMPLIB
|
#if !defined Q_OS_WIN && !defined Q_OS_MAC
|
||||||
#include "base/platform/linux/base_linux_library.h"
|
#include "base/platform/linux/base_linux_library.h"
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#endif // LIB_FFMPEG_USE_IMPLIB
|
#endif // !Q_OS_WIN && !Q_OS_MAC
|
||||||
|
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
|
||||||
|
@ -26,6 +26,16 @@ extern "C" {
|
||||||
#include <libavutil/display.h>
|
#include <libavutil/display.h>
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
|
||||||
|
#if !defined Q_OS_WIN && !defined Q_OS_MAC
|
||||||
|
extern "C" {
|
||||||
|
void _libvdpau_so_tramp_resolve_all(void) __attribute__((weak));
|
||||||
|
void _libva_drm_so_tramp_resolve_all(void) __attribute__((weak));
|
||||||
|
void _libva_x11_so_tramp_resolve_all(void) __attribute__((weak));
|
||||||
|
void _libva_so_tramp_resolve_all(void) __attribute__((weak));
|
||||||
|
void _libdrm_so_tramp_resolve_all(void) __attribute__((weak));
|
||||||
|
} // extern "C"
|
||||||
|
#endif // !Q_OS_WIN && !Q_OS_MAC
|
||||||
|
|
||||||
namespace FFmpeg {
|
namespace FFmpeg {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -91,23 +101,24 @@ void PremultiplyLine(uchar *dst, const uchar *src, int intsCount) {
|
||||||
#endif // LIB_FFMPEG_USE_QT_PRIVATE_API
|
#endif // LIB_FFMPEG_USE_QT_PRIVATE_API
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LIB_FFMPEG_USE_IMPLIB
|
#if !defined Q_OS_WIN && !defined Q_OS_MAC
|
||||||
[[nodiscard]] auto CheckHwLibs() {
|
[[nodiscard]] auto CheckHwLibs() {
|
||||||
auto list = std::deque{
|
auto list = std::deque{
|
||||||
AV_PIX_FMT_CUDA,
|
AV_PIX_FMT_CUDA,
|
||||||
};
|
};
|
||||||
if (base::Platform::LoadLibrary("libvdpau.so.1")) {
|
if (!_libvdpau_so_tramp_resolve_all
|
||||||
|
|| base::Platform::LoadLibrary("libvdpau.so.1")) {
|
||||||
list.push_front(AV_PIX_FMT_VDPAU);
|
list.push_front(AV_PIX_FMT_VDPAU);
|
||||||
}
|
}
|
||||||
if ([&] {
|
if ([&] {
|
||||||
const auto list = std::array{
|
const auto list = std::array{
|
||||||
"libva-drm.so.2",
|
std::make_pair(_libva_drm_so_tramp_resolve_all, "libva-drm.so.2"),
|
||||||
"libva-x11.so.2",
|
std::make_pair(_libva_x11_so_tramp_resolve_all, "libva-x11.so.2"),
|
||||||
"libva.so.2",
|
std::make_pair(_libva_so_tramp_resolve_all, "libva.so.2"),
|
||||||
"libdrm.so.2",
|
std::make_pair(_libdrm_so_tramp_resolve_all, "libdrm.so.2"),
|
||||||
};
|
};
|
||||||
for (const auto lib : list) {
|
for (const auto &lib : list) {
|
||||||
if (!base::Platform::LoadLibrary(lib)) {
|
if (lib.first && !base::Platform::LoadLibrary(lib.second)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,7 +128,7 @@ void PremultiplyLine(uchar *dst, const uchar *src, int intsCount) {
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
#endif // LIB_FFMPEG_USE_IMPLIB
|
#endif // !Q_OS_WIN && !Q_OS_MAC
|
||||||
|
|
||||||
[[nodiscard]] bool InitHw(AVCodecContext *context, AVHWDeviceType type) {
|
[[nodiscard]] bool InitHw(AVCodecContext *context, AVHWDeviceType type) {
|
||||||
AVCodecContext *parent = static_cast<AVCodecContext*>(context->opaque);
|
AVCodecContext *parent = static_cast<AVCodecContext*>(context->opaque);
|
||||||
|
@ -160,9 +171,7 @@ void PremultiplyLine(uchar *dst, const uchar *src, int intsCount) {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
#ifdef LIB_FFMPEG_USE_IMPLIB
|
#if defined Q_OS_WIN || defined Q_OS_MAC
|
||||||
static const auto list = CheckHwLibs();
|
|
||||||
#else // LIB_FFMPEG_USE_IMPLIB
|
|
||||||
const auto list = std::array{
|
const auto list = std::array{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
AV_PIX_FMT_D3D11,
|
AV_PIX_FMT_D3D11,
|
||||||
|
@ -170,13 +179,11 @@ void PremultiplyLine(uchar *dst, const uchar *src, int intsCount) {
|
||||||
AV_PIX_FMT_CUDA,
|
AV_PIX_FMT_CUDA,
|
||||||
#elif defined Q_OS_MAC // Q_OS_WIN
|
#elif defined Q_OS_MAC // Q_OS_WIN
|
||||||
AV_PIX_FMT_VIDEOTOOLBOX,
|
AV_PIX_FMT_VIDEOTOOLBOX,
|
||||||
#else // Q_OS_WIN || Q_OS_MAC
|
|
||||||
AV_PIX_FMT_VAAPI,
|
|
||||||
AV_PIX_FMT_VDPAU,
|
|
||||||
AV_PIX_FMT_CUDA,
|
|
||||||
#endif // Q_OS_WIN || Q_OS_MAC
|
#endif // Q_OS_WIN || Q_OS_MAC
|
||||||
};
|
};
|
||||||
#endif // LIB_FFMPEG_USE_IMPLIB
|
#else // Q_OS_WIN || Q_OS_MAC
|
||||||
|
static const auto list = CheckHwLibs();
|
||||||
|
#endif // !Q_OS_WIN && !Q_OS_MAC
|
||||||
for (const auto format : list) {
|
for (const auto format : list) {
|
||||||
if (!has(format)) {
|
if (!has(format)) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -29,10 +29,6 @@ PUBLIC
|
||||||
desktop-app::external_ffmpeg
|
desktop-app::external_ffmpeg
|
||||||
)
|
)
|
||||||
|
|
||||||
if (LINUX AND NOT DESKTOP_APP_USE_PACKAGED)
|
|
||||||
target_compile_definitions(lib_ffmpeg PRIVATE LIB_FFMPEG_USE_IMPLIB)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (DESKTOP_APP_SPECIAL_TARGET)
|
if (DESKTOP_APP_SPECIAL_TARGET)
|
||||||
target_compile_definitions(lib_ffmpeg PRIVATE LIB_FFMPEG_USE_QT_PRIVATE_API)
|
target_compile_definitions(lib_ffmpeg PRIVATE LIB_FFMPEG_USE_QT_PRIVATE_API)
|
||||||
endif()
|
endif()
|
||||||
|
|
Loading…
Add table
Reference in a new issue