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'), } ]