Loading services/audioflinger/AudioFlinger.cpp +49 −40 Original line number Diff line number Diff line Loading @@ -4653,9 +4653,6 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, goto Exit; } { Mutex::Autolock _l(mLock); // check audio settings permission for global effects if (sessionId == AudioSystem::SESSION_OUTPUT_MIX && !settingsAllowed()) { lStatus = PERMISSION_DENIED; Loading @@ -4677,6 +4674,24 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, goto Exit; } if (output == 0) { if (sessionId == AudioSystem::SESSION_OUTPUT_STAGE) { // output must be specified by AudioPolicyManager when using session // AudioSystem::SESSION_OUTPUT_STAGE lStatus = BAD_VALUE; goto Exit; } else if (sessionId == AudioSystem::SESSION_OUTPUT_MIX) { // if the output returned by getOutputForEffect() is removed before we lock the // mutex below, the call to checkPlaybackThread_l(output) below will detect it // and we will exit safely output = AudioSystem::getOutputForEffect(&desc); } } { Mutex::Autolock _l(mLock); if (!EffectIsNullUuid(&pDesc->uuid)) { // if uuid is specified, request effect descriptor lStatus = EffectGetDescriptor(&pDesc->uuid, &desc); Loading Loading @@ -4744,17 +4759,9 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, // If output is not specified try to find a matching audio session ID in one of the // output threads. // TODO: allow attachment of effect to inputs // If output is 0 here, sessionId is neither SESSION_OUTPUT_STAGE nor SESSION_OUTPUT_MIX // because of code checking output when entering the function. if (output == 0) { if (sessionId == AudioSystem::SESSION_OUTPUT_STAGE) { // output must be specified by AudioPolicyManager when using session // AudioSystem::SESSION_OUTPUT_STAGE lStatus = BAD_VALUE; goto Exit; } else if (sessionId == AudioSystem::SESSION_OUTPUT_MIX) { output = AudioSystem::getOutputForEffect(&desc); LOGV("createEffect() got output %d for effect %s", output, desc.name); } else { // look for the thread where the specified audio session is present for (size_t i = 0; i < mPlaybackThreads.size(); i++) { if (mPlaybackThreads.valueAt(i)->hasAudioSession(sessionId) != 0) { Loading @@ -4769,7 +4776,7 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, output = mPlaybackThreads.keyAt(0); } } } LOGV("createEffect() got output %d for effect %s", output, desc.name); PlaybackThread *thread = checkPlaybackThread_l(output); if (thread == NULL) { LOGE("createEffect() unknown output thread"); Loading @@ -4777,6 +4784,8 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, goto Exit; } // TODO: allow attachment of effect to inputs wclient = mClients.valueFor(pid); if (wclient != NULL) { Loading Loading
services/audioflinger/AudioFlinger.cpp +49 −40 Original line number Diff line number Diff line Loading @@ -4653,9 +4653,6 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, goto Exit; } { Mutex::Autolock _l(mLock); // check audio settings permission for global effects if (sessionId == AudioSystem::SESSION_OUTPUT_MIX && !settingsAllowed()) { lStatus = PERMISSION_DENIED; Loading @@ -4677,6 +4674,24 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, goto Exit; } if (output == 0) { if (sessionId == AudioSystem::SESSION_OUTPUT_STAGE) { // output must be specified by AudioPolicyManager when using session // AudioSystem::SESSION_OUTPUT_STAGE lStatus = BAD_VALUE; goto Exit; } else if (sessionId == AudioSystem::SESSION_OUTPUT_MIX) { // if the output returned by getOutputForEffect() is removed before we lock the // mutex below, the call to checkPlaybackThread_l(output) below will detect it // and we will exit safely output = AudioSystem::getOutputForEffect(&desc); } } { Mutex::Autolock _l(mLock); if (!EffectIsNullUuid(&pDesc->uuid)) { // if uuid is specified, request effect descriptor lStatus = EffectGetDescriptor(&pDesc->uuid, &desc); Loading Loading @@ -4744,17 +4759,9 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, // If output is not specified try to find a matching audio session ID in one of the // output threads. // TODO: allow attachment of effect to inputs // If output is 0 here, sessionId is neither SESSION_OUTPUT_STAGE nor SESSION_OUTPUT_MIX // because of code checking output when entering the function. if (output == 0) { if (sessionId == AudioSystem::SESSION_OUTPUT_STAGE) { // output must be specified by AudioPolicyManager when using session // AudioSystem::SESSION_OUTPUT_STAGE lStatus = BAD_VALUE; goto Exit; } else if (sessionId == AudioSystem::SESSION_OUTPUT_MIX) { output = AudioSystem::getOutputForEffect(&desc); LOGV("createEffect() got output %d for effect %s", output, desc.name); } else { // look for the thread where the specified audio session is present for (size_t i = 0; i < mPlaybackThreads.size(); i++) { if (mPlaybackThreads.valueAt(i)->hasAudioSession(sessionId) != 0) { Loading @@ -4769,7 +4776,7 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, output = mPlaybackThreads.keyAt(0); } } } LOGV("createEffect() got output %d for effect %s", output, desc.name); PlaybackThread *thread = checkPlaybackThread_l(output); if (thread == NULL) { LOGE("createEffect() unknown output thread"); Loading @@ -4777,6 +4784,8 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, goto Exit; } // TODO: allow attachment of effect to inputs wclient = mClients.valueFor(pid); if (wclient != NULL) { Loading