Update Visualizer implementation after changes in AudioEffect

AudioEffect was fixed to remove a call to AudioEffect::set
away from the constructor.

Bug: 162323621
Bug: 174222126

Test: repro steps from the bug
      atest android.media.cts.VisualizerTest
Change-Id: I90ac6e4fe0a1229758a98a63a3b7810de60469be
Merged-In: I90ac6e4fe0a1229758a98a63a3b7810de60469be
This commit is contained in:
Mikhail Naganov
2020-07-31 17:42:20 -07:00
committed by Eric Laurent
parent 108dd94479
commit ed15eee545
4 changed files with 55 additions and 43 deletions

View File

@@ -33,21 +33,9 @@ namespace android {
// ---------------------------------------------------------------------------
Visualizer::Visualizer (const String16& opPackageName,
int32_t priority,
effect_callback_t cbf,
void* user,
audio_session_t sessionId)
: AudioEffect(SL_IID_VISUALIZATION, opPackageName, NULL, priority, cbf, user, sessionId),
mCaptureRate(CAPTURE_RATE_DEF),
mCaptureSize(CAPTURE_SIZE_DEF),
mSampleRate(44100000),
mScalingMode(VISUALIZER_SCALING_MODE_NORMALIZED),
mMeasurementMode(MEASUREMENT_MODE_NONE),
mCaptureCallBack(NULL),
mCaptureCbkUser(NULL)
Visualizer::Visualizer (const String16& opPackageName)
: AudioEffect(opPackageName)
{
initCaptureSize();
}
Visualizer::~Visualizer()
@@ -57,6 +45,23 @@ Visualizer::~Visualizer()
setCaptureCallBack(NULL, NULL, 0, 0);
}
status_t Visualizer::set(int32_t priority,
effect_callback_t cbf,
void* user,
audio_session_t sessionId,
audio_io_handle_t io,
const AudioDeviceTypeAddr& device,
bool probe)
{
status_t status = AudioEffect::set(
SL_IID_VISUALIZATION, nullptr, priority, cbf, user, sessionId, io, device, probe);
if (status == NO_ERROR || status == ALREADY_EXISTS) {
initCaptureSize();
}
return status;
}
void Visualizer::release()
{
ALOGV("Visualizer::release()");

View File

@@ -65,14 +65,22 @@ public:
/* Constructor.
* See AudioEffect constructor for details on parameters.
*/
Visualizer(const String16& opPackageName,
int32_t priority = 0,
effect_callback_t cbf = NULL,
void* user = NULL,
audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX);
explicit Visualizer(const String16& opPackageName);
~Visualizer();
/**
* Initialize an uninitialized Visualizer.
* See AudioEffect 'set' function for details on parameters.
*/
status_t set(int32_t priority = 0,
effect_callback_t cbf = NULL,
void* user = NULL,
audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX,
audio_io_handle_t io = AUDIO_IO_HANDLE_NONE,
const AudioDeviceTypeAddr& device = {},
bool probe = false);
// Declared 'final' because we call this in ~Visualizer().
status_t setEnabled(bool enabled) final;
@@ -163,15 +171,15 @@ private:
uint32_t initCaptureSize();
Mutex mCaptureLock;
uint32_t mCaptureRate;
uint32_t mCaptureSize;
uint32_t mSampleRate;
uint32_t mScalingMode;
uint32_t mMeasurementMode;
capture_cbk_t mCaptureCallBack;
void *mCaptureCbkUser;
uint32_t mCaptureRate = CAPTURE_RATE_DEF;
uint32_t mCaptureSize = CAPTURE_SIZE_DEF;
uint32_t mSampleRate = 44100000;
uint32_t mScalingMode = VISUALIZER_SCALING_MODE_NORMALIZED;
uint32_t mMeasurementMode = MEASUREMENT_MODE_NONE;
capture_cbk_t mCaptureCallBack = nullptr;
void *mCaptureCbkUser = nullptr;
sp<CaptureThread> mCaptureThread;
uint32_t mCaptureFlags;
uint32_t mCaptureFlags = 0;
};

View File

@@ -337,22 +337,21 @@ android_media_AudioEffect_native_setup(JNIEnv *env, jobject thiz, jobject weak_t
}
// create the native AudioEffect object
lpAudioEffect = new AudioEffect(typeStr,
String16(opPackageNameStr.c_str()),
uuidStr,
priority,
effectCallback,
&lpJniStorage->mCallbackData,
(audio_session_t) sessionId,
AUDIO_IO_HANDLE_NONE,
device,
probe);
lpAudioEffect = new AudioEffect(String16(opPackageNameStr.c_str()));
if (lpAudioEffect == 0) {
ALOGE("Error creating AudioEffect");
goto setup_failure;
}
lpAudioEffect->set(typeStr,
uuidStr,
priority,
effectCallback,
&lpJniStorage->mCallbackData,
(audio_session_t) sessionId,
AUDIO_IO_HANDLE_NONE,
device,
probe);
lStatus = AudioEffectJni::translateNativeErrorToJava(lpAudioEffect->initCheck());
if (lStatus != AUDIOEFFECT_SUCCESS && lStatus != AUDIOEFFECT_ERROR_ALREADY_EXISTS) {
ALOGE("AudioEffect initCheck failed %d", lStatus);

View File

@@ -382,15 +382,15 @@ android_media_visualizer_native_setup(JNIEnv *env, jobject thiz, jobject weak_th
}
// create the native Visualizer object
lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str()),
0,
android_media_visualizer_effect_callback,
lpJniStorage,
(audio_session_t) sessionId);
lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str()));
if (lpVisualizer == 0) {
ALOGE("Error creating Visualizer");
goto setup_failure;
}
lpVisualizer->set(0,
android_media_visualizer_effect_callback,
lpJniStorage,
(audio_session_t) sessionId);
lStatus = translateError(lpVisualizer->initCheck());
if (lStatus != VISUALIZER_SUCCESS && lStatus != VISUALIZER_ERROR_ALREADY_EXISTS) {