Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c1667bf authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

Update Visualizer implementation after changes in AudioEffect

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

Bug: 162012829
Bug: 162323621
Test: repro steps from the bug
      atest android.media.cts.VisualizerTest
Change-Id: I90ac6e4fe0a1229758a98a63a3b7810de60469be
Merged-In: I90ac6e4fe0a1229758a98a63a3b7810de60469be
parent 56f5e659
Loading
Loading
Loading
Loading
+18 −14
Original line number Original line Diff line number Diff line
@@ -34,21 +34,9 @@ namespace android {


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------


Visualizer::Visualizer (const String16& opPackageName,
Visualizer::Visualizer (const String16& opPackageName)
         int32_t priority,
        :   AudioEffect(opPackageName)
         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)
{
{
    initCaptureSize();
}
}


Visualizer::~Visualizer()
Visualizer::~Visualizer()
@@ -58,6 +46,22 @@ Visualizer::~Visualizer()
    setCaptureCallBack(NULL, NULL, 0, 0);
    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)
{
    status_t status = AudioEffect::set(
            SL_IID_VISUALIZATION, nullptr, priority, cbf, user, sessionId, io, device);
    if (status == NO_ERROR || status == ALREADY_EXISTS) {
        initCaptureSize();
    }
    return status;
}


void Visualizer::release()
void Visualizer::release()
{
{
    ALOGV("Visualizer::release()");
    ALOGV("Visualizer::release()");
+20 −13
Original line number Original line Diff line number Diff line
@@ -65,14 +65,21 @@ public:
    /* Constructor.
    /* Constructor.
     * See AudioEffect constructor for details on parameters.
     * See AudioEffect constructor for details on parameters.
     */
     */
                        Visualizer(const String16& opPackageName,
                        explicit Visualizer(const String16& opPackageName);
                                   int32_t priority = 0,
                                   effect_callback_t cbf = NULL,
                                   void* user = NULL,
                                   audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX);


                        ~Visualizer();
                        ~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 = {});

    // Declared 'final' because we call this in ~Visualizer().
    // Declared 'final' because we call this in ~Visualizer().
    status_t    setEnabled(bool enabled) final;
    status_t    setEnabled(bool enabled) final;


@@ -163,15 +170,15 @@ private:
    uint32_t initCaptureSize();
    uint32_t initCaptureSize();


    Mutex mCaptureLock;
    Mutex mCaptureLock;
    uint32_t mCaptureRate;
    uint32_t mCaptureRate = CAPTURE_RATE_DEF;
    uint32_t mCaptureSize;
    uint32_t mCaptureSize = CAPTURE_SIZE_DEF;
    uint32_t mSampleRate;
    uint32_t mSampleRate = 44100000;
    uint32_t mScalingMode;
    uint32_t mScalingMode = VISUALIZER_SCALING_MODE_NORMALIZED;
    uint32_t mMeasurementMode;
    uint32_t mMeasurementMode = MEASUREMENT_MODE_NONE;
    capture_cbk_t mCaptureCallBack;
    capture_cbk_t mCaptureCallBack = nullptr;
    void *mCaptureCbkUser;
    void *mCaptureCbkUser = nullptr;
    sp<CaptureThread> mCaptureThread;
    sp<CaptureThread> mCaptureThread;
    uint32_t mCaptureFlags;
    uint32_t mCaptureFlags = 0;
};
};




+9 −9
Original line number Original line Diff line number Diff line
@@ -337,8 +337,13 @@ android_media_AudioEffect_native_setup(JNIEnv *env, jobject thiz, jobject weak_t
    }
    }


    // create the native AudioEffect object
    // create the native AudioEffect object
    lpAudioEffect = new AudioEffect(typeStr,
    lpAudioEffect = new AudioEffect(String16(opPackageNameStr.c_str()));
                                    String16(opPackageNameStr.c_str()),
    if (lpAudioEffect == 0) {
        ALOGE("Error creating AudioEffect");
        goto setup_failure;
    }

    lpAudioEffect->set(typeStr,
                       uuidStr,
                       uuidStr,
                       priority,
                       priority,
                       effectCallback,
                       effectCallback,
@@ -346,11 +351,6 @@ android_media_AudioEffect_native_setup(JNIEnv *env, jobject thiz, jobject weak_t
                       (audio_session_t) sessionId,
                       (audio_session_t) sessionId,
                       AUDIO_IO_HANDLE_NONE,
                       AUDIO_IO_HANDLE_NONE,
                       device);
                       device);
    if (lpAudioEffect == 0) {
        ALOGE("Error creating AudioEffect");
        goto setup_failure;
    }

    lStatus = AudioEffectJni::translateNativeErrorToJava(lpAudioEffect->initCheck());
    lStatus = AudioEffectJni::translateNativeErrorToJava(lpAudioEffect->initCheck());
    if (lStatus != AUDIOEFFECT_SUCCESS && lStatus != AUDIOEFFECT_ERROR_ALREADY_EXISTS) {
    if (lStatus != AUDIOEFFECT_SUCCESS && lStatus != AUDIOEFFECT_ERROR_ALREADY_EXISTS) {
        ALOGE("AudioEffect initCheck failed %d", lStatus);
        ALOGE("AudioEffect initCheck failed %d", lStatus);
+5 −5
Original line number Original line Diff line number Diff line
@@ -382,15 +382,15 @@ android_media_visualizer_native_setup(JNIEnv *env, jobject thiz, jobject weak_th
    }
    }


    // create the native Visualizer object
    // create the native Visualizer object
    lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str()),
    lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str()));
                                  0,
                                  android_media_visualizer_effect_callback,
                                  lpJniStorage,
                                  (audio_session_t) sessionId);
    if (lpVisualizer == 0) {
    if (lpVisualizer == 0) {
        ALOGE("Error creating Visualizer");
        ALOGE("Error creating Visualizer");
        goto setup_failure;
        goto setup_failure;
    }
    }
    lpVisualizer->set(0,
                      android_media_visualizer_effect_callback,
                      lpJniStorage,
                      (audio_session_t) sessionId);


    lStatus = translateError(lpVisualizer->initCheck());
    lStatus = translateError(lpVisualizer->initCheck());
    if (lStatus != VISUALIZER_SUCCESS && lStatus != VISUALIZER_ERROR_ALREADY_EXISTS) {
    if (lStatus != VISUALIZER_SUCCESS && lStatus != VISUALIZER_ERROR_ALREADY_EXISTS) {