diff options
Diffstat (limited to 'drm/ResourceManager.cpp')
-rw-r--r-- | drm/ResourceManager.cpp | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/drm/ResourceManager.cpp b/drm/ResourceManager.cpp index 577d86c..a6e9fc2 100644 --- a/drm/ResourceManager.cpp +++ b/drm/ResourceManager.cpp @@ -137,14 +137,16 @@ void ResourceManager::UpdateFrontendDisplays() { conn->GetName().c_str()); if (connected) { - auto pipeline = DrmDisplayPipeline::CreatePipeline(*conn); + std::shared_ptr<DrmDisplayPipeline> + pipeline = DrmDisplayPipeline::CreatePipeline(*conn); + if (pipeline) { - frontend_interface_->BindDisplay(pipeline.get()); + frontend_interface_->BindDisplay(pipeline); attached_pipelines_[conn] = std::move(pipeline); } } else { auto &pipeline = attached_pipelines_[conn]; - frontend_interface_->UnbindDisplay(pipeline.get()); + frontend_interface_->UnbindDisplay(pipeline); attached_pipelines_.erase(conn); } } @@ -154,7 +156,7 @@ void ResourceManager::UpdateFrontendDisplays() { void ResourceManager::DetachAllFrontendDisplays() { for (auto &p : attached_pipelines_) { - frontend_interface_->UnbindDisplay(p.second.get()); + frontend_interface_->UnbindDisplay(p.second); } attached_pipelines_.clear(); frontend_interface_->FinalizeDisplayBinding(); @@ -185,4 +187,30 @@ auto ResourceManager::GetOrderedConnectors() -> std::vector<DrmConnector *> { return ordered_connectors; } + +auto ResourceManager::GetVirtualDisplayPipeline() + -> std::shared_ptr<DrmDisplayPipeline> { + for (auto &drm : drms_) { + for (const auto &conn : drm->GetWritebackConnectors()) { + auto pipeline = DrmDisplayPipeline::CreatePipeline(*conn); + if (!pipeline) { + ALOGE("Failed to create pipeline for writeback connector %s", + conn->GetName().c_str()); + } + if (pipeline) { + return pipeline; + } + } + } + return {}; +} + +auto ResourceManager::GetWritebackConnectorsCount() -> uint32_t { + uint32_t count = 0; + for (auto &drm : drms_) { + count += drm->GetWritebackConnectors().size(); + } + return count; +} + } // namespace android |