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

Commit c57c7973 authored by Eric Laurent's avatar Eric Laurent Committed by Automerger Merge Worker
Browse files

Merge "audio policy: allow direct outputs for dynamic audio policies" into...

Merge "audio policy: allow direct outputs for dynamic audio policies" into rvc-dev am: 6d05a57e am: 23c3b34d am: aebe979a

Change-Id: I8051a87e867d6de2dc738f4ed238fb749d4fd8a1
parents 577fbb3d aebe979a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -72,8 +72,8 @@ public:
     */
    status_t getOutputForAttr(const audio_attributes_t& attributes, uid_t uid,
                              audio_output_flags_t flags,
                              sp<SwAudioOutputDescriptor> &primaryDesc,
                              std::vector<sp<SwAudioOutputDescriptor>> *secondaryDescs);
                              sp<AudioPolicyMix> &primaryMix,
                              std::vector<sp<AudioPolicyMix>> *secondaryMixes);

    sp<DeviceDescriptor> getDeviceAndMixForInputSource(audio_source_t inputSource,
                                                       const DeviceVector &availableDeviceTypes,
+8 −19
Original line number Diff line number Diff line
@@ -150,11 +150,11 @@ void AudioPolicyMixCollection::closeOutput(sp<SwAudioOutputDescriptor> &desc)
status_t AudioPolicyMixCollection::getOutputForAttr(
        const audio_attributes_t& attributes, uid_t uid,
        audio_output_flags_t flags,
        sp<SwAudioOutputDescriptor> &primaryDesc,
        std::vector<sp<SwAudioOutputDescriptor>> *secondaryDescs)
        sp<AudioPolicyMix> &primaryMix,
        std::vector<sp<AudioPolicyMix>> *secondaryMixes)
{
    ALOGV("getOutputForAttr() querying %zu mixes:", size());
    primaryDesc = 0;
    primaryMix.clear();
    for (size_t i = 0; i < size(); i++) {
        sp<AudioPolicyMix> policyMix = itemAt(i);
        const bool primaryOutputMix = !is_mix_loopback_render(policyMix->mRouteFlags);
@@ -169,13 +169,7 @@ status_t AudioPolicyMixCollection::getOutputForAttr(
            return INVALID_OPERATION;
        }

        sp<SwAudioOutputDescriptor> policyDesc = policyMix->getOutput();
        if (!policyDesc) {
            ALOGV("%s: Skiping %zu: Mix has no output", __func__, i);
            continue;
        }

        if (primaryOutputMix && primaryDesc != 0) {
        if (primaryOutputMix && primaryMix != nullptr) {
            ALOGV("%s: Skiping %zu: Primary output already found", __func__, i);
            continue; // Primary output already found
        }
@@ -191,18 +185,13 @@ status_t AudioPolicyMixCollection::getOutputForAttr(
            case MixMatchStatus::MATCH:;
        }

        policyDesc->mPolicyMix = policyMix;
        if (primaryOutputMix) {
            primaryDesc = policyDesc;
            primaryMix = policyMix;
            ALOGV("%s: Mix %zu: set primary desc", __func__, i);
        } else {
            if (policyDesc->mIoHandle == AUDIO_IO_HANDLE_NONE) {
                ALOGV("%s: Mix %zu ignored as secondaryOutput because not opened yet", __func__, i);
        } else {
            ALOGV("%s: Add a secondary desc %zu", __func__, i);
                if (secondaryDescs != nullptr) {
                    secondaryDescs->push_back(policyDesc);
                }
            if (secondaryMixes != nullptr) {
                secondaryMixes->push_back(policyMix);
            }
        }
    }
+247 −190

File changed.

Preview size limit exceeded, changes collapsed.

+17 −1
Original line number Diff line number Diff line
@@ -837,7 +837,7 @@ private:
                audio_output_flags_t *flags,
                audio_port_handle_t *selectedDeviceId,
                bool *isRequestedDeviceForExclusiveUse,
                std::vector<sp<SwAudioOutputDescriptor>> *secondaryDescs,
                std::vector<sp<AudioPolicyMix>> *secondaryMixes,
                output_type_t *outputType);
        // internal method to return the output handle for the given device and format
        audio_io_handle_t getOutputForDevices(
@@ -848,6 +848,16 @@ private:
                audio_output_flags_t *flags,
                bool forceMutingHaptic = false);

        // Internal method checking if a direct output can be opened matching the requested
        // attributes, flags, config and devices.
        // If NAME_NOT_FOUND is returned, an attempt can be made to open a mixed output.
        status_t openDirectOutput(
                audio_stream_type_t stream,
                audio_session_t session,
                const audio_config_t *config,
                audio_output_flags_t flags,
                const DeviceVector &devices,
                audio_io_handle_t *output);
        /**
         * @brief getInputForDevice selects an input handle for a given input device and
         * requester context
@@ -926,6 +936,12 @@ private:
                int delayMs,
                uid_t uid,
                sp<AudioPatch> *patchDescPtr);

        bool areAllDevicesSupported(
                const Vector<AudioDeviceTypeAddr>& devices,
                std::function<bool(audio_devices_t)> predicate,
                const char* context);

};

};