[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