Loading media/libaudioclient/AudioSystem.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -917,11 +917,11 @@ status_t AudioSystem::getInputForAttr(const audio_attributes_t *attr, config, flags, selectedDeviceId, portId); config, flags, selectedDeviceId, portId); } } status_t AudioSystem::startInput(audio_port_handle_t portId) status_t AudioSystem::startInput(audio_port_handle_t portId, bool *silenced) { { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; if (aps == 0) return PERMISSION_DENIED; return aps->startInput(portId); return aps->startInput(portId, silenced); } } status_t AudioSystem::stopInput(audio_port_handle_t portId) status_t AudioSystem::stopInput(audio_port_handle_t portId) Loading media/libaudioclient/IAudioPolicyService.cpp +7 −2 Original line number Original line Diff line number Diff line Loading @@ -329,13 +329,16 @@ public: return NO_ERROR; return NO_ERROR; } } virtual status_t startInput(audio_port_handle_t portId) virtual status_t startInput(audio_port_handle_t portId, bool *silenced) { { Parcel data, reply; Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(portId); data.writeInt32(portId); data.writeInt32(*silenced ? 1 : 0); remote()->transact(START_INPUT, data, &reply); remote()->transact(START_INPUT, data, &reply); status_t status = static_cast <status_t> (reply.readInt32()); status_t status = static_cast <status_t> (reply.readInt32()); *silenced = reply.readInt32() == 1; return status; return status; } } Loading Loading @@ -1216,8 +1219,10 @@ status_t BnAudioPolicyService::onTransact( case START_INPUT: { case START_INPUT: { CHECK_INTERFACE(IAudioPolicyService, data, reply); CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_port_handle_t portId = static_cast <audio_port_handle_t>(data.readInt32()); audio_port_handle_t portId = static_cast <audio_port_handle_t>(data.readInt32()); status_t status = startInput(portId); bool silenced = data.readInt32() == 1; status_t status = startInput(portId, &silenced); reply->writeInt32(static_cast <uint32_t>(status)); reply->writeInt32(static_cast <uint32_t>(status)); reply->writeInt32(silenced ? 1 : 0); return NO_ERROR; return NO_ERROR; } break; } break; Loading media/libaudioclient/include/media/AudioSystem.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -241,7 +241,8 @@ public: audio_port_handle_t *selectedDeviceId, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId); audio_port_handle_t *portId); static status_t startInput(audio_port_handle_t portId); static status_t startInput(audio_port_handle_t portId, bool *silenced); static status_t stopInput(audio_port_handle_t portId); static status_t stopInput(audio_port_handle_t portId); static void releaseInput(audio_port_handle_t portId); static void releaseInput(audio_port_handle_t portId); static status_t initStreamVolume(audio_stream_type_t stream, static status_t initStreamVolume(audio_stream_type_t stream, Loading media/libaudioclient/include/media/IAudioPolicyService.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -78,7 +78,8 @@ public: audio_input_flags_t flags, audio_input_flags_t flags, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId) = 0; audio_port_handle_t *portId) = 0; virtual status_t startInput(audio_port_handle_t portId) = 0; virtual status_t startInput(audio_port_handle_t portId, bool *silenced) = 0; virtual status_t stopInput(audio_port_handle_t portId) = 0; virtual status_t stopInput(audio_port_handle_t portId) = 0; virtual void releaseInput(audio_port_handle_t portId) = 0; virtual void releaseInput(audio_port_handle_t portId) = 0; virtual status_t initStreamVolume(audio_stream_type_t stream, virtual status_t initStreamVolume(audio_stream_type_t stream, Loading services/audioflinger/Threads.cpp +13 −10 Original line number Original line Diff line number Diff line Loading @@ -7367,7 +7367,8 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac status_t status = NO_ERROR; status_t status = NO_ERROR; if (recordTrack->isExternalTrack()) { if (recordTrack->isExternalTrack()) { mLock.unlock(); mLock.unlock(); status = AudioSystem::startInput(recordTrack->portId()); bool silenced; status = AudioSystem::startInput(recordTrack->portId(), &silenced); mLock.lock(); mLock.lock(); if (recordTrack->isInvalid()) { if (recordTrack->isInvalid()) { recordTrack->clearSyncStartEvent(); recordTrack->clearSyncStartEvent(); Loading Loading @@ -7395,6 +7396,7 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac recordTrack->clearSyncStartEvent(); recordTrack->clearSyncStartEvent(); return status; return status; } } recordTrack->setSilenced(silenced); } } // Catch up with current buffer indices if thread is already running. // Catch up with current buffer indices if thread is already running. // This is what makes a new client discard all buffered data. If the track's mRsmpInFront // This is what makes a new client discard all buffered data. If the track's mRsmpInFront Loading Loading @@ -8344,10 +8346,11 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, return BAD_VALUE; return BAD_VALUE; } } bool silenced = false; if (isOutput()) { if (isOutput()) { ret = AudioSystem::startOutput(portId); ret = AudioSystem::startOutput(portId); } else { } else { ret = AudioSystem::startInput(portId); ret = AudioSystem::startInput(portId, &silenced); } } Mutex::Autolock _l(mLock); Mutex::Autolock _l(mLock); Loading @@ -8368,21 +8371,21 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, return PERMISSION_DENIED; return PERMISSION_DENIED; } } // Given that MmapThread::mAttr is mutable, should a MmapTrack have attributes ? sp<MmapTrack> track = new MmapTrack(this, mAttr, mSampleRate, mFormat, mChannelMask, mSessionId, isOutput(), client.clientUid, client.clientPid, portId); if (isOutput()) { if (isOutput()) { // force volume update when a new track is added // force volume update when a new track is added mHalVolFloat = -1.0f; mHalVolFloat = -1.0f; } else if (!track->isSilenced_l()) { } else if (!silenced) { for (const sp<MmapTrack> &t : mActiveTracks) { for (const sp<MmapTrack> &track : mActiveTracks) { if (t->isSilenced_l() && t->uid() != client.clientUid) if (track->isSilenced_l() && track->uid() != client.clientUid) t->invalidate(); track->invalidate(); } } } } // Given that MmapThread::mAttr is mutable, should a MmapTrack have attributes ? sp<MmapTrack> track = new MmapTrack(this, mAttr, mSampleRate, mFormat, mChannelMask, mSessionId, isOutput(), client.clientUid, client.clientPid, portId); track->setSilenced_l(silenced); mActiveTracks.add(track); mActiveTracks.add(track); sp<EffectChain> chain = getEffectChain_l(mSessionId); sp<EffectChain> chain = getEffectChain_l(mSessionId); if (chain != 0) { if (chain != 0) { Loading Loading
media/libaudioclient/AudioSystem.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -917,11 +917,11 @@ status_t AudioSystem::getInputForAttr(const audio_attributes_t *attr, config, flags, selectedDeviceId, portId); config, flags, selectedDeviceId, portId); } } status_t AudioSystem::startInput(audio_port_handle_t portId) status_t AudioSystem::startInput(audio_port_handle_t portId, bool *silenced) { { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; if (aps == 0) return PERMISSION_DENIED; return aps->startInput(portId); return aps->startInput(portId, silenced); } } status_t AudioSystem::stopInput(audio_port_handle_t portId) status_t AudioSystem::stopInput(audio_port_handle_t portId) Loading
media/libaudioclient/IAudioPolicyService.cpp +7 −2 Original line number Original line Diff line number Diff line Loading @@ -329,13 +329,16 @@ public: return NO_ERROR; return NO_ERROR; } } virtual status_t startInput(audio_port_handle_t portId) virtual status_t startInput(audio_port_handle_t portId, bool *silenced) { { Parcel data, reply; Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(portId); data.writeInt32(portId); data.writeInt32(*silenced ? 1 : 0); remote()->transact(START_INPUT, data, &reply); remote()->transact(START_INPUT, data, &reply); status_t status = static_cast <status_t> (reply.readInt32()); status_t status = static_cast <status_t> (reply.readInt32()); *silenced = reply.readInt32() == 1; return status; return status; } } Loading Loading @@ -1216,8 +1219,10 @@ status_t BnAudioPolicyService::onTransact( case START_INPUT: { case START_INPUT: { CHECK_INTERFACE(IAudioPolicyService, data, reply); CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_port_handle_t portId = static_cast <audio_port_handle_t>(data.readInt32()); audio_port_handle_t portId = static_cast <audio_port_handle_t>(data.readInt32()); status_t status = startInput(portId); bool silenced = data.readInt32() == 1; status_t status = startInput(portId, &silenced); reply->writeInt32(static_cast <uint32_t>(status)); reply->writeInt32(static_cast <uint32_t>(status)); reply->writeInt32(silenced ? 1 : 0); return NO_ERROR; return NO_ERROR; } break; } break; Loading
media/libaudioclient/include/media/AudioSystem.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -241,7 +241,8 @@ public: audio_port_handle_t *selectedDeviceId, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId); audio_port_handle_t *portId); static status_t startInput(audio_port_handle_t portId); static status_t startInput(audio_port_handle_t portId, bool *silenced); static status_t stopInput(audio_port_handle_t portId); static status_t stopInput(audio_port_handle_t portId); static void releaseInput(audio_port_handle_t portId); static void releaseInput(audio_port_handle_t portId); static status_t initStreamVolume(audio_stream_type_t stream, static status_t initStreamVolume(audio_stream_type_t stream, Loading
media/libaudioclient/include/media/IAudioPolicyService.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -78,7 +78,8 @@ public: audio_input_flags_t flags, audio_input_flags_t flags, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *selectedDeviceId, audio_port_handle_t *portId) = 0; audio_port_handle_t *portId) = 0; virtual status_t startInput(audio_port_handle_t portId) = 0; virtual status_t startInput(audio_port_handle_t portId, bool *silenced) = 0; virtual status_t stopInput(audio_port_handle_t portId) = 0; virtual status_t stopInput(audio_port_handle_t portId) = 0; virtual void releaseInput(audio_port_handle_t portId) = 0; virtual void releaseInput(audio_port_handle_t portId) = 0; virtual status_t initStreamVolume(audio_stream_type_t stream, virtual status_t initStreamVolume(audio_stream_type_t stream, Loading
services/audioflinger/Threads.cpp +13 −10 Original line number Original line Diff line number Diff line Loading @@ -7367,7 +7367,8 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac status_t status = NO_ERROR; status_t status = NO_ERROR; if (recordTrack->isExternalTrack()) { if (recordTrack->isExternalTrack()) { mLock.unlock(); mLock.unlock(); status = AudioSystem::startInput(recordTrack->portId()); bool silenced; status = AudioSystem::startInput(recordTrack->portId(), &silenced); mLock.lock(); mLock.lock(); if (recordTrack->isInvalid()) { if (recordTrack->isInvalid()) { recordTrack->clearSyncStartEvent(); recordTrack->clearSyncStartEvent(); Loading Loading @@ -7395,6 +7396,7 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac recordTrack->clearSyncStartEvent(); recordTrack->clearSyncStartEvent(); return status; return status; } } recordTrack->setSilenced(silenced); } } // Catch up with current buffer indices if thread is already running. // Catch up with current buffer indices if thread is already running. // This is what makes a new client discard all buffered data. If the track's mRsmpInFront // This is what makes a new client discard all buffered data. If the track's mRsmpInFront Loading Loading @@ -8344,10 +8346,11 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, return BAD_VALUE; return BAD_VALUE; } } bool silenced = false; if (isOutput()) { if (isOutput()) { ret = AudioSystem::startOutput(portId); ret = AudioSystem::startOutput(portId); } else { } else { ret = AudioSystem::startInput(portId); ret = AudioSystem::startInput(portId, &silenced); } } Mutex::Autolock _l(mLock); Mutex::Autolock _l(mLock); Loading @@ -8368,21 +8371,21 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, return PERMISSION_DENIED; return PERMISSION_DENIED; } } // Given that MmapThread::mAttr is mutable, should a MmapTrack have attributes ? sp<MmapTrack> track = new MmapTrack(this, mAttr, mSampleRate, mFormat, mChannelMask, mSessionId, isOutput(), client.clientUid, client.clientPid, portId); if (isOutput()) { if (isOutput()) { // force volume update when a new track is added // force volume update when a new track is added mHalVolFloat = -1.0f; mHalVolFloat = -1.0f; } else if (!track->isSilenced_l()) { } else if (!silenced) { for (const sp<MmapTrack> &t : mActiveTracks) { for (const sp<MmapTrack> &track : mActiveTracks) { if (t->isSilenced_l() && t->uid() != client.clientUid) if (track->isSilenced_l() && track->uid() != client.clientUid) t->invalidate(); track->invalidate(); } } } } // Given that MmapThread::mAttr is mutable, should a MmapTrack have attributes ? sp<MmapTrack> track = new MmapTrack(this, mAttr, mSampleRate, mFormat, mChannelMask, mSessionId, isOutput(), client.clientUid, client.clientPid, portId); track->setSilenced_l(silenced); mActiveTracks.add(track); mActiveTracks.add(track); sp<EffectChain> chain = getEffectChain_l(mSessionId); sp<EffectChain> chain = getEffectChain_l(mSessionId); if (chain != 0) { if (chain != 0) { Loading