drm_hwcomposer: Implement getDisplayPhysicalOrientation()
Implement ComposerClient::getDisplayPhysicalOrientation() by querying
the DRM display panel orientation property and translating the result to
the correct common::Transform enum value.
The result is used by SurfaceFlinger to correctly rotate the image
before displaying it to the user.
Signed-off-by: Tim Van Patten <timvp@google.com>
diff --git a/drm/DrmProperty.h b/drm/DrmProperty.h
index 516518b..2683ad8 100644
--- a/drm/DrmProperty.h
+++ b/drm/DrmProperty.h
@@ -64,10 +64,16 @@
auto AddEnumToMap(const std::string &name, E key, std::map<E, uint64_t> &map)
-> bool;
+ template <class E>
+ auto AddEnumToMapReverse(const std::string &name, E value,
+ std::map<uint64_t, E> &map) -> bool;
+
explicit operator bool() const {
return id_ != 0;
}
+ auto GetEnumNameFromValue(uint64_t value) const -> std::optional<std::string>;
+
private:
class DrmPropertyEnum {
public:
@@ -104,4 +110,18 @@
return false;
}
+template <class E>
+auto DrmProperty::AddEnumToMapReverse(const std::string &name, E value,
+ std::map<uint64_t, E> &map) -> bool {
+ uint64_t enum_value = UINT64_MAX;
+ int err = 0;
+ std::tie(enum_value, err) = GetEnumValueWithName(name);
+ if (err == 0) {
+ map[enum_value] = value;
+ return true;
+ }
+
+ return false;
+}
+
} // namespace android