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

Commit 187097e8 authored by Jiabin Huang's avatar Jiabin Huang Committed by Android (Google) Code Review
Browse files

Merge "Support query direct playback support."

parents a1ad269b 2b9d5a1c
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -3314,4 +3314,53 @@ legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo(
    return trackSecondaryOutputInfo;
}

ConversionResult<audio_direct_mode_t>
aidl2legacy_AudioDirectMode_audio_direct_mode_t(media::AudioDirectMode aidl) {
    switch (aidl) {
        case media::AudioDirectMode::NONE:
            return AUDIO_DIRECT_NOT_SUPPORTED;
        case media::AudioDirectMode::OFFLOAD:
            return AUDIO_DIRECT_OFFLOAD_SUPPORTED;
        case media::AudioDirectMode::OFFLOAD_GAPLESS:
            return AUDIO_DIRECT_OFFLOAD_GAPLESS_SUPPORTED;
        case media::AudioDirectMode::BITSTREAM:
            return AUDIO_DIRECT_BITSTREAM_SUPPORTED;
    }
    return unexpected(BAD_VALUE);
}
ConversionResult<media::AudioDirectMode>
legacy2aidl_audio_direct_mode_t_AudioDirectMode(audio_direct_mode_t legacy) {
    switch (legacy) {
        case AUDIO_DIRECT_NOT_SUPPORTED:
            return media::AudioDirectMode::NONE;
        case AUDIO_DIRECT_OFFLOAD_SUPPORTED:
            return media::AudioDirectMode::OFFLOAD;
        case AUDIO_DIRECT_OFFLOAD_GAPLESS_SUPPORTED:
            return media::AudioDirectMode::OFFLOAD_GAPLESS;
        case AUDIO_DIRECT_BITSTREAM_SUPPORTED:
            return media::AudioDirectMode::BITSTREAM;
    }
    return unexpected(BAD_VALUE);
}

ConversionResult<audio_direct_mode_t> aidl2legacy_int32_t_audio_direct_mode_t_mask(int32_t aidl) {
    using LegacyMask = std::underlying_type_t<audio_direct_mode_t>;

    LegacyMask converted = VALUE_OR_RETURN(
            (convertBitmask<LegacyMask, int32_t, audio_direct_mode_t, media::AudioDirectMode>(
                    aidl, aidl2legacy_AudioDirectMode_audio_direct_mode_t,
                    indexToEnum_index<media::AudioDirectMode>,
                    enumToMask_bitmask<LegacyMask, audio_direct_mode_t>)));
    return static_cast<audio_direct_mode_t>(converted);
}
ConversionResult<int32_t> legacy2aidl_audio_direct_mode_t_int32_t_mask(audio_direct_mode_t legacy) {
    using LegacyMask = std::underlying_type_t<audio_direct_mode_t>;

    LegacyMask legacyMask = static_cast<LegacyMask>(legacy);
    return convertBitmask<int32_t, LegacyMask, media::AudioDirectMode, audio_direct_mode_t>(
            legacyMask, legacy2aidl_audio_direct_mode_t_AudioDirectMode,
            indexToEnum_bitmask<audio_direct_mode_t>,
            enumToMask_index<int32_t, media::AudioDirectMode>);
}

}  // namespace android
+1 −0
Original line number Diff line number Diff line
@@ -314,6 +314,7 @@ aidl_interface {
    srcs: [
        "aidl/android/media/AudioAttributesInternal.aidl",
        "aidl/android/media/AudioClient.aidl",
        "aidl/android/media/AudioDirectMode.aidl",
        "aidl/android/media/AudioDualMonoMode.aidl",
        "aidl/android/media/AudioFlag.aidl",
        "aidl/android/media/AudioGainSys.aidl",
+25 −0
Original line number Diff line number Diff line
@@ -2289,6 +2289,31 @@ status_t AudioSystem::canBeSpatialized(const audio_attributes_t *attr,
    return OK;
}

status_t AudioSystem::getDirectPlaybackSupport(const audio_attributes_t *attr,
                                               const audio_config_t *config,
                                               audio_direct_mode_t* directMode) {
    if (attr == nullptr || config == nullptr || directMode == nullptr) {
        return BAD_VALUE;
    }

    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }

    media::AudioAttributesInternal attrAidl = VALUE_OR_RETURN_STATUS(
            legacy2aidl_audio_attributes_t_AudioAttributesInternal(*attr));
    AudioConfig configAidl = VALUE_OR_RETURN_STATUS(
            legacy2aidl_audio_config_t_AudioConfig(*config, false /*isInput*/));

    media::AudioDirectMode retAidl;
    RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
            aps->getDirectPlaybackSupport(attrAidl, configAidl, &retAidl)));
    *directMode = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_direct_mode_t_mask(
            static_cast<int32_t>(retAidl)));
    return NO_ERROR;
}


class CaptureStateListenerImpl : public media::BnCaptureStateListener,
                                 public IBinder::DeathRecipient {
+24 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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;

@Backing(type="int")
enum AudioDirectMode {
    NONE = 0,
    OFFLOAD = 1,
    OFFLOAD_GAPLESS = 2,
    BITSTREAM = 4,
}
+7 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.AttributionSourceState;

import android.media.AudioAttributesEx;
import android.media.AudioAttributesInternal;
import android.media.AudioDirectMode;
import android.media.AudioMix;
import android.media.AudioOffloadMode;
import android.media.AudioPatch;
@@ -376,4 +377,10 @@ interface IAudioPolicyService {
    boolean canBeSpatialized(in @nullable AudioAttributesInternal attr,
                             in @nullable AudioConfig config,
                             in AudioDevice[] devices);

    /**
     * Query how the direct playback is currently supported on the device.
     */
     AudioDirectMode getDirectPlaybackSupport(in AudioAttributesInternal attr,
                                              in AudioConfig config);
}
Loading