Loading media/libaudioclient/AudioSystem.cpp +53 −0 Original line number Diff line number Diff line Loading @@ -1635,6 +1635,59 @@ status_t AudioSystem::getDevicesForRoleAndStrategy(product_strategy_t strategy, return aps->getDevicesForRoleAndStrategy(strategy, role, devices); } status_t AudioSystem::setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->setDevicesRoleForCapturePreset(audioSource, role, devices); } status_t AudioSystem::addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->addDevicesRoleForCapturePreset(audioSource, role, devices); } status_t AudioSystem::removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->removeDevicesRoleForCapturePreset(audioSource, role, devices); } status_t AudioSystem::clearDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->clearDevicesRoleForCapturePreset(audioSource, role); } status_t AudioSystem::getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->getDevicesForRoleAndCapturePreset(audioSource, role, devices); } class CaptureStateListenerImpl : public media::BnCaptureStateListener, public IBinder::DeathRecipient { public: Loading media/libaudioclient/IAudioPolicyService.cpp +165 −1 Original line number Diff line number Diff line Loading @@ -119,6 +119,11 @@ enum { AUDIO_MODULES_UPDATED, // oneway SET_CURRENT_IME_UID, REGISTER_SOUNDTRIGGER_CAPTURE_STATE_LISTENER, SET_DEVICES_ROLE_FOR_CAPTURE_PRESET, ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET, REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET, CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET, GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -1408,6 +1413,95 @@ public: return static_cast<status_t>(reply.readInt32()); } virtual status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = data.writeParcelableVector(devices); if (status != NO_ERROR) { return status; } status = remote()->transact(SET_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = data.writeParcelableVector(devices); if (status != NO_ERROR) { return status; } status = remote()->transact(ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = data.writeParcelableVector(devices); if (status != NO_ERROR) { return status; } status = remote()->transact(REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t clearDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = remote()->transact(CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = remote()->transact(GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } status = reply.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getDevicesForAttributes(const AudioAttributes &aa, AudioDeviceTypeAddrVector *devices) const { Loading Loading @@ -1544,7 +1638,12 @@ status_t BnAudioPolicyService::onTransact( case SET_ALLOWED_CAPTURE_POLICY: case AUDIO_MODULES_UPDATED: case SET_CURRENT_IME_UID: case REGISTER_SOUNDTRIGGER_CAPTURE_STATE_LISTENER: { case REGISTER_SOUNDTRIGGER_CAPTURE_STATE_LISTENER: case SET_DEVICES_ROLE_FOR_CAPTURE_PRESET: case ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET: case REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET: case CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET: case GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET: { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -2729,6 +2828,71 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } break; case SET_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = data.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } status = setDevicesRoleForCapturePreset(audioSource, role, devices); reply->writeInt32(status); return NO_ERROR; } case ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = data.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } status = addDevicesRoleForCapturePreset(audioSource, role, devices); reply->writeInt32(status); return NO_ERROR; } case REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = data.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } status = removeDevicesRoleForCapturePreset(audioSource, role, devices); reply->writeInt32(status); return NO_ERROR; } case CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); status_t status = clearDevicesRoleForCapturePreset(audioSource, role); reply->writeInt32(status); return NO_ERROR; } case GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = getDevicesForRoleAndCapturePreset(audioSource, role, devices); status_t marshall_status = reply->writeParcelableVector(devices); if (marshall_status != NO_ERROR) { return marshall_status; } reply->writeInt32(status); return NO_ERROR; } default: return BBinder::onTransact(code, data, reply, flags); } Loading media/libaudioclient/include/media/AudioSystem.h +16 −0 Original line number Diff line number Diff line Loading @@ -433,6 +433,22 @@ public: static status_t getDevicesForRoleAndStrategy(product_strategy_t strategy, device_role_t role, AudioDeviceTypeAddrVector &devices); static status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices); static status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices); static status_t removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices); static status_t clearDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role); static status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices); static status_t getDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device); Loading media/libaudioclient/include/media/IAudioPolicyService.h +19 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,25 @@ public: device_role_t role, AudioDeviceTypeAddrVector &devices) = 0; virtual status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) = 0; virtual status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) = 0; virtual status_t removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices) = 0; virtual status_t clearDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role) = 0; virtual status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices) = 0; // The return code here is only intended to represent transport errors. The // actual server implementation should always return NO_ERROR. virtual status_t registerSoundTriggerCaptureStateListener( Loading media/libaudiofoundation/AudioDeviceTypeAddr.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <arpa/inet.h> #include <iostream> #include <regex> #include <set> #include <sstream> namespace android { Loading Loading @@ -80,6 +81,14 @@ bool AudioDeviceTypeAddr::operator<(const AudioDeviceTypeAddr& other) const { return false; } bool AudioDeviceTypeAddr::operator==(const AudioDeviceTypeAddr &rhs) const { return equals(rhs); } bool AudioDeviceTypeAddr::operator!=(const AudioDeviceTypeAddr &rhs) const { return !operator==(rhs); } void AudioDeviceTypeAddr::reset() { mType = AUDIO_DEVICE_NONE; setAddress(""); Loading Loading @@ -118,6 +127,20 @@ DeviceTypeSet getAudioDeviceTypes(const AudioDeviceTypeAddrVector& deviceTypeAdd return deviceTypes; } AudioDeviceTypeAddrVector excludeDeviceTypeAddrsFrom( const AudioDeviceTypeAddrVector& devices, const AudioDeviceTypeAddrVector& devicesToExclude) { std::set<AudioDeviceTypeAddr> devicesToExcludeSet( devicesToExclude.begin(), devicesToExclude.end()); AudioDeviceTypeAddrVector remainedDevices; for (const auto& device : devices) { if (devicesToExcludeSet.count(device) == 0) { remainedDevices.push_back(device); } } return remainedDevices; } std::string dumpAudioDeviceTypeAddrVector(const AudioDeviceTypeAddrVector& deviceTypeAddrs, bool includeSensitiveInfo) { std::stringstream stream; Loading Loading
media/libaudioclient/AudioSystem.cpp +53 −0 Original line number Diff line number Diff line Loading @@ -1635,6 +1635,59 @@ status_t AudioSystem::getDevicesForRoleAndStrategy(product_strategy_t strategy, return aps->getDevicesForRoleAndStrategy(strategy, role, devices); } status_t AudioSystem::setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->setDevicesRoleForCapturePreset(audioSource, role, devices); } status_t AudioSystem::addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->addDevicesRoleForCapturePreset(audioSource, role, devices); } status_t AudioSystem::removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->removeDevicesRoleForCapturePreset(audioSource, role, devices); } status_t AudioSystem::clearDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->clearDevicesRoleForCapturePreset(audioSource, role); } status_t AudioSystem::getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->getDevicesForRoleAndCapturePreset(audioSource, role, devices); } class CaptureStateListenerImpl : public media::BnCaptureStateListener, public IBinder::DeathRecipient { public: Loading
media/libaudioclient/IAudioPolicyService.cpp +165 −1 Original line number Diff line number Diff line Loading @@ -119,6 +119,11 @@ enum { AUDIO_MODULES_UPDATED, // oneway SET_CURRENT_IME_UID, REGISTER_SOUNDTRIGGER_CAPTURE_STATE_LISTENER, SET_DEVICES_ROLE_FOR_CAPTURE_PRESET, ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET, REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET, CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET, GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -1408,6 +1413,95 @@ public: return static_cast<status_t>(reply.readInt32()); } virtual status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = data.writeParcelableVector(devices); if (status != NO_ERROR) { return status; } status = remote()->transact(SET_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = data.writeParcelableVector(devices); if (status != NO_ERROR) { return status; } status = remote()->transact(ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = data.writeParcelableVector(devices); if (status != NO_ERROR) { return status; } status = remote()->transact(REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t clearDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = remote()->transact(CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(audioSource)); data.writeUint32(static_cast<uint32_t>(role)); status_t status = remote()->transact(GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET, data, &reply); if (status != NO_ERROR) { return status; } status = reply.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getDevicesForAttributes(const AudioAttributes &aa, AudioDeviceTypeAddrVector *devices) const { Loading Loading @@ -1544,7 +1638,12 @@ status_t BnAudioPolicyService::onTransact( case SET_ALLOWED_CAPTURE_POLICY: case AUDIO_MODULES_UPDATED: case SET_CURRENT_IME_UID: case REGISTER_SOUNDTRIGGER_CAPTURE_STATE_LISTENER: { case REGISTER_SOUNDTRIGGER_CAPTURE_STATE_LISTENER: case SET_DEVICES_ROLE_FOR_CAPTURE_PRESET: case ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET: case REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET: case CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET: case GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET: { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -2729,6 +2828,71 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } break; case SET_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = data.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } status = setDevicesRoleForCapturePreset(audioSource, role, devices); reply->writeInt32(status); return NO_ERROR; } case ADD_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = data.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } status = addDevicesRoleForCapturePreset(audioSource, role, devices); reply->writeInt32(status); return NO_ERROR; } case REMOVE_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = data.readParcelableVector(&devices); if (status != NO_ERROR) { return status; } status = removeDevicesRoleForCapturePreset(audioSource, role, devices); reply->writeInt32(status); return NO_ERROR; } case CLEAR_DEVICES_ROLE_FOR_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); status_t status = clearDevicesRoleForCapturePreset(audioSource, role); reply->writeInt32(status); return NO_ERROR; } case GET_DEVICES_FOR_ROLE_AND_CAPTURE_PRESET: { CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_source_t audioSource = (audio_source_t) data.readUint32(); device_role_t role = (device_role_t) data.readUint32(); AudioDeviceTypeAddrVector devices; status_t status = getDevicesForRoleAndCapturePreset(audioSource, role, devices); status_t marshall_status = reply->writeParcelableVector(devices); if (marshall_status != NO_ERROR) { return marshall_status; } reply->writeInt32(status); return NO_ERROR; } default: return BBinder::onTransact(code, data, reply, flags); } Loading
media/libaudioclient/include/media/AudioSystem.h +16 −0 Original line number Diff line number Diff line Loading @@ -433,6 +433,22 @@ public: static status_t getDevicesForRoleAndStrategy(product_strategy_t strategy, device_role_t role, AudioDeviceTypeAddrVector &devices); static status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices); static status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices); static status_t removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices); static status_t clearDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role); static status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices); static status_t getDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device); Loading
media/libaudioclient/include/media/IAudioPolicyService.h +19 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,25 @@ public: device_role_t role, AudioDeviceTypeAddrVector &devices) = 0; virtual status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) = 0; virtual status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector &devices) = 0; virtual status_t removeDevicesRoleForCapturePreset( audio_source_t audioSource, device_role_t role, const AudioDeviceTypeAddrVector& devices) = 0; virtual status_t clearDevicesRoleForCapturePreset(audio_source_t audioSource, device_role_t role) = 0; virtual status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, device_role_t role, AudioDeviceTypeAddrVector &devices) = 0; // The return code here is only intended to represent transport errors. The // actual server implementation should always return NO_ERROR. virtual status_t registerSoundTriggerCaptureStateListener( Loading
media/libaudiofoundation/AudioDeviceTypeAddr.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <arpa/inet.h> #include <iostream> #include <regex> #include <set> #include <sstream> namespace android { Loading Loading @@ -80,6 +81,14 @@ bool AudioDeviceTypeAddr::operator<(const AudioDeviceTypeAddr& other) const { return false; } bool AudioDeviceTypeAddr::operator==(const AudioDeviceTypeAddr &rhs) const { return equals(rhs); } bool AudioDeviceTypeAddr::operator!=(const AudioDeviceTypeAddr &rhs) const { return !operator==(rhs); } void AudioDeviceTypeAddr::reset() { mType = AUDIO_DEVICE_NONE; setAddress(""); Loading Loading @@ -118,6 +127,20 @@ DeviceTypeSet getAudioDeviceTypes(const AudioDeviceTypeAddrVector& deviceTypeAdd return deviceTypes; } AudioDeviceTypeAddrVector excludeDeviceTypeAddrsFrom( const AudioDeviceTypeAddrVector& devices, const AudioDeviceTypeAddrVector& devicesToExclude) { std::set<AudioDeviceTypeAddr> devicesToExcludeSet( devicesToExclude.begin(), devicesToExclude.end()); AudioDeviceTypeAddrVector remainedDevices; for (const auto& device : devices) { if (devicesToExcludeSet.count(device) == 0) { remainedDevices.push_back(device); } } return remainedDevices; } std::string dumpAudioDeviceTypeAddrVector(const AudioDeviceTypeAddrVector& deviceTypeAddrs, bool includeSensitiveInfo) { std::stringstream stream; Loading