diff --git a/media/libaudioclient/IAudioFlinger.cpp b/media/libaudioclient/IAudioFlinger.cpp index efa05124e1..750fc21d2a 100644 --- a/media/libaudioclient/IAudioFlinger.cpp +++ b/media/libaudioclient/IAudioFlinger.cpp @@ -340,11 +340,11 @@ public: return reply.readInt32(); } - virtual void setRecordSilenced(uid_t uid, bool silenced) + virtual void setRecordSilenced(audio_port_handle_t portId, bool silenced) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeInt32(uid); + data.writeInt32(portId); data.writeInt32(silenced ? 1 : 0); remote()->transact(SET_RECORD_SILENCED, data, &reply); } @@ -1156,11 +1156,9 @@ status_t BnAudioFlinger::onTransact( } break; case SET_RECORD_SILENCED: { CHECK_INTERFACE(IAudioFlinger, data, reply); - uid_t uid = data.readInt32(); - audio_source_t source; - data.read(&source, sizeof(audio_source_t)); + audio_port_handle_t portId = data.readInt32(); bool silenced = data.readInt32() == 1; - setRecordSilenced(uid, silenced); + setRecordSilenced(portId, silenced); return NO_ERROR; } break; case SET_PARAMETERS: { diff --git a/media/libaudioclient/include/media/IAudioFlinger.h b/media/libaudioclient/include/media/IAudioFlinger.h index 8ec8931347..db09ddf0ae 100644 --- a/media/libaudioclient/include/media/IAudioFlinger.h +++ b/media/libaudioclient/include/media/IAudioFlinger.h @@ -384,7 +384,7 @@ public: // mic mute/state virtual status_t setMicMute(bool state) = 0; virtual bool getMicMute() const = 0; - virtual void setRecordSilenced(uid_t uid, bool silenced) = 0; + virtual void setRecordSilenced(audio_port_handle_t portId, bool silenced) = 0; virtual status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs) = 0; diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index b6da11edd0..aef0ade992 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -1132,16 +1132,16 @@ bool AudioFlinger::getMicMute() const return mute; } -void AudioFlinger::setRecordSilenced(uid_t uid, bool silenced) +void AudioFlinger::setRecordSilenced(audio_port_handle_t portId, bool silenced) { - ALOGV("AudioFlinger::setRecordSilenced(uid:%d, silenced:%d)", uid, silenced); + ALOGV("AudioFlinger::setRecordSilenced(portId:%d, silenced:%d)", portId, silenced); AutoMutex lock(mLock); for (size_t i = 0; i < mRecordThreads.size(); i++) { - mRecordThreads[i]->setRecordSilenced(uid, silenced); + mRecordThreads[i]->setRecordSilenced(portId, silenced); } for (size_t i = 0; i < mMmapThreads.size(); i++) { - mMmapThreads[i]->setRecordSilenced(uid, silenced); + mMmapThreads[i]->setRecordSilenced(portId, silenced); } } diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 72e669a2a5..5e4509fb65 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -162,7 +162,7 @@ public: virtual status_t setMicMute(bool state); virtual bool getMicMute() const; - virtual void setRecordSilenced(uid_t uid, bool silenced); + virtual void setRecordSilenced(audio_port_handle_t portId, bool silenced); virtual status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs); virtual String8 getParameters(audio_io_handle_t ioHandle, const String8& keys) const; diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 868739f830..6ca50a78b9 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -7934,12 +7934,12 @@ void AudioFlinger::RecordThread::dumpTracks_l(int fd, const Vector& ar write(fd, result.string(), result.size()); } -void AudioFlinger::RecordThread::setRecordSilenced(uid_t uid, bool silenced) +void AudioFlinger::RecordThread::setRecordSilenced(audio_port_handle_t portId, bool silenced) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mTracks.size() ; i++) { sp track = mTracks[i]; - if (track != 0 && track->uid() == uid) { + if (track != 0 && track->portId() == portId) { track->setSilenced(silenced); } } @@ -9477,11 +9477,11 @@ void AudioFlinger::MmapCaptureThread::updateMetadata_l() mInput->stream->updateSinkMetadata(metadata); } -void AudioFlinger::MmapCaptureThread::setRecordSilenced(uid_t uid, bool silenced) +void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t portId, bool silenced) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mActiveTracks.size() ; i++) { - if (mActiveTracks[i]->uid() == uid) { + if (mActiveTracks[i]->portId() == portId) { mActiveTracks[i]->setSilenced_l(silenced); broadcast_l(); } diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 87bebf3d89..6a9c0e7628 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -1616,7 +1616,7 @@ public: void checkBtNrec(); // Sets the UID records silence - void setRecordSilenced(uid_t uid, bool silenced); + void setRecordSilenced(audio_port_handle_t portId, bool silenced); status_t getActiveMicrophones(std::vector* activeMicrophones); @@ -1785,7 +1785,8 @@ class MmapThread : public ThreadBase virtual void invalidateTracks(audio_stream_type_t streamType __unused) {} // Sets the UID records silence - virtual void setRecordSilenced(uid_t uid __unused, bool silenced __unused) {} + virtual void setRecordSilenced(audio_port_handle_t portId __unused, + bool silenced __unused) {} protected: void dumpInternals_l(int fd, const Vector& args) override; @@ -1872,7 +1873,8 @@ public: void updateMetadata_l() override; void processVolume_l() override; - void setRecordSilenced(uid_t uid, bool silenced) override; + void setRecordSilenced(audio_port_handle_t portId, + bool silenced) override; virtual void toAudioPortConfig(struct audio_port_config *config); diff --git a/services/audiopolicy/AudioPolicyInterface.h b/services/audiopolicy/AudioPolicyInterface.h index 30f29d6f2f..35126ad7ab 100644 --- a/services/audiopolicy/AudioPolicyInterface.h +++ b/services/audiopolicy/AudioPolicyInterface.h @@ -258,7 +258,7 @@ public: virtual status_t getHwOffloadEncodingFormatsSupportedForA2DP( std::vector *formats) = 0; - virtual void setAppState(uid_t uid, app_state_t state) = 0; + virtual void setAppState(audio_port_handle_t portId, app_state_t state) = 0; virtual status_t listAudioProductStrategies(AudioProductStrategyVector &strategies) = 0; diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h index 37f9d14ea6..816498c5ec 100644 --- a/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h +++ b/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h @@ -97,7 +97,7 @@ public: RecordClientVector clientsList(bool activeOnly = false, audio_source_t source = AUDIO_SOURCE_DEFAULT, bool preferredDeviceOnly = false) const; - void setAppState(uid_t uid, app_state_t state); + void setAppState(audio_port_handle_t portId, app_state_t state); // implementation of ClientMapHandler void addClient(const sp &client) override; diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp index a9b87e3f59..0ff4c746ed 100644 --- a/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp @@ -450,13 +450,13 @@ EffectDescriptorCollection AudioInputDescriptor::getEnabledEffects() const return enabledEffects; } -void AudioInputDescriptor::setAppState(uid_t uid, app_state_t state) +void AudioInputDescriptor::setAppState(audio_port_handle_t portId, app_state_t state) { RecordClientVector clients = clientsList(false /*activeOnly*/); RecordClientVector updatedClients; for (const auto& client : clients) { - if (uid == client->uid()) { + if (portId == client->portId()) { bool wasSilenced = client->isSilenced(); client->setAppState(state); if (client->active() && wasSilenced != client->isSilenced()) { diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index 499fc8a04a..e9f514391c 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -4183,11 +4183,11 @@ status_t AudioPolicyManager::setSurroundFormatEnabled(audio_format_t audioFormat return profileUpdated ? NO_ERROR : INVALID_OPERATION; } -void AudioPolicyManager::setAppState(uid_t uid, app_state_t state) +void AudioPolicyManager::setAppState(audio_port_handle_t portId, app_state_t state) { - ALOGV("%s(uid:%d, state:%d)", __func__, uid, state); + ALOGV("%s(portId:%d, state:%d)", __func__, portId, state); for (size_t i = 0; i < mInputs.size(); i++) { - mInputs.valueAt(i)->setAppState(uid, state); + mInputs.valueAt(i)->setAppState(portId, state); } } diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h index 02c6171593..4376590531 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h @@ -278,7 +278,7 @@ public: virtual status_t getHwOffloadEncodingFormatsSupportedForA2DP( std::vector *formats); - virtual void setAppState(uid_t uid, app_state_t state); + virtual void setAppState(audio_port_handle_t portId, app_state_t state); virtual bool isHapticPlaybackSupported(); diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp index fa8da8916e..389f861fda 100644 --- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp @@ -222,7 +222,7 @@ status_t AudioPolicyService::getOutputForAttr(audio_attributes_t *attr, if (result == NO_ERROR) { sp client = - new AudioPlaybackClient(*attr, *output, uid, pid, session, *selectedDeviceId, *stream); + new AudioPlaybackClient(*attr, *output, uid, pid, session, *portId, *selectedDeviceId, *stream); mAudioPlaybackClients.add(*portId, client); } return result; @@ -451,7 +451,7 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr, return status; } - sp client = new AudioRecordClient(*attr, *input, uid, pid, session, + sp client = new AudioRecordClient(*attr, *input, uid, pid, session, *portId, *selectedDeviceId, opPackageName, canCaptureOutput, canCaptureHotword); mAudioRecordClients.add(*portId, client); diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp index d1b59c14aa..16425aad9a 100644 --- a/services/audiopolicy/service/AudioPolicyService.cpp +++ b/services/audiopolicy/service/AudioPolicyService.cpp @@ -569,7 +569,7 @@ void AudioPolicyService::updateUidStates_l() } } } - setAppState_l(current->uid, + setAppState_l(current->portId, allowCapture ? apmStatFromAmState(mUidPolicy->getUidState(current->uid)) : APP_STATE_IDLE); if (allowCapture) { @@ -582,7 +582,7 @@ void AudioPolicyService::silenceAllRecordings_l() { for (size_t i = 0; i < mAudioRecordClients.size(); i++) { sp current = mAudioRecordClients[i]; if (!isVirtualSource(current->attributes.source)) { - setAppState_l(current->uid, APP_STATE_IDLE); + setAppState_l(current->portId, APP_STATE_IDLE); } } } @@ -628,17 +628,17 @@ bool AudioPolicyService::isVirtualSource(audio_source_t source) return false; } -void AudioPolicyService::setAppState_l(uid_t uid, app_state_t state) +void AudioPolicyService::setAppState_l(audio_port_handle_t portId, app_state_t state) { AutoCallerClear acc; if (mAudioPolicyManager) { - mAudioPolicyManager->setAppState(uid, state); + mAudioPolicyManager->setAppState(portId, state); } sp af = AudioSystem::get_audio_flinger(); if (af) { bool silenced = state == APP_STATE_IDLE; - af->setRecordSilenced(uid, silenced); + af->setRecordSilenced(portId, silenced); } } diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h index 74aea0da50..939df2c64f 100644 --- a/services/audiopolicy/service/AudioPolicyService.h +++ b/services/audiopolicy/service/AudioPolicyService.h @@ -311,7 +311,7 @@ private: virtual status_t shellCommand(int in, int out, int err, Vector& args); // Sets whether the given UID records only silence - virtual void setAppState_l(uid_t uid, app_state_t state); + virtual void setAppState_l(audio_port_handle_t portId, app_state_t state); // Overrides the UID state as if it is idle status_t handleSetUidState(Vector& args, int err); @@ -759,9 +759,10 @@ private: public: AudioClient(const audio_attributes_t attributes, const audio_io_handle_t io, uid_t uid, pid_t pid, - const audio_session_t session, const audio_port_handle_t deviceId) : + const audio_session_t session, audio_port_handle_t portId, + const audio_port_handle_t deviceId) : attributes(attributes), io(io), uid(uid), pid(pid), - session(session), deviceId(deviceId), active(false) {} + session(session), portId(portId), deviceId(deviceId), active(false) {} ~AudioClient() override = default; @@ -770,6 +771,7 @@ private: const uid_t uid; // client UID const pid_t pid; // client PID const audio_session_t session; // audio session ID + const audio_port_handle_t portId; const audio_port_handle_t deviceId; // selected input device port ID bool active; // Playback/Capture is active or inactive }; @@ -781,10 +783,10 @@ private: public: AudioRecordClient(const audio_attributes_t attributes, const audio_io_handle_t io, uid_t uid, pid_t pid, - const audio_session_t session, const audio_port_handle_t deviceId, - const String16& opPackageName, + const audio_session_t session, audio_port_handle_t portId, + const audio_port_handle_t deviceId, const String16& opPackageName, bool canCaptureOutput, bool canCaptureHotword) : - AudioClient(attributes, io, uid, pid, session, deviceId), + AudioClient(attributes, io, uid, pid, session, portId, deviceId), opPackageName(opPackageName), startTimeNs(0), canCaptureOutput(canCaptureOutput), canCaptureHotword(canCaptureHotword) {} ~AudioRecordClient() override = default; @@ -802,9 +804,9 @@ private: public: AudioPlaybackClient(const audio_attributes_t attributes, const audio_io_handle_t io, uid_t uid, pid_t pid, - const audio_session_t session, audio_port_handle_t deviceId, - audio_stream_type_t stream) : - AudioClient(attributes, io, uid, pid, session, deviceId), stream(stream) {} + const audio_session_t session, audio_port_handle_t portId, + audio_port_handle_t deviceId, audio_stream_type_t stream) : + AudioClient(attributes, io, uid, pid, session, portId, deviceId), stream(stream) {} ~AudioPlaybackClient() override = default; const audio_stream_type_t stream;