diff --git a/src/drm.cpp b/src/drm.cpp index 8ecfe98..976ac92 100644 --- a/src/drm.cpp +++ b/src/drm.cpp @@ -294,7 +294,7 @@ void flip_handler_thread_run(void) } } -static bool get_properties(struct drm_t *drm, uint32_t obj_id, uint32_t obj_type, std::map &map) +static bool get_properties(struct drm_t *drm, uint32_t obj_id, uint32_t obj_type, std::map &map, std::map &values) { drmModeObjectProperties *props = drmModeObjectGetProperties(drm->fd, obj_id, obj_type); if (!props) { @@ -303,6 +303,7 @@ static bool get_properties(struct drm_t *drm, uint32_t obj_id, uint32_t obj_type } map = {}; + values = {}; for (uint32_t i = 0; i < props->count_props; i++) { drmModePropertyRes *prop = drmModeGetProperty(drm->fd, props->props[i]); @@ -311,6 +312,7 @@ static bool get_properties(struct drm_t *drm, uint32_t obj_id, uint32_t obj_type return false; } map[prop->name] = prop; + values[prop->name] = props->prop_values[i]; } drmModeFreeObjectProperties(props); @@ -334,7 +336,7 @@ static bool get_resources(struct drm_t *drm) return false; } - if (!get_properties(drm, conn.id, DRM_MODE_OBJECT_CONNECTOR, conn.props)) { + if (!get_properties(drm, conn.id, DRM_MODE_OBJECT_CONNECTOR, conn.props, conn.initial_prop_values)) { return false; } @@ -350,7 +352,7 @@ static bool get_resources(struct drm_t *drm) return false; } - if (!get_properties(drm, crtc.id, DRM_MODE_OBJECT_CRTC, crtc.props)) { + if (!get_properties(drm, crtc.id, DRM_MODE_OBJECT_CRTC, crtc.props, crtc.initial_prop_values)) { return false; } @@ -374,7 +376,7 @@ static bool get_resources(struct drm_t *drm) return false; } - if (!get_properties(drm, plane.id, DRM_MODE_OBJECT_PLANE, plane.props)) { + if (!get_properties(drm, plane.id, DRM_MODE_OBJECT_PLANE, plane.props, plane.initial_prop_values)) { return false; } diff --git a/src/drm.hpp b/src/drm.hpp index 83ad31c..e84a6e5 100644 --- a/src/drm.hpp +++ b/src/drm.hpp @@ -27,18 +27,21 @@ struct plane { uint32_t id; drmModePlane *plane; std::map props; + std::map initial_prop_values; }; struct crtc { uint32_t id; drmModeCrtc *crtc; std::map props; + std::map initial_prop_values; }; struct connector { uint32_t id; drmModeConnector *connector; std::map props; + std::map initial_prop_values; }; struct fb {