summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2022-08-11 14:40:15 +0200
committersfan5 <sfan5@live.de>2022-08-11 18:31:04 +0200
commitf2ef942ef5554753b6f1ee0b0342c2a274d4e496 (patch)
tree8e6d24db78d7f2ed86c883509cc07f3dfe02abd9
parent5f6e8f856c6038264c7774babd96bde191d398d2 (diff)
downloadmpv-f2ef942ef5554753b6f1ee0b0342c2a274d4e496.tar.bz2
mpv-f2ef942ef5554753b6f1ee0b0342c2a274d4e496.tar.xz
drm_common: remove hard dependency on drmIsKMS()
ae768a1e141eb88243e46757d41ca0cada9502b4 forgot to bump the required libdrm version however Debian 11 just barely misses the requirement, which is a good reason not to require it unconditionally anyway.
-rw-r--r--meson.build10
-rw-r--r--video/out/drm_common.c19
-rw-r--r--wscript6
3 files changed, 30 insertions, 5 deletions
diff --git a/meson.build b/meson.build
index 4273ebcdae..3d7b85a0ee 100644
--- a/meson.build
+++ b/meson.build
@@ -952,6 +952,15 @@ if drm['use']
'video/out/vo_drm.c')
endif
+# This can be removed roughly when Debian 12 is released.
+drm_is_kms = {
+ 'name': 'drm-is-kms',
+ 'use': drm['use'] and drm['deps'].version().version_compare('>= 2.4.105')
+}
+if drm_is_kms['use']
+ features += drm_is_kms['name']
+endif
+
gbm = dependency('gbm', version: '>=17.1.0', required: get_option('gbm'))
if gbm.found()
dependencies += gbm
@@ -1745,6 +1754,7 @@ conf_data.set10('HAVE_DMABUF_INTEROP_GL', dmabuf_interop_gl['use'])
conf_data.set10('HAVE_DMABUF_INTEROP_PL', dmabuf_interop_pl['use'])
conf_data.set10('HAVE_DOS_PATHS', win32)
conf_data.set10('HAVE_DRM', drm['use'])
+conf_data.set10('HAVE_DRM_IS_KMS', drm_is_kms['use'])
conf_data.set10('HAVE_DVBIN', dvbin.allowed())
conf_data.set10('HAVE_DVDNAV', dvdnav.found() and dvdread.found())
conf_data.set10('HAVE_EGL', egl['use'])
diff --git a/video/out/drm_common.c b/video/out/drm_common.c
index b2bbc03ceb..d6511b7100 100644
--- a/video/out/drm_common.c
+++ b/video/out/drm_common.c
@@ -523,6 +523,19 @@ static int open_card_path(const char *path)
return open(path, O_RDWR | O_CLOEXEC);
}
+static bool card_supports_kms(const char *path)
+{
+#if HAVE_DRM_IS_KMS
+ int fd = open_card_path(path);
+ bool ret = fd != -1 && drmIsKMS(fd);
+ if (fd != -1)
+ close(fd);
+ return ret;
+#else
+ return true;
+#endif
+}
+
static char *get_primary_device_path(struct mp_log *log, int *card_no)
{
drmDevice *devices[DRM_MAX_MINOR] = { 0 };
@@ -558,11 +571,7 @@ static char *get_primary_device_path(struct mp_log *log, int *card_no)
const char *primary_node_path = dev->nodes[DRM_NODE_PRIMARY];
- int fd = open_card_path(primary_node_path);
- const int is_kms = fd != -1 && drmIsKMS(fd);
- if (fd != -1)
- close(fd);
- if (!is_kms) {
+ if (!card_supports_kms(primary_node_path)) {
if (card_no_given) {
mp_err(log,
"DRM card number %d given, yet it does not support "
diff --git a/wscript b/wscript
index 7341b71d25..f13b9f98d6 100644
--- a/wscript
+++ b/wscript
@@ -792,6 +792,12 @@ video_output_features = [
'desc': 'dmabuf libplacebo interop',
'deps': 'vaapi-libplacebo',
'func': check_true,
+ }, {
+ # This can be removed roughly when Debian 12 is released.
+ 'name': 'drm-is-kms',
+ 'desc': 'drmIsKMS() function',
+ 'deps': 'drm',
+ 'func': check_pkg_config('libdrm', '>= 2.4.105'),
}
]