summaryrefslogtreecommitdiff
path: root/audio/core/all-versions/default/StreamOut.cpp
AgeCommit message (Collapse)Author
2022-01-27Audio HAL V7.1: Add latency mode APIsEric Laurent
Add APis for controlling the latency mode on an output stream. Latency mode control is optional but mandated if spatial audio with head tracking is supported over Bluetooth classic audio link. Bug: 187446271 Test: m android.hardware.audio@7.1-impl Change-Id: I363db3bf7f7b6439e326d0f6f4becc10b3947e7d
2022-01-25Audio HAL V7.1: Update the default implementationMikhail Naganov
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
2021-05-04Merge "StreamOut: Fix STREAM_EVENT_CBK_TYPE_CODEC_FORMAT_CHANGED" am: ↵Andy Hung
66ffc5b99a am: 1e1514be04 am: 6660615822 Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1692490 Change-Id: I5bd4d6fdea2c18c9822ad061cdc24a488b148fb6
2021-05-04Merge "StreamOut: Fix STREAM_EVENT_CBK_TYPE_CODEC_FORMAT_CHANGED" am: ↵Andy Hung
66ffc5b99a am: 1e1514be04 Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1692490 Change-Id: I97c94630cd48b9a0354c9b76e593ea0205a633b4
2021-04-30StreamOut: Fix STREAM_EVENT_CBK_TYPE_CODEC_FORMAT_CHANGEDAndy Hung
Use audio_metadata_byte_string_len method in asyncEventCallback. Test: atest metadata_tests Bug: 186894288 Change-Id: I04914bc5b2c778002b53b8f8da5bf29fff5c80f8
2021-04-26audio HAL - fix UAFs am: 7283cbe8cb am: e227bfd15c am: facfee6382 am: da947d5127Steven Moreland
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/14212414 Change-Id: I7c4ba7e1ed4e7c71e10332ce986bbc7b6aba8f40
2021-04-26audio HAL - fix UAFs am: 7283cbe8cb am: e227bfd15cSteven Moreland
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/14212414 Change-Id: I5b80e2810ef7c4010496687934d93685057d4c82
2021-04-16audio HAL - fix UAFsSteven Moreland
Bug: 185259758 Test: N/A Change-Id: I5ec70b098a00746108e10ab39e966607d78c84ae Merged-In: I5ec70b098a00746108e10ab39e966607d78c84ae (cherry picked from commit a8ac7cf706be7a77589070ea7c62f8e1b94ce316)
2021-04-13audio HAL - fix UAFsSteven Moreland
Bug: 185259758 Test: N/A Change-Id: I5ec70b098a00746108e10ab39e966607d78c84ae
2021-02-03audio: Create libraries for data types in core and effectMikhail Naganov
Add 'CoreUtils' library similar to 'HidlUtils' for the types specific to the core HAL. Add 'EffectUtils' library similar to 'HidlUtils' for the types specific to the effects HAL. Move into them and de-duplicate code previously scattered across the default HAL implementation and libaudiohal. Add unit tests. Removed 'AUDIO_{INPUT|OUTPUT}_FLAG_NONE' from the list of values in the XSD file to avoid additional complexity due to equivalence of this value to an empty list of flags. Bug: 142480271 Test: m android.hardware.audio@X.0-impl Test: m android.hardware.audio.effect@X.0-impl Test: atest android.hardware.audio@7.0-util_tests Test: atest android.hardware.audio.common@7.0-util_tests Test: atest android.hardware.audio.effect@7.0-util_tests Change-Id: I71a95cbe07fcc162dc6d74ff9665747a17ce5a80 Merged-In: I71a95cbe07fcc162dc6d74ff9665747a17ce5a80
2021-02-02audio: Create libraries for data types in core and effectMikhail Naganov
Add 'CoreUtils' library similar to 'HidlUtils' for the types specific to the core HAL. Add 'EffectUtils' library similar to 'HidlUtils' for the types specific to the effects HAL. Move into them and de-duplicate code previously scattered across the default HAL implementation and libaudiohal. Add unit tests. Removed 'AUDIO_{INPUT|OUTPUT}_FLAG_NONE' from the list of values in the XSD file to avoid additional complexity due to equivalence of this value to an empty list of flags. Bug: 142480271 Test: m android.hardware.audio@X.0-impl Test: m android.hardware.audio.effect@X.0-impl Test: atest android.hardware.audio@7.0-util_tests Test: atest android.hardware.audio.common@7.0-util_tests Test: atest android.hardware.audio.effect@7.0-util_tests Change-Id: I71a95cbe07fcc162dc6d74ff9665747a17ce5a80
2021-01-30Merge "audio: Update common types to better match legacy structs" am: ↵Treehugger Robot
39059ed17f am: 418ad80fee am: d5200fcdba Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1562143 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I1fc86a2ceb20d3723c395e3940fc1cc57920388d
2021-01-29Merge "audio: Update common types to better match legacy structs"Treehugger Robot
2021-01-28audio: Update common types to better match legacy structsMikhail Naganov
HAL V7 types were updated to better match data structure definitions from the legacy HAL: - Added 'AudioConfigBaseOptional' struct to match legacy structs that have 'mask' field to specify initialized fields. - All fields in 'AudioConfigBase' made mandatory. - Removed 'EffectConfigParameters' in favor of 'AudioConfigBaseOptional' and safe_unions. - Added missing enum string values to ensure that round-trip conversions from the legacy HAL to HIDL and back to legacy preserve enum values. Bug: 142480271 Test: atest android.hardware.audio.common@7.0-util_tests Test: atest VtsHalAudioV6_0TargetTest Test: atest VtsHalAudioV7_0TargetTest Test: atest VtsHalAudioEffectV7_0TargetTest Change-Id: If02a81b3f6790a8eb315fa57123141aad2419132
2021-01-27audio: add implementation for TV related APIKuowei Li
1. AudioDescriptionMixLevel getter/setter. 2. DualMonoMode getter/setter. 3. PlaybackRate getter/setter. Test: TIS player with instrumented HAL Test: atest AudioTrackTest#testTunerConfiguration Test: atest AudioTrackTest#testDualMonoMode Test: atest AudioTrackTest#testAudioDescriptionMixLevel Test: atest AudioManagerTest#testGetAdditionalOutputDeviceDelay Bug: 173482792 Merged-In: I7e4f14387b45a5387ba2c4e8797edf18f373b936 Change-Id: I7e4f14387b45a5387ba2c4e8797edf18f373b936
2021-01-21audio: add implementation for TV related APIKuowei Li
1. AudioDescriptionMixLevel getter/setter. 2. DualMonoMode getter/setter. 3. PlaybackRate getter/setter. Test: TIS player with instrumented HAL Test: atest AudioTrackTest#testTunerConfiguration Test: atest AudioTrackTest#testDualMonoMode Test: atest AudioTrackTest#testAudioDescriptionMixLevel Test: atest AudioManagerTest#testGetAdditionalOutputDeviceDelay Bug: 173482792 Change-Id: I7e4f14387b45a5387ba2c4e8797edf18f373b936
2021-01-14StreamOut: use atomic_sp<> for event callback thread safetyAndy Hung
Test: basic audio works Bug: 177278988 Change-Id: I987b31f470009c50412d8cee09163d093ecdd6f9
2021-01-14StreamOut: use atomic_sp<> for callback thread safetyAndy Hung
Test: see bug Test: basic audio works Bug: 177278988 Change-Id: Id1f5036e36b2a3b3e71e0b0ec548d4c65a972b50
2021-01-07Audio: Add VTS tests for invalid enum-strings, Part 1bMikhail Naganov
Add missing checks for invalid channel mask and tags in playback and record metadata. Fix the behavior of the default wrapper. Bug: 142480271 Test: atest VtsHalAudioV6_0TargetTest Test: atest VtsHalAudioV7_0TargetTest with side-loaded V7 default wrapper Change-Id: Ie0f82b2becc457b735349eb351ea29989a64f22c
2021-01-07Audio: Add VTS tests for invalid enum-strings, Part 1Mikhail Naganov
Add tests that try passing invalid enum-string values to HAL methods taking enum-strings. Fix issues found in the default wrapper. Interface updates: - Update AudioConfig structure to indicate whether AudioOffloadInfo is specified. - Add return value to IStreamIn.updateSinkMetadata and IStreamOut.updateSourceMetadata to provide indication of invalid arguments. - Specify the behavior of IDevice.open{Input|Output}Stream in the case of invalid arguments vs. rejected config. Bug: 142480271 Test: atest VtsHalAudioV6_0TargetTest Test: atest VtsHalAudioV7_0TargetTest with side-loaded V7 default wrapper Change-Id: I6bd7be3869cc7a8d5d00506565bbf0b3a050b630
2021-01-05audio HAL V7: Update track metadataEric Laurent
Add channel mask and audio attributes tags to playback and record track metadata sent to audio HAL. The legacy HAL wrapper supports older legacy HAL versions by sending partial metadata when the legay HAL version is less than 3.2. Bug: 168751366 Test: make Change-Id: Iba3ee3b669e4300201374d4a0d5cf45a04872274 Merged-In: Iba3ee3b669e4300201374d4a0d5cf45a04872274
2020-12-16audio: Update default wrapper to support V7Mikhail Naganov
During this conversion, the functionality of the V7 wrapper hasn't been tested yet. This will be done in a separate CL that will also include required updates to the VTS tests. Since the changes were made to the code shared with pre-V7 versions, verified that V6 HAL didn't regress. Bug: 142480271 Test: atest VtsHalAudioV6_0TargetTest Test: m VtsHalAudioV7_0TargetTest Change-Id: I0e42fe1279912ffa78ce40c69f6aa2054e84d385 Merged-In: I0e42fe1279912ffa78ce40c69f6aa2054e84d385
2020-12-09Make audio*-base.h files autogenerated againMikhail Naganov
Major change: audio-base.h is generated from "core" types.hal, new file audio_common-base.h is generated from "common" types.hal. In order to be able to add system-only constants to generated enums, the latter are made anonymous, values got "HAL_" prefix. Then in system/audio.h a full enum is constructed. Removed audio_drain_type_t from exported, as it belongs to libhardware only. Added missing enums that were introduced at the system side only in Android R. Bug: 122858783 Test: m Change-Id: I8c017912395a03beacea077fd562fae2329ad975 Merged-In: I8c017912395a03beacea077fd562fae2329ad975
2020-03-19audio: Check result from oneway callsMikhail Naganov
As oneway HIDL calls generate methods that return 'Result<void>', the returned value must be checked to avoid triggering an assertion if the result was an error (e.g. due to the client death). Bug: 151900655 Test: N/A Change-Id: I4721240b5959d6f11cb4447b30928bf4c83da058
2020-02-25Add callback for output stream.jiabin
The callback is targeted for events related to an output stream. Currently, there is one callback event defined, which is codec format changed event. Bug: 133526565 Test: manual Test: atest VtsHalAudioV6_0TargetTest Change-Id: I73a4914c1ffc30e1c88b8fedd61a031e24a069f6
2020-02-20audio: Add playback rate parameters to IStreamOutMikhail Naganov
Playback rate parameters allow changing the playback speed of audio streams optionally preserving the pitch (this is often referred to as "timestretch"). HALs can apply these parameters when decoding of streams is done in hardware. Bug: 133526565 Test: atest VtsHalAudioV6_0TargetTest Change-Id: Ie78cd924bd034b57bf5b6a74affd62641ffc0aba
2020-02-18audio: Add Dual Mono Mode and Audio Description Mix Level to IStreamOutMikhail Naganov
These properties are mainly used on TV platforms. Bug: 133526565 Test: atest VtsHalAudioV6_0TargetTest Change-Id: I5dd2fe9cb987bf8435b8e5da96f8590288e5707c
2019-12-11audio: Ignore ENOSYS from optional legacy HAL methodsMikhail Naganov
Some methods of legacy HALs are optional. The legacy HAL can avoid implementing them either by setting the function entry in the interface table to NULL or by setting it to a stub function returning -ENOSYS. In the latter case the default implementation was spamming syslog with warnings. Specify that ENOSYS returned from optional legacy HAL methods must be ignored. Bug: 141989952 Test: check logcat Change-Id: Idbdff8d88e3303a0181cb5629ab82485148e6d8e
2019-11-21Audio V6 wrapper: IDevice|IStream|IEffect.close releases HAL resourceMikhail Naganov
Fixed behavior of IStream|IEffect.close to release the underlying HAL resource synchronously. This is to avoid adding artificial delays in VTS that become totally unpractical in V6. Added clarification about expected client behavior for IStream|IEffect.close w.r.t. audio data transfer. Added IDevice.close method which releases HAL device resource. Updated VTS tests to remove delays in V6. Bug: 114451103 Bug: 141989952 Test: atest VtsHalAudioV6_0TargetTest Change-Id: I439f0f923c091af2ab234d15ca847cfade341f25 Merged-In: I439f0f923c091af2ab234d15ca847cfade341f25
2018-12-14Audio HAL: More generalization for types importsMikhail Naganov
Complement imports of audio::CPP_VERSION with audio::common::CPP_VERSION for core. Import namespaces in VTS tests. Remove "using namespace" from .cpp files where there are already imports in the .h file. Test: try moving types between audio/types.hal and common/types.hal. Change-Id: I49c2e2466c8175f2516c2273f5c26d125afd4801
2018-12-02Audio HAL V5: Introduce HAL V5, equal to V4 for nowKevin Rocard
find -name 4.0 | xargs -I@ cp -r @ @/../5.0 find 5.0 */5.0 -type f | xargs sed -Ei 's/V4/V5/;s#(@|/)4.0#\15.0#' find -name *cpp -o -name *.h | xargs sed -i 's/VERSION == 4/VERSION >= 4/g' mv {4.1,5.0}/config/audio_policy_configuration.xsd Then a manual update to Android.bp to add V5 support. Then a manual update to service.cpp to add support for loading 5.0. If someone knows a way to avoid copying the .hal, it would be great. They will be 99% identical between V4 and V5. Bug: 118203066 Test: vts-tradefed run commandAndExit vts --module VtsHalAudioEffectV2_0Target vts-tradefed run commandAndExit vts --module VtsHalAudioV2_0Target vts-tradefed run commandAndExit vts --module VtsHalAudioEffectV4_0Target vts-tradefed run commandAndExit vts --module VtsHalAudioV4_0Target Change-Id: If99a5645d19c9780019704ea4f51f8114d83ee8f Signed-off-by: Kevin Rocard <krocard@google.com>
2018-11-28Audio HAL: Factorize V2 and V4 like libaudiohalKevin Rocard
Use the same technique developed for the simpler libaudiohal to factorize the audio HAL impl. Generated with script: set -euo pipefail cd hardware/interfaces/audio # Make 2.0 and 4.0 files mostly identical by removing all 2.0, V4.0... # and replacing it by CPP_VERSION and FILE_VERSION # This allow both implementation to be mostly identical, except for code difference # Also remove IncludeGuard.h as it will be included from compiler flag # Also update license to 2018 find -name *.cpp -o -name *h | grep -v -e service.cpp | xargs sed -Ei \ -e 's/(#.*)V[42]_0_(.*_H_?)$/\1\2/' \ -e 's/(LOG_TAG.*)[24]_0/\1/' \ -e '/#ifndef AUDIO_HAL_VERSION/,/#endif/d' \ -e '/^#.*def.*AUDIO_HAL_VERSION\b/d' \ -e's/V[42]_0/CPP_VERSION/' \ -e 's/(#include ).(android.*)[24].0(.*).$/\1PATH(\2FILE_VERSION\3)/' \ -e 's|(#include) .(.*)[24].0/(default/.*).$|\1 "\2\3"|' \ -e 's/\bAUDIO_HAL_VERSION\b/CPP_VERSION/' \ -e '/IncludeGuard.h/d' \ -e 's/(Copyright .C. 201)./\18/' # set MAJOR_VERSION instead of having a different macro for each version # this allow to do preprocessor arithmetic (eg: MAJOR_VERSION >= 4) for v in 2 4; do find -ipath '*/'$v'.0/*/Android.bp' | xargs sed -i -e '/cflags:/,/^$/d' -e '/vndk/{:a;/}/!{N;ba};d}' -e '$i\ cflags: [\ "-DMAJOR_VERSION='$v'",\ "-DMINOR_VERSION=0",\ "-include common/all-versions/VersionMacro.h",\ ]'; done # replace# ifdef VERSION_X by #if MAJOR_VERSION == X find -path *all-versions/*.h | xargs sed -Ei -e 's/def.*AUDIO_HAL_VERSION_([24])_0.*/ MAJOR_VERSION == \1/' \ -e 'T;s/ +/ /' # copy all-versions impl in each version impl find -path '*/[24].0/*.[hc]*' | grep -ve all-versions -e test | xargs -P99 -n4 sed -i -Ee '/include <.*all-versions.default/!b' \ -e 's#.*<#find -path */#' -e 's/>$/|xargs tail -n +16/' -e e # remove all-versions impl rm -r {core,effect}/all-versions/ # merge version impl into a single all-version for dir in core/*.0/vts/functional/*.0/ ;do dest=$(echo $dir | sed 's#/..0/#/all-versions/#') mkdir -p $dest mv -T $dir $dest done find -mindepth 3 -path '*/2.0/*' -a \( -name '*cpp' -o -name '*h' \) | grep -v 'all-versions' | sed -E 'h;s/2/4/g;H;s/4.0/all-versions/;s/4.0//;H;g;s/\n/ /g;'| xargs -P99 -L1 sh -c ' set -euo pipefail mkdir -p $(dirname $2); diff --old-group-format="#if MAJOR_VERSION == 2 %<#endif " \ --new-group-format="#if MAJOR_VERSION == 4 %>#endif " $0 $1 > $2 || true; rm $0 $1' # merge the X.0 Android.bp & OWNERS in the all-versions for dir in common effect core; do for sub in default vts/functional; do test -f $dir/2.0/$sub/Android.bp || continue awk 1 $dir/*.0/$sub/Android.bp >> $dir/all-versions/$sub/Android.bp # delete licenses except for the first one and add whitelines sed -i -e '/^}$/{N;/^}\n$/!s/\n/&\n/}' $dir/all-versions/$sub/Android.bp sed -i -e '1,17b;/^\/\//,/^$/{d}' $dir/all-versions/$sub/Android.bp done for sub in default vts; do test -d $dir/2.0/$sub || continue test -f $dir/2.0/$sub/OWNERS && awk 1 $dir/*.0/$sub/OWNERS | sort -u > $dir/all-versions/$sub/OWNERS || true rm -r $dir/*.0/$sub done done # delete all-versions-impl dependencies find -name 'Android.bp' | xargs sed -i -e '/all-versions-impl/d' # cleanup unused files rm common/all-versions/default/include/common/all-versions/default/HidlUtils* rm common/all-versions/util/include/common/all-versions/IncludeGuard.h find -depth -type d -empty -delete # Clamp consecutive number of empty lines to 2 find -name *.cpp -o -name *h | xargs sed -Ei ':a;/^\n*$/{N;ba};s/\n\n+/\n\n/' # transform #endif\n#if to #elif find -name *.cpp -o -name *h | xargs sed -i '/^#endif/{N;s/.*\n#if/#elif/}' # remove leftover include guard in cpp find -name *.cpp |xargs sed -Ei '/^#.*_H_?$/d' # apply clang-format find -name *cpp -o -name *h | xargs ../../../prebuilts/clang/host/linux-x86/clang-stable/bin/clang-format --style file -i # clang format breaks PATH(a/b) to PATH(a / b), remove the space surrounding / find -name *cpp -o -name *h | xargs sed -i "/#include PATH/s# / #/#g" Test: compile Bug: 118203066 Change-Id: I3692a444307afc5f71064fe0b9e6b8af3c9ff1dd Signed-off-by: Kevin Rocard <krocard@google.com>