summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2012-06-07 11:08:15 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-06-07 11:08:15 -0700
commite35a55fbdff5a695ee35ff43f1466a62fb75662b (patch)
tree97d542ca3fcf24a4ab55747fe0bb27e379ad59dd /services
parent9a0d82df8fd681257bc5b29fb5e6c65fcc7cef5a (diff)
parentf06c2ed50e1db871ae9eb2bd15a196064f8c278c (diff)
Merge "Take latency and current time into account for visualization" into jb-dev
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp29
-rw-r--r--services/audioflinger/AudioFlinger.h2
2 files changed, 31 insertions, 0 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 2cfc3e8c..e7ababa4 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1818,6 +1818,10 @@ uint32_t AudioFlinger::PlaybackThread::correctLatency(uint32_t latency) const
uint32_t AudioFlinger::PlaybackThread::latency() const
{
Mutex::Autolock _l(mLock);
+ return latency_l();
+}
+uint32_t AudioFlinger::PlaybackThread::latency_l() const
+{
if (initCheck() == NO_ERROR) {
return correctLatency(mOutput->stream->get_latency(mOutput->stream));
} else {
@@ -8187,6 +8191,31 @@ status_t AudioFlinger::EffectModule::configure()
status = cmdStatus;
}
+ if (status == 0 &&
+ (memcmp(&mDescriptor.type, SL_IID_VISUALIZATION, sizeof(effect_uuid_t)) == 0)) {
+ uint32_t buf32[sizeof(effect_param_t) / sizeof(uint32_t) + 2];
+ effect_param_t *p = (effect_param_t *)buf32;
+
+ p->psize = sizeof(uint32_t);
+ p->vsize = sizeof(uint32_t);
+ size = sizeof(int);
+ *(int32_t *)p->data = VISUALIZER_PARAM_LATENCY;
+
+ uint32_t latency = 0;
+ PlaybackThread *pbt = thread->mAudioFlinger->checkPlaybackThread_l(thread->mId);
+ if (pbt != NULL) {
+ latency = pbt->latency_l();
+ }
+
+ *((int32_t *)p->data + 1)= latency;
+ (*mEffectInterface)->command(mEffectInterface,
+ EFFECT_CMD_SET_PARAM,
+ sizeof(effect_param_t) + 8,
+ &buf32,
+ &size,
+ &cmdStatus);
+ }
+
mMaxDisableWaitCnt = (MAX_DISABLE_TIME_MS * mConfig.outputCfg.samplingRate) /
(1000 * mConfig.outputCfg.buffer.frameCount);
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index a0e0ea5f..1c44f2f7 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -965,6 +965,8 @@ public:
// return estimated latency in milliseconds, as reported by HAL
uint32_t latency() const;
+ // same, but lock must already be held
+ uint32_t latency_l() const;
void setMasterVolume(float value);
void setMasterMute(bool muted);