aboutsummaryrefslogtreecommitdiff
path: root/drm/DrmEncoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'drm/DrmEncoder.h')
-rw-r--r--drm/DrmEncoder.h43
1 files changed, 26 insertions, 17 deletions
diff --git a/drm/DrmEncoder.h b/drm/DrmEncoder.h
index b130b7d..39a695c 100644
--- a/drm/DrmEncoder.h
+++ b/drm/DrmEncoder.h
@@ -24,36 +24,45 @@
#include <vector>
#include "DrmCrtc.h"
+#include "DrmDisplayPipeline.h"
namespace android {
-class DrmEncoder {
+class DrmEncoder : public PipelineBindable<DrmEncoder> {
public:
- DrmEncoder(drmModeEncoderPtr e, DrmCrtc *current_crtc,
- std::vector<DrmCrtc *> possible_crtcs);
+ static auto CreateInstance(DrmDevice &dev, uint32_t encoder_id,
+ uint32_t index) -> std::unique_ptr<DrmEncoder>;
+
DrmEncoder(const DrmEncoder &) = delete;
DrmEncoder &operator=(const DrmEncoder &) = delete;
- uint32_t id() const;
+ auto GetId() const {
+ return enc_->encoder_id;
+ };
+
+ auto GetIndexInResArray() const {
+ return index_in_res_array_;
+ }
- DrmCrtc *crtc() const;
- void set_crtc(DrmCrtc *crtc);
- bool can_bind(int display) const;
- int display() const;
+ auto CanClone(DrmEncoder &encoder) {
+ return (enc_->possible_clones & (1 << encoder.GetIndexInResArray())) != 0;
+ }
- const std::vector<DrmCrtc *> &possible_crtcs() const {
- return possible_crtcs_;
+ auto SupportsCrtc(DrmCrtc &crtc) {
+ return (enc_->possible_crtcs & (1 << crtc.GetIndexInResArray())) != 0;
+ }
+
+ auto GetCurrentCrtcId() {
+ return enc_->crtc_id;
}
- bool CanClone(DrmEncoder *encoder);
- void AddPossibleClone(DrmEncoder *possible_clone);
private:
- uint32_t id_;
- DrmCrtc *crtc_;
- int display_;
+ DrmEncoder(DrmModeEncoderUnique enc, uint32_t index)
+ : enc_(std::move(enc)), index_in_res_array_(index){};
+
+ DrmModeEncoderUnique enc_;
- std::vector<DrmCrtc *> possible_crtcs_;
- std::set<DrmEncoder *> possible_clones_;
+ const uint32_t index_in_res_array_;
};
} // namespace android