Skip to content

Commit eb8a79a

Browse files
committed
Add CONFIG_VAAPI_(DRM|GLX|X11)
so they can be disabled separately. Gentoo removed the GLX backend for libva to simplify packaging. <GL/glx.h> is included by <va/va_glx.h>, so it doesn't need to be checked separately.
1 parent 69dd8ee commit eb8a79a

File tree

9 files changed

+94
-26
lines changed

9 files changed

+94
-26
lines changed

cmake/CheckExternalLibraries.cmake

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,27 @@ if(ENABLE_VAAPI)
107107
add_build_config(PkgConfig::VDPAU "vaapi")
108108
if(TARGET PkgConfig::VAAPI)
109109
set(CONFIG_VAAPI TRUE)
110-
pkg_check_modules(VA-DRM "libva-drm" REQUIRED IMPORTED_TARGET)
111-
pkg_check_modules(VA-GLX "libva-glx" REQUIRED IMPORTED_TARGET)
112-
pkg_check_modules(VA-X11 "libva-x11" REQUIRED IMPORTED_TARGET)
113-
target_link_libraries(
114-
PkgConfig::VAAPI INTERFACE PkgConfig::VA-X11 PkgConfig::VA-GLX
115-
PkgConfig::VA-DRM)
110+
111+
pkg_check_modules(VA-DRM "libva-drm" IMPORTED_TARGET)
112+
add_build_config(PkgConfig::VAAPI-DRM "vaapi_drm")
113+
if(VA-DRM_FOUND)
114+
set(CONFIG_VAAPI_DRM TRUE)
115+
target_link_libraries(PkgConfig::VAAPI INTERFACE PkgConfig::VA-DRM)
116+
endif()
117+
118+
pkg_check_modules(VA-GLX "libva-glx" IMPORTED_TARGET)
119+
add_build_config(PkgConfig::VAAPI-GLX "vaapi_glx")
120+
if(VA-GLX_FOUND)
121+
set(CONFIG_VAAPI_GLX TRUE)
122+
target_link_libraries(PkgConfig::VAAPI INTERFACE PkgConfig::VA-GLX)
123+
endif()
124+
125+
pkg_check_modules(VA-X11 "libva-x11" IMPORTED_TARGET)
126+
add_build_config(PkgConfig::VAAPI-X11 "vaapi_x11")
127+
if(VA-X11_FOUND)
128+
set(CONFIG_VAAPI_X11 TRUE)
129+
target_link_libraries(PkgConfig::VAAPI INTERFACE PkgConfig::VA-X11)
130+
endif()
116131
endif()
117132
endif()
118133

mythtv/cmake/PrintConfig.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ if(ENABLE_FRONTEND)
167167
if(APPLE)
168168
message_vrbl("VideoToolBox support " APPLE_VIDEOTOOLBOX_LIBRARY)
169169
endif()
170-
message_trgt("VAAPI support " PkgConfig::VAAPI)
170+
message_trgt("VAAPI support " PkgConfig::VAAPI "DRM ${CONFIG_VAAPI_DRM}, GLX ${CONFIG_VAAPI_GLX}, X11 ${CONFIG_VAAPI_X11}")
171171
message_trgt("DRM support " PkgConfig::DRM)
172172
if(TARGET PkgConfig::DRM)
173173
message_trgt("DRM Qt integration " Qt${QT_VERSION_MAJOR}::GuiPrivate)

mythtv/configure

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,6 +1699,7 @@ HAVE_LIST="
16991699
threads
17001700
uwp
17011701
vaapi_drm
1702+
vaapi_glx
17021703
vaapi_x11
17031704
vdpau_x11
17041705
winrt
@@ -1750,6 +1751,9 @@ MYTHTV_CONFIG_LIST='
17501751
qtdbus
17511752
sqlite3
17521753
taglib
1754+
vaapi_drm
1755+
vaapi_glx
1756+
vaapi_x11
17531757
v4l2
17541758
v4l2prime
17551759
valgrind
@@ -5440,7 +5444,6 @@ enabled libaom && use_pkg_config libaom "aom >= 2.0.0" aom/aom_codec.h aom_cod
54405444
enabled libdav1d && use_pkg_config libdav1d "dav1d >= 0.4.0" "dav1d/dav1d.h" dav1d_version || disable libdav1d
54415445

