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

Commit 9007e168 authored by Eric Laurent's avatar Eric Laurent Committed by android-build-merger
Browse files

Merge "AudioEffect: add device descriptor to AudioEffect constructor"

am: a2630442

Change-Id: I7f4a8df4281b5adee9744d324d991b7996a68e91
parents 9a262665 a2630442
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -48,12 +48,13 @@ AudioEffect::AudioEffect(const effect_uuid_t *type,
                effect_callback_t cbf,
                void* user,
                audio_session_t sessionId,
                audio_io_handle_t io
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device
                )
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
{
    AutoMutex lock(mConstructLock);
    mStatus = set(type, uuid, priority, cbf, user, sessionId, io);
    mStatus = set(type, uuid, priority, cbf, user, sessionId, io, device);
}

AudioEffect::AudioEffect(const char *typeStr,
@@ -63,7 +64,8 @@ AudioEffect::AudioEffect(const char *typeStr,
                effect_callback_t cbf,
                void* user,
                audio_session_t sessionId,
                audio_io_handle_t io
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device
                )
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
{
@@ -87,7 +89,7 @@ AudioEffect::AudioEffect(const char *typeStr,
    }

    AutoMutex lock(mConstructLock);
    mStatus = set(pType, pUuid, priority, cbf, user, sessionId, io);
    mStatus = set(pType, pUuid, priority, cbf, user, sessionId, io, device);
}

status_t AudioEffect::set(const effect_uuid_t *type,
@@ -96,7 +98,8 @@ status_t AudioEffect::set(const effect_uuid_t *type,
                effect_callback_t cbf,
                void* user,
                audio_session_t sessionId,
                audio_io_handle_t io)
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device)
{
    sp<IEffect> iEffect;
    sp<IMemory> cblk;
@@ -109,6 +112,10 @@ status_t AudioEffect::set(const effect_uuid_t *type,
        return INVALID_OPERATION;
    }

    if (sessionId == AUDIO_SESSION_DEVICE && io != AUDIO_IO_HANDLE_NONE) {
        ALOGW("IO handle should not be specified for device effect");
        return BAD_VALUE;
    }
    const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
    if (audioFlinger == 0) {
        ALOGE("set(): Could not get audioflinger");
@@ -133,7 +140,7 @@ status_t AudioEffect::set(const effect_uuid_t *type,
    mClientPid = IPCThreadState::self()->getCallingPid();

    iEffect = audioFlinger->createEffect((effect_descriptor_t *)&mDescriptor,
            mIEffectClient, priority, io, mSessionId, mOpPackageName, mClientPid,
            mIEffectClient, priority, io, mSessionId, device, mOpPackageName, mClientPid,
            &mStatus, &mId, &enabled);

    if (iEffect == 0 || (mStatus != NO_ERROR && mStatus != ALREADY_EXISTS)) {
+14 −4
Original line number Diff line number Diff line
@@ -658,6 +658,7 @@ public:
                                    int32_t priority,
                                    audio_io_handle_t output,
                                    audio_session_t sessionId,
                                    const AudioDeviceTypeAddr& device,
                                    const String16& opPackageName,
                                    pid_t pid,
                                    status_t *status,
@@ -666,12 +667,11 @@ public:
    {
        Parcel data, reply;
        sp<IEffect> effect;

        if (pDesc == NULL) {
            if (status != NULL) {
                *status = BAD_VALUE;
            }
            return effect;
            return nullptr;
        }

        data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
@@ -680,6 +680,12 @@ public:
        data.writeInt32(priority);
        data.writeInt32((int32_t) output);
        data.writeInt32(sessionId);
        if (data.writeParcelable(device) != NO_ERROR) {
            if (status != NULL) {
                *status = NO_INIT;
            }
            return nullptr;
        }
        data.writeString16(opPackageName);
        data.writeInt32((int32_t) pid);

@@ -1378,14 +1384,18 @@ status_t BnAudioFlinger::onTransact(
            int32_t priority = data.readInt32();
            audio_io_handle_t output = (audio_io_handle_t) data.readInt32();
            audio_session_t sessionId = (audio_session_t) data.readInt32();
            AudioDeviceTypeAddr device;
            status_t status = NO_ERROR;
            if ((status = data.readParcelable(&device)) != NO_ERROR) {
                return status;
            }
            const String16 opPackageName = data.readString16();
            pid_t pid = (pid_t)data.readInt32();

            status_t status = NO_ERROR;
            int id = 0;
            int enabled = 0;

            sp<IEffect> effect = createEffect(&desc, client, priority, output, sessionId,
            sp<IEffect> effect = createEffect(&desc, client, priority, output, sessionId, device,
                    opPackageName, pid, &status, &id, &enabled);
            reply->writeInt32(status);
            reply->writeInt32(id);
+14 −8
Original line number Diff line number Diff line
@@ -362,6 +362,9 @@ public:
     *      (AudioTrack or MediaPLayer) within the same audio session.
     * io:  HAL audio output or input stream to which this effect must be attached. Leave at 0 for
     *      automatic output selection by AudioFlinger.
     * device: An audio device descriptor. Only used when "sessionID" is AUDIO_SESSION_DEVICE.
     *         Specifies the audio device type and address the effect must be attached to.
     *         If "sessionID" is AUDIO_SESSION_DEVICE then "io" must be AUDIO_IO_HANDLE_NONE.
     */

    AudioEffect(const effect_uuid_t *type,
@@ -371,7 +374,8 @@ public:
                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
                audio_io_handle_t io = AUDIO_IO_HANDLE_NONE,
                const AudioDeviceTypeAddr& device = {}
                );

    /* Constructor.
@@ -384,7 +388,8 @@ public:
                    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
                    audio_io_handle_t io = AUDIO_IO_HANDLE_NONE,
                    const AudioDeviceTypeAddr& device = {}
                    );

    /* Terminates the AudioEffect and unregisters it from AudioFlinger.
@@ -406,7 +411,8 @@ public:
                            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
                            audio_io_handle_t io = AUDIO_IO_HANDLE_NONE,
                            const AudioDeviceTypeAddr& device = {}
                            );

    /* Result of constructing the AudioEffect. This must be checked
+1 −0
Original line number Diff line number Diff line
@@ -453,6 +453,7 @@ public:
                                    // AudioFlinger doesn't take over handle reference from client
                                    audio_io_handle_t output,
                                    audio_session_t sessionId,
                                    const AudioDeviceTypeAddr& device,
                                    const String16& callingPackage,
                                    pid_t pid,
                                    status_t *status,
+6 −0
Original line number Diff line number Diff line
@@ -3294,6 +3294,7 @@ sp<IEffect> AudioFlinger::createEffect(
        int32_t priority,
        audio_io_handle_t io,
        audio_session_t sessionId,
        const AudioDeviceTypeAddr& device __unused,
        const String16& opPackageName,
        pid_t pid,
        status_t *status,
@@ -3352,6 +3353,11 @@ sp<IEffect> AudioFlinger::createEffect(
            lStatus = PERMISSION_DENIED;
            goto Exit;
        }
        if (io != AUDIO_IO_HANDLE_NONE) {
            ALOGE("%s: io handle should not be specified for device effect", __func__);
            lStatus = BAD_VALUE;
            goto Exit;
        }
        //TODO: add check on device ID when added to arguments
    } else {
        // general sessionId.
Loading