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

Commit 0c56c527 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "AudioEffect: add device descriptor to AudioEffect constructor"

parents a473e074 94876034
Loading
Loading
Loading
Loading
+13 −6
Original line number Original line Diff line number Diff line
@@ -48,12 +48,13 @@ AudioEffect::AudioEffect(const effect_uuid_t *type,
                effect_callback_t cbf,
                effect_callback_t cbf,
                void* user,
                void* user,
                audio_session_t sessionId,
                audio_session_t sessionId,
                audio_io_handle_t io
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device
                )
                )
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
{
{
    AutoMutex lock(mConstructLock);
    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,
AudioEffect::AudioEffect(const char *typeStr,
@@ -63,7 +64,8 @@ AudioEffect::AudioEffect(const char *typeStr,
                effect_callback_t cbf,
                effect_callback_t cbf,
                void* user,
                void* user,
                audio_session_t sessionId,
                audio_session_t sessionId,
                audio_io_handle_t io
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device
                )
                )
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
{
{
@@ -87,7 +89,7 @@ AudioEffect::AudioEffect(const char *typeStr,
    }
    }


    AutoMutex lock(mConstructLock);
    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,
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,
                effect_callback_t cbf,
                void* user,
                void* user,
                audio_session_t sessionId,
                audio_session_t sessionId,
                audio_io_handle_t io)
                audio_io_handle_t io,
                const AudioDeviceTypeAddr& device)
{
{
    sp<IEffect> iEffect;
    sp<IEffect> iEffect;
    sp<IMemory> cblk;
    sp<IMemory> cblk;
@@ -109,6 +112,10 @@ status_t AudioEffect::set(const effect_uuid_t *type,
        return INVALID_OPERATION;
        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();
    const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
    if (audioFlinger == 0) {
    if (audioFlinger == 0) {
        ALOGE("set(): Could not get audioflinger");
        ALOGE("set(): Could not get audioflinger");
@@ -133,7 +140,7 @@ status_t AudioEffect::set(const effect_uuid_t *type,
    mClientPid = IPCThreadState::self()->getCallingPid();
    mClientPid = IPCThreadState::self()->getCallingPid();


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


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

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


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


@@ -1380,14 +1386,18 @@ status_t BnAudioFlinger::onTransact(
            int32_t priority = data.readInt32();
            int32_t priority = data.readInt32();
            audio_io_handle_t output = (audio_io_handle_t) data.readInt32();
            audio_io_handle_t output = (audio_io_handle_t) data.readInt32();
            audio_session_t sessionId = (audio_session_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();
            const String16 opPackageName = data.readString16();
            pid_t pid = (pid_t)data.readInt32();
            pid_t pid = (pid_t)data.readInt32();


            status_t status = NO_ERROR;
            int id = 0;
            int id = 0;
            int enabled = 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);
                    opPackageName, pid, &status, &id, &enabled);
            reply->writeInt32(status);
            reply->writeInt32(status);
            reply->writeInt32(id);
            reply->writeInt32(id);
+14 −8
Original line number Original line Diff line number Diff line
@@ -362,6 +362,9 @@ public:
     *      (AudioTrack or MediaPLayer) within the same audio session.
     *      (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
     * io:  HAL audio output or input stream to which this effect must be attached. Leave at 0 for
     *      automatic output selection by AudioFlinger.
     *      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,
    AudioEffect(const effect_uuid_t *type,
@@ -371,7 +374,8 @@ public:
                effect_callback_t cbf = NULL,
                effect_callback_t cbf = NULL,
                void* user = NULL,
                void* user = NULL,
                audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX,
                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.
    /* Constructor.
@@ -384,7 +388,8 @@ public:
                    effect_callback_t cbf = NULL,
                    effect_callback_t cbf = NULL,
                    void* user = NULL,
                    void* user = NULL,
                    audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX,
                    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.
    /* Terminates the AudioEffect and unregisters it from AudioFlinger.
@@ -406,7 +411,8 @@ public:
                            effect_callback_t cbf = NULL,
                            effect_callback_t cbf = NULL,
                            void* user = NULL,
                            void* user = NULL,
                            audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX,
                            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
    /* Result of constructing the AudioEffect. This must be checked
+1 −0
Original line number Original line Diff line number Diff line
@@ -465,6 +465,7 @@ public:
                                    // AudioFlinger doesn't take over handle reference from client
                                    // AudioFlinger doesn't take over handle reference from client
                                    audio_io_handle_t output,
                                    audio_io_handle_t output,
                                    audio_session_t sessionId,
                                    audio_session_t sessionId,
                                    const AudioDeviceTypeAddr& device,
                                    const String16& callingPackage,
                                    const String16& callingPackage,
                                    pid_t pid,
                                    pid_t pid,
                                    status_t *status,
                                    status_t *status,
+6 −0
Original line number Original line Diff line number Diff line
@@ -3319,6 +3319,7 @@ sp<IEffect> AudioFlinger::createEffect(
        int32_t priority,
        int32_t priority,
        audio_io_handle_t io,
        audio_io_handle_t io,
        audio_session_t sessionId,
        audio_session_t sessionId,
        const AudioDeviceTypeAddr& device __unused,
        const String16& opPackageName,
        const String16& opPackageName,
        pid_t pid,
        pid_t pid,
        status_t *status,
        status_t *status,
@@ -3377,6 +3378,11 @@ sp<IEffect> AudioFlinger::createEffect(
            lStatus = PERMISSION_DENIED;
            lStatus = PERMISSION_DENIED;
            goto Exit;
            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
        //TODO: add check on device ID when added to arguments
    } else {
    } else {
        // general sessionId.
        // general sessionId.
Loading