aboutsummaryrefslogtreecommitdiff
path: root/drm/ResourceManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drm/ResourceManager.cpp')
-rw-r--r--drm/ResourceManager.cpp36
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