summaryrefslogtreecommitdiffstats
path: root/video/out/drm_atomic.h
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/drm_atomic.h')
-rw-r--r--video/out/drm_atomic.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/video/out/drm_atomic.h b/video/out/drm_atomic.h
index 01246baf36..cd0252a767 100644
--- a/video/out/drm_atomic.h
+++ b/video/out/drm_atomic.h
@@ -19,11 +19,45 @@
#define MP_DRMATOMIC_H
#include <stdlib.h>
+#include <stdbool.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
#include "common/msg.h"
+struct drm_mode {
+ drmModeModeInfo mode;
+ uint32_t blob_id;
+};
+
+struct drm_atomic_plane_state {
+ uint64_t fb_id;
+ uint64_t crtc_id;
+ uint64_t src_x;
+ uint64_t src_y;
+ uint64_t src_w;
+ uint64_t src_h;
+ uint64_t crtc_x;
+ uint64_t crtc_y;
+ uint64_t crtc_w;
+ uint64_t crtc_h;
+ uint64_t zpos;
+};
+
+// Used to store the restore state for VT switching and uninit
+struct drm_atomic_state {
+ bool saved;
+ struct {
+ uint64_t crtc_id;
+ } connector;
+ struct {
+ struct drm_mode mode;
+ uint64_t active;
+ } crtc;
+ struct drm_atomic_plane_state osd_plane;
+ struct drm_atomic_plane_state video_plane;
+};
+
struct drm_object {
int fd;
uint32_t id;
@@ -41,6 +75,8 @@ struct drm_atomic_context {
struct drm_object *video_plane;
drmModeAtomicReq *request;
+
+ struct drm_atomic_state old_state;
};
@@ -56,4 +92,10 @@ struct drm_atomic_context *drm_atomic_create_context(struct mp_log *log, int fd,
int osd_plane_id, int video_plane_id);
void drm_atomic_destroy_context(struct drm_atomic_context *ctx);
+bool drm_atomic_save_old_state(struct drm_atomic_context *ctx);
+bool drm_atomic_restore_old_state(drmModeAtomicReq *request, struct drm_atomic_context *ctx);
+
+bool drm_mode_ensure_blob(int fd, struct drm_mode *mode);
+bool drm_mode_destroy_blob(int fd, struct drm_mode *mode);
+
#endif // MP_DRMATOMIC_H