Loading services/audiopolicy/TEST_MAPPING +3 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,9 @@ "include-filter": "com.google.android.gts.audio.AudioPolicyHostTest" } ] }, { "name": "spatializer_tests" } ] } services/audiopolicy/service/Android.bp +6 −0 Original line number Diff line number Diff line Loading @@ -107,3 +107,9 @@ cc_library { "framework-permission-aidl-cpp", ], } cc_library_headers { name: "libaudiopolicyservice_headers", host_supported: true, export_include_dirs: ["."], } services/audiopolicy/service/Spatializer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -1096,7 +1096,7 @@ audio_latency_mode_t Spatializer::selectHeadtrackingConnectionMode_l() { } void Spatializer::checkSensorsState_l() { audio_latency_mode_t requestedLatencyMode = AUDIO_LATENCY_MODE_FREE; mRequestedLatencyMode = AUDIO_LATENCY_MODE_FREE; const bool supportsSetLatencyMode = !mSupportedLatencyModes.empty(); bool supportsLowLatencyMode; if (com::android::media::audio::dsa_over_bt_le_audio()) { Loading @@ -1117,7 +1117,7 @@ void Spatializer::checkSensorsState_l() { && mDesiredHeadTrackingMode != HeadTrackingMode::STATIC && mHeadSensor != SpatializerPoseController::INVALID_SENSOR) { if (supportsLowLatencyMode) { requestedLatencyMode = selectHeadtrackingConnectionMode_l(); mRequestedLatencyMode = selectHeadtrackingConnectionMode_l(); } if (mEngine != nullptr) { setEffectParameter_l(SPATIALIZER_PARAM_HEADTRACKING_MODE, Loading @@ -1139,9 +1139,9 @@ void Spatializer::checkSensorsState_l() { } if (mOutput != AUDIO_IO_HANDLE_NONE && supportsSetLatencyMode) { const status_t status = AudioSystem::setRequestedLatencyMode(mOutput, requestedLatencyMode); AudioSystem::setRequestedLatencyMode(mOutput, mRequestedLatencyMode); ALOGD("%s: setRequestedLatencyMode for output thread(%d) to %s returned %d", __func__, mOutput, toString(requestedLatencyMode).c_str(), status); mOutput, toString(mRequestedLatencyMode).c_str(), status); } } Loading services/audiopolicy/service/Spatializer.h +45 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <audio_utils/SimpleLog.h> #include <math.h> #include <media/AudioEffect.h> #include <media/MediaMetricsItem.h> #include <media/audiohal/EffectsFactoryHalInterface.h> #include <media/VectorRecorder.h> #include <media/audiohal/EffectHalInterface.h> Loading Loading @@ -153,6 +154,34 @@ class Spatializer : public media::BnSpatializer, return mLevel; } /** For test only */ std::unordered_set<media::audio::common::HeadTracking::ConnectionMode> getSupportedHeadtrackingConnectionModes() const { return mSupportedHeadtrackingConnectionModes; } /** For test only */ media::audio::common::HeadTracking::ConnectionMode getHeadtrackingConnectionMode() const { return mHeadtrackingConnectionMode; } /** For test only */ std::vector<audio_latency_mode_t> getSupportedLatencyModes() const { audio_utils::lock_guard lock(mMutex); return mSupportedLatencyModes; } /** For test only */ std::vector<audio_latency_mode_t> getOrderedLowLatencyModes() const { return mOrderedLowLatencyModes; } /** For test only */ audio_latency_mode_t getRequestedLatencyMode() const { audio_utils::lock_guard lock(mMutex); return mRequestedLatencyMode; } /** Called by audio policy service when the special output mixer dedicated to spatialization * is opened and the spatializer engine must be created. */ Loading @@ -164,6 +193,12 @@ class Spatializer : public media::BnSpatializer, /** Returns the output stream the spatializer is attached to. */ audio_io_handle_t getOutput() const { audio_utils::lock_guard lock(mMutex); return mOutput; } /** For test only */ void setOutput(audio_io_handle_t output) { audio_utils::lock_guard lock(mMutex); mOutput = output; } void updateActiveTracks(size_t numActiveTracks); /** Gets the channel mask, sampling rate and format set for the spatializer input. */ Loading @@ -188,6 +223,10 @@ class Spatializer : public media::BnSpatializer, // NO_INIT: Spatializer creation failed. static void sendEmptyCreateSpatializerMetricWithStatus(status_t status); /** Made public for test only */ void onSupportedLatencyModesChangedMsg( audio_io_handle_t output, std::vector<audio_latency_mode_t>&& modes); private: Spatializer(effect_descriptor_t engineDescriptor, SpatializerPolicyCallback *callback); Loading @@ -200,8 +239,6 @@ private: void onHeadToStagePoseMsg(const std::vector<float>& headToStage); void onActualModeChangeMsg(media::HeadTrackingMode mode); void onSupportedLatencyModesChangedMsg( audio_io_handle_t output, std::vector<audio_latency_mode_t>&& modes); static constexpr int kMaxEffectParamValues = 10; /** Loading Loading @@ -484,9 +521,11 @@ private: std::vector<media::audio::common::Spatialization::Mode> mSpatializationModes; std::vector<audio_channel_mask_t> mChannelMasks; bool mSupportsHeadTracking; /** List of supported head tracking connection modes reported by the spatializer. * If the list is empty, the spatializer does not support any optional connection * mode and mode HeadTracking::ConnectionMode::FRAMEWORK_PROCESSED is assumed. * This is set in the factory constructor and can be accessed without mutex. */ std::unordered_set<media::audio::common::HeadTracking::ConnectionMode> mSupportedHeadtrackingConnectionModes; Loading @@ -504,6 +543,9 @@ private: std::vector<audio_latency_mode_t> mSupportedLatencyModes GUARDED_BY(mMutex); /** preference order for low latency modes according to persist.bluetooth.hid.transport */ std::vector<audio_latency_mode_t> mOrderedLowLatencyModes; audio_latency_mode_t mRequestedLatencyMode GUARDED_BY(mMutex) = AUDIO_LATENCY_MODE_FREE; /** string to latency mode map used to parse bluetooth.core.le.dsa_transport_preference */ static const std::map<std::string, audio_latency_mode_t> sStringToLatencyModeMap; static const std::vector<const char*> sHeadPoseKeys; Loading services/audiopolicy/tests/Android.bp +37 −0 Original line number Diff line number Diff line Loading @@ -108,3 +108,40 @@ cc_test { test_suites: ["device-tests"], } cc_test { name: "spatializer_tests", defaults: [ "latest_android_media_audio_common_types_cpp_shared", "libaudiopolicyservice_dependencies", ], require_root: true, shared_libs: [ "libaudioclient", "libaudiofoundation", "libcutils", "liblog", ], static_libs: [ "libaudiopolicyservice", ], header_libs: [ "libaudiohal_headers", "libaudiopolicyservice_headers", "libmediametrics_headers", ], srcs: ["spatializer_tests.cpp"], cflags: [ "-Wall", "-Werror", ], test_suites: ["device-tests"], } Loading
services/audiopolicy/TEST_MAPPING +3 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,9 @@ "include-filter": "com.google.android.gts.audio.AudioPolicyHostTest" } ] }, { "name": "spatializer_tests" } ] }
services/audiopolicy/service/Android.bp +6 −0 Original line number Diff line number Diff line Loading @@ -107,3 +107,9 @@ cc_library { "framework-permission-aidl-cpp", ], } cc_library_headers { name: "libaudiopolicyservice_headers", host_supported: true, export_include_dirs: ["."], }
services/audiopolicy/service/Spatializer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -1096,7 +1096,7 @@ audio_latency_mode_t Spatializer::selectHeadtrackingConnectionMode_l() { } void Spatializer::checkSensorsState_l() { audio_latency_mode_t requestedLatencyMode = AUDIO_LATENCY_MODE_FREE; mRequestedLatencyMode = AUDIO_LATENCY_MODE_FREE; const bool supportsSetLatencyMode = !mSupportedLatencyModes.empty(); bool supportsLowLatencyMode; if (com::android::media::audio::dsa_over_bt_le_audio()) { Loading @@ -1117,7 +1117,7 @@ void Spatializer::checkSensorsState_l() { && mDesiredHeadTrackingMode != HeadTrackingMode::STATIC && mHeadSensor != SpatializerPoseController::INVALID_SENSOR) { if (supportsLowLatencyMode) { requestedLatencyMode = selectHeadtrackingConnectionMode_l(); mRequestedLatencyMode = selectHeadtrackingConnectionMode_l(); } if (mEngine != nullptr) { setEffectParameter_l(SPATIALIZER_PARAM_HEADTRACKING_MODE, Loading @@ -1139,9 +1139,9 @@ void Spatializer::checkSensorsState_l() { } if (mOutput != AUDIO_IO_HANDLE_NONE && supportsSetLatencyMode) { const status_t status = AudioSystem::setRequestedLatencyMode(mOutput, requestedLatencyMode); AudioSystem::setRequestedLatencyMode(mOutput, mRequestedLatencyMode); ALOGD("%s: setRequestedLatencyMode for output thread(%d) to %s returned %d", __func__, mOutput, toString(requestedLatencyMode).c_str(), status); mOutput, toString(mRequestedLatencyMode).c_str(), status); } } Loading
services/audiopolicy/service/Spatializer.h +45 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <audio_utils/SimpleLog.h> #include <math.h> #include <media/AudioEffect.h> #include <media/MediaMetricsItem.h> #include <media/audiohal/EffectsFactoryHalInterface.h> #include <media/VectorRecorder.h> #include <media/audiohal/EffectHalInterface.h> Loading Loading @@ -153,6 +154,34 @@ class Spatializer : public media::BnSpatializer, return mLevel; } /** For test only */ std::unordered_set<media::audio::common::HeadTracking::ConnectionMode> getSupportedHeadtrackingConnectionModes() const { return mSupportedHeadtrackingConnectionModes; } /** For test only */ media::audio::common::HeadTracking::ConnectionMode getHeadtrackingConnectionMode() const { return mHeadtrackingConnectionMode; } /** For test only */ std::vector<audio_latency_mode_t> getSupportedLatencyModes() const { audio_utils::lock_guard lock(mMutex); return mSupportedLatencyModes; } /** For test only */ std::vector<audio_latency_mode_t> getOrderedLowLatencyModes() const { return mOrderedLowLatencyModes; } /** For test only */ audio_latency_mode_t getRequestedLatencyMode() const { audio_utils::lock_guard lock(mMutex); return mRequestedLatencyMode; } /** Called by audio policy service when the special output mixer dedicated to spatialization * is opened and the spatializer engine must be created. */ Loading @@ -164,6 +193,12 @@ class Spatializer : public media::BnSpatializer, /** Returns the output stream the spatializer is attached to. */ audio_io_handle_t getOutput() const { audio_utils::lock_guard lock(mMutex); return mOutput; } /** For test only */ void setOutput(audio_io_handle_t output) { audio_utils::lock_guard lock(mMutex); mOutput = output; } void updateActiveTracks(size_t numActiveTracks); /** Gets the channel mask, sampling rate and format set for the spatializer input. */ Loading @@ -188,6 +223,10 @@ class Spatializer : public media::BnSpatializer, // NO_INIT: Spatializer creation failed. static void sendEmptyCreateSpatializerMetricWithStatus(status_t status); /** Made public for test only */ void onSupportedLatencyModesChangedMsg( audio_io_handle_t output, std::vector<audio_latency_mode_t>&& modes); private: Spatializer(effect_descriptor_t engineDescriptor, SpatializerPolicyCallback *callback); Loading @@ -200,8 +239,6 @@ private: void onHeadToStagePoseMsg(const std::vector<float>& headToStage); void onActualModeChangeMsg(media::HeadTrackingMode mode); void onSupportedLatencyModesChangedMsg( audio_io_handle_t output, std::vector<audio_latency_mode_t>&& modes); static constexpr int kMaxEffectParamValues = 10; /** Loading Loading @@ -484,9 +521,11 @@ private: std::vector<media::audio::common::Spatialization::Mode> mSpatializationModes; std::vector<audio_channel_mask_t> mChannelMasks; bool mSupportsHeadTracking; /** List of supported head tracking connection modes reported by the spatializer. * If the list is empty, the spatializer does not support any optional connection * mode and mode HeadTracking::ConnectionMode::FRAMEWORK_PROCESSED is assumed. * This is set in the factory constructor and can be accessed without mutex. */ std::unordered_set<media::audio::common::HeadTracking::ConnectionMode> mSupportedHeadtrackingConnectionModes; Loading @@ -504,6 +543,9 @@ private: std::vector<audio_latency_mode_t> mSupportedLatencyModes GUARDED_BY(mMutex); /** preference order for low latency modes according to persist.bluetooth.hid.transport */ std::vector<audio_latency_mode_t> mOrderedLowLatencyModes; audio_latency_mode_t mRequestedLatencyMode GUARDED_BY(mMutex) = AUDIO_LATENCY_MODE_FREE; /** string to latency mode map used to parse bluetooth.core.le.dsa_transport_preference */ static const std::map<std::string, audio_latency_mode_t> sStringToLatencyModeMap; static const std::vector<const char*> sHeadPoseKeys; Loading
services/audiopolicy/tests/Android.bp +37 −0 Original line number Diff line number Diff line Loading @@ -108,3 +108,40 @@ cc_test { test_suites: ["device-tests"], } cc_test { name: "spatializer_tests", defaults: [ "latest_android_media_audio_common_types_cpp_shared", "libaudiopolicyservice_dependencies", ], require_root: true, shared_libs: [ "libaudioclient", "libaudiofoundation", "libcutils", "liblog", ], static_libs: [ "libaudiopolicyservice", ], header_libs: [ "libaudiohal_headers", "libaudiopolicyservice_headers", "libmediametrics_headers", ], srcs: ["spatializer_tests.cpp"], cflags: [ "-Wall", "-Werror", ], test_suites: ["device-tests"], }