|
|
|
@ -3019,6 +3019,21 @@ sp<IEffect> AudioFlinger::createEffect(
|
|
|
|
|
io = mPlaybackThreads.keyAt(0);
|
|
|
|
|
}
|
|
|
|
|
ALOGV("createEffect() got io %d for effect %s", io, desc.name);
|
|
|
|
|
} else if (checkPlaybackThread_l(io) != nullptr) {
|
|
|
|
|
// allow only one effect chain per sessionId on mPlaybackThreads.
|
|
|
|
|
for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
|
|
|
|
|
const audio_io_handle_t checkIo = mPlaybackThreads.keyAt(i);
|
|
|
|
|
if (io == checkIo) continue;
|
|
|
|
|
const uint32_t sessionType =
|
|
|
|
|
mPlaybackThreads.valueAt(i)->hasAudioSession(sessionId);
|
|
|
|
|
if ((sessionType & ThreadBase::EFFECT_SESSION) != 0) {
|
|
|
|
|
ALOGE("%s: effect %s io %d denied because session %d effect exists on io %d",
|
|
|
|
|
__func__, desc.name, (int)io, (int)sessionId, (int)checkIo);
|
|
|
|
|
android_errorWriteLog(0x534e4554, "123237974");
|
|
|
|
|
lStatus = BAD_VALUE;
|
|
|
|
|
goto Exit;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ThreadBase *thread = checkRecordThread_l(io);
|
|
|
|
|
if (thread == NULL) {
|
|
|
|
|