OSDN Git Service

drm_hwcomposer: fix typo in formats switch statement
[android-x86/external-drm_hwcomposer.git] / drmcompositor.cpp
index b486d7b..c1f3ed8 100644 (file)
@@ -19,6 +19,7 @@
 #include "drmcompositor.h"
 #include "drmdisplaycompositor.h"
 #include "drmresources.h"
+#include "platform.h"
 
 #include <sstream>
 #include <stdlib.h>
@@ -34,45 +35,49 @@ DrmCompositor::~DrmCompositor() {
 }
 
 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) {
@@ -95,8 +100,7 @@ int DrmCompositor::Composite() {
 
 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);
 }
 }