Loading audio/aidl/android/hardware/audio/core/IStreamOut.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -214,7 +214,8 @@ interface IStreamOut { * * The range of supported values for speed and pitch factors is provided by * the 'IModule.getSupportedPlaybackRateFactors' method. Out of range speed * and pitch values must not be rejected if the fallback mode is 'MUTE'. * and pitch values may result in silent playback instead of returning an * error in the case when the fallback mode is 'MUTE'. * * @param playbackRate Playback parameters to set. * @throws EX_ILLEGAL_ARGUMENT If provided parameters are out of acceptable range. Loading audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -376,7 +376,8 @@ void GenerateTestArrays(size_t validElementCount, T validMin, T validMax, template <typename PropType, class Instance, typename Getter, typename Setter> void TestAccessors(Instance* inst, Getter getter, Setter setter, const std::vector<PropType>& validValues, const std::vector<PropType>& invalidValues, bool* isSupported) { const std::vector<PropType>& invalidValues, bool* isSupported, const std::vector<PropType>* ambivalentValues = nullptr) { PropType initialValue{}; ScopedAStatus status = (inst->*getter)(&initialValue); if (status.getExceptionCode() == EX_UNSUPPORTED_OPERATION) { Loading @@ -395,6 +396,15 @@ void TestAccessors(Instance* inst, Getter getter, Setter setter, EXPECT_STATUS(EX_ILLEGAL_ARGUMENT, (inst->*setter)(v)) << "for an invalid value: " << ::testing::PrintToString(v); } if (ambivalentValues != nullptr) { for (const auto v : *ambivalentValues) { const auto status = (inst->*setter)(v); if (!status.isOk()) { EXPECT_STATUS(EX_ILLEGAL_ARGUMENT, status) << "for an ambivalent value: " << ::testing::PrintToString(v); } } } EXPECT_IS_OK((inst->*setter)(initialValue)) << "Failed to restore the initial value"; } Loading Loading @@ -3936,11 +3946,6 @@ TEST_P(AudioStreamOut, PlaybackRate) { AudioPlaybackRate{1.0f, 1.0f, tsVoice, fbFail}, AudioPlaybackRate{factors.maxSpeed, factors.maxPitch, tsVoice, fbMute}, AudioPlaybackRate{factors.minSpeed, factors.minPitch, tsVoice, fbMute}, // Out of range speed / pitch values must not be rejected if the fallback mode is "mute" AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsDefault, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsDefault, fbMute}, AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsVoice, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsVoice, fbMute}, }; const std::vector<AudioPlaybackRate> invalidValues = { AudioPlaybackRate{factors.maxSpeed, factors.maxPitch * 2, tsDefault, fbFail}, Loading @@ -3956,6 +3961,14 @@ TEST_P(AudioStreamOut, PlaybackRate) { AudioPlaybackRate{1.0f, 1.0f, tsDefault, AudioPlaybackRate::TimestretchFallbackMode::SYS_RESERVED_DEFAULT}, }; const std::vector<AudioPlaybackRate> ambivalentValues = { // Out of range speed / pitch values may optionally be rejected if the fallback mode // is "mute". AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsDefault, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsDefault, fbMute}, AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsVoice, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsVoice, fbMute}, }; bool atLeastOneSupports = false; for (const auto& port : offloadMixPorts) { const auto portConfig = moduleConfig->getSingleConfigForMixPort(false, port); Loading @@ -3965,7 +3978,8 @@ TEST_P(AudioStreamOut, PlaybackRate) { bool isSupported = false; EXPECT_NO_FATAL_FAILURE(TestAccessors<AudioPlaybackRate>( stream.get(), &IStreamOut::getPlaybackRateParameters, &IStreamOut::setPlaybackRateParameters, validValues, invalidValues, &isSupported)); &IStreamOut::setPlaybackRateParameters, validValues, invalidValues, &isSupported, &ambivalentValues)); if (isSupported) atLeastOneSupports = true; } if (!atLeastOneSupports) { Loading Loading
audio/aidl/android/hardware/audio/core/IStreamOut.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -214,7 +214,8 @@ interface IStreamOut { * * The range of supported values for speed and pitch factors is provided by * the 'IModule.getSupportedPlaybackRateFactors' method. Out of range speed * and pitch values must not be rejected if the fallback mode is 'MUTE'. * and pitch values may result in silent playback instead of returning an * error in the case when the fallback mode is 'MUTE'. * * @param playbackRate Playback parameters to set. * @throws EX_ILLEGAL_ARGUMENT If provided parameters are out of acceptable range. Loading
audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -376,7 +376,8 @@ void GenerateTestArrays(size_t validElementCount, T validMin, T validMax, template <typename PropType, class Instance, typename Getter, typename Setter> void TestAccessors(Instance* inst, Getter getter, Setter setter, const std::vector<PropType>& validValues, const std::vector<PropType>& invalidValues, bool* isSupported) { const std::vector<PropType>& invalidValues, bool* isSupported, const std::vector<PropType>* ambivalentValues = nullptr) { PropType initialValue{}; ScopedAStatus status = (inst->*getter)(&initialValue); if (status.getExceptionCode() == EX_UNSUPPORTED_OPERATION) { Loading @@ -395,6 +396,15 @@ void TestAccessors(Instance* inst, Getter getter, Setter setter, EXPECT_STATUS(EX_ILLEGAL_ARGUMENT, (inst->*setter)(v)) << "for an invalid value: " << ::testing::PrintToString(v); } if (ambivalentValues != nullptr) { for (const auto v : *ambivalentValues) { const auto status = (inst->*setter)(v); if (!status.isOk()) { EXPECT_STATUS(EX_ILLEGAL_ARGUMENT, status) << "for an ambivalent value: " << ::testing::PrintToString(v); } } } EXPECT_IS_OK((inst->*setter)(initialValue)) << "Failed to restore the initial value"; } Loading Loading @@ -3936,11 +3946,6 @@ TEST_P(AudioStreamOut, PlaybackRate) { AudioPlaybackRate{1.0f, 1.0f, tsVoice, fbFail}, AudioPlaybackRate{factors.maxSpeed, factors.maxPitch, tsVoice, fbMute}, AudioPlaybackRate{factors.minSpeed, factors.minPitch, tsVoice, fbMute}, // Out of range speed / pitch values must not be rejected if the fallback mode is "mute" AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsDefault, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsDefault, fbMute}, AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsVoice, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsVoice, fbMute}, }; const std::vector<AudioPlaybackRate> invalidValues = { AudioPlaybackRate{factors.maxSpeed, factors.maxPitch * 2, tsDefault, fbFail}, Loading @@ -3956,6 +3961,14 @@ TEST_P(AudioStreamOut, PlaybackRate) { AudioPlaybackRate{1.0f, 1.0f, tsDefault, AudioPlaybackRate::TimestretchFallbackMode::SYS_RESERVED_DEFAULT}, }; const std::vector<AudioPlaybackRate> ambivalentValues = { // Out of range speed / pitch values may optionally be rejected if the fallback mode // is "mute". AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsDefault, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsDefault, fbMute}, AudioPlaybackRate{factors.maxSpeed * 2, factors.maxPitch * 2, tsVoice, fbMute}, AudioPlaybackRate{factors.minSpeed / 2, factors.minPitch / 2, tsVoice, fbMute}, }; bool atLeastOneSupports = false; for (const auto& port : offloadMixPorts) { const auto portConfig = moduleConfig->getSingleConfigForMixPort(false, port); Loading @@ -3965,7 +3978,8 @@ TEST_P(AudioStreamOut, PlaybackRate) { bool isSupported = false; EXPECT_NO_FATAL_FAILURE(TestAccessors<AudioPlaybackRate>( stream.get(), &IStreamOut::getPlaybackRateParameters, &IStreamOut::setPlaybackRateParameters, validValues, invalidValues, &isSupported)); &IStreamOut::setPlaybackRateParameters, validValues, invalidValues, &isSupported, &ambivalentValues)); if (isSupported) atLeastOneSupports = true; } if (!atLeastOneSupports) { Loading