aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Porter <mporter@konsulko.com>2017-04-19 12:53:55 -0400
committerMatt Porter <mporter@konsulko.com>2017-04-20 22:00:09 -0400
commitb8423505e6e7360b509cdfd22f8d86f45169443d (patch)
treebfd146499506418a2200e3a78aa0b81af62b907e
parent3fd71f4b6bc026f2f9054140f7bf612855e45d7d (diff)
Convert the sink/source volume caches from a list to hashes
Maintain the cached sink/source volume state in separate hashes for quick lookup. This will further simplify external volume event support that will need to update the cache. AGL-Bug: SPEC-548 Change-Id: I47b8e070318f3992a5343d1753c50baa8c1d9cb3 Signed-off-by: Matt Porter <mporter@konsulko.com>
-rw-r--r--app/paclient.cpp32
-rw-r--r--app/paclient.h4
2 files changed, 18 insertions, 18 deletions
diff --git a/app/paclient.cpp b/app/paclient.cpp
index 78567ce..9360685 100644
--- a/app/paclient.cpp
+++ b/app/paclient.cpp
@@ -55,16 +55,12 @@ void PaClient::setVolume(uint32_t type, uint32_t index, uint32_t channel, uint32
{
pa_operation *o;
pa_context *c = context();
- CState *cstate = NULL;
-
- foreach (cstate, m_cstatelist)
- if ((cstate->index == index) && (cstate->type == type))
- break;
-
- cstate->cvolume.values[channel] = volume;
+ pa_cvolume *cvolume = NULL;
if (type == C_SINK) {
- if (!(o = pa_context_set_sink_volume_by_index(c, index, &cstate->cvolume, set_sink_volume_cb, NULL))) {
+ cvolume = m_sink_states.value(index);
+ cvolume->values[channel] = volume;
+ if (!(o = pa_context_set_sink_volume_by_index(c, index, cvolume, set_sink_volume_cb, NULL))) {
qWarning() << "PaClient: set sink #" << index <<
" channel #" << channel <<
" volume: " << pa_strerror(pa_context_errno(c));
@@ -72,7 +68,9 @@ void PaClient::setVolume(uint32_t type, uint32_t index, uint32_t channel, uint32
}
pa_operation_unref(o);
} else if (type == C_SOURCE) {
- if (!(o = pa_context_set_source_volume_by_index(c, index, &cstate->cvolume, set_source_volume_cb, NULL))) {
+ cvolume = m_sink_states.value(index);
+ cvolume->values[channel] = volume;
+ if (!(o = pa_context_set_source_volume_by_index(c, index, cvolume, set_source_volume_cb, NULL))) {
qWarning() << "PaClient: set source #" << index <<
" channel #" << channel <<
" volume: " << pa_strerror(pa_context_errno(c));
@@ -215,14 +213,14 @@ void PaClient::init()
void PaClient::addOneControlState(int type, int index, const pa_cvolume *cvolume)
{
int i;
- CState *cstate;
+ pa_cvolume *cvolume_new;
- cstate = new CState;
- cstate->type = type;
- cstate->index = index;
- cstate->cvolume.channels = cvolume->channels;
+ cvolume_new = new pa_cvolume;
+ cvolume_new->channels = cvolume->channels;
for (i = 0; i < cvolume->channels; i++)
- cstate->cvolume.values[i] = cvolume->values[i];
-
- m_cstatelist.append(cstate);
+ cvolume_new->values[i] = cvolume->values[i];
+ if (type == C_SINK)
+ m_sink_states.insert(index, cvolume_new);
+ else if (type == C_SOURCE)
+ m_source_states.insert(index, cvolume_new);
}
diff --git a/app/paclient.h b/app/paclient.h
index 1367e81..002fbb3 100644
--- a/app/paclient.h
+++ b/app/paclient.h
@@ -16,6 +16,7 @@
#include <pulse/pulseaudio.h>
+#include <QtCore/QHash>
#include <QtCore/QObject>
const char * const channel_position_string[] =
@@ -85,5 +86,6 @@ class PaClient : public QObject
pa_threaded_mainloop *m_ml;
pa_mainloop_api *m_mlapi;
pa_context *m_ctx;
- QList<CState *> m_cstatelist;
+ QHash<int, pa_cvolume *> m_sink_states;
+ QHash<int, pa_cvolume *> m_source_states;
};