diff options
author | Mikhail Naganov <mnaganov@google.com> | 2022-01-15 01:15:12 +0000 |
---|---|---|
committer | Mikhail Naganov <mnaganov@google.com> | 2022-02-05 00:44:17 +0000 |
commit | 8140f5660a6cd15d3e947cb52e6b305c36313151 (patch) | |
tree | bad364f3489c097a7bb9d7295ce6a5f23e5b6008 /audio/core/all-versions/default/Device.cpp | |
parent | 51a7e13849988a91938932231c39a41157953038 (diff) |
Audio HAL V7.1: Update the default implementation
Split versions of "common" and "core" types from
the version of the interfaces. "Common" and "core"
versions are set to 7.0.
Implemented new methods of V7.1 interfaces.
Bug: 214426419
Test: m android.hardware.audio@7.1-impl
Test: m android.hardware.audio@7.0-impl
Test: m android.hardware.audio.effect@7.0-impl
Test: m android.hardware.audio@6.0-impl
Change-Id: Ic4c44d4ac9bbfa7b62695866b9aa7473658390b2
(cherry picked from commit 7d01538eeccf81aa57da61b4abba830d34582195)
Merged-In: Ic4c44d4ac9bbfa7b62695866b9aa7473658390b2
Diffstat (limited to 'audio/core/all-versions/default/Device.cpp')
-rw-r--r-- | audio/core/all-versions/default/Device.cpp | 103 |
1 files changed, 74 insertions, 29 deletions
diff --git a/audio/core/all-versions/default/Device.cpp b/audio/core/all-versions/default/Device.cpp index 130dfba95b..98a59b9ff2 100644 --- a/audio/core/all-versions/default/Device.cpp +++ b/audio/core/all-versions/default/Device.cpp @@ -39,7 +39,10 @@ namespace audio { namespace CPP_VERSION { namespace implementation { -using ::android::hardware::audio::common::CPP_VERSION::implementation::HidlUtils; +using ::android::hardware::audio::common::COMMON_TYPES_CPP_VERSION::implementation::HidlUtils; +namespace util { +using namespace ::android::hardware::audio::CORE_TYPES_CPP_VERSION::implementation::util; +} Device::Device(audio_hw_device_t* device) : mIsClosed(false), mDevice(device) {} @@ -82,7 +85,7 @@ Return<Result> Device::setMasterVolume(float volume) { if (mDevice->set_master_volume == NULL) { return Result::NOT_SUPPORTED; } - if (!isGainNormalized(volume)) { + if (!util::isGainNormalized(volume)) { ALOGW("Can not set a master volume (%f) outside [0,1]", volume); return Result::INVALID_ARGUMENTS; } @@ -148,7 +151,7 @@ Return<void> Device::getInputBufferSize(const AudioConfig& config, getInputBuffe return Void(); } -std::tuple<Result, sp<IStreamOut>> Device::openOutputStreamImpl(int32_t ioHandle, +std::tuple<Result, sp<IStreamOut>> Device::openOutputStreamCore(int32_t ioHandle, const DeviceAddress& device, const AudioConfig& config, const AudioOutputFlags& flags, @@ -185,7 +188,7 @@ std::tuple<Result, sp<IStreamOut>> Device::openOutputStreamImpl(int32_t ioHandle return {analyzeStatus("open_output_stream", status, {EINVAL} /*ignore*/), streamOut}; } -std::tuple<Result, sp<IStreamIn>> Device::openInputStreamImpl( +std::tuple<Result, sp<IStreamIn>> Device::openInputStreamCore( int32_t ioHandle, const DeviceAddress& device, const AudioConfig& config, const AudioInputFlags& flags, AudioSource source, AudioConfig* suggestedConfig) { audio_config_t halConfig; @@ -228,7 +231,7 @@ Return<void> Device::openOutputStream(int32_t ioHandle, const DeviceAddress& dev openOutputStream_cb _hidl_cb) { AudioConfig suggestedConfig; auto [result, streamOut] = - openOutputStreamImpl(ioHandle, device, config, flags, &suggestedConfig); + openOutputStreamCore(ioHandle, device, config, flags, &suggestedConfig); _hidl_cb(result, streamOut, suggestedConfig); return Void(); } @@ -238,57 +241,64 @@ Return<void> Device::openInputStream(int32_t ioHandle, const DeviceAddress& devi AudioSource source, openInputStream_cb _hidl_cb) { AudioConfig suggestedConfig; auto [result, streamIn] = - openInputStreamImpl(ioHandle, device, config, flags, source, &suggestedConfig); + openInputStreamCore(ioHandle, device, config, flags, source, &suggestedConfig); _hidl_cb(result, streamIn, suggestedConfig); return Void(); } #elif MAJOR_VERSION >= 4 -Return<void> Device::openOutputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, -#if MAJOR_VERSION <= 6 - AudioOutputFlags flags, -#else - const AudioOutputFlags& flags, -#endif - const SourceMetadata& sourceMetadata, - openOutputStream_cb _hidl_cb) { +std::tuple<Result, sp<IStreamOut>, AudioConfig> Device::openOutputStreamImpl( + int32_t ioHandle, const DeviceAddress& device, const AudioConfig& config, + const SourceMetadata& sourceMetadata, #if MAJOR_VERSION <= 6 + AudioOutputFlags flags) { if (status_t status = CoreUtils::sourceMetadataToHal(sourceMetadata, nullptr); status != NO_ERROR) { #else + const AudioOutputFlags& flags) { if (status_t status = CoreUtils::sourceMetadataToHalV7(sourceMetadata, false /*ignoreNonVendorTags*/, nullptr); status != NO_ERROR) { #endif - _hidl_cb(analyzeStatus("sourceMetadataToHal", status), nullptr, AudioConfig{}); - return Void(); + return {analyzeStatus("sourceMetadataToHal", status), nullptr, {}}; } AudioConfig suggestedConfig; auto [result, streamOut] = - openOutputStreamImpl(ioHandle, device, config, flags, &suggestedConfig); + openOutputStreamCore(ioHandle, device, config, flags, &suggestedConfig); if (streamOut) { streamOut->updateSourceMetadata(sourceMetadata); } + return {result, streamOut, suggestedConfig}; +} + +Return<void> Device::openOutputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, +#if MAJOR_VERSION <= 6 + AudioOutputFlags flags, +#else + const AudioOutputFlags& flags, +#endif + const SourceMetadata& sourceMetadata, + openOutputStream_cb _hidl_cb) { + auto [result, streamOut, suggestedConfig] = + openOutputStreamImpl(ioHandle, device, config, sourceMetadata, flags); _hidl_cb(result, streamOut, suggestedConfig); return Void(); } -Return<void> Device::openInputStream(int32_t ioHandle, const DeviceAddress& device, - const AudioConfig& config, +std::tuple<Result, sp<IStreamIn>, AudioConfig> Device::openInputStreamImpl( + int32_t ioHandle, const DeviceAddress& device, const AudioConfig& config, #if MAJOR_VERSION <= 6 - AudioInputFlags flags, + AudioInputFlags flags, #else - const AudioInputFlags& flags, + const AudioInputFlags& flags, #endif - const SinkMetadata& sinkMetadata, - openInputStream_cb _hidl_cb) { + const SinkMetadata& sinkMetadata) { 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(); + return {Result::INVALID_ARGUMENTS, nullptr, AudioConfig{}}; } #if MAJOR_VERSION <= 6 if (status_t status = CoreUtils::sinkMetadataToHal(sinkMetadata, nullptr); status != NO_ERROR) { @@ -297,22 +307,57 @@ Return<void> Device::openInputStream(int32_t ioHandle, const DeviceAddress& devi false /*ignoreNonVendorTags*/, nullptr); status != NO_ERROR) { #endif - _hidl_cb(analyzeStatus("sinkMetadataToHal", status), nullptr, AudioConfig{}); - return Void(); + return {analyzeStatus("sinkMetadataToHal", status), nullptr, AudioConfig{}}; } // Pick the first one as the main. AudioSource source = sinkMetadata.tracks[0].source; AudioConfig suggestedConfig; auto [result, streamIn] = - openInputStreamImpl(ioHandle, device, config, flags, source, &suggestedConfig); + openInputStreamCore(ioHandle, device, config, flags, source, &suggestedConfig); if (streamIn) { streamIn->updateSinkMetadata(sinkMetadata); } + return {result, streamIn, suggestedConfig}; +} + +Return<void> Device::openInputStream(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, +#if MAJOR_VERSION <= 6 + AudioInputFlags flags, +#else + const AudioInputFlags& flags, +#endif + const SinkMetadata& sinkMetadata, + openInputStream_cb _hidl_cb) { + auto [result, streamIn, suggestedConfig] = + openInputStreamImpl(ioHandle, device, config, flags, sinkMetadata); _hidl_cb(result, streamIn, suggestedConfig); return Void(); } #endif /* MAJOR_VERSION */ +#if MAJOR_VERSION == 7 && MINOR_VERSION == 1 +Return<void> Device::openOutputStream_7_1(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, const AudioOutputFlags& flags, + const SourceMetadata& sourceMetadata, + openOutputStream_7_1_cb _hidl_cb) { + auto [result, streamOut, suggestedConfig] = + openOutputStreamImpl(ioHandle, device, config, sourceMetadata, flags); + _hidl_cb(result, streamOut, suggestedConfig); + return Void(); +} + +Return<void> Device::openInputStream_7_1(int32_t ioHandle, const DeviceAddress& device, + const AudioConfig& config, const AudioInputFlags& flags, + const SinkMetadata& sinkMetadata, + openInputStream_7_1_cb _hidl_cb) { + auto [result, streamIn, suggestedConfig] = + openInputStreamImpl(ioHandle, device, config, flags, sinkMetadata); + _hidl_cb(result, streamIn, suggestedConfig); + return Void(); +} +#endif // V7.1 + Return<bool> Device::supportsAudioPatches() { return version() >= AUDIO_DEVICE_API_VERSION_3_0; } |