54425446
enabled vaapi && enabled opengl &&
5443-
check_header GL/glx.h &&
54445447
check_lib vaapi va/va.h vaInitialize -lva &&
54455448
$(pkg-config --atleast-version=1.2 libva) &&
54465449
enable vaapi ||
@@ -5449,6 +5452,9 @@ enabled vaapi && enabled opengl &&
54495452
enabled vaapi &&
54505453
check_lib vaapi_drm "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm
54515454

5455+
enabled vaapi &&
5456+
check_lib vaapi_glx "va/va.h va/va_glx.h" vaGetDisplayGLX -lva -lva-glx
5457+
54525458
enabled vaapi &&
54535459
check_lib vaapi_x11 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 -lX11
54545460

@@ -6644,7 +6650,7 @@ if enabled frontend; then
66446650
if test x"$target_os" = x"darwin" ; then
66456651
echo "VideoToolBox support ${videotoolbox-no}"
66466652
fi
6647-
echo "VAAPI support ${vaapi-no}"
6653+
echo "VAAPI support ${vaapi-no} (DRM ${vaapi_drm-no}, GLX ${vaapi_glx-no}, X11 ${vaapi_x11-no})"
66486654
echo "DRM support ${drm-no}"
66496655
if enabled drm; then
66506656
echo "DRM Qt integration ${qtprivateheaders-no}"

mythtv/libs/libmythbase/mythconfig.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@
7575
#cmakedefine01 CONFIG_V4L2
7676
#cmakedefine01 CONFIG_V4L2PRIME
7777
#cmakedefine01 CONFIG_VAAPI
78+
#cmakedefine01 CONFIG_VAAPI_DRM
79+
#cmakedefine01 CONFIG_VAAPI_GLX
80+
#cmakedefine01 CONFIG_VAAPI_X11
7881
#cmakedefine01 CONFIG_VALGRIND
7982
#cmakedefine01 CONFIG_VBOX
8083
#cmakedefine01 CONFIG_VDPAU

mythtv/libs/libmythtv/cmake/Frontend.cmake

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,13 @@ if(TARGET any_opengl)
245245
visualisations/opengl/mythvisualmonoscopeopengl.cpp
246246
visualisations/opengl/mythvisualmonoscopeopengl.h)
247247
if(TARGET PkgConfig::VAAPI)
248-
target_sources(
249-
mythtv PRIVATE opengl/mythvaapiinterop.h opengl/mythvaapiglxinterop.h
250-
opengl/mythvaapiinterop.cpp opengl/mythvaapiglxinterop.cpp)
248+
target_sources(mythtv PRIVATE opengl/mythvaapiinterop.h
249+
opengl/mythvaapiinterop.cpp)
250+
if(CONFIG_VAAPI_GLX)
251+
target_sources(mythtv PRIVATE opengl/mythvaapiglxinterop.h
252+
opengl/mythvaapiglxinterop.cpp)
253+
endif()
254+
251255
if(TARGET PkgConfig::VDPAU AND TARGET X11::X11)
252256
target_sources(mythtv PRIVATE opengl/mythvdpauinterop.h
253257
opengl/mythvdpauinterop.cpp)
@@ -276,7 +280,7 @@ if(TARGET any_opengl)
276280
target_sources(mythtv PRIVATE opengl/mythmmalinterop.cpp
277281
opengl/mythmmalinterop.h)
278282
endif()
279-
if(TARGET PkgConfig::VAAPI)
283+
if(CONFIG_VAAPI_DRM)
280284
target_sources(mythtv PRIVATE opengl/mythvaapidrminterop.cpp
281285
opengl/mythvaapidrminterop.h)
282286
endif()

