Fb: collect fbs and destroy them in card's destructor
[android/external-libkmsxx.git] / libkms++ / card.h
1 #pragma once
3 #include <cstdint>
4 #include <vector>
5 #include <map>
7 #include "decls.h"
8 #include "pipeline.h"
10 namespace kms
11 {
12 class Card
13 {
14         friend class Framebuffer;
15 public:
16         Card();
17         ~Card();
19         Card(const Card& other) = delete;
20         Card& operator=(const Card& other) = delete;
22         int fd() const { return m_fd; }
24         Connector* get_first_connected_connector() const;
26         DrmObject* get_object(uint32_t id) const;
27         Connector* get_connector(uint32_t id) const;
28         Crtc* get_crtc(uint32_t id) const;
29         Crtc* get_crtc_by_index(uint32_t idx) const;
30         Encoder* get_encoder(uint32_t id) const;
31         Plane* get_plane(uint32_t id) const;
32         Property* get_prop(uint32_t id) const;
33         Property* get_prop(const std::string& name) const;
35         bool master() const { return m_master; }
36         bool has_atomic() const { return m_has_atomic; }
37         bool has_has_universal_planes() const { return m_has_universal_planes; }
39         const std::vector<Connector*> get_connectors() const { return m_connectors; }
40         const std::vector<Encoder*> get_encoders() const { return m_encoders; }
41         const std::vector<Crtc*> get_crtcs() const { return m_crtcs; }
42         const std::vector<Plane*> get_planes() const { return m_planes; }
43         const std::vector<Property*> get_properties() const { return m_properties; }
45         const std::vector<DrmObject*> get_objects() const;
47         std::vector<Pipeline> get_connected_pipelines();
49         void call_page_flip_handlers();
51 private:
52         void restore_modes();
54         std::map<uint32_t, DrmObject*> m_obmap;
56         std::vector<Connector*> m_connectors;
57         std::vector<Encoder*> m_encoders;
58         std::vector<Crtc*> m_crtcs;
59         std::vector<Plane*> m_planes;
60         std::vector<Property*> m_properties;
61         std::vector<Framebuffer*> m_framebuffers;
63         int m_fd;
64         bool m_master;
66         bool m_has_atomic;
67         bool m_has_universal_planes;
68 };
69 }