summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorInho Lee <inho.lee@qt.io>2024-02-29 10:09:53 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-01 19:44:58 +0000
commit5381ec958837568750500e6bfb10360f06ca00e3 (patch)
treeb9b910d27c1ca91997b6f00cdab949f6c6a9b03d
parentf9e44002c5ca3e15e7901d8cbf524fb3fc786202 (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.cpp17
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();