aboutsummaryrefslogtreecommitdiff
path: root/drm/DrmDevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'drm/DrmDevice.h')
-rw-r--r--drm/DrmDevice.h103
1 files changed, 54 insertions, 49 deletions
diff --git a/drm/DrmDevice.h b/drm/DrmDevice.h
index be68aa6..f2530ee 100644
--- a/drm/DrmDevice.h
+++ b/drm/DrmDevice.h
@@ -17,93 +17,98 @@
#ifndef ANDROID_DRM_H_
#define ANDROID_DRM_H_
-#include <stdint.h>
-
+#include <cstdint>
#include <map>
#include <tuple>
#include "DrmConnector.h"
#include "DrmCrtc.h"
#include "DrmEncoder.h"
-#include "DrmEventListener.h"
-#include "DrmPlane.h"
+#include "DrmFbImporter.h"
+#include "utils/UniqueFd.h"
namespace android {
+class DrmFbImporter;
+class DrmPlane;
+
class DrmDevice {
public:
DrmDevice();
- ~DrmDevice();
+ ~DrmDevice() = default;
- std::tuple<int, int> Init(const char *path, int num_displays);
+ auto Init(const char *path) -> int;
- int fd() const {
- return fd_.get();
+ auto GetFd() const {
+ return fd_.Get();
}
- const std::vector<std::unique_ptr<DrmConnector>> &connectors() const {
- return connectors_;
+ auto GetConnectors() -> const std::vector<std::unique_ptr<DrmConnector>> &;
+ auto GetPlanes() -> const std::vector<std::unique_ptr<DrmPlane>> &;
+ auto GetCrtcs() -> const std::vector<std::unique_ptr<DrmCrtc>> &;
+ auto GetEncoders() -> const std::vector<std::unique_ptr<DrmEncoder>> &;
+
+ auto GetMinResolution() const {
+ return min_resolution_;
}
- const std::vector<std::unique_ptr<DrmPlane>> &planes() const {
- return planes_;
+ auto GetMaxResolution() const {
+ return max_resolution_;
}
- std::pair<uint32_t, uint32_t> min_resolution() const {
- return min_resolution_;
+ std::string GetName() const;
+
+ auto RegisterUserPropertyBlob(void *data, size_t length) const
+ -> DrmModeUserPropertyBlobUnique;
+
+ auto HasAddFb2ModifiersSupport() const {
+ return HasAddFb2ModifiersSupport_;
}
- std::pair<uint32_t, uint32_t> max_resolution() const {
- return max_resolution_;
+ auto &GetDrmFbImporter() {
+ return *drm_fb_importer_;
}
- DrmConnector *GetConnectorForDisplay(int display) const;
- DrmConnector *GetWritebackConnectorForDisplay(int display) const;
- DrmConnector *AvailableWritebackConnector(int display) const;
- DrmCrtc *GetCrtcForDisplay(int display) const;
- DrmPlane *GetPlane(uint32_t id) const;
- DrmEventListener *event_listener();
-
- int GetPlaneProperty(const DrmPlane &plane, const char *prop_name,
- DrmProperty *property);
- int GetCrtcProperty(const DrmCrtc &crtc, const char *prop_name,
- DrmProperty *property);
- int GetConnectorProperty(const DrmConnector &connector, const char *prop_name,
- DrmProperty *property);
-
- const std::string GetName() const;
-
- const std::vector<std::unique_ptr<DrmCrtc>> &crtcs() const;
- uint32_t next_mode_id();
-
- int CreatePropertyBlob(void *data, size_t length, uint32_t *blob_id);
- int DestroyPropertyBlob(uint32_t blob_id);
- bool HandlesDisplay(int display) const;
- void RegisterHotplugHandler(DrmEventHandler *handler) {
- event_listener_.RegisterHotplugHandler(handler);
+ static auto IsKMSDev(const char *path) -> bool;
+
+ auto FindCrtcById(uint32_t id) const -> DrmCrtc * {
+ for (const auto &crtc : crtcs_) {
+ if (crtc->GetId() == id) {
+ return crtc.get();
+ }
+ };
+
+ return nullptr;
}
- private:
- int TryEncoderForDisplay(int display, DrmEncoder *enc);
- int GetProperty(uint32_t obj_id, uint32_t obj_type, const char *prop_name,
- DrmProperty *property);
+ auto FindEncoderById(uint32_t id) const -> DrmEncoder * {
+ for (const auto &enc : encoders_) {
+ if (enc->GetId() == id) {
+ return enc.get();
+ }
+ };
- int CreateDisplayPipe(DrmConnector *connector);
- int AttachWriteback(DrmConnector *display_conn);
+ return nullptr;
+ }
+ int GetProperty(uint32_t obj_id, uint32_t obj_type, const char *prop_name,
+ DrmProperty *property) const;
+
+ private:
UniqueFd fd_;
- uint32_t mode_id_ = 0;
std::vector<std::unique_ptr<DrmConnector>> connectors_;
std::vector<std::unique_ptr<DrmConnector>> writeback_connectors_;
std::vector<std::unique_ptr<DrmEncoder>> encoders_;
std::vector<std::unique_ptr<DrmCrtc>> crtcs_;
std::vector<std::unique_ptr<DrmPlane>> planes_;
- DrmEventListener event_listener_;
std::pair<uint32_t, uint32_t> min_resolution_;
std::pair<uint32_t, uint32_t> max_resolution_;
- std::map<int, int> displays_;
+
+ bool HasAddFb2ModifiersSupport_{};
+
+ std::unique_ptr<DrmFbImporter> drm_fb_importer_;
};
} // namespace android