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

Commit 0af8e87a authored by Jan Sebechlebsky's avatar Jan Sebechlebsky
Browse files

Add API to update mix rule for registered AudioMix-es

Bug: 293874525
Test: atest AudioHostTest AudioServiceHostTest
Change-Id: I5d254ccd91b5e6c82ed786d4ebd66a265d0faf4c
parent f0699d62
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -336,6 +336,7 @@ aidl_interface {
    srcs: [
        "aidl/android/media/AudioAttributesEx.aidl",
        "aidl/android/media/AudioMix.aidl",
        "aidl/android/media/AudioMixUpdate.aidl",
        "aidl/android/media/AudioMixerAttributesInternal.aidl",
        "aidl/android/media/AudioMixerBehavior.aidl",
        "aidl/android/media/AudioMixCallbackFlag.aidl",
+22 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <utils/Log.h>

#include <android/media/IAudioPolicyService.h>
#include <android/media/AudioMixUpdate.h>
#include <android/media/BnCaptureStateListener.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
@@ -1842,6 +1843,27 @@ status_t AudioSystem::registerPolicyMixes(const Vector<AudioMix>& mixes, bool re
    return statusTFromBinderStatus(aps->registerPolicyMixes(mixesAidl, registration));
}

status_t AudioSystem::updatePolicyMixes(
        const std::vector<std::pair<AudioMix, std::vector<AudioMixMatchCriterion>>>&
                mixesWithUpdates) {
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) return PERMISSION_DENIED;

    std::vector<media::AudioMixUpdate> updatesAidl;
    updatesAidl.reserve(mixesWithUpdates.size());

    for (const auto& update : mixesWithUpdates) {
        media::AudioMixUpdate updateAidl;
        updateAidl.audioMix = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioMix(update.first));
        RETURN_STATUS_IF_ERROR(convertRange(update.second.begin(), update.second.end(),
                                            std::back_inserter(updateAidl.newCriteria),
                                            legacy2aidl_AudioMixMatchCriterion));
        updatesAidl.emplace_back(updateAidl);
    }

    return statusTFromBinderStatus(aps->updatePolicyMixes(updatesAidl));
}

status_t AudioSystem::setUidDeviceAffinities(uid_t uid, const AudioDeviceTypeAddrVector& devices) {
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) return PERMISSION_DENIED;
+31 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media;

import android.media.AudioMix;
import android.media.AudioMixMatchCriterion;


/**
 * {@hide}
 */
parcelable AudioMixUpdate {
    // Audio mix to update.
    AudioMix audioMix;
    // Updated audio mixing rule.
    AudioMixMatchCriterion[] newCriteria;
}
+3 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.AttributionSourceState;

import android.media.AudioDirectMode;
import android.media.AudioMix;
import android.media.AudioMixUpdate;
import android.media.AudioMixerAttributesInternal;
import android.media.AudioOffloadMode;
import android.media.AudioPatchFw;
@@ -262,6 +263,8 @@ interface IAudioPolicyService {

    void registerPolicyMixes(in AudioMix[] mixes, boolean registration);

    void updatePolicyMixes(in AudioMixUpdate[] updates);

    void setUidDeviceAffinities(int /* uid_t */ uid, in AudioDevice[] devices);

    void removeUidDeviceAffinities(int /* uid_t */ uid);
+4 −0
Original line number Diff line number Diff line
@@ -462,6 +462,10 @@ public:

    static status_t registerPolicyMixes(const Vector<AudioMix>& mixes, bool registration);

    static status_t updatePolicyMixes(
        const std::vector<
                std::pair<AudioMix, std::vector<AudioMixMatchCriterion>>>& mixesWithUpdates);

    static status_t setUidDeviceAffinities(uid_t uid, const AudioDeviceTypeAddrVector& devices);

    static status_t removeUidDeviceAffinities(uid_t uid);
Loading