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

Commit 399fc1b8 authored by Eric Laurent's avatar Eric Laurent Committed by Automerger Merge Worker
Browse files

Merge "AudioEffect: Add process callback" into sc-v2-dev am: 42ae5d5b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/15543421

Change-Id: Icb423df343336dbf96bc7657f1acb28b6b2ffc21
parents 4341ac2e 42ae5d5b
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -70,7 +70,8 @@ status_t AudioEffect::set(const effect_uuid_t *type,
                audio_session_t sessionId,
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device,
                bool probe)
                bool probe,
                bool notifyFramesProcessed)
{
    sp<media::IEffect> iEffect;
    sp<IMemory> cblk;
@@ -124,6 +125,7 @@ status_t AudioEffect::set(const effect_uuid_t *type,
    request.device = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioDeviceTypeAddress(device));
    request.attributionSource = mClientAttributionSource;
    request.probe = probe;
    request.notifyFramesProcessed = notifyFramesProcessed;

    media::CreateEffectResponse response;

@@ -194,7 +196,8 @@ status_t AudioEffect::set(const char *typeStr,
                audio_session_t sessionId,
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device,
                bool probe)
                bool probe,
                bool notifyFramesProcessed)
{
    effect_uuid_t type;
    effect_uuid_t *pType = nullptr;
@@ -211,7 +214,8 @@ status_t AudioEffect::set(const char *typeStr,
        pUuid = &uuid;
    }

    return set(pType, pUuid, priority, cbf, user, sessionId, io, device, probe);
    return set(pType, pUuid, priority, cbf, user, sessionId, io,
               device, probe, notifyFramesProcessed);
}


@@ -522,6 +526,13 @@ void AudioEffect::commandExecuted(int32_t cmdCode,
    }
}

void AudioEffect::framesProcessed(int32_t frames)
{
    if (mCbf != NULL) {
        mCbf(EVENT_FRAMES_PROCESSED, mUserData, &frames);
    }
}

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

status_t AudioEffect::queryNumberEffects(uint32_t *numEffects)
+2 −0
Original line number Diff line number Diff line
@@ -37,4 +37,6 @@ parcelable CreateEffectRequest {
    AudioDevice device;
    AttributionSourceState attributionSource;
    boolean probe;
    /** true if a callback must be sent each time audio frames are processed */
    boolean notifyFramesProcessed;
}
+6 −0
Original line number Diff line number Diff line
@@ -43,4 +43,10 @@ interface IEffectClient {
     * TODO(ytai): replace opaque byte arrays with strongly typed parameters.
     */
    oneway void commandExecuted(int cmdCode, in byte[] cmdData, in byte[] replyData);

    /**
     * Called whenever audio frames have been processed by the effect engine.
     * @param frames number of frames processed.
     */
    oneway void framesProcessed(int frames);
}
+4 −0
Original line number Diff line number Diff line
@@ -383,6 +383,9 @@ struct EffectClient : public android::media::BnEffectClient {
                                   const std::vector<uint8_t> &replyData __unused) override {
        return binder::Status::ok();
    }
    binder::Status framesProcessed(int32_t frames __unused) override {
        return binder::Status::ok();
    }
};

status_t AudioFlingerFuzzer::invokeAudioEffect() {
@@ -424,6 +427,7 @@ status_t AudioFlingerFuzzer::invokeAudioEffect() {
    request.attributionSource.packageName = opPackageName;
    request.attributionSource.pid = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(getpid()));
    request.probe = false;
    request.notifyFramesProcessed = false;

    media::CreateEffectResponse response{};
    status_t status = af->createEffect(request, &response);
+15 −3
Original line number Diff line number Diff line
@@ -283,7 +283,8 @@ public:
        EVENT_CONTROL_STATUS_CHANGED = 0,
        EVENT_ENABLE_STATUS_CHANGED = 1,
        EVENT_PARAMETER_CHANGED = 2,
        EVENT_ERROR = 3
        EVENT_ERROR = 3,
        EVENT_FRAMES_PROCESSED = 4,
    };

    /* Callback function notifying client application of a change in effect engine state or
@@ -389,7 +390,8 @@ public:
                            audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX,
                            audio_io_handle_t io = AUDIO_IO_HANDLE_NONE,
                            const AudioDeviceTypeAddr& device = {},
                            bool probe = false);
                            bool probe = false,
                            bool notifyFramesProcessed = false);
    /*
     * Same as above but with type and uuid specified by character strings.
     */
@@ -401,7 +403,8 @@ public:
                            audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX,
                            audio_io_handle_t io = AUDIO_IO_HANDLE_NONE,
                            const AudioDeviceTypeAddr& device = {},
                            bool probe = false);
                            bool probe = false,
                            bool notifyFramesProcessed = false);

    /* Result of constructing the AudioEffect. This must be checked
     * before using any AudioEffect API.
@@ -552,6 +555,7 @@ protected:
     virtual void commandExecuted(int32_t cmdCode,
                                  const std::vector<uint8_t>& cmdData,
                                  const std::vector<uint8_t>& replyData);
     virtual void framesProcessed(int32_t frames);

private:

@@ -587,6 +591,14 @@ private:
            }
            return binder::Status::ok();
        }
        binder::Status framesProcessed(int32_t frames) override {
            sp<AudioEffect> effect = mEffect.promote();
            if (effect != 0) {
                effect->framesProcessed(frames);
            }
            return binder::Status::ok();
        }


        // IBinder::DeathRecipient
        virtual void binderDied(const wp<IBinder>& /*who*/) {
Loading