Visualizer: use actual sampling rate of the instance

Visualizer.getSamplingRate method was always returning
the same value. This is not valid since the actual
sampling rate depends on the audio stream where
the Visualizer is instantiated.

Bug: 162727518
Test: atest CtsMediaAudioTestCases:VisualizerTest
Merged-In: Ia2fc453ce8b6b0e11e61bc00c764f822b39cf951
Change-Id: Ia2fc453ce8b6b0e11e61bc00c764f822b39cf951
diff --git a/media/jni/audioeffect/Visualizer.cpp b/media/jni/audioeffect/Visualizer.cpp
index 193a5d4..d0f1ec6 100644
--- a/media/jni/audioeffect/Visualizer.cpp
+++ b/media/jni/audioeffect/Visualizer.cpp
@@ -60,6 +60,7 @@
             SL_IID_VISUALIZATION, nullptr, priority, cbf, user, sessionId, io, device, probe);
     if (status == NO_ERROR || status == ALREADY_EXISTS) {
         initCaptureSize();
+        initSampleRate();
     }
     return status;
 }
@@ -413,6 +414,16 @@
     return size;
 }
 
+void Visualizer::initSampleRate()
+{
+    audio_config_base_t inputConfig, outputConfig;
+    status_t status = getConfigs(&inputConfig, &outputConfig);
+    if (status == NO_ERROR) {
+        mSampleRate = outputConfig.sample_rate * 1000;
+    }
+    ALOGV("%s sample rate %d status %d", __func__, mSampleRate, status);
+}
+
 void Visualizer::controlStatusChanged(bool controlGranted) {
     if (controlGranted) {
         // this Visualizer instance regained control of the effect, reset the scaling mode
diff --git a/media/jni/audioeffect/Visualizer.h b/media/jni/audioeffect/Visualizer.h
index c402c10..3d5d74a 100644
--- a/media/jni/audioeffect/Visualizer.h
+++ b/media/jni/audioeffect/Visualizer.h
@@ -170,6 +170,7 @@
     status_t doFft(uint8_t *fft, uint8_t *waveform);
     void periodicCapture();
     uint32_t initCaptureSize();
+    void initSampleRate();
 
     Mutex mCaptureLock;
     uint32_t mCaptureRate = CAPTURE_RATE_DEF;