Loading media/libaudioclient/AudioSystem.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -1525,6 +1525,35 @@ status_t AudioSystem::setRttEnabled(bool enabled) return aps->setRttEnabled(enabled); } status_t AudioSystem::setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->setPreferredDeviceForStrategy(strategy, device); } status_t AudioSystem::removePreferredDeviceForStrategy(product_strategy_t strategy) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->removePreferredDeviceForStrategy(strategy); } status_t AudioSystem::getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->getPreferredDeviceForStrategy(strategy, device); } // --------------------------------------------------------------------------- int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( Loading media/libaudioclient/IAudioPolicyService.cpp +91 −2 Original line number Diff line number Diff line Loading @@ -104,7 +104,10 @@ enum { GET_VOLUME_GROUP_FOR_ATTRIBUTES, SET_ALLOWED_CAPTURE_POLICY, MOVE_EFFECTS_TO_IO, SET_RTT_ENABLED SET_RTT_ENABLED, SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -1284,6 +1287,55 @@ public: } return static_cast<status_t>(reply.readInt32()); } virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(strategy)); status_t status = device.writeToParcel(&data); if (status != NO_ERROR) { return BAD_VALUE; } status = remote()->transact(SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(strategy)); status_t status = remote()->transact(REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(strategy)); status_t status = remote()->transact(GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, data, &reply); if (status != NO_ERROR) { return status; } status = device.readFromParcel(&reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -1346,7 +1398,10 @@ status_t BnAudioPolicyService::onTransact( case GET_OFFLOAD_FORMATS_A2DP: case LIST_AUDIO_VOLUME_GROUPS: case GET_VOLUME_GROUP_FOR_ATTRIBUTES: case SET_RTT_ENABLED: { case SET_RTT_ENABLED: case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -2369,6 +2424,40 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { CHECK_INTERFACE(IAudioPolicyService, data, reply); product_strategy_t strategy = (product_strategy_t) data.readUint32(); AudioDeviceTypeAddr device; status_t status = device.readFromParcel((Parcel*)&data); if (status != NO_ERROR) { return status; } status = setPreferredDeviceForStrategy(strategy, device); reply->writeInt32(status); return NO_ERROR; } case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { CHECK_INTERFACE(IAudioPolicyService, data, reply); product_strategy_t strategy = (product_strategy_t) data.readUint32(); status_t status = removePreferredDeviceForStrategy(strategy); reply->writeInt32(status); return NO_ERROR; } case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { CHECK_INTERFACE(IAudioPolicyService, data, reply); product_strategy_t strategy = (product_strategy_t) data.readUint32(); AudioDeviceTypeAddr device; status_t status = getPreferredDeviceForStrategy(strategy, device); status_t marshall_status = device.writeToParcel(reply); 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 +11 −0 Original line number Diff line number Diff line Loading @@ -403,6 +403,17 @@ public: */ static status_t setAudioHalPids(const std::vector<pid_t>& pids); static status_t setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device); static status_t removePreferredDeviceForStrategy(product_strategy_t strategy); static status_t getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device); static status_t getDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device); // ---------------------------------------------------------------------------- class AudioVolumeGroupCallback : public RefBase Loading media/libaudioclient/include/media/IAudioPolicyService.h +8 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,14 @@ public: volume_group_t &volumeGroup) = 0; virtual status_t setRttEnabled(bool enabled) = 0; virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device) = 0; virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy) = 0; virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device) = 0; }; Loading media/libaudiofoundation/include/media/AudioDeviceTypeAddr.h +2 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ struct AudioDeviceTypeAddr : public Parcelable { bool equals(const AudioDeviceTypeAddr& other) const; AudioDeviceTypeAddr& operator= (const AudioDeviceTypeAddr&) = default; void reset(); status_t readFromParcel(const Parcel *parcel) override; Loading Loading
media/libaudioclient/AudioSystem.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -1525,6 +1525,35 @@ status_t AudioSystem::setRttEnabled(bool enabled) return aps->setRttEnabled(enabled); } status_t AudioSystem::setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->setPreferredDeviceForStrategy(strategy, device); } status_t AudioSystem::removePreferredDeviceForStrategy(product_strategy_t strategy) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->removePreferredDeviceForStrategy(strategy); } status_t AudioSystem::getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) { return PERMISSION_DENIED; } return aps->getPreferredDeviceForStrategy(strategy, device); } // --------------------------------------------------------------------------- int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback( Loading
media/libaudioclient/IAudioPolicyService.cpp +91 −2 Original line number Diff line number Diff line Loading @@ -104,7 +104,10 @@ enum { GET_VOLUME_GROUP_FOR_ATTRIBUTES, SET_ALLOWED_CAPTURE_POLICY, MOVE_EFFECTS_TO_IO, SET_RTT_ENABLED SET_RTT_ENABLED, SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, }; #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -1284,6 +1287,55 @@ public: } return static_cast<status_t>(reply.readInt32()); } virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(strategy)); status_t status = device.writeToParcel(&data); if (status != NO_ERROR) { return BAD_VALUE; } status = remote()->transact(SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(strategy)); status_t status = remote()->transact(REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, data, &reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeUint32(static_cast<uint32_t>(strategy)); status_t status = remote()->transact(GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, data, &reply); if (status != NO_ERROR) { return status; } status = device.readFromParcel(&reply); if (status != NO_ERROR) { return status; } return static_cast<status_t>(reply.readInt32()); } }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -1346,7 +1398,10 @@ status_t BnAudioPolicyService::onTransact( case GET_OFFLOAD_FORMATS_A2DP: case LIST_AUDIO_VOLUME_GROUPS: case GET_VOLUME_GROUP_FOR_ATTRIBUTES: case SET_RTT_ENABLED: { case SET_RTT_ENABLED: case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -2369,6 +2424,40 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; } case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { CHECK_INTERFACE(IAudioPolicyService, data, reply); product_strategy_t strategy = (product_strategy_t) data.readUint32(); AudioDeviceTypeAddr device; status_t status = device.readFromParcel((Parcel*)&data); if (status != NO_ERROR) { return status; } status = setPreferredDeviceForStrategy(strategy, device); reply->writeInt32(status); return NO_ERROR; } case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { CHECK_INTERFACE(IAudioPolicyService, data, reply); product_strategy_t strategy = (product_strategy_t) data.readUint32(); status_t status = removePreferredDeviceForStrategy(strategy); reply->writeInt32(status); return NO_ERROR; } case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: { CHECK_INTERFACE(IAudioPolicyService, data, reply); product_strategy_t strategy = (product_strategy_t) data.readUint32(); AudioDeviceTypeAddr device; status_t status = getPreferredDeviceForStrategy(strategy, device); status_t marshall_status = device.writeToParcel(reply); 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 +11 −0 Original line number Diff line number Diff line Loading @@ -403,6 +403,17 @@ public: */ static status_t setAudioHalPids(const std::vector<pid_t>& pids); static status_t setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device); static status_t removePreferredDeviceForStrategy(product_strategy_t strategy); static status_t getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device); static status_t getDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device); // ---------------------------------------------------------------------------- class AudioVolumeGroupCallback : public RefBase Loading
media/libaudioclient/include/media/IAudioPolicyService.h +8 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,14 @@ public: volume_group_t &volumeGroup) = 0; virtual status_t setRttEnabled(bool enabled) = 0; virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy, const AudioDeviceTypeAddr &device) = 0; virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy) = 0; virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy, AudioDeviceTypeAddr &device) = 0; }; Loading
media/libaudiofoundation/include/media/AudioDeviceTypeAddr.h +2 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ struct AudioDeviceTypeAddr : public Parcelable { bool equals(const AudioDeviceTypeAddr& other) const; AudioDeviceTypeAddr& operator= (const AudioDeviceTypeAddr&) = default; void reset(); status_t readFromParcel(const Parcel *parcel) override; Loading