Revert "audioflinger: implement silenced capture for mmap"
This reverts commit a2f478ca0b2bda8db9b321f0cfa9e9d3cf6130f9.
Bug: 78118584
Change-Id: Ie0da3dea445f2474c7a889c5f9919305c1c96d40
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index f9c287a..43a8b50 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -7886,7 +7886,7 @@
mSessionId(AUDIO_SESSION_NONE),
mDeviceId(AUDIO_PORT_HANDLE_NONE), mPortId(AUDIO_PORT_HANDLE_NONE),
mHalStream(stream), mHalDevice(hwDev->hwDevice()), mAudioHwDev(hwDev),
- mActiveTracks(&this->mLocalLog), mNoCallbackWarningCount(0)
+ mActiveTracks(&this->mLocalLog)
{
mStandby = true;
readHalParameters_l();
@@ -7904,14 +7904,7 @@
void AudioFlinger::MmapThread::disconnect()
{
- ActiveTracks<MmapTrack> activeTracks;
- {
- Mutex::Autolock _l(mLock);
- for (const sp<MmapTrack> &t : mActiveTracks) {
- activeTracks.add(t);
- }
- }
- for (const sp<MmapTrack> &t : activeTracks) {
+ for (const sp<MmapTrack> &t : mActiveTracks) {
stop(t->portId());
}
// This will decrement references and may cause the destruction of this thread.
@@ -7956,17 +7949,6 @@
return mHalStream->getMmapPosition(position);
}
-status_t AudioFlinger::MmapThread::exitStandby()
-{
- status_t ret = mHalStream->start();
- if (ret != NO_ERROR) {
- ALOGE("%s: error mHalStream->start() = %d for first track", __FUNCTION__, ret);
- return ret;
- }
- mStandby = false;
- return NO_ERROR;
-}
-
status_t AudioFlinger::MmapThread::start(const AudioClient& client,
audio_port_handle_t *handle)
{
@@ -7980,7 +7962,13 @@
if (*handle == mPortId) {
// for the first track, reuse portId and session allocated when the stream was opened
- return exitStandby();
+ ret = mHalStream->start();
+ if (ret != NO_ERROR) {
+ ALOGE("%s: error mHalStream->start() = %d for first track", __FUNCTION__, ret);
+ return ret;
+ }
+ mStandby = false;
+ return NO_ERROR;
}
audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE;
@@ -8028,43 +8016,33 @@
return BAD_VALUE;
}
- bool silenced = false;
if (isOutput()) {
ret = AudioSystem::startOutput(mId, streamType(), mSessionId);
} else {
+ // TODO: Block recording for idle UIDs (b/72134552)
+ bool silenced;
ret = AudioSystem::startInput(portId, &silenced);
}
- Mutex::Autolock _l(mLock);
// abort if start is rejected by audio policy manager
if (ret != NO_ERROR) {
ALOGE("%s: error start rejected by AudioPolicyManager = %d", __FUNCTION__, ret);
if (mActiveTracks.size() != 0) {
- mLock.unlock();
if (isOutput()) {
AudioSystem::releaseOutput(mId, streamType(), mSessionId);
} else {
AudioSystem::releaseInput(portId);
}
- mLock.lock();
} else {
mHalStream->stop();
}
return PERMISSION_DENIED;
}
- if (!isOutput() && !silenced) {
- for (const sp<MmapTrack> &track : mActiveTracks) {
- if (track->isSilenced_l() && track->uid() != client.clientUid)
- track->invalidate();
- }
- }
-
// Given that MmapThread::mAttr is mutable, should a MmapTrack have attributes ?
sp<MmapTrack> track = new MmapTrack(this, mAttr, mSampleRate, mFormat, mChannelMask, mSessionId,
client.clientUid, client.clientPid, portId);
- track->setSilenced_l(silenced);
mActiveTracks.add(track);
sp<EffectChain> chain = getEffectChain_l(mSessionId);
if (chain != 0) {
@@ -8094,8 +8072,6 @@
return NO_ERROR;
}
- Mutex::Autolock _l(mLock);
-
sp<MmapTrack> track;
for (const sp<MmapTrack> &t : mActiveTracks) {
if (handle == t->portId()) {
@@ -8109,7 +8085,6 @@
mActiveTracks.remove(track);
- mLock.unlock();
if (isOutput()) {
AudioSystem::stopOutput(mId, streamType(), track->sessionId());
AudioSystem::releaseOutput(mId, streamType(), track->sessionId());
@@ -8117,7 +8092,6 @@
AudioSystem::stopInput(track->portId());
AudioSystem::releaseInput(track->portId());
}
- mLock.lock();
sp<EffectChain> chain = getEffectChain_l(track->sessionId());
if (chain != 0) {
@@ -8544,11 +8518,9 @@
if (track->isInvalid()) {
sp<MmapStreamCallback> callback = mCallback.promote();
if (callback != 0) {
- callback->onTearDown(track->portId());
- } else if (mNoCallbackWarningCount < kMaxNoCallbackWarnings) {
- ALOGW("Could not notify MMAP stream tear down: no onTearDown callback!");
- mNoCallbackWarningCount++;
+ callback->onTearDown();
}
+ break;
}
}
}
@@ -8603,6 +8575,7 @@
mStreamVolume(1.0),
mStreamMute(false),
mHalVolFloat(-1.0f), // Initialize to illegal value so it always gets set properly later.
+ mNoCallbackWarningCount(0),
mOutput(output)
{
snprintf(mThreadName, kThreadNameLength, "AudioMmapOut_%X", id);
@@ -8807,12 +8780,6 @@
mChannelCount = audio_channel_count_from_in_mask(mChannelMask);
}
-status_t AudioFlinger::MmapCaptureThread::exitStandby()
-{
- mInput->stream->setGain(1.0f);
- return MmapThread::exitStandby();
-}
-
AudioFlinger::AudioStreamIn* AudioFlinger::MmapCaptureThread::clearInput()
{
Mutex::Autolock _l(mLock);
@@ -8821,34 +8788,6 @@
return input;
}
-
-void AudioFlinger::MmapCaptureThread::processVolume_l()
-{
- bool changed = false;
- bool silenced = false;
-
- sp<MmapStreamCallback> callback = mCallback.promote();
- if (callback == 0) {
- if (mNoCallbackWarningCount < kMaxNoCallbackWarnings) {
- ALOGW("Could not set MMAP stream silenced: no onStreamSilenced callback!");
- mNoCallbackWarningCount++;
- }
- }
-
- // After a change occurred in track silenced state, mute capture in audio DSP if at least one
- // track is silenced and unmute otherwise
- for (size_t i = 0; i < mActiveTracks.size() && !silenced; i++) {
- if (!mActiveTracks[i]->getAndSetSilencedNotified_l()) {
- changed = true;
- silenced = mActiveTracks[i]->isSilenced_l();
- }
- }
-
- if (changed) {
- mInput->stream->setGain(silenced ? 0.0f: 1.0f);
- }
-}
-
void AudioFlinger::MmapCaptureThread::updateMetadata_l()
{
if (mInput == nullptr || mInput->stream == nullptr ||
@@ -8866,15 +8805,4 @@
mInput->stream->updateSinkMetadata(metadata);
}
-void AudioFlinger::MmapCaptureThread::setRecordSilenced(uid_t uid, bool silenced)
-{
- Mutex::Autolock _l(mLock);
- for (size_t i = 0; i < mActiveTracks.size() ; i++) {
- if (mActiveTracks[i]->uid() == uid) {
- mActiveTracks[i]->setSilenced_l(silenced);
- broadcast_l();
- }
- }
-}
-
} // namespace android