Loading media/libaudioclient/AudioEffect.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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) { Loading @@ -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, Loading @@ -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; Loading @@ -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"); Loading @@ -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)) { Loading media/libaudioclient/IAudioFlinger.cpp +14 −4 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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()); Loading @@ -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); Loading Loading @@ -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); Loading media/libaudioclient/include/media/AudioEffect.h +14 −8 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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. Loading @@ -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. Loading @@ -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 Loading media/libaudioclient/include/media/IAudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -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, Loading services/audioflinger/AudioFlinger.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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 Loading
media/libaudioclient/AudioEffect.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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) { Loading @@ -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, Loading @@ -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; Loading @@ -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"); Loading @@ -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)) { Loading
media/libaudioclient/IAudioFlinger.cpp +14 −4 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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()); Loading @@ -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); Loading Loading @@ -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); Loading
media/libaudioclient/include/media/AudioEffect.h +14 −8 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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. Loading @@ -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. Loading @@ -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 Loading
media/libaudioclient/include/media/IAudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
services/audioflinger/AudioFlinger.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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