#ifndef ANDROID_DRM_COMPOSITION_H_
#define ANDROID_DRM_COMPOSITION_H_
-#include "compositor.h"
-#include "drm_hwcomposer.h"
+#include "drmhwcomposer.h"
#include "drmdisplaycomposition.h"
#include "drmplane.h"
#include "importer.h"
-#include <deque>
#include <map>
#include <vector>
namespace android {
-class DrmComposition : public Composition {
+class DrmDisplayCompositor;
+
+struct DrmCompositionDisplayLayersMap {
+ int display;
+ bool geometry_changed = true;
+ std::vector<DrmHwcLayer> layers;
+
+ DrmCompositionDisplayLayersMap() = default;
+ DrmCompositionDisplayLayersMap(DrmCompositionDisplayLayersMap &&rhs) =
+ default;
+};
+
+class DrmComposition {
public:
DrmComposition(DrmResources *drm, Importer *importer);
- ~DrmComposition();
- virtual int Init();
+ int Init(uint64_t frame_no);
- virtual unsigned GetRemainingLayers(int display, unsigned num_needed) const;
- virtual int AddLayer(int display, hwc_layer_1_t *layer, hwc_drm_bo_t *bo);
- int AddDpmsMode(int display, uint32_t dpms_mode);
-
- int DisableUnusedPlanes();
+ int SetLayers(size_t num_displays, DrmCompositionDisplayLayersMap *maps);
+ int SetDpmsMode(int display, uint32_t dpms_mode);
+ int SetDisplayMode(int display, const DrmMode &display_mode);
std::unique_ptr<DrmDisplayComposition> TakeDisplayComposition(int display);
DrmDisplayComposition *GetDisplayComposition(int display);
+ int Plan(std::map<int, DrmDisplayCompositor> &compositor_map);
+ int DisableUnusedPlanes();
+
private:
DrmComposition(const DrmComposition &) = delete;
*/
std::map<int, std::unique_ptr<DrmDisplayComposition>> composition_map_;
};
-
}
#endif // ANDROID_DRM_COMPOSITION_H_