From 5ec293316e7ea1f768161695a113e50b0ea41d45 Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Thu, 1 Mar 2018 15:08:07 -0800 Subject: [PATCH] Audio V4: Implement the shim core 4.0 -> legacy All the new files added are a copy of the 2.0 ones, with just the version 2 that was changed to 4. Due to the rollback on the retrocompatiblity breakage, the split of implementation is not strictly needed any more. This makes the current split in .impl.h and double include unnecessary complicated. This will need to be factorized in a future patch. Bug: 38184704 Test: compile Change-Id: I0d699ade7558ed68125b300f8522e2767ae1ee37 Merged-In: I0d699ade7558ed68125b300f8522e2767ae1ee37 Cherry-picked from master Signed-off-by: Kevin Rocard --- audio/common/2.0/default/VersionUtils.h | 2 + audio/common/4.0/default/VersionUtils.h | 4 +- audio/core/2.0/default/Android.bp | 4 + audio/core/4.0/default/Android.bp | 53 ++++++ audio/core/4.0/default/Conversions.cpp | 21 +++ audio/core/4.0/default/Device.cpp | 28 +++ audio/core/4.0/default/DevicesFactory.cpp | 25 +++ audio/core/4.0/default/ParametersUtil.cpp | 21 +++ audio/core/4.0/default/PrimaryDevice.cpp | 24 +++ audio/core/4.0/default/Stream.cpp | 25 +++ audio/core/4.0/default/StreamIn.cpp | 24 +++ audio/core/4.0/default/StreamOut.cpp | 24 +++ .../include/core/4.0/default/Conversions.h | 26 +++ .../default/include/core/4.0/default/Device.h | 28 +++ .../include/core/4.0/default/DevicesFactory.h | 26 +++ .../include/core/4.0/default/ParametersUtil.h | 26 +++ .../include/core/4.0/default/PrimaryDevice.h | 28 +++ .../default/include/core/4.0/default/Stream.h | 28 +++ .../include/core/4.0/default/StreamIn.h | 29 ++++ .../include/core/4.0/default/StreamOut.h | 29 ++++ audio/core/all-versions/default/Android.bp | 1 - .../core/all-versions/default/Device.h | 47 +++++- .../core/all-versions/default/Device.impl.h | 69 +++++++- .../all-versions/default/DevicesFactory.h | 12 +- .../default/DevicesFactory.impl.h | 73 ++++---- .../all-versions/default/ParametersUtil.h | 11 +- .../default/ParametersUtil.impl.h | 29 +++- .../core/all-versions/default/PrimaryDevice.h | 44 ++++- .../all-versions/default/PrimaryDevice.impl.h | 80 ++++++++- .../core/all-versions/default/Stream.h | 33 +++- .../core/all-versions/default/Stream.impl.h | 159 ++++++++++++------ .../core/all-versions/default/StreamIn.h | 34 +++- .../core/all-versions/default/StreamIn.impl.h | 72 ++++++-- .../core/all-versions/default/StreamOut.h | 34 +++- .../all-versions/default/StreamOut.impl.h | 71 ++++++-- 35 files changed, 1084 insertions(+), 160 deletions(-) create mode 100644 audio/core/4.0/default/Android.bp create mode 100644 audio/core/4.0/default/Conversions.cpp create mode 100644 audio/core/4.0/default/Device.cpp create mode 100644 audio/core/4.0/default/DevicesFactory.cpp create mode 100644 audio/core/4.0/default/ParametersUtil.cpp create mode 100644 audio/core/4.0/default/PrimaryDevice.cpp create mode 100644 audio/core/4.0/default/Stream.cpp create mode 100644 audio/core/4.0/default/StreamIn.cpp create mode 100644 audio/core/4.0/default/StreamOut.cpp create mode 100644 audio/core/4.0/default/include/core/4.0/default/Conversions.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/Device.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/DevicesFactory.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/ParametersUtil.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/PrimaryDevice.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/Stream.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/StreamIn.h create mode 100644 audio/core/4.0/default/include/core/4.0/default/StreamOut.h diff --git a/audio/common/2.0/default/VersionUtils.h b/audio/common/2.0/default/VersionUtils.h index fef468080e..60d1f9cb6d 100644 --- a/audio/common/2.0/default/VersionUtils.h +++ b/audio/common/2.0/default/VersionUtils.h @@ -28,6 +28,8 @@ namespace implementation { typedef common::V2_0::AudioDevice AudioDeviceBitfield; typedef common::V2_0::AudioChannelMask AudioChannelBitfield; +typedef common::V2_0::AudioOutputFlag AudioOutputFlagBitfield; +typedef common::V2_0::AudioInputFlag AudioInputFlagBitfield; } // namespace implementation } // namespace V2_0 diff --git a/audio/common/4.0/default/VersionUtils.h b/audio/common/4.0/default/VersionUtils.h index 515c792222..b7f2aec8f9 100644 --- a/audio/common/4.0/default/VersionUtils.h +++ b/audio/common/4.0/default/VersionUtils.h @@ -17,7 +17,7 @@ #ifndef ANDROID_HARDWARE_AUDIO_EFFECT_VERSION_UTILS_H #define ANDROID_HARDWARE_AUDIO_EFFECT_VERSION_UTILS_H -#include +#include namespace android { namespace hardware { @@ -28,6 +28,8 @@ namespace implementation { typedef hidl_bitfield AudioDeviceBitfield; typedef hidl_bitfield AudioChannelBitfield; +typedef hidl_bitfield AudioOutputFlagBitfield; +typedef hidl_bitfield AudioInputFlagBitfield; } // namespace implementation } // namespace V4_0 diff --git a/audio/core/2.0/default/Android.bp b/audio/core/2.0/default/Android.bp index 98478860c2..625df74a88 100644 --- a/audio/core/2.0/default/Android.bp +++ b/audio/core/2.0/default/Android.bp @@ -14,6 +14,10 @@ cc_library_shared { "StreamOut.cpp", ], + cflags: [ + "-DAUDIO_HAL_VERSION_2_0", + ], + defaults: ["hidl_defaults"], export_include_dirs: ["include"], diff --git a/audio/core/4.0/default/Android.bp b/audio/core/4.0/default/Android.bp new file mode 100644 index 0000000000..8e415459be --- /dev/null +++ b/audio/core/4.0/default/Android.bp @@ -0,0 +1,53 @@ +cc_library_shared { + name: "android.hardware.audio@4.0-impl", + relative_install_path: "hw", + proprietary: true, + vendor: true, + srcs: [ + "Conversions.cpp", + "Device.cpp", + "DevicesFactory.cpp", + "ParametersUtil.cpp", + "PrimaryDevice.cpp", + "Stream.cpp", + "StreamIn.cpp", + "StreamOut.cpp", + ], + + cflags: [ + "-DAUDIO_HAL_VERSION_4_0", + ], + + defaults: ["hidl_defaults"], + + export_include_dirs: ["include"], + + shared_libs: [ + "libbase", + "libcutils", + "libfmq", + "libhardware", + "libhidlbase", + "libhidltransport", + "liblog", + "libutils", + "android.hardware.audio@4.0", + "android.hardware.audio.common@4.0", + "android.hardware.audio.common@4.0-util", + "android.hardware.audio.common-util", + ], + + header_libs: [ + "android.hardware.audio.common.util@all-versions", + "android.hardware.audio.core@all-versions-impl", + "libaudioclient_headers", + "libaudio_system_headers", + "libhardware_headers", + "libmedia_headers", + ], + + whole_static_libs: [ + "libmedia_helper", + ], + +} diff --git a/audio/core/4.0/default/Conversions.cpp b/audio/core/4.0/default/Conversions.cpp new file mode 100644 index 0000000000..4f1874412c --- /dev/null +++ b/audio/core/4.0/default/Conversions.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2017 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. + */ + +#include "core/4.0/default/Conversions.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/Device.cpp b/audio/core/4.0/default/Device.cpp new file mode 100644 index 0000000000..26f9ab4a70 --- /dev/null +++ b/audio/core/4.0/default/Device.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "DeviceHAL" + +#include "core/4.0/default/Device.h" +#include +#include "core/4.0/default/Conversions.h" +#include "core/4.0/default/StreamIn.h" +#include "core/4.0/default/StreamOut.h" +#include "core/all-versions/default/Util.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/DevicesFactory.cpp b/audio/core/4.0/default/DevicesFactory.cpp new file mode 100644 index 0000000000..cb8a3c3e97 --- /dev/null +++ b/audio/core/4.0/default/DevicesFactory.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "DevicesFactoryHAL" + +#include "core/4.0/default/DevicesFactory.h" +#include "core/4.0/default/Device.h" +#include "core/4.0/default/PrimaryDevice.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/ParametersUtil.cpp b/audio/core/4.0/default/ParametersUtil.cpp new file mode 100644 index 0000000000..5c1b1c4b18 --- /dev/null +++ b/audio/core/4.0/default/ParametersUtil.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2017 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. + */ + +#include "core/4.0/default/ParametersUtil.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/PrimaryDevice.cpp b/audio/core/4.0/default/PrimaryDevice.cpp new file mode 100644 index 0000000000..0294b4d0d4 --- /dev/null +++ b/audio/core/4.0/default/PrimaryDevice.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "PrimaryDeviceHAL" + +#include "core/4.0/default/PrimaryDevice.h" +#include "core/all-versions/default/Util.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/Stream.cpp b/audio/core/4.0/default/Stream.cpp new file mode 100644 index 0000000000..30b34544d6 --- /dev/null +++ b/audio/core/4.0/default/Stream.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "StreamHAL" + +#include "core/4.0/default/Stream.h" +#include "common/all-versions/default/EffectMap.h" +#include "core/4.0/default/Conversions.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/StreamIn.cpp b/audio/core/4.0/default/StreamIn.cpp new file mode 100644 index 0000000000..18719b5da2 --- /dev/null +++ b/audio/core/4.0/default/StreamIn.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "StreamInHAL" + +#include "core/4.0/default/StreamIn.h" +#include "core/all-versions/default/Util.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/StreamOut.cpp b/audio/core/4.0/default/StreamOut.cpp new file mode 100644 index 0000000000..11c8fde663 --- /dev/null +++ b/audio/core/4.0/default/StreamOut.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "StreamOutHAL" + +#include "core/4.0/default/StreamOut.h" +#include "core/all-versions/default/Util.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION diff --git a/audio/core/4.0/default/include/core/4.0/default/Conversions.h b/audio/core/4.0/default/include/core/4.0/default/Conversions.h new file mode 100644 index 0000000000..32c2f887ee --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/Conversions.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_CONVERSIONS_H_ +#define ANDROID_HARDWARE_AUDIO_V4_0_CONVERSIONS_H_ + +#include + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_CONVERSIONS_H_ diff --git a/audio/core/4.0/default/include/core/4.0/default/Device.h b/audio/core/4.0/default/include/core/4.0/default/Device.h new file mode 100644 index 0000000000..770d606720 --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/Device.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_DEVICE_H +#define ANDROID_HARDWARE_AUDIO_V4_0_DEVICE_H + +#include + +#include "ParametersUtil.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_DEVICE_H diff --git a/audio/core/4.0/default/include/core/4.0/default/DevicesFactory.h b/audio/core/4.0/default/include/core/4.0/default/DevicesFactory.h new file mode 100644 index 0000000000..200e59d96f --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/DevicesFactory.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_DEVICESFACTORY_H +#define ANDROID_HARDWARE_AUDIO_V4_0_DEVICESFACTORY_H + +#include + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_DEVICESFACTORY_H diff --git a/audio/core/4.0/default/include/core/4.0/default/ParametersUtil.h b/audio/core/4.0/default/include/core/4.0/default/ParametersUtil.h new file mode 100644 index 0000000000..fa31ee9dd3 --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/ParametersUtil.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_PARAMETERS_UTIL_H_ +#define ANDROID_HARDWARE_AUDIO_V4_0_PARAMETERS_UTIL_H_ + +#include + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_PARAMETERS_UTIL_H_ diff --git a/audio/core/4.0/default/include/core/4.0/default/PrimaryDevice.h b/audio/core/4.0/default/include/core/4.0/default/PrimaryDevice.h new file mode 100644 index 0000000000..e7f846b622 --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/PrimaryDevice.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_PRIMARYDEVICE_H +#define ANDROID_HARDWARE_AUDIO_V4_0_PRIMARYDEVICE_H + +#include + +#include "Device.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_PRIMARYDEVICE_H diff --git a/audio/core/4.0/default/include/core/4.0/default/Stream.h b/audio/core/4.0/default/include/core/4.0/default/Stream.h new file mode 100644 index 0000000000..afad80fe53 --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/Stream.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_STREAM_H +#define ANDROID_HARDWARE_AUDIO_V4_0_STREAM_H + +#include + +#include "ParametersUtil.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_STREAM_H diff --git a/audio/core/4.0/default/include/core/4.0/default/StreamIn.h b/audio/core/4.0/default/include/core/4.0/default/StreamIn.h new file mode 100644 index 0000000000..151f03fc2b --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/StreamIn.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_STREAMIN_H +#define ANDROID_HARDWARE_AUDIO_V4_0_STREAMIN_H + +#include + +#include "Device.h" +#include "Stream.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_STREAMIN_H diff --git a/audio/core/4.0/default/include/core/4.0/default/StreamOut.h b/audio/core/4.0/default/include/core/4.0/default/StreamOut.h new file mode 100644 index 0000000000..dbf3bd16ce --- /dev/null +++ b/audio/core/4.0/default/include/core/4.0/default/StreamOut.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 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. + */ + +#ifndef ANDROID_HARDWARE_AUDIO_V4_0_STREAMOUT_H +#define ANDROID_HARDWARE_AUDIO_V4_0_STREAMOUT_H + +#include + +#include "Device.h" +#include "Stream.h" + +#define AUDIO_HAL_VERSION V4_0 +#include +#undef AUDIO_HAL_VERSION + +#endif // ANDROID_HARDWARE_AUDIO_V4_0_STREAMOUT_H diff --git a/audio/core/all-versions/default/Android.bp b/audio/core/all-versions/default/Android.bp index 214b8d5b26..bb02863ba6 100644 --- a/audio/core/all-versions/default/Android.bp +++ b/audio/core/all-versions/default/Android.bp @@ -1,7 +1,6 @@ cc_library_headers { name: "android.hardware.audio.core@all-versions-impl", relative_install_path: "hw", - proprietary: true, vendor: true, defaults: ["hidl_defaults"], diff --git a/audio/core/all-versions/default/include/core/all-versions/default/Device.h b/audio/core/all-versions/default/include/core/all-versions/default/Device.h index 224823c8aa..eb53b482b2 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/Device.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/Device.h @@ -25,6 +25,8 @@ #include +#include + namespace android { namespace hardware { namespace audio { @@ -39,6 +41,9 @@ using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPatchHandle; using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPort; using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioPortConfig; using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioSource; +using ::android::hardware::audio::common::AUDIO_HAL_VERSION::implementation::AudioInputFlagBitfield; +using ::android::hardware::audio::common::AUDIO_HAL_VERSION::implementation:: + AudioOutputFlagBitfield; using ::android::hardware::audio::AUDIO_HAL_VERSION::DeviceAddress; using ::android::hardware::audio::AUDIO_HAL_VERSION::IDevice; using ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamIn; @@ -51,6 +56,11 @@ using ::android::hardware::hidl_vec; using ::android::hardware::hidl_string; using ::android::sp; +#ifdef AUDIO_HAL_VERSION_4_0 +using ::android::hardware::audio::AUDIO_HAL_VERSION::SourceMetadata; +using ::android::hardware::audio::AUDIO_HAL_VERSION::SinkMetadata; +#endif + struct Device : public IDevice, public ParametersUtil { explicit Device(audio_hw_device_t* device); @@ -64,12 +74,26 @@ struct Device : public IDevice, public ParametersUtil { Return getMasterMute(getMasterMute_cb _hidl_cb) override; Return getInputBufferSize(const AudioConfig& config, getInputBufferSize_cb _hidl_cb) override; + + // V2 openInputStream is called by V4 input stream thus present in both versions + Return openInputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, AudioInputFlagBitfield flags, + AudioSource source, openInputStream_cb _hidl_cb); +#ifdef AUDIO_HAL_VERSION_2_0 Return openOutputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioOutputFlag flags, + const AudioConfig& config, AudioOutputFlagBitfield flags, + openOutputStream_cb _hidl_cb) override; +#elif defined(AUDIO_HAL_VERSION_4_0) + Return openOutputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, AudioOutputFlagBitfield flags, + const SourceMetadata& sourceMetadata, openOutputStream_cb _hidl_cb) override; Return openInputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioInputFlag flags, - AudioSource source, openInputStream_cb _hidl_cb) override; + const AudioConfig& config, AudioInputFlagBitfield flags, + const SinkMetadata& sinkMetadata, + openInputStream_cb _hidl_cb) override; +#endif + Return supportsAudioPatches() override; Return createAudioPatch(const hidl_vec& sources, const hidl_vec& sinks, @@ -77,12 +101,27 @@ struct Device : public IDevice, public ParametersUtil { Return releaseAudioPatch(int32_t patch) override; Return getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) override; Return setAudioPortConfig(const AudioPortConfig& config) override; - Return getHwAvSync() override; + Return setScreenState(bool turnedOn) override; + +#ifdef AUDIO_HAL_VERSION_2_0 + Return getHwAvSync() override; Return getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) override; Return setParameters(const hidl_vec& parameters) override; Return debugDump(const hidl_handle& fd) override; +#elif defined(AUDIO_HAL_VERSION_4_0) + Return getHwAvSync(getHwAvSync_cb _hidl_cb) override; + Return getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) override; + Return setParameters(const hidl_vec& context, + const hidl_vec& parameters) override; + Return getMicrophones(getMicrophones_cb _hidl_cb) override; + Return setConnectedState(const DeviceAddress& address, bool connected) override; +#endif + + Return debug(const hidl_handle& fd, const hidl_vec& options) override; // Utility methods for extending interfaces. Result analyzeStatus(const char* funcName, int status); diff --git a/audio/core/all-versions/default/include/core/all-versions/default/Device.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/Device.impl.h index b2950825ba..fb4b686c43 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/Device.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/Device.impl.h @@ -147,7 +147,10 @@ Return Device::getInputBufferSize(const AudioConfig& config, getInputBuffe } Return Device::openOutputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioOutputFlag flags, + const AudioConfig& config, AudioOutputFlagBitfield flags, +#ifdef AUDIO_HAL_VERSION_4_0 + const SourceMetadata& /* sourceMetadata */, +#endif openOutputStream_cb _hidl_cb) { audio_config_t halConfig; HidlUtils::audioConfigToHal(config, &halConfig); @@ -174,7 +177,7 @@ Return Device::openOutputStream(int32_t ioHandle, const DeviceAddress& dev } Return Device::openInputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioInputFlag flags, + const AudioConfig& config, AudioInputFlagBitfield flags, AudioSource source, openInputStream_cb _hidl_cb) { audio_config_t halConfig; HidlUtils::audioConfigToHal(config, &halConfig); @@ -201,6 +204,24 @@ Return Device::openInputStream(int32_t ioHandle, const DeviceAddress& devi return Void(); } +#ifdef AUDIO_HAL_VERSION_4_0 +Return Device::openInputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, AudioInputFlagBitfield flags, + const SinkMetadata& sinkMetadata, + openInputStream_cb _hidl_cb) { + if (sinkMetadata.tracks.size() == 0) { + // This should never happen, the framework must not create as stream + // if there is no client + ALOGE("openInputStream called without tracks connected"); + _hidl_cb(Result::INVALID_ARGUMENTS, nullptr, AudioConfig()); + return Void(); + } + // Pick the first one as the main until the legacy API is update + AudioSource source = sinkMetadata.tracks[0].source; + return openInputStream(ioHandle, device, config, flags, source, _hidl_cb); +} +#endif + Return Device::supportsAudioPatches() { return version() >= AUDIO_DEVICE_API_VERSION_3_0; } @@ -256,32 +277,72 @@ Return Device::setAudioPortConfig(const AudioPortConfig& config) { return Result::NOT_SUPPORTED; } +#ifdef AUDIO_HAL_VERSION_2_0 Return Device::getHwAvSync() { int halHwAvSync; Result retval = getParam(AudioParameter::keyHwAvSync, &halHwAvSync); return retval == Result::OK ? halHwAvSync : AUDIO_HW_SYNC_INVALID; } +#elif defined(AUDIO_HAL_VERSION_4_0) +Return Device::getHwAvSync(getHwAvSync_cb _hidl_cb) { + int halHwAvSync; + Result retval = getParam(AudioParameter::keyHwAvSync, &halHwAvSync); + _hidl_cb(retval, halHwAvSync); + return Void(); +} +#endif Return Device::setScreenState(bool turnedOn) { return setParam(AudioParameter::keyScreenState, turnedOn); } +#ifdef AUDIO_HAL_VERSION_2_0 Return Device::getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) { - getParametersImpl(keys, _hidl_cb); + getParametersImpl({}, keys, _hidl_cb); return Void(); } Return Device::setParameters(const hidl_vec& parameters) { - return setParametersImpl(parameters); + return setParametersImpl({} /* context */, parameters); } +#elif defined(AUDIO_HAL_VERSION_4_0) +Return Device::getParameters(const hidl_vec& context, + const hidl_vec& keys, getParameters_cb _hidl_cb) { + getParametersImpl(context, keys, _hidl_cb); + return Void(); +} +Return Device::setParameters(const hidl_vec& context, + const hidl_vec& parameters) { + return setParametersImpl(context, parameters); +} +#endif +#ifdef AUDIO_HAL_VERSION_2_0 Return Device::debugDump(const hidl_handle& fd) { + return debug(fd, {}); +} +#endif + +Return Device::debug(const hidl_handle& fd, const hidl_vec& /* options */) { if (fd.getNativeHandle() != nullptr && fd->numFds == 1) { analyzeStatus("dump", mDevice->dump(mDevice, fd->data[0])); } return Void(); } +#ifdef AUDIO_HAL_VERSION_4_0 +Return Device::getMicrophones(getMicrophones_cb _hidl_cb) { + // TODO return device microphones + _hidl_cb(Result::NOT_SUPPORTED, {}); + return Void(); +} + +Return Device::setConnectedState(const DeviceAddress& address, bool connected) { + auto key = connected ? AudioParameter::keyStreamConnect : AudioParameter::keyStreamDisconnect; + return setParam(key, address); +} +#endif + } // namespace implementation } // namespace AUDIO_HAL_VERSION } // namespace audio diff --git a/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.h b/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.h index 769adaa1e9..1509ad170c 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.h @@ -37,11 +37,19 @@ using ::android::hardware::hidl_string; using ::android::sp; struct DevicesFactory : public IDevicesFactory { - // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IDevicesFactory follow. +#ifdef AUDIO_HAL_VERSION_2_0 Return openDevice(IDevicesFactory::Device device, openDevice_cb _hidl_cb) override; +#endif +#ifdef AUDIO_HAL_VERSION_4_0 + Return openDevice(const hidl_string& device, openDevice_cb _hidl_cb) override; + Return openPrimaryDevice(openPrimaryDevice_cb _hidl_cb) override; +#endif private: - static const char* deviceToString(IDevicesFactory::Device device); + template + Return openDevice(const char* moduleName, Callback _hidl_cb); + Return openDevice(const char* moduleName, openDevice_cb _hidl_cb); + static int loadAudioInterface(const char* if_name, audio_hw_device_t** dev); }; diff --git a/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.impl.h index 014b4d8043..43e5d6eaed 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/DevicesFactory.impl.h @@ -26,21 +26,54 @@ namespace audio { namespace AUDIO_HAL_VERSION { namespace implementation { -// static -const char* DevicesFactory::deviceToString(IDevicesFactory::Device device) { +#ifdef AUDIO_HAL_VERSION_2_0 +Return DevicesFactory::openDevice(IDevicesFactory::Device device, openDevice_cb _hidl_cb) { switch (device) { case IDevicesFactory::Device::PRIMARY: - return AUDIO_HARDWARE_MODULE_ID_PRIMARY; + return openDevice(AUDIO_HARDWARE_MODULE_ID_PRIMARY, _hidl_cb); case IDevicesFactory::Device::A2DP: - return AUDIO_HARDWARE_MODULE_ID_A2DP; + return openDevice(AUDIO_HARDWARE_MODULE_ID_A2DP, _hidl_cb); case IDevicesFactory::Device::USB: - return AUDIO_HARDWARE_MODULE_ID_USB; + return openDevice(AUDIO_HARDWARE_MODULE_ID_USB, _hidl_cb); case IDevicesFactory::Device::R_SUBMIX: - return AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX; + return openDevice(AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX, _hidl_cb); case IDevicesFactory::Device::STUB: - return AUDIO_HARDWARE_MODULE_ID_STUB; + return openDevice(AUDIO_HARDWARE_MODULE_ID_STUB, _hidl_cb); } - return nullptr; + _hidl_cb(Result::INVALID_ARGUMENTS, nullptr); + return Void(); +} +#endif +#ifdef AUDIO_HAL_VERSION_4_0 +Return DevicesFactory::openDevice(const hidl_string& moduleName, openDevice_cb _hidl_cb) { + if (moduleName == AUDIO_HARDWARE_MODULE_ID_PRIMARY) { + return openDevice(moduleName.c_str(), _hidl_cb); + } + return openDevice(moduleName.c_str(), _hidl_cb); +} +Return DevicesFactory::openPrimaryDevice(openPrimaryDevice_cb _hidl_cb) { + return openDevice(AUDIO_HARDWARE_MODULE_ID_PRIMARY, _hidl_cb); +} +#endif + +Return DevicesFactory::openDevice(const char* moduleName, openDevice_cb _hidl_cb) { + return openDevice(moduleName, _hidl_cb); +} + +template +Return DevicesFactory::openDevice(const char* moduleName, Callback _hidl_cb) { + audio_hw_device_t* halDevice; + Result retval(Result::INVALID_ARGUMENTS); + sp result; + int halStatus = loadAudioInterface(moduleName, &halDevice); + if (halStatus == OK) { + result = new DeviceShim(halDevice); + retval = Result::OK; + } else if (halStatus == -EINVAL) { + retval = Result::NOT_INITIALIZED; + } + _hidl_cb(retval, result); + return Void(); } // static @@ -73,30 +106,6 @@ out: return rc; } -// Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IDevicesFactory follow. -Return DevicesFactory::openDevice(IDevicesFactory::Device device, openDevice_cb _hidl_cb) { - audio_hw_device_t* halDevice; - Result retval(Result::INVALID_ARGUMENTS); - sp result; - const char* moduleName = deviceToString(device); - if (moduleName != nullptr) { - int halStatus = loadAudioInterface(moduleName, &halDevice); - if (halStatus == OK) { - if (device == IDevicesFactory::Device::PRIMARY) { - result = new PrimaryDevice(halDevice); - } else { - result = new ::android::hardware::audio::AUDIO_HAL_VERSION::implementation::Device( - halDevice); - } - retval = Result::OK; - } else if (halStatus == -EINVAL) { - retval = Result::NOT_INITIALIZED; - } - } - _hidl_cb(retval, result); - return Void(); -} - IDevicesFactory* HIDL_FETCH_IDevicesFactory(const char* /* name */) { return new DevicesFactory(); } diff --git a/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.h b/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.h index df5adeefc1..a27ac25d43 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.h @@ -28,6 +28,7 @@ namespace audio { namespace AUDIO_HAL_VERSION { namespace implementation { +using ::android::hardware::audio::AUDIO_HAL_VERSION::DeviceAddress; using ::android::hardware::audio::AUDIO_HAL_VERSION::ParameterValue; using ::android::hardware::audio::AUDIO_HAL_VERSION::Result; using ::android::hardware::hidl_string; @@ -37,16 +38,18 @@ class ParametersUtil { public: Result getParam(const char* name, bool* value); Result getParam(const char* name, int* value); - Result getParam(const char* name, String8* value); + Result getParam(const char* name, String8* value, AudioParameter context = {}); void getParametersImpl( - const hidl_vec& keys, + const hidl_vec& context, const hidl_vec& keys, std::function& parameters)> cb); std::unique_ptr getParams(const AudioParameter& keys); Result setParam(const char* name, bool value); Result setParam(const char* name, int value); - Result setParam(const char* name, const char* value); - Result setParametersImpl(const hidl_vec& parameters); + Result setParam(const char* name, float value); + Result setParametersImpl(const hidl_vec& context, + const hidl_vec& parameters); Result setParams(const AudioParameter& param); + Result setParam(const char* name, const DeviceAddress& address); protected: virtual ~ParametersUtil() {} diff --git a/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.impl.h index a858a488eb..3907284048 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/ParametersUtil.impl.h @@ -15,6 +15,8 @@ */ #include +#include +#include namespace android { namespace hardware { @@ -62,18 +64,20 @@ Result ParametersUtil::getParam(const char* name, int* value) { return getHalStatusToResult(params->getInt(halName, *value)); } -Result ParametersUtil::getParam(const char* name, String8* value) { +Result ParametersUtil::getParam(const char* name, String8* value, AudioParameter context) { const String8 halName(name); - AudioParameter keys; - keys.addKey(halName); - std::unique_ptr params = getParams(keys); + context.addKey(halName); + std::unique_ptr params = getParams(context); return getHalStatusToResult(params->get(halName, *value)); } void ParametersUtil::getParametersImpl( - const hidl_vec& keys, + const hidl_vec& context, const hidl_vec& keys, std::function& parameters)> cb) { AudioParameter halKeys; + for (auto& pair : context) { + halKeys.add(String8(pair.key.c_str()), String8(pair.value.c_str())); + } for (size_t i = 0; i < keys.size(); ++i) { halKeys.addKey(String8(keys[i].c_str())); } @@ -120,19 +124,28 @@ Result ParametersUtil::setParam(const char* name, int value) { return setParams(param); } -Result ParametersUtil::setParam(const char* name, const char* value) { +Result ParametersUtil::setParam(const char* name, float value) { AudioParameter param; - param.add(String8(name), String8(value)); + param.addFloat(String8(name), value); return setParams(param); } -Result ParametersUtil::setParametersImpl(const hidl_vec& parameters) { +Result ParametersUtil::setParametersImpl(const hidl_vec& context, + const hidl_vec& parameters) { AudioParameter params; + for (auto& pair : context) { + params.add(String8(pair.key.c_str()), String8(pair.value.c_str())); + } for (size_t i = 0; i < parameters.size(); ++i) { params.add(String8(parameters[i].key.c_str()), String8(parameters[i].value.c_str())); } return setParams(params); } +Result ParametersUtil::setParam(const char* name, const DeviceAddress& address) { + AudioParameter params(String8(deviceAddressToHal(address).c_str())); + params.addInt(String8(name), int(address.device)); + return setParams(params); +} Result ParametersUtil::setParams(const AudioParameter& param) { int halStatus = halSetParameters(param.toString().string()); diff --git a/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.h b/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.h index 240b2212a2..42996d703e 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.h @@ -59,12 +59,24 @@ struct PrimaryDevice : public IPrimaryDevice { Return getMasterMute(getMasterMute_cb _hidl_cb) override; Return getInputBufferSize(const AudioConfig& config, getInputBufferSize_cb _hidl_cb) override; + Return openOutputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioOutputFlag flags, + const AudioConfig& config, AudioOutputFlagBitfield flags, +#ifdef AUDIO_HAL_VERSION_4_0 + const SourceMetadata& sourceMetadata, +#endif openOutputStream_cb _hidl_cb) override; + Return openInputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioInputFlag flags, - AudioSource source, openInputStream_cb _hidl_cb) override; + const AudioConfig& config, AudioInputFlagBitfield flags, + AudioSource source, openInputStream_cb _hidl_cb); +#ifdef AUDIO_HAL_VERSION_4_0 + Return openInputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, AudioInputFlagBitfield flags, + const SinkMetadata& sinkMetadata, + openInputStream_cb _hidl_cb) override; +#endif + Return supportsAudioPatches() override; Return createAudioPatch(const hidl_vec& sources, const hidl_vec& sinks, @@ -72,12 +84,27 @@ struct PrimaryDevice : public IPrimaryDevice { Return releaseAudioPatch(int32_t patch) override; Return getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) override; Return setAudioPortConfig(const AudioPortConfig& config) override; - Return getHwAvSync() override; + Return setScreenState(bool turnedOn) override; + +#ifdef AUDIO_HAL_VERSION_2_0 + Return getHwAvSync() override; Return getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) override; Return setParameters(const hidl_vec& parameters) override; Return debugDump(const hidl_handle& fd) override; +#elif defined(AUDIO_HAL_VERSION_4_0) + Return getHwAvSync(getHwAvSync_cb _hidl_cb) override; + Return getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) override; + Return setParameters(const hidl_vec& context, + const hidl_vec& parameters) override; + Return getMicrophones(getMicrophones_cb _hidl_cb) override; + Return setConnectedState(const DeviceAddress& address, bool connected) override; +#endif + + Return debug(const hidl_handle& fd, const hidl_vec& options) override; // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IPrimaryDevice follow. Return setVoiceVolume(float volume) override; @@ -91,6 +118,15 @@ struct PrimaryDevice : public IPrimaryDevice { Return getHacEnabled(getHacEnabled_cb _hidl_cb) override; Return setHacEnabled(bool enabled) override; +#ifdef AUDIO_HAL_VERSION_4_0 + Return setBtScoHeadsetDebugName(const hidl_string& name) override; + Return getBtHfpEnabled(getBtHfpEnabled_cb _hidl_cb) override; + Return setBtHfpEnabled(bool enabled) override; + Return setBtHfpSampleRate(uint32_t sampleRateHz) override; + Return setBtHfpVolume(float volume) override; + Return updateRotation(IPrimaryDevice::Rotation rotation) override; +#endif + private: sp mDevice; diff --git a/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.impl.h index 3ce047ac07..f00cac4ee1 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/PrimaryDevice.impl.h @@ -60,17 +60,35 @@ Return PrimaryDevice::getInputBufferSize(const AudioConfig& config, return mDevice->getInputBufferSize(config, _hidl_cb); } +#ifdef AUDIO_HAL_VERSION_2_0 Return PrimaryDevice::openOutputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioOutputFlag flags, + const AudioConfig& config, + AudioOutputFlagBitfield flags, openOutputStream_cb _hidl_cb) { return mDevice->openOutputStream(ioHandle, device, config, flags, _hidl_cb); } Return PrimaryDevice::openInputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, AudioInputFlag flags, + const AudioConfig& config, AudioInputFlagBitfield flags, AudioSource source, openInputStream_cb _hidl_cb) { return mDevice->openInputStream(ioHandle, device, config, flags, source, _hidl_cb); } +#elif defined(AUDIO_HAL_VERSION_4_0) +Return PrimaryDevice::openOutputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, + AudioOutputFlagBitfield flags, + const SourceMetadata& sourceMetadata, + openOutputStream_cb _hidl_cb) { + return mDevice->openOutputStream(ioHandle, device, config, flags, sourceMetadata, _hidl_cb); +} + +Return PrimaryDevice::openInputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, AudioInputFlagBitfield flags, + const SinkMetadata& sinkMetadata, + openInputStream_cb _hidl_cb) { + return mDevice->openInputStream(ioHandle, device, config, flags, sinkMetadata, _hidl_cb); +} +#endif Return PrimaryDevice::supportsAudioPatches() { return mDevice->supportsAudioPatches(); @@ -94,14 +112,15 @@ Return PrimaryDevice::setAudioPortConfig(const AudioPortConfig& config) return mDevice->setAudioPortConfig(config); } -Return PrimaryDevice::getHwAvSync() { - return mDevice->getHwAvSync(); -} - Return PrimaryDevice::setScreenState(bool turnedOn) { return mDevice->setScreenState(turnedOn); } +#ifdef AUDIO_HAL_VERSION_2_0 +Return PrimaryDevice::getHwAvSync() { + return mDevice->getHwAvSync(); +} + Return PrimaryDevice::getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) { return mDevice->getParameters(keys, _hidl_cb); @@ -114,6 +133,26 @@ Return PrimaryDevice::setParameters(const hidl_vec& para Return PrimaryDevice::debugDump(const hidl_handle& fd) { return mDevice->debugDump(fd); } +#elif defined(AUDIO_HAL_VERSION_4_0) +Return PrimaryDevice::getHwAvSync(getHwAvSync_cb _hidl_cb) { + return mDevice->getHwAvSync(_hidl_cb); +} +Return PrimaryDevice::getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) { + return mDevice->getParameters(context, keys, _hidl_cb); +} +Return PrimaryDevice::setParameters(const hidl_vec& context, + const hidl_vec& parameters) { + return mDevice->setParameters(context, parameters); +} +Return PrimaryDevice::getMicrophones(getMicrophones_cb _hidl_cb) { + return mDevice->getMicrophones(_hidl_cb); +} +Return PrimaryDevice::setConnectedState(const DeviceAddress& address, bool connected) { + return mDevice->setConnectedState(address, connected); +} +#endif // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IPrimaryDevice follow. Return PrimaryDevice::setVoiceVolume(float volume) { @@ -188,6 +227,35 @@ Return PrimaryDevice::setHacEnabled(bool enabled) { return mDevice->setParam(AUDIO_PARAMETER_KEY_HAC, enabled); } +#ifdef AUDIO_HAL_VERSION_4_0 +Return PrimaryDevice::setBtScoHeadsetDebugName(const hidl_string& name) { + return mDevice->setParam(AUDIO_PARAMETER_KEY_BT_SCO_HEADSET_NAME, name.c_str()); +} +Return PrimaryDevice::getBtHfpEnabled(getBtHfpEnabled_cb _hidl_cb) { + bool enabled; + Result retval = mDevice->getParam(AUDIO_PARAMETER_KEY_HFP_ENABLE, &enabled); + _hidl_cb(retval, enabled); + return Void(); +} +Return PrimaryDevice::setBtHfpEnabled(bool enabled) { + return mDevice->setParam(AUDIO_PARAMETER_KEY_HFP_ENABLE, enabled); +} +Return PrimaryDevice::setBtHfpSampleRate(uint32_t sampleRateHz) { + return mDevice->setParam(AUDIO_PARAMETER_KEY_HFP_SET_SAMPLING_RATE, int(sampleRateHz)); +} +Return PrimaryDevice::setBtHfpVolume(float volume) { + return mDevice->setParam(AUDIO_PARAMETER_KEY_HFP_VOLUME, volume); +} +Return PrimaryDevice::updateRotation(IPrimaryDevice::Rotation rotation) { + // legacy API expects the rotation in degree + return mDevice->setParam(AUDIO_PARAMETER_KEY_ROTATION, int(rotation) * 90); +} +#endif + +Return PrimaryDevice::debug(const hidl_handle& fd, const hidl_vec& options) { + return mDevice->debug(fd, options); +} + } // namespace implementation } // namespace AUDIO_HAL_VERSION } // namespace audio diff --git a/audio/core/all-versions/default/include/core/all-versions/default/Stream.h b/audio/core/all-versions/default/include/core/all-versions/default/Stream.h index 4196dec7df..6f79429c61 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/Stream.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/Stream.h @@ -23,6 +23,8 @@ #include +#include + namespace android { namespace hardware { namespace audio { @@ -32,6 +34,7 @@ namespace implementation { using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioChannelMask; using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioDevice; using ::android::hardware::audio::common::AUDIO_HAL_VERSION::AudioFormat; +using ::android::hardware::audio::common::AUDIO_HAL_VERSION::implementation::AudioChannelBitfield; using ::android::hardware::audio::AUDIO_HAL_VERSION::DeviceAddress; using ::android::hardware::audio::AUDIO_HAL_VERSION::IStream; using ::android::hardware::audio::AUDIO_HAL_VERSION::ParameterValue; @@ -57,11 +60,15 @@ struct Stream : public IStream, public ParametersUtil { Return getFrameCount() override; Return getBufferSize() override; Return getSampleRate() override; +#ifdef AUDIO_HAL_VERSION_2_0 Return getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb) override; - Return setSampleRate(uint32_t sampleRateHz) override; - Return getChannelMask() override; Return getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) override; - Return setChannelMask(AudioChannelMask mask) override; +#endif + Return getSupportedSampleRates(AudioFormat format, getSupportedSampleRates_cb _hidl_cb); + Return getSupportedChannelMasks(AudioFormat format, getSupportedChannelMasks_cb _hidl_cb); + Return setSampleRate(uint32_t sampleRateHz) override; + Return getChannelMask() override; + Return setChannelMask(AudioChannelBitfield mask) override; Return getFormat() override; Return getSupportedFormats(getSupportedFormats_cb _hidl_cb) override; Return setFormat(AudioFormat format) override; @@ -69,20 +76,34 @@ struct Stream : public IStream, public ParametersUtil { Return addEffect(uint64_t effectId) override; Return removeEffect(uint64_t effectId) override; Return standby() override; +#ifdef AUDIO_HAL_VERSION_2_0 Return getDevice() override; Return setDevice(const DeviceAddress& address) override; - Return setConnectedState(const DeviceAddress& address, bool connected) override; - Return setHwAvSync(uint32_t hwAvSync) override; Return getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) override; Return setParameters(const hidl_vec& parameters) override; - Return debugDump(const hidl_handle& fd) override; + Return setConnectedState(const DeviceAddress& address, bool connected) override; +#elif defined(AUDIO_HAL_VERSION_4_0) + Return getDevices(getDevices_cb _hidl_cb) override; + Return setDevices(const hidl_vec& devices) override; + Return getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) override; + Return setParameters(const hidl_vec& context, + const hidl_vec& parameters) override; +#endif + Return setHwAvSync(uint32_t hwAvSync) override; Return start() override; Return stop() override; Return createMmapBuffer(int32_t minSizeFrames, createMmapBuffer_cb _hidl_cb) override; Return getMmapPosition(getMmapPosition_cb _hidl_cb) override; Return close() override; + Return debug(const hidl_handle& fd, const hidl_vec& options) override; +#ifdef AUDIO_HAL_VERSION_2_0 + Return debugDump(const hidl_handle& fd) override; +#endif + // Utility methods for extending interfaces. static Result analyzeStatus(const char* funcName, int status); static Result analyzeStatus(const char* funcName, int status, diff --git a/audio/core/all-versions/default/include/core/all-versions/default/Stream.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/Stream.impl.h index 92cff72642..fa0ef45bec 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/Stream.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/Stream.impl.h @@ -100,9 +100,22 @@ Return Stream::getSampleRate() { return mStream->get_sample_rate(mStream); } +#ifdef AUDIO_HAL_VERSION_2_0 Return Stream::getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb) { + return getSupportedSampleRates(getFormat(), _hidl_cb); +} +Return Stream::getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) { + return getSupportedChannelMasks(getFormat(), _hidl_cb); +} +#endif + +Return Stream::getSupportedSampleRates(AudioFormat format, + getSupportedSampleRates_cb _hidl_cb) { + AudioParameter context; + context.addInt(String8(AUDIO_PARAMETER_STREAM_FORMAT), int(format)); String8 halListValue; - Result result = getParam(AudioParameter::keyStreamSupportedSamplingRates, &halListValue); + Result result = + getParam(AudioParameter::keyStreamSupportedSamplingRates, &halListValue, context); hidl_vec sampleRates; SortedVector halSampleRates; if (result == Result::OK) { @@ -110,7 +123,36 @@ Return Stream::getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb samplingRatesFromString(halListValue.string(), AudioParameter::valueListSeparator); sampleRates.setToExternal(halSampleRates.editArray(), halSampleRates.size()); } +#ifdef AUDIO_HAL_VERSION_2_0 _hidl_cb(sampleRates); +#endif +#ifdef AUDIO_HAL_VERSION_4_0 + _hidl_cb(result, sampleRates); +#endif + return Void(); +} + +Return Stream::getSupportedChannelMasks(AudioFormat format, + getSupportedChannelMasks_cb _hidl_cb) { + AudioParameter context; + context.addInt(String8(AUDIO_PARAMETER_STREAM_FORMAT), int(format)); + String8 halListValue; + Result result = getParam(AudioParameter::keyStreamSupportedChannels, &halListValue, context); + hidl_vec channelMasks; + SortedVector halChannelMasks; + if (result == Result::OK) { + halChannelMasks = + channelMasksFromString(halListValue.string(), AudioParameter::valueListSeparator); + channelMasks.resize(halChannelMasks.size()); + for (size_t i = 0; i < halChannelMasks.size(); ++i) { + channelMasks[i] = AudioChannelBitfield(halChannelMasks[i]); + } + } +#ifdef AUDIO_HAL_VERSION_2_0 + _hidl_cb(channelMasks); +#elif defined(AUDIO_HAL_VERSION_4_0) + _hidl_cb(result, channelMasks); +#endif return Void(); } @@ -118,28 +160,11 @@ Return Stream::setSampleRate(uint32_t sampleRateHz) { return setParam(AudioParameter::keySamplingRate, static_cast(sampleRateHz)); } -Return Stream::getChannelMask() { - return AudioChannelMask(mStream->get_channels(mStream)); +Return Stream::getChannelMask() { + return AudioChannelBitfield(mStream->get_channels(mStream)); } -Return Stream::getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) { - String8 halListValue; - Result result = getParam(AudioParameter::keyStreamSupportedChannels, &halListValue); - hidl_vec channelMasks; - SortedVector halChannelMasks; - if (result == Result::OK) { - halChannelMasks = - channelMasksFromString(halListValue.string(), AudioParameter::valueListSeparator); - channelMasks.resize(halChannelMasks.size()); - for (size_t i = 0; i < halChannelMasks.size(); ++i) { - channelMasks[i] = AudioChannelMask(halChannelMasks[i]); - } - } - _hidl_cb(channelMasks); - return Void(); -} - -Return Stream::setChannelMask(AudioChannelMask mask) { +Return Stream::setChannelMask(AudioChannelBitfield mask) { return setParam(AudioParameter::keyChannels, static_cast(mask)); } @@ -171,7 +196,7 @@ Return Stream::getAudioProperties(getAudioProperties_cb _hidl_cb) { uint32_t halSampleRate = mStream->get_sample_rate(mStream); audio_channel_mask_t halMask = mStream->get_channels(mStream); audio_format_t halFormat = mStream->get_format(mStream); - _hidl_cb(halSampleRate, AudioChannelMask(halMask), AudioFormat(halFormat)); + _hidl_cb(halSampleRate, AudioChannelBitfield(halMask), AudioFormat(halFormat)); return Void(); } @@ -200,48 +225,73 @@ Return Stream::standby() { return analyzeStatus("standby", mStream->standby(mStream)); } +Return Stream::setHwAvSync(uint32_t hwAvSync) { + return setParam(AudioParameter::keyStreamHwAvSync, static_cast(hwAvSync)); +} + +#ifdef AUDIO_HAL_VERSION_2_0 Return Stream::getDevice() { - int device; + int device = 0; Result retval = getParam(AudioParameter::keyRouting, &device); return retval == Result::OK ? static_cast(device) : AudioDevice::NONE; } Return Stream::setDevice(const DeviceAddress& address) { - char* halDeviceAddress = audio_device_address_to_parameter( - static_cast(address.device), deviceAddressToHal(address).c_str()); - AudioParameter params((String8(halDeviceAddress))); - free(halDeviceAddress); - params.addInt(String8(AudioParameter::keyRouting), - static_cast(address.device)); - return setParams(params); + return setParam(AudioParameter::keyRouting, address); +} + +Return Stream::getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) { + getParametersImpl({} /* context */, keys, _hidl_cb); + return Void(); +} + +Return Stream::setParameters(const hidl_vec& parameters) { + return setParametersImpl({} /* context */, parameters); } Return Stream::setConnectedState(const DeviceAddress& address, bool connected) { return setParam( connected ? AudioParameter::keyStreamConnect : AudioParameter::keyStreamDisconnect, - deviceAddressToHal(address).c_str()); + address); } - -Return Stream::setHwAvSync(uint32_t hwAvSync) { - return setParam(AudioParameter::keyStreamHwAvSync, static_cast(hwAvSync)); -} - -Return Stream::getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) { - getParametersImpl(keys, _hidl_cb); - return Void(); -} - -Return Stream::setParameters(const hidl_vec& parameters) { - return setParametersImpl(parameters); -} - -Return Stream::debugDump(const hidl_handle& fd) { - if (fd.getNativeHandle() != nullptr && fd->numFds == 1) { - analyzeStatus("dump", mStream->dump(mStream, fd->data[0])); +#elif defined(AUDIO_HAL_VERSION_4_0) +Return Stream::getDevices(getDevices_cb _hidl_cb) { + int device = 0; + Result retval = getParam(AudioParameter::keyRouting, &device); + hidl_vec devices; + if (retval == Result::OK) { + devices.resize(1); + devices[0].device = static_cast(device); } + _hidl_cb(retval, devices); return Void(); } +Return Stream::setDevices(const hidl_vec& devices) { + // FIXME: can the legacy API set multiple device with address ? + if (devices.size() > 1) { + return Result::NOT_SUPPORTED; + } + DeviceAddress address; + if (devices.size() == 1) { + address = devices[0]; + } else { + address.device = AudioDevice::NONE; + } + return setParam(AudioParameter::keyRouting, address); +} +Return Stream::getParameters(const hidl_vec& context, + const hidl_vec& keys, getParameters_cb _hidl_cb) { + getParametersImpl(context, keys, _hidl_cb); + return Void(); +} + +Return Stream::setParameters(const hidl_vec& context, + const hidl_vec& parameters) { + return setParametersImpl(context, parameters); +} +#endif + Return Stream::start() { return Result::NOT_SUPPORTED; } @@ -269,6 +319,19 @@ Return Stream::close() { return Result::NOT_SUPPORTED; } +Return Stream::debug(const hidl_handle& fd, const hidl_vec& /* options */) { + if (fd.getNativeHandle() != nullptr && fd->numFds == 1) { + analyzeStatus("dump", mStream->dump(mStream, fd->data[0])); + } + return Void(); +} + +#ifdef AUDIO_HAL_VERSION_2_0 +Return Stream::debugDump(const hidl_handle& fd) { + return debug(fd, {} /* options */); +} +#endif + } // namespace implementation } // namespace AUDIO_HAL_VERSION } // namespace audio diff --git a/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.h b/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.h index 7380dae108..f226e63f70 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.h @@ -58,11 +58,15 @@ struct StreamIn : public IStreamIn { Return getFrameCount() override; Return getBufferSize() override; Return getSampleRate() override; +#ifdef AUDIO_HAL_VERSION_2_0 Return getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb) override; - Return setSampleRate(uint32_t sampleRateHz) override; - Return getChannelMask() override; Return getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) override; - Return setChannelMask(AudioChannelMask mask) override; +#endif + Return getSupportedSampleRates(AudioFormat format, getSupportedSampleRates_cb _hidl_cb); + Return getSupportedChannelMasks(AudioFormat format, getSupportedChannelMasks_cb _hidl_cb); + Return setSampleRate(uint32_t sampleRateHz) override; + Return getChannelMask() override; + Return setChannelMask(AudioChannelBitfield mask) override; Return getFormat() override; Return getSupportedFormats(getSupportedFormats_cb _hidl_cb) override; Return setFormat(AudioFormat format) override; @@ -70,16 +74,30 @@ struct StreamIn : public IStreamIn { Return addEffect(uint64_t effectId) override; Return removeEffect(uint64_t effectId) override; Return standby() override; +#ifdef AUDIO_HAL_VERSION_2_0 Return getDevice() override; Return setDevice(const DeviceAddress& address) override; - Return setConnectedState(const DeviceAddress& address, bool connected) override; - Return setHwAvSync(uint32_t hwAvSync) override; Return getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) override; Return setParameters(const hidl_vec& parameters) override; - Return debugDump(const hidl_handle& fd) override; + Return setConnectedState(const DeviceAddress& address, bool connected) override; +#elif defined(AUDIO_HAL_VERSION_4_0) + Return getDevices(getDevices_cb _hidl_cb) override; + Return setDevices(const hidl_vec& devices) override; + Return getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) override; + Return setParameters(const hidl_vec& context, + const hidl_vec& parameters) override; +#endif + Return setHwAvSync(uint32_t hwAvSync) override; Return close() override; + Return debug(const hidl_handle& fd, const hidl_vec& options) override; +#ifdef AUDIO_HAL_VERSION_2_0 + Return debugDump(const hidl_handle& fd) override; +#endif + // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamIn follow. Return getAudioSource(getAudioSource_cb _hidl_cb) override; Return setGain(float gain) override; @@ -91,6 +109,10 @@ struct StreamIn : public IStreamIn { Return stop() override; Return createMmapBuffer(int32_t minSizeFrames, createMmapBuffer_cb _hidl_cb) override; Return getMmapPosition(getMmapPosition_cb _hidl_cb) override; +#ifdef AUDIO_HAL_VERSION_4_0 + Return updateSinkMetadata(const SinkMetadata& sinkMetadata) override; + Return getActiveMicrophones(getActiveMicrophones_cb _hidl_cb) override; +#endif static Result getCapturePositionImpl(audio_stream_in_t* stream, uint64_t* frames, uint64_t* time); diff --git a/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.impl.h index abee225dc7..dcd3df19e6 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/StreamIn.impl.h @@ -179,23 +179,33 @@ Return StreamIn::getSampleRate() { return mStreamCommon->getSampleRate(); } +#ifdef AUDIO_HAL_VERSION_2_0 +Return StreamIn::getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) { + return mStreamCommon->getSupportedChannelMasks(_hidl_cb); +} Return StreamIn::getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb) { return mStreamCommon->getSupportedSampleRates(_hidl_cb); } +#endif + +Return StreamIn::getSupportedChannelMasks(AudioFormat format, + getSupportedChannelMasks_cb _hidl_cb) { + return mStreamCommon->getSupportedChannelMasks(format, _hidl_cb); +} +Return StreamIn::getSupportedSampleRates(AudioFormat format, + getSupportedSampleRates_cb _hidl_cb) { + return mStreamCommon->getSupportedSampleRates(format, _hidl_cb); +} Return StreamIn::setSampleRate(uint32_t sampleRateHz) { return mStreamCommon->setSampleRate(sampleRateHz); } -Return StreamIn::getChannelMask() { +Return StreamIn::getChannelMask() { return mStreamCommon->getChannelMask(); } -Return StreamIn::getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) { - return mStreamCommon->getSupportedChannelMasks(_hidl_cb); -} - -Return StreamIn::setChannelMask(AudioChannelMask mask) { +Return StreamIn::setChannelMask(AudioChannelBitfield mask) { return mStreamCommon->setChannelMask(mask); } @@ -227,6 +237,15 @@ Return StreamIn::standby() { return mStreamCommon->standby(); } +Return StreamIn::setHwAvSync(uint32_t hwAvSync) { + return mStreamCommon->setHwAvSync(hwAvSync); +} + +#ifdef AUDIO_HAL_VERSION_2_0 +Return StreamIn::setConnectedState(const DeviceAddress& address, bool connected) { + return mStreamCommon->setConnectedState(address, connected); +} + Return StreamIn::getDevice() { return mStreamCommon->getDevice(); } @@ -235,14 +254,6 @@ Return StreamIn::setDevice(const DeviceAddress& address) { return mStreamCommon->setDevice(address); } -Return StreamIn::setConnectedState(const DeviceAddress& address, bool connected) { - return mStreamCommon->setConnectedState(address, connected); -} - -Return StreamIn::setHwAvSync(uint32_t hwAvSync) { - return mStreamCommon->setHwAvSync(hwAvSync); -} - Return StreamIn::getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) { return mStreamCommon->getParameters(keys, _hidl_cb); } @@ -254,6 +265,24 @@ Return StreamIn::setParameters(const hidl_vec& parameter Return StreamIn::debugDump(const hidl_handle& fd) { return mStreamCommon->debugDump(fd); } +#elif defined(AUDIO_HAL_VERSION_4_0) +Return StreamIn::getDevices(getDevices_cb _hidl_cb) { + return mStreamCommon->getDevices(_hidl_cb); +} + +Return StreamIn::setDevices(const hidl_vec& devices) { + return mStreamCommon->setDevices(devices); +} +Return StreamIn::getParameters(const hidl_vec& context, + const hidl_vec& keys, getParameters_cb _hidl_cb) { + return mStreamCommon->getParameters(context, keys, _hidl_cb); +} + +Return StreamIn::setParameters(const hidl_vec& context, + const hidl_vec& parameters) { + return mStreamCommon->setParameters(context, parameters); +} +#endif Return StreamIn::start() { return mStreamMmap->start(); @@ -415,6 +444,21 @@ Return StreamIn::getCapturePosition(getCapturePosition_cb _hidl_cb) { return Void(); } +Return StreamIn::debug(const hidl_handle& fd, const hidl_vec& options) { + return mStreamCommon->debug(fd, options); +} + +#ifdef AUDIO_HAL_VERSION_4_0 +Return StreamIn::updateSinkMetadata(const SinkMetadata& /*sinkMetadata*/) { + return Void(); // TODO: propagate to legacy +} + +Return StreamIn::getActiveMicrophones(getActiveMicrophones_cb _hidl_cb) { + _hidl_cb(Result::NOT_SUPPORTED, {}); // TODO: retrieve from legacy + return Void(); +} +#endif + } // namespace implementation } // namespace AUDIO_HAL_VERSION } // namespace audio diff --git a/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.h b/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.h index 4cfe2e33f1..134d7b9bbe 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.h @@ -60,11 +60,15 @@ struct StreamOut : public IStreamOut { Return getFrameCount() override; Return getBufferSize() override; Return getSampleRate() override; +#ifdef AUDIO_HAL_VERSION_2_0 Return getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb) override; - Return setSampleRate(uint32_t sampleRateHz) override; - Return getChannelMask() override; Return getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) override; - Return setChannelMask(AudioChannelMask mask) override; +#endif + Return getSupportedSampleRates(AudioFormat format, getSupportedSampleRates_cb _hidl_cb); + Return getSupportedChannelMasks(AudioFormat format, getSupportedChannelMasks_cb _hidl_cb); + Return setSampleRate(uint32_t sampleRateHz) override; + Return getChannelMask() override; + Return setChannelMask(AudioChannelBitfield mask) override; Return getFormat() override; Return getSupportedFormats(getSupportedFormats_cb _hidl_cb) override; Return setFormat(AudioFormat format) override; @@ -72,16 +76,30 @@ struct StreamOut : public IStreamOut { Return addEffect(uint64_t effectId) override; Return removeEffect(uint64_t effectId) override; Return standby() override; +#ifdef AUDIO_HAL_VERSION_2_0 Return getDevice() override; Return setDevice(const DeviceAddress& address) override; - Return setConnectedState(const DeviceAddress& address, bool connected) override; - Return setHwAvSync(uint32_t hwAvSync) override; Return getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) override; Return setParameters(const hidl_vec& parameters) override; - Return debugDump(const hidl_handle& fd) override; + Return setConnectedState(const DeviceAddress& address, bool connected) override; +#elif defined(AUDIO_HAL_VERSION_4_0) + Return getDevices(getDevices_cb _hidl_cb) override; + Return setDevices(const hidl_vec& devices) override; + Return getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) override; + Return setParameters(const hidl_vec& context, + const hidl_vec& parameters) override; +#endif + Return setHwAvSync(uint32_t hwAvSync) override; Return close() override; + Return debug(const hidl_handle& fd, const hidl_vec& options) override; +#ifdef AUDIO_HAL_VERSION_2_0 + Return debugDump(const hidl_handle& fd) override; +#endif + // Methods from ::android::hardware::audio::AUDIO_HAL_VERSION::IStreamOut follow. Return getLatency() override; Return setVolume(float left, float right) override; @@ -102,6 +120,10 @@ struct StreamOut : public IStreamOut { Return stop() override; Return createMmapBuffer(int32_t minSizeFrames, createMmapBuffer_cb _hidl_cb) override; Return getMmapPosition(getMmapPosition_cb _hidl_cb) override; +#ifdef AUDIO_HAL_VERSION_4_0 + Return updateSourceMetadata(const SourceMetadata& sourceMetadata) override; + Return selectPresentation(int32_t presentationId, int32_t programId) override; +#endif static Result getPresentationPositionImpl(audio_stream_out_t* stream, uint64_t* frames, TimeSpec* timeStamp); diff --git a/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.impl.h b/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.impl.h index bdbeb38288..605b824196 100644 --- a/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.impl.h +++ b/audio/core/all-versions/default/include/core/all-versions/default/StreamOut.impl.h @@ -183,23 +183,33 @@ Return StreamOut::getSampleRate() { return mStreamCommon->getSampleRate(); } +#ifdef AUDIO_HAL_VERSION_2_0 +Return StreamOut::getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) { + return mStreamCommon->getSupportedChannelMasks(_hidl_cb); +} Return StreamOut::getSupportedSampleRates(getSupportedSampleRates_cb _hidl_cb) { return mStreamCommon->getSupportedSampleRates(_hidl_cb); } +#endif + +Return StreamOut::getSupportedChannelMasks(AudioFormat format, + getSupportedChannelMasks_cb _hidl_cb) { + return mStreamCommon->getSupportedChannelMasks(format, _hidl_cb); +} +Return StreamOut::getSupportedSampleRates(AudioFormat format, + getSupportedSampleRates_cb _hidl_cb) { + return mStreamCommon->getSupportedSampleRates(format, _hidl_cb); +} Return StreamOut::setSampleRate(uint32_t sampleRateHz) { return mStreamCommon->setSampleRate(sampleRateHz); } -Return StreamOut::getChannelMask() { +Return StreamOut::getChannelMask() { return mStreamCommon->getChannelMask(); } -Return StreamOut::getSupportedChannelMasks(getSupportedChannelMasks_cb _hidl_cb) { - return mStreamCommon->getSupportedChannelMasks(_hidl_cb); -} - -Return StreamOut::setChannelMask(AudioChannelMask mask) { +Return StreamOut::setChannelMask(AudioChannelBitfield mask) { return mStreamCommon->setChannelMask(mask); } @@ -231,6 +241,15 @@ Return StreamOut::standby() { return mStreamCommon->standby(); } +Return StreamOut::setHwAvSync(uint32_t hwAvSync) { + return mStreamCommon->setHwAvSync(hwAvSync); +} + +#ifdef AUDIO_HAL_VERSION_2_0 +Return StreamOut::setConnectedState(const DeviceAddress& address, bool connected) { + return mStreamCommon->setConnectedState(address, connected); +} + Return StreamOut::getDevice() { return mStreamCommon->getDevice(); } @@ -239,14 +258,6 @@ Return StreamOut::setDevice(const DeviceAddress& address) { return mStreamCommon->setDevice(address); } -Return StreamOut::setConnectedState(const DeviceAddress& address, bool connected) { - return mStreamCommon->setConnectedState(address, connected); -} - -Return StreamOut::setHwAvSync(uint32_t hwAvSync) { - return mStreamCommon->setHwAvSync(hwAvSync); -} - Return StreamOut::getParameters(const hidl_vec& keys, getParameters_cb _hidl_cb) { return mStreamCommon->getParameters(keys, _hidl_cb); @@ -259,6 +270,25 @@ Return StreamOut::setParameters(const hidl_vec& paramete Return StreamOut::debugDump(const hidl_handle& fd) { return mStreamCommon->debugDump(fd); } +#elif defined(AUDIO_HAL_VERSION_4_0) +Return StreamOut::getDevices(getDevices_cb _hidl_cb) { + return mStreamCommon->getDevices(_hidl_cb); +} + +Return StreamOut::setDevices(const hidl_vec& devices) { + return mStreamCommon->setDevices(devices); +} +Return StreamOut::getParameters(const hidl_vec& context, + const hidl_vec& keys, + getParameters_cb _hidl_cb) { + return mStreamCommon->getParameters(context, keys, _hidl_cb); +} + +Return StreamOut::setParameters(const hidl_vec& context, + const hidl_vec& parameters) { + return mStreamCommon->setParameters(context, parameters); +} +#endif Return StreamOut::close() { if (mIsClosed) return Result::INVALID_STATE; @@ -512,6 +542,19 @@ Return StreamOut::getMmapPosition(getMmapPosition_cb _hidl_cb) { return mStreamMmap->getMmapPosition(_hidl_cb); } +Return StreamOut::debug(const hidl_handle& fd, const hidl_vec& options) { + return mStreamCommon->debug(fd, options); +} + +#ifdef AUDIO_HAL_VERSION_4_0 +Return StreamOut::updateSourceMetadata(const SourceMetadata& /*sourceMetadata*/) { + return Void(); // TODO: propagate to legacy +} +Return StreamOut::selectPresentation(int32_t /*presentationId*/, int32_t /*programId*/) { + return Result::NOT_SUPPORTED; // TODO: propagate to legacy +} +#endif + } // namespace implementation } // namespace AUDIO_HAL_VERSION } // namespace audio