[pulseaudio-discuss] [PATCH 1/3] cardwidget: Add a port class

poljar (Damir Jelić) poljarinho at gmail.com
Sun Jul 22 06:23:24 PDT 2012


From: "poljar (Damir Jelić)" <poljarinho at gmail.com>

The cardwidget should cache all the relevant data for the ports.

This change introduces a new port class which holds the port info for
the card.
---
 src/cardwidget.h  | 11 +++++++++++
 src/mainwindow.cc | 19 +++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/src/cardwidget.h b/src/cardwidget.h
index 3837d5b..7c63681 100644
--- a/src/cardwidget.h
+++ b/src/cardwidget.h
@@ -23,6 +23,16 @@
 
 #include "pavucontrol.h"
 
+class PortInfo {
+public:
+      Glib::ustring name;
+      Glib::ustring description;
+      uint32_t priority;
+      int available;
+      int direction;
+      int64_t latency_offset;
+};
+
 class CardWidget : public Gtk::VBox {
 public:
     CardWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& x);
@@ -36,6 +46,7 @@ public:
     bool updating;
 
     std::vector< std::pair<Glib::ustring,Glib::ustring> > profiles;
+    std::map<Glib::ustring, PortInfo> ports;
     Glib::ustring activeProfile;
     bool hasSinks;
     bool hasSources;
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index dc84682..b167943 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -290,6 +290,25 @@ void MainWindow::updateCard(const pa_card_info &info) {
 
     w->activeProfile = info.active_profile ? info.active_profile->name : "";
 
+    w->ports.clear();
+    if (pa_context_get_server_protocol_version(get_context()) >= 26) {
+        for (uint32_t i = 0; i < info.n_ports; ++i) {
+            PortInfo p;
+
+            p.name = info.ports[i]->name;
+            p.description = info.ports[i]->description;
+            p.priority = info.ports[i]->priority;
+            p.available = info.ports[i]->available;
+            p.direction = info.ports[i]->direction;
+
+            if (pa_context_get_server_protocol_version(get_context()) >= 27)
+                p.latency_offset = info.ports[i]->latency_offset;
+            else p.latency_offset = 0;
+
+            w->ports[p.name] = p;
+        }
+    }
+
     w->updating = false;
 
     w->prepareMenu();
-- 
1.7.11.2



More information about the pulseaudio-discuss mailing list