Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0735bf35 authored by yuanjiahsu's avatar yuanjiahsu
Browse files

Dynamic audio policies input on UID

When looking for an input, take attributes and UID into account.

Bug: 169964607
Test: atest com.google.android.gts.audio.AudioHostTest, manual testing
Change-Id: Icbbef77a57e4b39782bd1e56d723473f370a8504
parent 7de107c9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ public:

    sp<DeviceDescriptor> getDeviceAndMixForInputSource(audio_source_t inputSource,
                                                       const DeviceVector &availableDeviceTypes,
                                                       uid_t uid,
                                                       sp<AudioPolicyMix> *policyMix) const;

    /**
+6 −1
Original line number Diff line number Diff line
@@ -391,6 +391,7 @@ sp<DeviceDescriptor> AudioPolicyMixCollection::getDeviceAndMixForOutput(
sp<DeviceDescriptor> AudioPolicyMixCollection::getDeviceAndMixForInputSource(
        audio_source_t inputSource,
        const DeviceVector &availDevices,
        uid_t uid,
        sp<AudioPolicyMix> *policyMix) const
{
    for (size_t i = 0; i < size(); i++) {
@@ -402,7 +403,11 @@ sp<DeviceDescriptor> AudioPolicyMixCollection::getDeviceAndMixForInputSource(
            if ((RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET == mix->mCriteria[j].mRule &&
                    mix->mCriteria[j].mValue.mSource == inputSource) ||
               (RULE_EXCLUDE_ATTRIBUTE_CAPTURE_PRESET == mix->mCriteria[j].mRule &&
                    mix->mCriteria[j].mValue.mSource != inputSource)) {
                    mix->mCriteria[j].mValue.mSource != inputSource) ||
               (RULE_MATCH_UID == mix->mCriteria[j].mRule &&
                    mix->mCriteria[j].mValue.mUid == uid) ||
               (RULE_EXCLUDE_UID == mix->mCriteria[j].mRule &&
                    mix->mCriteria[j].mValue.mUid != uid)) {
                // assuming PolicyMix only for remote submix for input
                // so mix->mDeviceType can only be AUDIO_DEVICE_OUT_REMOTE_SUBMIX
                audio_devices_t device = AUDIO_DEVICE_IN_REMOTE_SUBMIX;
+4 −2
Original line number Diff line number Diff line
@@ -173,8 +173,10 @@ public:
     * @param[out] mix to be used if a mix has been installed for the given audio attributes.
     * @return selected input device for the audio attributes, may be null if error.
     */
    virtual sp<DeviceDescriptor> getInputDeviceForAttributes(
            const audio_attributes_t &attr, sp<AudioPolicyMix> *mix = nullptr) const = 0;
    virtual sp<DeviceDescriptor> getInputDeviceForAttributes(const audio_attributes_t &attr,
                                                             uid_t uid = 0,
                                                             sp<AudioPolicyMix> *mix = nullptr)
                                                             const = 0;

    /**
     * Get the legacy stream type for a given audio attributes.
+5 −1
Original line number Diff line number Diff line
@@ -310,6 +310,7 @@ DeviceVector Engine::getOutputDevicesForStream(audio_stream_type_t stream, bool
}

sp<DeviceDescriptor> Engine::getInputDeviceForAttributes(const audio_attributes_t &attr,
                                                         uid_t uid,
                                                         sp<AudioPolicyMix> *mix) const
{
    const auto &policyMixes = getApmObserver()->getAudioPolicyMixCollection();
@@ -328,7 +329,10 @@ sp<DeviceDescriptor> Engine::getInputDeviceForAttributes(const audio_attributes_
        return device;
    }

    device = policyMixes.getDeviceAndMixForInputSource(attr.source, availableInputDevices, mix);
    device = policyMixes.getDeviceAndMixForInputSource(attr.source,
                                                       availableInputDevices,
                                                       uid,
                                                       mix);
    if (device != nullptr) {
        return device;
    }
+4 −2
Original line number Diff line number Diff line
@@ -61,8 +61,10 @@ public:
    DeviceVector getOutputDevicesForStream(audio_stream_type_t stream,
                                           bool fromCache = false) const override;

    sp<DeviceDescriptor> getInputDeviceForAttributes(
            const audio_attributes_t &attr, sp<AudioPolicyMix> *mix = nullptr) const override;
    sp<DeviceDescriptor> getInputDeviceForAttributes(const audio_attributes_t &attr,
                                                     uid_t uid = 0,
                                                     sp<AudioPolicyMix> *mix = nullptr)
                                                     const override;

    void updateDeviceSelectionCache() override;

Loading