There is a lot of boilerplate for creating an initialized drmdisplaycomposition. This patch gathers that in a separate method. Signed-off-by: Alexandru Gheorghe <alexandru-cosmin.gheorghe@xxxxxxx> --- drmdisplaycompositor.cpp | 23 +++++++++++++++++++++++ drmdisplaycompositor.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp index e556e86..6e5be24 100644 --- a/drmdisplaycompositor.cpp +++ b/drmdisplaycompositor.cpp @@ -221,6 +221,7 @@ int DrmDisplayCompositor::Init(DrmResources *drm, int display) { ALOGE("Failed to initialize drm compositor lock %d\n", ret); return ret; } + planner_ = Planner::CreateInstance(drm); initialized_ = true; return 0; @@ -231,6 +232,28 @@ std::unique_ptr<DrmDisplayComposition> DrmDisplayCompositor::CreateComposition() return std::unique_ptr<DrmDisplayComposition>(new DrmDisplayComposition()); } +std::unique_ptr<DrmDisplayComposition> +DrmDisplayCompositor::CreateInitializedComposition() const { + DrmCrtc *crtc = drm_->GetCrtcForDisplay(display_); + if (!crtc) { + ALOGE("Failed to find crtc for display = %d", display_); + return std::unique_ptr<DrmDisplayComposition>(); + } + std::unique_ptr<DrmDisplayComposition> comp = CreateComposition(); + std::shared_ptr<Importer> importer = + drm_->resource_manager()->GetImporter(display_); + if (!importer) { + ALOGE("Failed to find resources for display = %d", display_); + return std::unique_ptr<DrmDisplayComposition>(); + } + int ret = comp->Init(drm_, crtc, importer.get(), planner_.get(), 0); + if (ret) { + ALOGE("Failed to init composition for display = %d", display_); + return std::unique_ptr<DrmDisplayComposition>(); + } + return comp; +} + std::tuple<uint32_t, uint32_t, int> DrmDisplayCompositor::GetActiveModeResolution() { DrmConnector *connector = drm_->GetConnectorForDisplay(display_); diff --git a/drmdisplaycompositor.h b/drmdisplaycompositor.h index f1965fb..ccaffb4 100644 --- a/drmdisplaycompositor.h +++ b/drmdisplaycompositor.h @@ -87,6 +87,7 @@ class DrmDisplayCompositor { int Init(DrmResources *drm, int display); std::unique_ptr<DrmDisplayComposition> CreateComposition() const; + std::unique_ptr<DrmDisplayComposition> CreateInitializedComposition() const; int ApplyComposition(std::unique_ptr<DrmDisplayComposition> composition); int Composite(); int SquashAll(); @@ -155,6 +156,7 @@ class DrmDisplayCompositor { // we need to reset them on every Dump() call. mutable uint64_t dump_frames_composited_; mutable uint64_t dump_last_timestamp_ns_; + std::unique_ptr<Planner> planner_; }; } -- 2.7.4 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel