summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorLionel CHAZALLON <LongChair@hotmail.com>2017-10-22 23:59:58 -0700
committerwm4 <wm4@nowhere>2017-10-23 21:08:20 +0200
commit1992bb51515b46555e2a75b780dc79d973b7cf3a (patch)
treecfb2cf5b052cb116c050c0c8e279ab498fc6a2b6 /video
parentcfcee4cfe70536faeb9f2aaa87257d067e902b70 (diff)
downloadmpv-1992bb51515b46555e2a75b780dc79d973b7cf3a.tar.bz2
mpv-1992bb51515b46555e2a75b780dc79d973b7cf3a.tar.xz
video : Move drm options to substruct.
This allows to group them and most of all query the group config when needed and when we don't have the access to vo.
Diffstat (limited to 'video')
-rw-r--r--video/out/drm_common.c12
-rw-r--r--video/out/drm_common.h6
-rw-r--r--video/out/opengl/context_drm_egl.c5
-rw-r--r--video/out/opengl/hwdec_drmprime_drm.c7
-rw-r--r--video/out/vo_drm.c4
5 files changed, 30 insertions, 4 deletions
diff --git a/video/out/drm_common.c b/video/out/drm_common.c
index c1f374118a..8402ac7e69 100644
--- a/video/out/drm_common.c
+++ b/video/out/drm_common.c
@@ -41,6 +41,18 @@
static int vt_switcher_pipe[2];
+#define OPT_BASE_STRUCT struct drm_opts
+const struct m_sub_options drm_conf = {
+ .opts = (const struct m_option[]) {
+ OPT_STRING_VALIDATE("drm-connector", drm_connector_spec,
+ 0, drm_validate_connector_opt),
+ OPT_INT("drm-mode", drm_mode_id, 0),
+ OPT_INT("drm-overlay", drm_overlay_id, 0),
+ {0},
+ },
+ .size = sizeof(struct drm_opts),
+};
+
static const char *connector_names[] = {
"Unknown", // DRM_MODE_CONNECTOR_Unknown
"VGA", // DRM_MODE_CONNECTOR_VGA
diff --git a/video/out/drm_common.h b/video/out/drm_common.h
index 0e6e76d03e..ff913ff00c 100644
--- a/video/out/drm_common.h
+++ b/video/out/drm_common.h
@@ -42,6 +42,12 @@ struct vt_switcher {
void *handler_data[2];
};
+struct drm_opts {
+ char *drm_connector_spec;
+ int drm_mode_id;
+ int drm_overlay_id;
+};
+
bool vt_switcher_init(struct vt_switcher *s, struct mp_log *log);
void vt_switcher_destroy(struct vt_switcher *s);
void vt_switcher_poll(struct vt_switcher *s, int timeout_ms);
diff --git a/video/out/opengl/context_drm_egl.c b/video/out/opengl/context_drm_egl.c
index c7de762e28..606736d483 100644
--- a/video/out/opengl/context_drm_egl.c
+++ b/video/out/opengl/context_drm_egl.c
@@ -347,8 +347,9 @@ static bool drm_egl_init(struct ra_ctx *ctx)
}
MP_VERBOSE(ctx, "Initializing KMS\n");
- p->kms = kms_create(ctx->log, ctx->vo->opts->drm_connector_spec,
- ctx->vo->opts->drm_mode_id, ctx->vo->opts->drm_overlay_id);
+ p->kms = kms_create(ctx->log, ctx->vo->opts->drm_opts->drm_connector_spec,
+ ctx->vo->opts->drm_opts->drm_mode_id,
+ ctx->vo->opts->drm_opts->drm_overlay_id);
if (!p->kms) {
MP_ERR(ctx, "Failed to create KMS.\n");
return false;
diff --git a/video/out/opengl/hwdec_drmprime_drm.c b/video/out/opengl/hwdec_drmprime_drm.c
index 95e42254e0..d942ab3d37 100644
--- a/video/out/opengl/hwdec_drmprime_drm.c
+++ b/video/out/opengl/hwdec_drmprime_drm.c
@@ -37,6 +37,8 @@
#include "ra_gl.h"
+extern const struct m_sub_options drm_conf;
+
struct drm_frame {
struct drm_prime_framebuffer fb;
struct mp_image *image; // associated mpv image
@@ -202,7 +204,10 @@ static int init(struct ra_hwdec *hw)
p->log = hw->log;
- mp_read_option_raw(hw->global, "drm-overlay", &m_option_type_int, &drm_overlay);
+ void *tmp = talloc_new(NULL);
+ struct drm_opts *opts = mp_get_config_group(tmp, hw->global, &drm_conf);
+ drm_overlay = opts->drm_overlay_id;
+ talloc_free(tmp);
GL *gl = ra_gl_get(hw->ra);
struct mpv_opengl_cb_drm_params *params =
diff --git a/video/out/vo_drm.c b/video/out/vo_drm.c
index 04ac1cab63..24189d5b02 100644
--- a/video/out/vo_drm.c
+++ b/video/out/vo_drm.c
@@ -412,7 +412,9 @@ static int preinit(struct vo *vo)
}
p->kms = kms_create(
- vo->log, vo->opts->drm_connector_spec, vo->opts->drm_mode_id, vo->opts->drm_overlay_id);
+ vo->log, vo->opts->drm_opts->drm_connector_spec,
+ vo->opts->drm_opts->drm_mode_id,
+ vo->opts->drm_opts->drm_overlay_id);
if (!p->kms) {
MP_ERR(vo, "Failed to create KMS.\n");
goto err;