#include "drmcompositor.h"
#include "drmdisplaycompositor.h"
#include "drmresources.h"
+#include "platform.h"
#include <sstream>
#include <stdlib.h>
}
int DrmCompositor::Init() {
- for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
- iter != drm_->end_connectors(); ++iter) {
- int display = (*iter)->display();
+ for (auto &conn : drm_->connectors()) {
+ int display = conn->display();
int ret = compositor_map_[display].Init(drm_, display);
if (ret) {
ALOGE("Failed to initialize display compositor for %d", display);
return ret;
}
}
+ planner_ = Planner::CreateInstance(drm_);
+ if (!planner_) {
+ ALOGE("Failed to create planner instance for composition");
+ return -ENOMEM;
+ }
return 0;
}
-DrmComposition *DrmCompositor::CreateComposition(Importer *importer) {
- DrmComposition *composition = new DrmComposition(drm_, importer);
- if (!composition) {
- ALOGE("Failed to allocate drm composition");
- return NULL;
- }
+std::unique_ptr<DrmComposition> DrmCompositor::CreateComposition(
+ Importer *importer) {
+ std::unique_ptr<DrmComposition> composition(
+ new DrmComposition(drm_, importer, planner_.get()));
int ret = composition->Init(++frame_no_);
if (ret) {
ALOGE("Failed to initialize drm composition %d", ret);
- delete composition;
- return NULL;
+ return nullptr;
}
return composition;
}
int DrmCompositor::QueueComposition(
std::unique_ptr<DrmComposition> composition) {
- int ret = composition->DisableUnusedPlanes();
- if (ret) {
- ALOGE("Failed to disable unused planes %d", ret);
+ int ret;
+
+ ret = composition->Plan(compositor_map_);
+ if (ret)
+ return ret;
+
+ ret = composition->DisableUnusedPlanes();
+ if (ret)
return ret;
- }
- for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
- iter != drm_->end_connectors(); ++iter) {
- int display = (*iter)->display();
+ for (auto &conn : drm_->connectors()) {
+ int display = conn->display();
int ret = compositor_map_[display].QueueComposition(
composition->TakeDisplayComposition(display));
if (ret) {
void DrmCompositor::Dump(std::ostringstream *out) const {
*out << "DrmCompositor stats:\n";
- for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
- iter != drm_->end_connectors(); ++iter)
- compositor_map_[(*iter)->display()].Dump(out);
+ for (auto &conn : drm_->connectors())
+ compositor_map_[conn->display()].Dump(out);
}
}