mythtv/libs/libmythtv/libmythtv.pro

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ using_frontend {
504504
using_vaapi {
505505
HEADERS += decoders/mythvaapicontext.h
506506
SOURCES += decoders/mythvaapicontext.cpp
507-
LIBS += -lva -lva-x11 -lva-glx -lva-drm
507+
LIBS += -lva
508508
}
509509

510510
using_nvdec {
@@ -568,8 +568,17 @@ using_frontend {
568568

569569

570570
using_vaapi {
571-
HEADERS += opengl/mythvaapiinterop.h opengl/mythvaapiglxinterop.h
572-
SOURCES += opengl/mythvaapiinterop.cpp opengl/mythvaapiglxinterop.cpp
571+
HEADERS += opengl/mythvaapiinterop.h
572+
SOURCES += opengl/mythvaapiinterop.cpp
573+
LIBS += -lva
574+
using_vaapi_glx {
575+
HEADERS += opengl/mythvaapiglxinterop.h
576+
SOURCES += opengl/mythvaapiglxinterop.cpp
577+
LIBS += -lva-glx
578+
using_vaapi_x11 {
579+
LIBS += -lva-x11
580+
}
581+
}
573582
}
574583

575584
using_vdpau:using_x11 {
@@ -605,9 +614,10 @@ using_frontend {
605614
SOURCES += opengl/mythmmalinterop.cpp
606615
}
607616

608-
using_vaapi {
617+
using_vaapi_drm {
609618
HEADERS += opengl/mythvaapidrminterop.h
610619
SOURCES += opengl/mythvaapidrminterop.cpp
620+
LIBS += -lva-drm
611621
}
612622
}
613623

mythtv/libs/libmythtv/opengl/mythvaapiglxinterop.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "opengl/mythvaapiglxinterop.h"
22

3+
#if CONFIG_VAAPI_X11
34
#define Cursor XCursor // Prevent conflicts with Qt6.
45
#define pointer Xpointer // Prevent conflicts with Qt6.
56
#if defined(_X11_XLIB_H_) && !defined(Bool)
@@ -10,6 +11,8 @@
1011
#undef Cursor
1112
#undef pointer
1213
#undef Bool // Interferes with cmake moc file compilation
14+
#endif // CONFIG_VAAPI_X11
15+
1316
#include <va/va_glx.h>
1417

1518
// MythTV
@@ -322,6 +325,7 @@ MythVAAPIInteropGLXCopy::Acquire(MythRenderOpenGL* Context,
322325
return result;
323326
}
324327

328+
#if CONFIG_VAAPI_X11
325329
MythVAAPIInteropGLXPixmap::MythVAAPIInteropGLXPixmap(MythPlayerUI* Player, MythRenderOpenGL* Context)
326330
: MythVAAPIInteropGLX(Player, Context, GL_VAAPIGLXPIX)
327331
{
@@ -504,3 +508,4 @@ bool MythVAAPIInteropGLXPixmap::IsSupported(MythRenderOpenGL* Context)
504508
QByteArray extensions(glXQueryExtensionsString(display, screen));
505509
return extensions.contains("GLX_EXT_texture_from_pixmap");
506510
}
511+
#endif // CONFIG_VAAPI_X11

mythtv/libs/libmythtv/opengl/mythvaapiglxinterop.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#define MYTHVAAPIGLXNTEROP_H
33

44
// MythTV
5+
#include "libmythbase/mythconfig.h"
6+
57
#include "libmythui/opengl/mythrenderopengl.h"
68

79
#include "libmythtv/mythframe.h"
@@ -47,8 +49,19 @@ class MythVAAPIInteropGLXCopy : public MythVAAPIInteropGLX
4749
void* m_glxSurface { nullptr };
4850
};
4951

50-
#include "GL/glx.h"
51-
#include "GL/glxext.h"
52+
#if CONFIG_VAAPI_X11
53+
#define Cursor XCursor // Prevent conflicts with Qt6.
54+
#define pointer Xpointer // Prevent conflicts with Qt6.
55+
#if defined(_X11_XLIB_H_) && !defined(Bool)
56+
#define Bool int
57+
#endif
58+
#include <GL/glx.h>
59+
#include <GL/glxext.h>
60+
#undef None // X11/X.h defines this. Causes compile failure in Qt6.
61+
#undef Cursor
62+
#undef pointer
63+
#undef Bool // Interferes with cmake moc file compilation
64+
5265
using MYTH_GLXBINDTEXIMAGEEXT = void (*)(Display*, GLXDrawable, int, int*);
5366
using MYTH_GLXRELEASETEXIMAGEEXT = void (*)(Display*, GLXDrawable, int);
5467

@@ -73,6 +86,6 @@ class MythVAAPIInteropGLXPixmap : public MythVAAPIInteropGLX
7386
MYTH_GLXBINDTEXIMAGEEXT m_glxBindTexImageEXT { nullptr };
7487
MYTH_GLXRELEASETEXIMAGEEXT m_glxReleaseTexImageEXT { nullptr };
7588
};
76-
89+
#endif // CONFIG_VAAPI_X11
7790

7891
#endif // MYTHVAAPIGLXNTEROP_H

mythtv/libs/libmythtv/opengl/mythvaapiinterop.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@
1313
#include "mythplayerui.h"
1414
#include "mythvideocolourspace.h"
1515
#include "fourcc.h"
16+
#if CONFIG_VAAPI_DRM
1617
#include "mythvaapidrminterop.h"
18+
#endif
19+
#if CONFIG_VAAPI_GLX
1720
#include "mythvaapiglxinterop.h"
21+
#endif
1822

1923
extern "C" {
2024
#include "libavfilter/buffersrc.h"
@@ -46,9 +50,9 @@ void MythVAAPIInterop::GetVAAPITypes(MythRenderOpenGL* Context, MythInteropGPU::
4650
return;
4751

4852
OpenGLLocker locker(Context);
49-
bool egl = Context->IsEGL();
50-
bool opengles = Context->isOpenGLES();
51-
bool wayland = qgetenv("XDG_SESSION_TYPE").contains("wayland");
53+
[[maybe_unused]] bool egl = Context->IsEGL();
54+
[[maybe_unused]] bool opengles = Context->isOpenGLES();
55+
[[maybe_unused]] bool wayland = qgetenv("XDG_SESSION_TYPE").contains("wayland");
5256

5357
// best first
5458
MythInteropGPU::InteropTypes vaapitypes;
@@ -58,17 +62,21 @@ void MythVAAPIInterop::GetVAAPITypes(MythRenderOpenGL* Context, MythInteropGPU::
5862
vaapitypes.emplace_back(DRM_DRMPRIME);
5963
#endif
6064

61-
#if CONFIG_EGL
65+
#if CONFIG_VAAPI_DRM && CONFIG_EGL
6266
// zero copy
6367
if (egl && MythVAAPIInteropDRM::IsSupported(Context))
6468
vaapitypes.emplace_back(GL_VAAPIEGLDRM);
6569
#endif
70+
#if CONFIG_VAAPI_GLX
71+
# if CONFIG_VAAPI_X11
6672
// 1x copy
6773
if (!egl && !wayland && MythVAAPIInteropGLXPixmap::IsSupported(Context))
6874
vaapitypes.emplace_back(GL_VAAPIGLXPIX);
75+
# endif
6976
// 2x copy
7077
if (!egl && !opengles && !wayland)
7178
vaapitypes.emplace_back(GL_VAAPIGLXCOPY);
79+
#endif
7280

7381
if (!vaapitypes.empty())
7482
Types[FMT_VAAPI] = vaapitypes;
@@ -82,16 +90,20 @@ MythVAAPIInterop* MythVAAPIInterop::CreateVAAPI(MythPlayerUI *Player, MythRender
8290
const auto & types = Player->GetInteropTypes();
8391
if (const auto & vaapi = types.find(FMT_VAAPI); vaapi != types.cend())
8492
{
85-
for (auto type : vaapi->second)
93+
for ([[maybe_unused]] auto type : vaapi->second)
8694
{
87-
#if CONFIG_EGL
95+
#if CONFIG_VAAPI_DRM && CONFIG_EGL
8896
if ((type == GL_VAAPIEGLDRM) || (type == DRM_DRMPRIME))
8997
return new MythVAAPIInteropDRM(Player, Context, type);
9098
#endif
99+
#if CONFIG_VAAPI_GLX
100+
# if CONFIG_VAAPI_X11
91101
if (type == GL_VAAPIGLXPIX)
92102
return new MythVAAPIInteropGLXPixmap(Player, Context);
103+
# endif
93104
if (type == GL_VAAPIGLXCOPY)
94105
return new MythVAAPIInteropGLXCopy(Player, Context);
106+
#endif
95107
}
96108
}
97109
return nullptr;

0 commit comments

Comments
 (0)