Loading media/libaudioclient/AidlConversion.cpp +49 −0 Original line number Diff line number Diff line Loading @@ -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 media/libaudioclient/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -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", Loading media/libaudioclient/AudioSystem.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading media/libaudioclient/aidl/android/media/AudioDirectMode.aidl 0 → 100644 +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, } media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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
media/libaudioclient/AidlConversion.cpp +49 −0 Original line number Diff line number Diff line Loading @@ -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
media/libaudioclient/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -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", Loading
media/libaudioclient/AudioSystem.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
media/libaudioclient/aidl/android/media/AudioDirectMode.aidl 0 → 100644 +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, }
media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); }