drm: save initial object prop values

This commit is contained in:
Simon Ser 2021-07-20 21:32:02 +02:00
parent 637e5341d4
commit 593fe90695
2 changed files with 9 additions and 4 deletions

View file

@ -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<std::string, drmModePropertyRes *> &map) static bool get_properties(struct drm_t *drm, uint32_t obj_id, uint32_t obj_type, std::map<std::string, drmModePropertyRes *> &map, std::map<std::string, uint64_t> &values)
{ {
drmModeObjectProperties *props = drmModeObjectGetProperties(drm->fd, obj_id, obj_type); drmModeObjectProperties *props = drmModeObjectGetProperties(drm->fd, obj_id, obj_type);
if (!props) { if (!props) {
@ -303,6 +303,7 @@ static bool get_properties(struct drm_t *drm, uint32_t obj_id, uint32_t obj_type
} }
map = {}; map = {};
values = {};
for (uint32_t i = 0; i < props->count_props; i++) { for (uint32_t i = 0; i < props->count_props; i++) {
drmModePropertyRes *prop = drmModeGetProperty(drm->fd, props->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; return false;
} }
map[prop->name] = prop; map[prop->name] = prop;
values[prop->name] = props->prop_values[i];
} }
drmModeFreeObjectProperties(props); drmModeFreeObjectProperties(props);
@ -334,7 +336,7 @@ static bool get_resources(struct drm_t *drm)
return false; 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; return false;
} }
@ -350,7 +352,7 @@ static bool get_resources(struct drm_t *drm)
return false; 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; return false;
} }
@ -374,7 +376,7 @@ static bool get_resources(struct drm_t *drm)
return false; 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; return false;
} }

View file

@ -27,18 +27,21 @@ struct plane {
uint32_t id; uint32_t id;
drmModePlane *plane; drmModePlane *plane;
std::map<std::string, drmModePropertyRes *> props; std::map<std::string, drmModePropertyRes *> props;
std::map<std::string, uint64_t> initial_prop_values;
}; };
struct crtc { struct crtc {
uint32_t id; uint32_t id;
drmModeCrtc *crtc; drmModeCrtc *crtc;
std::map<std::string, drmModePropertyRes *> props; std::map<std::string, drmModePropertyRes *> props;
std::map<std::string, uint64_t> initial_prop_values;
}; };
struct connector { struct connector {
uint32_t id; uint32_t id;
drmModeConnector *connector; drmModeConnector *connector;
std::map<std::string, drmModePropertyRes *> props; std::map<std::string, drmModePropertyRes *> props;
std::map<std::string, uint64_t> initial_prop_values;
}; };
struct fb { struct fb {