summaryrefslogtreecommitdiffstats
path: root/video/out/drm_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/drm_common.c')
-rw-r--r--video/out/drm_common.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/video/out/drm_common.c b/video/out/drm_common.c
index df06744fbe..2971d77094 100644
--- a/video/out/drm_common.c
+++ b/video/out/drm_common.c
@@ -23,6 +23,7 @@
#include <sys/stat.h>
#include <sys/vt.h>
#include <unistd.h>
+#include <limits.h>
#include "drm_common.h"
@@ -47,17 +48,25 @@ const struct m_sub_options drm_conf = {
OPT_STRING_VALIDATE("drm-connector", drm_connector_spec,
0, drm_validate_connector_opt),
OPT_INT("drm-mode", drm_mode_id, 0),
- OPT_INT("drm-osd-plane-id", drm_osd_plane_id, 0),
- OPT_INT("drm-video-plane-id", drm_video_plane_id, 0),
+ OPT_CHOICE_OR_INT("drm-draw-plane", drm_draw_plane, 0, 0, INT_MAX,
+ ({"primary", DRM_OPTS_PRIMARY_PLANE},
+ {"overlay", DRM_OPTS_OVERLAY_PLANE})),
+ OPT_CHOICE_OR_INT("drm-drmprime-video-plane", drm_drmprime_video_plane, 0, 0, INT_MAX,
+ ({"primary", DRM_OPTS_PRIMARY_PLANE},
+ {"overlay", DRM_OPTS_OVERLAY_PLANE})),
OPT_CHOICE("drm-format", drm_format, 0,
({"xrgb8888", DRM_OPTS_FORMAT_XRGB8888},
{"xrgb2101010", DRM_OPTS_FORMAT_XRGB2101010})),
- OPT_SIZE_BOX("drm-osd-size", drm_osd_size, 0),
+ OPT_SIZE_BOX("drm-draw-surface-size", drm_draw_surface_size, 0),
+
+ OPT_REPLACED("drm-osd-plane-id", "drm-draw-plane"),
+ OPT_REPLACED("drm-video-plane-id", "drm-drmprime-video-plane"),
+ OPT_REPLACED("drm-osd-size", "drm-draw-surface-size"),
{0},
},
.defaults = &(const struct drm_opts) {
- .drm_osd_plane_id = -1,
- .drm_video_plane_id = -1,
+ .drm_draw_plane = DRM_OPTS_PRIMARY_PLANE,
+ .drm_drmprime_video_plane = DRM_OPTS_OVERLAY_PLANE,
},
.size = sizeof(struct drm_opts),
};
@@ -237,7 +246,7 @@ static bool setup_mode(struct kms *kms, int mode_id)
return false;
}
- kms->mode = kms->connector->modes[mode_id];
+ kms->mode.mode = kms->connector->modes[mode_id];
return true;
}
@@ -269,7 +278,7 @@ static void parse_connector_spec(struct mp_log *log,
struct kms *kms_create(struct mp_log *log, const char *connector_spec,
- int mode_id, int osd_plane_id, int video_plane_id)
+ int mode_id, int draw_plane, int drmprime_video_plane)
{
int card_no = -1;
char *connector_name = NULL;
@@ -281,7 +290,7 @@ struct kms *kms_create(struct mp_log *log, const char *connector_spec,
.fd = open_card(card_no),
.connector = NULL,
.encoder = NULL,
- .mode = { 0 },
+ .mode = {{0}},
.crtc_id = -1,
.card_no = card_no,
};
@@ -317,14 +326,14 @@ struct kms *kms_create(struct mp_log *log, const char *connector_spec,
} else {
mp_verbose(log, "DRM Atomic support found\n");
kms->atomic_context = drm_atomic_create_context(kms->log, kms->fd, kms->crtc_id,
- kms->connector->connector_id, osd_plane_id, video_plane_id);
+ kms->connector->connector_id,
+ draw_plane, drmprime_video_plane);
if (!kms->atomic_context) {
mp_err(log, "Failed to create DRM atomic context\n");
goto err;
}
}
-
drmModeFreeResources(res);
return kms;
@@ -341,6 +350,7 @@ void kms_destroy(struct kms *kms)
{
if (!kms)
return;
+ drm_mode_destroy_blob(kms->fd, &kms->mode);
if (kms->connector) {
drmModeFreeConnector(kms->connector);
kms->connector = NULL;
@@ -425,7 +435,7 @@ void kms_show_available_cards_and_connectors(struct mp_log *log)
double kms_get_display_fps(const struct kms *kms)
{
- return mode_get_Hz(&kms->mode);
+ return mode_get_Hz(&kms->mode.mode);
}
int drm_validate_connector_opt(struct mp_log *log, const struct m_option *opt,