From 0bdc88a432d0b9581606e86e53d686b91def4002 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Mon, 28 Sep 2015 17:59:52 +0300 Subject: Add Card::get_connected_pipelines() --- libkms++/card.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'libkms++/card.cpp') diff --git a/libkms++/card.cpp b/libkms++/card.cpp index aebd9a1..3dea542 100644 --- a/libkms++/card.cpp +++ b/libkms++/card.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -197,4 +198,34 @@ Crtc* Card::get_crtc_by_index(uint32_t idx) const Crtc* Card::get_crtc(uint32_t id) const { return dynamic_cast(get_object(id)); } Encoder* Card::get_encoder(uint32_t id) const { return dynamic_cast(get_object(id)); } Property* Card::get_prop(uint32_t id) const { return dynamic_cast(get_object(id)); } + +std::vector Card::get_connected_pipelines() +{ + vector outputs; + + for (auto conn : get_connectors()) + { + if (conn->connected() == false) + continue; + + Crtc* crtc = conn->get_current_crtc(); + + if (!crtc) { + for (auto possible : conn->get_possible_crtcs()) { + if (find_if(outputs.begin(), outputs.end(), [possible](Pipeline out) { return out.crtc == possible; }) == outputs.end()) { + crtc = possible; + break; + } + } + } + + if (!crtc) + throw invalid_argument("fob"); + + outputs.push_back(Pipeline { crtc, conn }); + } + + return outputs; +} + } -- cgit v1.2.3