summaryrefslogtreecommitdiff
path: root/common/JackGraphManager.cpp
diff options
context:
space:
mode:
authorsletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2011-03-04 15:23:58 +0000
committersletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2011-03-04 15:23:58 +0000
commitae993599630fff163d7b8ec69e86f427f46980f0 (patch)
treeb58e2e4ce546d256e511c33592531d10c7cf6dfb /common/JackGraphManager.cpp
parent4ad398cc1e6c72f3b7d784b40e0f8689a20d4919 (diff)
downloadjack2-ae993599630fff163d7b8ec69e86f427f46980f0.tar.gz
New latency API implementation (in progress).
git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4150 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'common/JackGraphManager.cpp')
-rw-r--r--common/JackGraphManager.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/common/JackGraphManager.cpp b/common/JackGraphManager.cpp
index 684a0dfe..22166317 100644
--- a/common/JackGraphManager.cpp
+++ b/common/JackGraphManager.cpp
@@ -245,7 +245,7 @@ int JackGraphManager::RequestMonitor(jack_port_id_t port_index, bool onoff) // C
// Client
jack_nframes_t JackGraphManager::ComputeTotalLatencyAux(jack_port_id_t port_index, jack_port_id_t src_port_index, JackConnectionManager* manager, int hop_count)
{
- const jack_int_t* connections = manager->GetConnections(port_index);
+ const jack_int_t* connections = ReadCurrentState()->GetConnections(port_index);
jack_nframes_t max_latency = 0;
jack_port_id_t dst_index;
@@ -296,6 +296,46 @@ int JackGraphManager::ComputeTotalLatencies()
return 0;
}
+void JackGraphManager::RecalculateLatencyAux(jack_port_id_t port_index, jack_latency_callback_mode_t mode)
+{
+ const jack_int_t* connections = ReadCurrentState()->GetConnections(port_index);
+ JackPort* port = GetPort(port_index);
+ jack_latency_range_t latency = { UINT32_MAX, 0 };
+ jack_port_id_t dst_index;
+
+ for (int i = 0; (i < CONNECTION_NUM_FOR_PORT) && ((dst_index = connections[i]) != EMPTY); i++) {
+ AssertPort(dst_index);
+ JackPort* dst_port = GetPort(dst_index);
+ jack_latency_range_t other_latency;
+
+ dst_port->GetLatencyRange(mode, &other_latency);
+
+ if (other_latency.max > latency.max)
+ latency.max = other_latency.max;
+ if (other_latency.min < latency.min)
+ latency.min = other_latency.min;
+ }
+
+ if (latency.min == UINT32_MAX)
+ latency.min = 0;
+
+ port->SetLatencyRange(mode, &latency);
+}
+
+void JackGraphManager::RecalculateLatency(jack_port_id_t port_index, jack_latency_callback_mode_t mode)
+{
+ UInt16 cur_index;
+ UInt16 next_index;
+
+ do {
+ cur_index = GetCurrentIndex();
+ RecalculateLatencyAux(port_index, mode);
+ next_index = GetCurrentIndex();
+ } while (cur_index != next_index); // Until a coherent state has been read
+
+ jack_log("JackGraphManager::RecalculateLatency port_index = %ld", port_index);
+}
+
// Server
void JackGraphManager::SetBufferSize(jack_nframes_t buffer_size)
{