diff options
author | Inho Lee <inho.lee@qt.io> | 2024-02-29 10:09:53 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-03-01 19:44:58 +0000 |
commit | 5381ec958837568750500e6bfb10360f06ca00e3 (patch) | |
tree | b9b910d27c1ca91997b6f00cdab949f6c6a9b03d | |
parent | f9e44002c5ca3e15e7901d8cbf524fb3fc786202 (diff) |
FFMpeg: add a precheck condition in linux CUDA
CUDA backend requires libnvcuvid.so in libavcodec in Linux.
This might be a temporal patch but can avoid crash
in linux nvidia environments.
Pick-to: 6.5
Fixes: QTBUG-122199
Change-Id: I5f376be9db3ccea3405940d4f5ea5f77043a9131
Reviewed-by: Tim Blechmann <tim@klingt.org>
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit 3bec392c1ffcfa29a9fcbe2ef2ad76727f36e699)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit bea094bd3c25519d5c4132627a8bcad9f4dd240e)
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp index 22b4fe518..570828190 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp +++ b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel.cpp @@ -26,6 +26,9 @@ #include <rhi/qrhi.h> #include <qloggingcategory.h> #include <unordered_set> +#ifdef Q_OS_LINUX +#include <QLibrary> +#endif /* Infrastructure for HW acceleration goes into this file. */ @@ -74,8 +77,18 @@ static bool precheckDriver(AVHWDeviceType type) { // precheckings might need some improvements #if defined(Q_OS_LINUX) - if (type == AV_HWDEVICE_TYPE_CUDA) - return QFile::exists(QLatin1String("/proc/driver/nvidia/version")); + if (type == AV_HWDEVICE_TYPE_CUDA) { + if (!QFile::exists(QLatin1String("/proc/driver/nvidia/version"))) + return false; + + // QTBUG-122199 + // CUDA backend requires libnvcuvid in libavcodec + QLibrary lib("libnvcuvid.so"); + if (!lib.load()) + return false; + lib.unload(); + return true; + } #elif defined(Q_OS_WINDOWS) if (type == AV_HWDEVICE_TYPE_D3D11VA) return QSystemLibrary(QLatin1String("d3d11.dll")).load(); |