summaryrefslogtreecommitdiff
path: root/audio/core/all-versions/default/StreamOut.cpp
diff options
context:
space:
mode:
authorMikhail Naganov <mnaganov@google.com>2020-12-17 15:01:54 -0800
committerMikhail Naganov <mnaganov@google.com>2021-01-07 10:32:06 -0800
commit3f1457b9537b1ff23704e17be7588dadf1e2884e (patch)
tree82878ed14f6c3b93734a211ffbaa75c5fd0aad32 /audio/core/all-versions/default/StreamOut.cpp
parentdaedb0dc2e582d6db90793045759a7acef6f1096 (diff)
Audio: Add VTS tests for invalid enum-strings, Part 1
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
Diffstat (limited to 'audio/core/all-versions/default/StreamOut.cpp')
-rw-r--r--audio/core/all-versions/default/StreamOut.cpp65
1 files changed, 22 insertions, 43 deletions
diff --git a/audio/core/all-versions/default/StreamOut.cpp b/audio/core/all-versions/default/StreamOut.cpp
index 2451b9eb3a..0ff918213d 100644
--- a/audio/core/all-versions/default/StreamOut.cpp
+++ b/audio/core/all-versions/default/StreamOut.cpp
@@ -17,6 +17,7 @@
#define LOG_TAG "StreamOutHAL"
#include "core/default/StreamOut.h"
+#include "core/default/Conversions.h"
#include "core/default/Util.h"
//#define LOG_NDEBUG 0
@@ -585,81 +586,59 @@ Return<void> StreamOut::debug(const hidl_handle& fd, const hidl_vec<hidl_string>
}
#if MAJOR_VERSION >= 4
-playback_track_metadata StreamOut::convertPlaybackTrackMetadata(
- const PlaybackTrackMetadata& trackMetadata) {
- playback_track_metadata_t halTrackMetadata = {.gain = trackMetadata.gain};
- (void)HidlUtils::audioUsageToHal(trackMetadata.usage, &halTrackMetadata.usage);
- (void)HidlUtils::audioContentTypeToHal(trackMetadata.contentType,
- &halTrackMetadata.content_type);
- return halTrackMetadata;
-}
-
-void StreamOut::doUpdateSourceMetadata(const SourceMetadata& sourceMetadata) {
+Result StreamOut::doUpdateSourceMetadata(const SourceMetadata& sourceMetadata,
+ bool abortOnConversionFailure) {
std::vector<playback_track_metadata_t> halTracks;
- halTracks.reserve(sourceMetadata.tracks.size());
- for (auto& metadata : sourceMetadata.tracks) {
- halTracks.push_back(convertPlaybackTrackMetadata(metadata));
+ if (status_t status = sourceMetadataToHal(sourceMetadata, &halTracks);
+ status != NO_ERROR && abortOnConversionFailure) {
+ return Stream::analyzeStatus("sourceMetadataToHal", status);
}
const source_metadata_t halMetadata = {
.track_count = halTracks.size(),
.tracks = halTracks.data(),
};
mStream->update_source_metadata(mStream, &halMetadata);
+ return Result::OK;
}
#if MAJOR_VERSION >= 7
-playback_track_metadata_v7 StreamOut::convertPlaybackTrackMetadataV7(
- const PlaybackTrackMetadata& trackMetadata) {
- playback_track_metadata_v7 halTrackMetadata;
- halTrackMetadata.base = convertPlaybackTrackMetadata(trackMetadata);
- (void)HidlUtils::audioChannelMaskToHal(trackMetadata.channelMask,
- &halTrackMetadata.channel_mask);
- std::string halTags;
- for (const auto& tag : trackMetadata.tags) {
- if (&tag != &trackMetadata.tags[0]) {
- halTags += HidlUtils::sAudioTagSeparator;
- }
- halTags += tag.c_str();
- }
- strncpy(halTrackMetadata.tags, halTags.c_str(), AUDIO_ATTRIBUTES_TAGS_MAX_SIZE);
- return halTrackMetadata;
-}
-
-void StreamOut::doUpdateSourceMetadataV7(const SourceMetadata& sourceMetadata) {
+Result StreamOut::doUpdateSourceMetadataV7(const SourceMetadata& sourceMetadata) {
std::vector<playback_track_metadata_v7> halTracks;
- halTracks.reserve(sourceMetadata.tracks.size());
- for (auto& metadata : sourceMetadata.tracks) {
- halTracks.push_back(convertPlaybackTrackMetadataV7(metadata));
+ if (status_t status = sourceMetadataToHalV7(sourceMetadata, &halTracks); status != NO_ERROR) {
+ return Stream::analyzeStatus("sourceMetadataToHal", status);
}
const source_metadata_v7_t halMetadata = {
.track_count = halTracks.size(),
.tracks = halTracks.data(),
};
mStream->update_source_metadata_v7(mStream, &halMetadata);
+ return Result::OK;
}
#endif // MAJOR_VERSION >= 7
+#if MAJOR_VERSION <= 6
Return<void> StreamOut::updateSourceMetadata(const SourceMetadata& sourceMetadata) {
-#if MAJOR_VERSION < 7
if (mStream->update_source_metadata == nullptr) {
return Void(); // not supported by the HAL
}
- doUpdateSourceMetadata(sourceMetadata);
-#else
+ (void)doUpdateSourceMetadata(sourceMetadata, false /*abortOnConversionFailure*/);
+ return Void();
+}
+#elif MAJOR_VERSION >= 7
+Return<Result> StreamOut::updateSourceMetadata(const SourceMetadata& sourceMetadata) {
if (mDevice->version() < AUDIO_DEVICE_API_VERSION_3_2) {
if (mStream->update_source_metadata == nullptr) {
- return Void(); // not supported by the HAL
+ return Result::NOT_SUPPORTED;
}
- doUpdateSourceMetadata(sourceMetadata);
+ return doUpdateSourceMetadata(sourceMetadata, true /*abortOnConversionFailure*/);
} else {
if (mStream->update_source_metadata_v7 == nullptr) {
- return Void(); // not supported by the HAL
+ return Result::NOT_SUPPORTED;
}
- doUpdateSourceMetadataV7(sourceMetadata);
+ return doUpdateSourceMetadataV7(sourceMetadata);
}
-#endif // MAJOR_VERSION < 7
- return Void();
}
+#endif
Return<Result> StreamOut::selectPresentation(int32_t /*presentationId*/, int32_t /*programId*/) {
return Result::NOT_SUPPORTED; // TODO: propagate to legacy