From 3476de62fb10e76412452ef4c6bd71936c9f7db1 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Sun, 15 Apr 2012 17:15:07 -0700 Subject: Add support for scaling mode parameter Support VISUALIZER_PARAM__SCALING_MODE parameter. Modify process() function to use new volume scaling parameter, used to set whether captured values are maximized by current headroom in the buffer (default existing behaviora) or left as is and thus affected by volume. Modify AudioEffect to allow subclasses to override the following events: control status changed, enable status changed, command executed. In Visualizer class (a subclass of AudioEffect), reset the scaling mode and capture size on the actual effect as cached when control is regained. This will allow the effect to be properly configured whenever Visualizers with different scaling modes or capture sizes are released (e.g. from java release() method). Change-Id: I05cb9f925a296dceca91bafa9fe294ef2b2c2bd5 --- media/libmedia/Visualizer.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'media/libmedia/Visualizer.cpp') diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp index bcd6ae4..de0bf7d 100644 --- a/media/libmedia/Visualizer.cpp +++ b/media/libmedia/Visualizer.cpp @@ -41,6 +41,7 @@ Visualizer::Visualizer (int32_t priority, mCaptureRate(CAPTURE_RATE_DEF), mCaptureSize(CAPTURE_SIZE_DEF), mSampleRate(44100000), + mScalingMode(VISUALIZER_SCALING_MODE_NORMALIZED), mCaptureCallBack(NULL), mCaptureCbkUser(NULL) { @@ -146,9 +147,38 @@ status_t Visualizer::setCaptureSize(uint32_t size) if (status == NO_ERROR) { status = p->status; + if (status == NO_ERROR) { + mCaptureSize = size; + } } + + return status; +} + +status_t Visualizer::setScalingMode(uint32_t mode) { + if ((mode != VISUALIZER_SCALING_MODE_NORMALIZED) + && (mode != VISUALIZER_SCALING_MODE_AS_PLAYED)) { + return BAD_VALUE; + } + + Mutex::Autolock _l(mCaptureLock); + + 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); + *(int32_t *)p->data = VISUALIZER_PARAM_SCALING_MODE; + *((int32_t *)p->data + 1)= mode; + status_t status = setParameter(p); + + ALOGV("setScalingMode mode %d status %d p->status %d", mode, status, p->status); + if (status == NO_ERROR) { - mCaptureSize = size; + status = p->status; + if (status == NO_ERROR) { + mScalingMode = mode; + } } return status; @@ -289,6 +319,19 @@ uint32_t Visualizer::initCaptureSize() return size; } +void Visualizer::controlStatusChanged(bool controlGranted) { + if (controlGranted) { + // this Visualizer instance regained control of the effect, reset the scaling mode + // and capture size as has been cached through it. + ALOGV("controlStatusChanged(true) causes effect parameter reset:"); + ALOGV(" scaling mode reset to %d", mScalingMode); + setScalingMode(mScalingMode); + ALOGV(" capture size reset to %d", mCaptureSize); + setCaptureSize(mCaptureSize); + } + AudioEffect::controlStatusChanged(controlGranted); +} + //------------------------------------------------------------------------- Visualizer::CaptureThread::CaptureThread(Visualizer& receiver, uint32_t captureRate, bool bCanCallJava) -- cgit v1.1