Remove AudioPortConfigType from AIDL interfaces
Switch to the canonical approach of making a field '@nullable'
if the value for it is not required. This makes AudioPortConfigType
redundant.
Refactor affected parceling code in libaudiofoundation to reuse
functions from AidlConversion.
Bug: 198812639
Test: atest audiofoundation_parcelable_test
Change-Id: If02a9d788e7aed21bca917ac193cf71598804b83
diff --git a/media/libaudioclient/AidlConversion.cpp b/media/libaudioclient/AidlConversion.cpp
index 7ee78e0..45788e7 100644
--- a/media/libaudioclient/AidlConversion.cpp
+++ b/media/libaudioclient/AidlConversion.cpp
@@ -249,60 +249,6 @@
return std::string(legacy.c_str());
}
-// The legacy enum is unnamed. Thus, we use int32_t.
-ConversionResult<int32_t> aidl2legacy_AudioPortConfigType_int32_t(
- media::AudioPortConfigType aidl) {
- switch (aidl) {
- case media::AudioPortConfigType::SAMPLE_RATE:
- return AUDIO_PORT_CONFIG_SAMPLE_RATE;
- case media::AudioPortConfigType::CHANNEL_MASK:
- return AUDIO_PORT_CONFIG_CHANNEL_MASK;
- case media::AudioPortConfigType::FORMAT:
- return AUDIO_PORT_CONFIG_FORMAT;
- case media::AudioPortConfigType::GAIN:
- return AUDIO_PORT_CONFIG_GAIN;
- case media::AudioPortConfigType::FLAGS:
- return AUDIO_PORT_CONFIG_FLAGS;
- }
- return unexpected(BAD_VALUE);
-}
-
-// The legacy enum is unnamed. Thus, we use int32_t.
-ConversionResult<media::AudioPortConfigType> legacy2aidl_int32_t_AudioPortConfigType(
- int32_t legacy) {
- switch (legacy) {
- case AUDIO_PORT_CONFIG_SAMPLE_RATE:
- return media::AudioPortConfigType::SAMPLE_RATE;
- case AUDIO_PORT_CONFIG_CHANNEL_MASK:
- return media::AudioPortConfigType::CHANNEL_MASK;
- case AUDIO_PORT_CONFIG_FORMAT:
- return media::AudioPortConfigType::FORMAT;
- case AUDIO_PORT_CONFIG_GAIN:
- return media::AudioPortConfigType::GAIN;
- case AUDIO_PORT_CONFIG_FLAGS:
- return media::AudioPortConfigType::FLAGS;
- }
- return unexpected(BAD_VALUE);
-}
-
-ConversionResult<unsigned int> aidl2legacy_int32_t_config_mask(int32_t aidl) {
- return convertBitmask<unsigned int, int32_t, int, media::AudioPortConfigType>(
- aidl, aidl2legacy_AudioPortConfigType_int32_t,
- // AudioPortConfigType enum is index-based.
- indexToEnum_index<media::AudioPortConfigType>,
- // AUDIO_PORT_CONFIG_* flags are mask-based.
- enumToMask_bitmask<unsigned int, int>);
-}
-
-ConversionResult<int32_t> legacy2aidl_config_mask_int32_t(unsigned int legacy) {
- return convertBitmask<int32_t, unsigned int, media::AudioPortConfigType, int>(
- legacy, legacy2aidl_int32_t_AudioPortConfigType,
- // AUDIO_PORT_CONFIG_* flags are mask-based.
- indexToEnum_bitmask<unsigned>,
- // AudioPortConfigType enum is index-based.
- enumToMask_index<int32_t, media::AudioPortConfigType>);
-}
-
ConversionResult<audio_io_config_event_t> aidl2legacy_AudioIoConfigEvent_audio_io_config_event_t(
media::AudioIoConfigEvent aidl) {
switch (aidl) {
@@ -1289,11 +1235,10 @@
}
ConversionResult<audio_gain_config> aidl2legacy_AudioGainConfig_audio_gain_config(
- const AudioGainConfig& aidl, media::AudioPortRole role, media::AudioPortType type) {
+ const AudioGainConfig& aidl, bool isInput) {
audio_gain_config legacy;
legacy.index = VALUE_OR_RETURN(convertIntegral<int>(aidl.index));
legacy.mode = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_gain_mode_t_mask(aidl.mode));
- const bool isInput = VALUE_OR_RETURN(direction(role, type)) == Direction::INPUT;
legacy.channel_mask = VALUE_OR_RETURN(
aidl2legacy_AudioChannelLayout_audio_channel_mask_t(aidl.channelMask, isInput));
const bool isJoint = bitmaskIsSet(aidl.mode, AudioGainMode::JOINT);
@@ -1311,11 +1256,10 @@
}
ConversionResult<AudioGainConfig> legacy2aidl_audio_gain_config_AudioGainConfig(
- const audio_gain_config& legacy, audio_port_role_t role, audio_port_type_t type) {
+ const audio_gain_config& legacy, bool isInput) {
AudioGainConfig aidl;
aidl.index = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.index));
aidl.mode = VALUE_OR_RETURN(legacy2aidl_audio_gain_mode_t_int32_t_mask(legacy.mode));
- const bool isInput = VALUE_OR_RETURN(direction(role, type)) == Direction::INPUT;
aidl.channelMask = VALUE_OR_RETURN(
legacy2aidl_audio_channel_mask_t_AudioChannelLayout(legacy.channel_mask, isInput));
const bool isJoint = (legacy.mode & AUDIO_GAIN_MODE_JOINT) != 0;
@@ -1873,32 +1817,37 @@
ConversionResult<audio_port_config> aidl2legacy_AudioPortConfig_audio_port_config(
const media::AudioPortConfig& aidl) {
- audio_port_config legacy;
+ audio_port_config legacy{};
legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.id));
legacy.role = VALUE_OR_RETURN(aidl2legacy_AudioPortRole_audio_port_role_t(aidl.role));
legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioPortType_audio_port_type_t(aidl.type));
- legacy.config_mask = VALUE_OR_RETURN(aidl2legacy_int32_t_config_mask(aidl.configMask));
- if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::SAMPLE_RATE)) {
- legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sampleRate));
+ const bool isInput = VALUE_OR_RETURN(direction(aidl.role, aidl.type)) == Direction::INPUT;
+ if (aidl.sampleRate.has_value()) {
+ legacy.sample_rate = VALUE_OR_RETURN(
+ convertIntegral<unsigned int>(aidl.sampleRate.value().value));
+ legacy.config_mask |= AUDIO_PORT_CONFIG_SAMPLE_RATE;
}
- if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::CHANNEL_MASK)) {
- const bool isInput = VALUE_OR_RETURN(direction(aidl.role, aidl.type)) == Direction::INPUT;
+ if (aidl.channelMask.has_value()) {
legacy.channel_mask =
VALUE_OR_RETURN(
aidl2legacy_AudioChannelLayout_audio_channel_mask_t(
- aidl.channelMask, isInput));
+ aidl.channelMask.value(), isInput));
+ legacy.config_mask |= AUDIO_PORT_CONFIG_CHANNEL_MASK;
}
- if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::FORMAT)) {
+ if (aidl.format.has_value()) {
legacy.format = VALUE_OR_RETURN(
- aidl2legacy_AudioFormatDescription_audio_format_t(aidl.format));
+ aidl2legacy_AudioFormatDescription_audio_format_t(aidl.format.value()));
+ legacy.config_mask |= AUDIO_PORT_CONFIG_FORMAT;
}
- if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::GAIN)) {
- legacy.gain = VALUE_OR_RETURN(
- aidl2legacy_AudioGainConfig_audio_gain_config(aidl.gain, aidl.role, aidl.type));
+ if (aidl.gain.has_value()) {
+ legacy.gain = VALUE_OR_RETURN(aidl2legacy_AudioGainConfig_audio_gain_config(
+ aidl.gain.value(), isInput));
+ legacy.config_mask |= AUDIO_PORT_CONFIG_GAIN;
}
- if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::FLAGS)) {
+ if (aidl.flags.has_value()) {
legacy.flags = VALUE_OR_RETURN(
- aidl2legacy_AudioIoFlags_audio_io_flags(aidl.flags, aidl.role, aidl.type));
+ aidl2legacy_AudioIoFlags_audio_io_flags(aidl.flags.value(), aidl.role, aidl.type));
+ legacy.config_mask |= AUDIO_PORT_CONFIG_FLAGS;
}
legacy.ext = VALUE_OR_RETURN(aidl2legacy_AudioPortConfigExt(aidl.ext, aidl.type, aidl.role));
return legacy;
@@ -1910,13 +1859,14 @@
aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy.id));
aidl.role = VALUE_OR_RETURN(legacy2aidl_audio_port_role_t_AudioPortRole(legacy.role));
aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_port_type_t_AudioPortType(legacy.type));
- aidl.configMask = VALUE_OR_RETURN(legacy2aidl_config_mask_int32_t(legacy.config_mask));
+ const bool isInput = VALUE_OR_RETURN(
+ direction(legacy.role, legacy.type)) == Direction::INPUT;
if (legacy.config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE) {
- aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
+ media::Int aidl_sampleRate;
+ aidl_sampleRate.value = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
+ aidl.sampleRate = aidl_sampleRate;
}
if (legacy.config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK) {
- const bool isInput = VALUE_OR_RETURN(
- direction(legacy.role, legacy.type)) == Direction::INPUT;
aidl.channelMask = VALUE_OR_RETURN(
legacy2aidl_audio_channel_mask_t_AudioChannelLayout(legacy.channel_mask, isInput));
}
@@ -1925,8 +1875,8 @@
legacy2aidl_audio_format_t_AudioFormatDescription(legacy.format));
}
if (legacy.config_mask & AUDIO_PORT_CONFIG_GAIN) {
- aidl.gain = VALUE_OR_RETURN(legacy2aidl_audio_gain_config_AudioGainConfig(
- legacy.gain, legacy.role, legacy.type));
+ aidl.gain = VALUE_OR_RETURN(
+ legacy2aidl_audio_gain_config_AudioGainConfig(legacy.gain, isInput));
}
if (legacy.config_mask & AUDIO_PORT_CONFIG_FLAGS) {
aidl.flags = VALUE_OR_RETURN(
diff --git a/media/libaudioclient/Android.bp b/media/libaudioclient/Android.bp
index 739b982..04b1b93 100644
--- a/media/libaudioclient/Android.bp
+++ b/media/libaudioclient/Android.bp
@@ -325,7 +325,6 @@
"aidl/android/media/AudioPlaybackRate.aidl",
"aidl/android/media/AudioPort.aidl",
"aidl/android/media/AudioPortConfig.aidl",
- "aidl/android/media/AudioPortConfigType.aidl",
"aidl/android/media/AudioPortConfigDeviceExt.aidl",
"aidl/android/media/AudioPortConfigExt.aidl",
"aidl/android/media/AudioPortConfigMixExt.aidl",
@@ -344,6 +343,7 @@
"aidl/android/media/AudioVibratorInfo.aidl",
"aidl/android/media/EffectDescriptor.aidl",
"aidl/android/media/ExtraAudioDescriptor.aidl",
+ "aidl/android/media/Int.aidl",
"aidl/android/media/TrackSecondaryOutputInfo.aidl",
],
imports: [
@@ -466,7 +466,6 @@
"aidl/android/media/GetInputForAttrResponse.aidl",
"aidl/android/media/GetOutputForAttrResponse.aidl",
"aidl/android/media/GetSpatializerResponse.aidl",
- "aidl/android/media/Int.aidl",
"aidl/android/media/RecordClientInfo.aidl",
"aidl/android/media/IAudioPolicyService.aidl",
"aidl/android/media/IAudioPolicyServiceClient.aidl",
diff --git a/media/libaudioclient/aidl/android/media/AudioPortConfig.aidl b/media/libaudioclient/aidl/android/media/AudioPortConfig.aidl
index 07e4480..4e1520c 100644
--- a/media/libaudioclient/aidl/android/media/AudioPortConfig.aidl
+++ b/media/libaudioclient/aidl/android/media/AudioPortConfig.aidl
@@ -18,9 +18,9 @@
import android.media.AudioIoFlags;
import android.media.AudioPortConfigExt;
-import android.media.AudioPortConfigType;
import android.media.AudioPortRole;
import android.media.AudioPortType;
+import android.media.Int;
import android.media.audio.common.AudioChannelLayout;
import android.media.audio.common.AudioFormatDescription;
import android.media.audio.common.AudioGainConfig;
@@ -38,21 +38,15 @@
AudioPortRole role;
/** Device, mix ... */
AudioPortType type;
- /** Bitmask, indexed by AudioPortConfigType. */
- int configMask;
- /** Sampling rate in Hz. */
- int sampleRate;
- /**
- * Channel mask, if applicable.
- */
- AudioChannelLayout channelMask;
- /**
- * Format, if applicable.
- */
- AudioFormatDescription format;
- /** Gain to apply, if applicable. */
- AudioGainConfig gain;
- /** Framework only: HW_AV_SYNC, DIRECT, ... */
- AudioIoFlags flags;
+ /** Sampling rate in Hz. Can be left unspecified. */
+ @nullable Int sampleRate;
+ /** Channel mask. Can be left unspecified. */
+ @nullable AudioChannelLayout channelMask;
+ /** Format. Can be left unspecified. */
+ @nullable AudioFormatDescription format;
+ /** Gain to apply. Can be left unspecified. */
+ @nullable AudioGainConfig gain;
+ /** Framework only: HW_AV_SYNC, DIRECT, ... Can be left unspecified. */
+ @nullable AudioIoFlags flags;
AudioPortConfigExt ext;
}
diff --git a/media/libaudioclient/aidl/android/media/AudioPortConfigType.aidl b/media/libaudioclient/aidl/android/media/AudioPortConfigType.aidl
deleted file mode 100644
index 6e22b8d..0000000
--- a/media/libaudioclient/aidl/android/media/AudioPortConfigType.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2020 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;
-
-/**
- * {@hide}
- */
-@Backing(type="int")
-enum AudioPortConfigType {
- SAMPLE_RATE = 0,
- CHANNEL_MASK = 1,
- FORMAT = 2,
- GAIN = 3,
- FLAGS = 4,
-}
diff --git a/media/libaudioclient/include/media/AidlConversion.h b/media/libaudioclient/include/media/AidlConversion.h
index 74a3520..1095766 100644
--- a/media/libaudioclient/include/media/AidlConversion.h
+++ b/media/libaudioclient/include/media/AidlConversion.h
@@ -32,7 +32,6 @@
#include <android/media/AudioOutputFlags.h>
#include <android/media/AudioPlaybackRate.h>
#include <android/media/AudioPort.h>
-#include <android/media/AudioPortConfigType.h>
#include <android/media/AudioPortDeviceExt.h>
#include <android/media/AudioPortExt.h>
#include <android/media/AudioPortMixExt.h>
@@ -95,13 +94,6 @@
ConversionResult<audio_hw_sync_t> aidl2legacy_int32_t_audio_hw_sync_t(int32_t aidl);
ConversionResult<int32_t> legacy2aidl_audio_hw_sync_t_int32_t(audio_hw_sync_t legacy);
-// The legacy enum is unnamed. Thus, we use int32_t.
-ConversionResult<int32_t> aidl2legacy_AudioPortConfigType_int32_t(
- media::AudioPortConfigType aidl);
-// The legacy enum is unnamed. Thus, we use int32_t.
-ConversionResult<media::AudioPortConfigType> legacy2aidl_int32_t_AudioPortConfigType(
- int32_t legacy);
-
ConversionResult<unsigned int> aidl2legacy_int32_t_config_mask(int32_t aidl);
ConversionResult<int32_t> legacy2aidl_config_mask_int32_t(unsigned int legacy);
@@ -177,11 +169,9 @@
ConversionResult<int32_t> legacy2aidl_audio_gain_mode_t_int32_t_mask(audio_gain_mode_t legacy);
ConversionResult<audio_gain_config> aidl2legacy_AudioGainConfig_audio_gain_config(
- const media::audio::common::AudioGainConfig& aidl,
- media::AudioPortRole role, media::AudioPortType type);
+ const media::audio::common::AudioGainConfig& aidl, bool isInput);
ConversionResult<media::audio::common::AudioGainConfig>
-legacy2aidl_audio_gain_config_AudioGainConfig(
- const audio_gain_config& legacy, audio_port_role_t role, audio_port_type_t type);
+legacy2aidl_audio_gain_config_AudioGainConfig(const audio_gain_config& legacy, bool isInput);
ConversionResult<audio_input_flags_t> aidl2legacy_AudioInputFlags_audio_input_flags_t(
media::AudioInputFlags aidl);
diff --git a/media/libaudiofoundation/AudioPort.cpp b/media/libaudiofoundation/AudioPort.cpp
index 905a0ca..329ff9a 100644
--- a/media/libaudiofoundation/AudioPort.cpp
+++ b/media/libaudiofoundation/AudioPort.cpp
@@ -341,45 +341,39 @@
status_t AudioPortConfig::writeToParcelable(
media::AudioPortConfig* parcelable, bool isInput) const {
- parcelable->sampleRate = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(mSamplingRate));
+ media::Int aidl_sampleRate;
+ aidl_sampleRate.value = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(mSamplingRate));
+ parcelable->sampleRate = aidl_sampleRate;
parcelable->format = VALUE_OR_RETURN_STATUS(
legacy2aidl_audio_format_t_AudioFormatDescription(mFormat));
parcelable->channelMask = VALUE_OR_RETURN_STATUS(
legacy2aidl_audio_channel_mask_t_AudioChannelLayout(mChannelMask, isInput));
parcelable->id = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_handle_t_int32_t(mId));
- parcelable->gain.index = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(mGain.index));
- parcelable->gain.mode = VALUE_OR_RETURN_STATUS(
- legacy2aidl_audio_gain_mode_t_int32_t_mask(mGain.mode));
- parcelable->gain.channelMask = VALUE_OR_RETURN_STATUS(
- legacy2aidl_audio_channel_mask_t_AudioChannelLayout(mGain.channel_mask, isInput));
- parcelable->gain.rampDurationMs = VALUE_OR_RETURN_STATUS(
- convertIntegral<int32_t>(mGain.ramp_duration_ms));
- parcelable->gain.values = VALUE_OR_RETURN_STATUS(convertContainer<std::vector<int32_t>>(
- mGain.values, convertIntegral<int32_t, int>));
+ media::audio::common::AudioGainConfig aidl_gain = VALUE_OR_RETURN_STATUS(
+ legacy2aidl_audio_gain_config_AudioGainConfig(mGain, isInput));
+ parcelable->gain = aidl_gain;
return OK;
}
status_t AudioPortConfig::readFromParcelable(
const media::AudioPortConfig& parcelable, bool isInput) {
- mSamplingRate = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(parcelable.sampleRate));
- mFormat = VALUE_OR_RETURN_STATUS(
- aidl2legacy_AudioFormatDescription_audio_format_t(parcelable.format));
- mChannelMask = VALUE_OR_RETURN_STATUS(
- aidl2legacy_AudioChannelLayout_audio_channel_mask_t(parcelable.channelMask, isInput));
- mId = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_port_handle_t(parcelable.id));
- mGain.index = VALUE_OR_RETURN_STATUS(convertIntegral<int>(parcelable.gain.index));
- mGain.mode = VALUE_OR_RETURN_STATUS(
- aidl2legacy_int32_t_audio_gain_mode_t_mask(parcelable.gain.mode));
- mGain.channel_mask = VALUE_OR_RETURN_STATUS(
- aidl2legacy_AudioChannelLayout_audio_channel_mask_t(
- parcelable.gain.channelMask, isInput));
- mGain.ramp_duration_ms = VALUE_OR_RETURN_STATUS(
- convertIntegral<unsigned int>(parcelable.gain.rampDurationMs));
- if (parcelable.gain.values.size() > std::size(mGain.values)) {
- return BAD_VALUE;
+ if (parcelable.sampleRate.has_value()) {
+ mSamplingRate = VALUE_OR_RETURN_STATUS(
+ convertIntegral<unsigned int>(parcelable.sampleRate.value().value));
}
- for (size_t i = 0; i < parcelable.gain.values.size(); ++i) {
- mGain.values[i] = VALUE_OR_RETURN_STATUS(convertIntegral<int>(parcelable.gain.values[i]));
+ if (parcelable.format.has_value()) {
+ mFormat = VALUE_OR_RETURN_STATUS(
+ aidl2legacy_AudioFormatDescription_audio_format_t(parcelable.format.value()));
+ }
+ if (parcelable.channelMask.has_value()) {
+ mChannelMask = VALUE_OR_RETURN_STATUS(
+ aidl2legacy_AudioChannelLayout_audio_channel_mask_t(
+ parcelable.channelMask.value(), isInput));
+ }
+ mId = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_port_handle_t(parcelable.id));
+ if (parcelable.gain.has_value()) {
+ mGain = VALUE_OR_RETURN_STATUS(
+ aidl2legacy_AudioGainConfig_audio_gain_config(parcelable.gain.value(), isInput));
}
return OK;
}