Loading media/libaudioclient/AudioSystem.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; std::set<audio_error_callback> AudioSystem::gAudioErrorCallbacks; dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL; record_config_callback AudioSystem::gRecordConfigCallback = NULL; routing_callback AudioSystem::gRoutingCallback = NULL; // Required to be held while calling into gSoundTriggerCaptureStateListener. class CaptureStateListenerImpl; Loading Loading @@ -771,6 +772,12 @@ status_t AudioSystem::AudioFlingerClient::removeAudioDeviceCallback( gRecordConfigCallback = cb; } /*static*/ void AudioSystem::setRoutingCallback(routing_callback cb) { Mutex::Autolock _l(gLock); gRoutingCallback = cb; } // client singleton for AudioPolicyService binder interface // protected by gLockAPS sp<IAudioPolicyService> AudioSystem::gAudioPolicyService; Loading Loading @@ -1914,6 +1921,19 @@ Status AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate( return Status::ok(); } Status AudioSystem::AudioPolicyServiceClient::onRoutingUpdated() { routing_callback cb = NULL; { Mutex::Autolock _l(AudioSystem::gLock); cb = gRoutingCallback; } if (cb != NULL) { cb(); } return Status::ok(); } void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused) { { Loading media/libaudioclient/aidl/android/media/IAudioPolicyServiceClient.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -44,4 +44,6 @@ oneway interface IAudioPolicyServiceClient { in EffectDescriptor[] effects, int /* audio_patch_handle_t */ patchHandle, AudioSourceType source); /** Notifies a change of audio routing */ void onRoutingUpdated(); } media/libaudioclient/include/media/AudioSystem.h +4 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ typedef void (*record_config_callback)(int event, std::vector<effect_descriptor_t> effects, audio_patch_handle_t patchHandle, audio_source_t source); typedef void (*routing_callback)(); class IAudioFlinger; class IAudioPolicyService; Loading Loading @@ -138,6 +139,7 @@ public: static void setDynPolicyCallback(dynamic_policy_callback cb); static void setRecordConfigCallback(record_config_callback); static void setRoutingCallback(routing_callback cb); // helper function to obtain AudioFlinger service handle static const sp<IAudioFlinger> get_audio_flinger(); Loading Loading @@ -630,6 +632,7 @@ private: const std::vector<media::EffectDescriptor>& effects, int32_t patchHandle, media::AudioSourceType source) override; binder::Status onRoutingUpdated(); private: Mutex mLock; Loading @@ -656,6 +659,7 @@ private: static std::set<audio_error_callback> gAudioErrorCallbacks; static dynamic_policy_callback gDynPolicyCallback; static record_config_callback gRecordConfigCallback; static routing_callback gRoutingCallback; static size_t gInBuffSize; // previous parameters for recording buffer size queries Loading services/audiopolicy/AudioPolicyInterface.h +2 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,8 @@ public: audio_patch_handle_t patchHandle, audio_source_t source) = 0; virtual void onRoutingUpdated() = 0; // Used to notify the sound trigger module that an audio capture is about to // take place. This should typically result in any active recognition // sessions to be preempted on modules that do not support sound trigger Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -5362,6 +5362,8 @@ void AudioPolicyManager::checkForDeviceAndOutputChanges(std::function<bool()> on if (mHwModules.getModuleFromName(AUDIO_HARDWARE_MODULE_ID_MSD) != 0) { setMsdPatch(); } // an event that changed routing likely occurred, inform upper layers mpClientInterface->onRoutingUpdated(); } bool AudioPolicyManager::followsSameRouting(const audio_attributes_t &lAttr, Loading Loading
media/libaudioclient/AudioSystem.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; std::set<audio_error_callback> AudioSystem::gAudioErrorCallbacks; dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL; record_config_callback AudioSystem::gRecordConfigCallback = NULL; routing_callback AudioSystem::gRoutingCallback = NULL; // Required to be held while calling into gSoundTriggerCaptureStateListener. class CaptureStateListenerImpl; Loading Loading @@ -771,6 +772,12 @@ status_t AudioSystem::AudioFlingerClient::removeAudioDeviceCallback( gRecordConfigCallback = cb; } /*static*/ void AudioSystem::setRoutingCallback(routing_callback cb) { Mutex::Autolock _l(gLock); gRoutingCallback = cb; } // client singleton for AudioPolicyService binder interface // protected by gLockAPS sp<IAudioPolicyService> AudioSystem::gAudioPolicyService; Loading Loading @@ -1914,6 +1921,19 @@ Status AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate( return Status::ok(); } Status AudioSystem::AudioPolicyServiceClient::onRoutingUpdated() { routing_callback cb = NULL; { Mutex::Autolock _l(AudioSystem::gLock); cb = gRoutingCallback; } if (cb != NULL) { cb(); } return Status::ok(); } void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused) { { Loading
media/libaudioclient/aidl/android/media/IAudioPolicyServiceClient.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -44,4 +44,6 @@ oneway interface IAudioPolicyServiceClient { in EffectDescriptor[] effects, int /* audio_patch_handle_t */ patchHandle, AudioSourceType source); /** Notifies a change of audio routing */ void onRoutingUpdated(); }
media/libaudioclient/include/media/AudioSystem.h +4 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ typedef void (*record_config_callback)(int event, std::vector<effect_descriptor_t> effects, audio_patch_handle_t patchHandle, audio_source_t source); typedef void (*routing_callback)(); class IAudioFlinger; class IAudioPolicyService; Loading Loading @@ -138,6 +139,7 @@ public: static void setDynPolicyCallback(dynamic_policy_callback cb); static void setRecordConfigCallback(record_config_callback); static void setRoutingCallback(routing_callback cb); // helper function to obtain AudioFlinger service handle static const sp<IAudioFlinger> get_audio_flinger(); Loading Loading @@ -630,6 +632,7 @@ private: const std::vector<media::EffectDescriptor>& effects, int32_t patchHandle, media::AudioSourceType source) override; binder::Status onRoutingUpdated(); private: Mutex mLock; Loading @@ -656,6 +659,7 @@ private: static std::set<audio_error_callback> gAudioErrorCallbacks; static dynamic_policy_callback gDynPolicyCallback; static record_config_callback gRecordConfigCallback; static routing_callback gRoutingCallback; static size_t gInBuffSize; // previous parameters for recording buffer size queries Loading
services/audiopolicy/AudioPolicyInterface.h +2 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,8 @@ public: audio_patch_handle_t patchHandle, audio_source_t source) = 0; virtual void onRoutingUpdated() = 0; // Used to notify the sound trigger module that an audio capture is about to // take place. This should typically result in any active recognition // sessions to be preempted on modules that do not support sound trigger Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -5362,6 +5362,8 @@ void AudioPolicyManager::checkForDeviceAndOutputChanges(std::function<bool()> on if (mHwModules.getModuleFromName(AUDIO_HARDWARE_MODULE_ID_MSD) != 0) { setMsdPatch(); } // an event that changed routing likely occurred, inform upper layers mpClientInterface->onRoutingUpdated(); } bool AudioPolicyManager::followsSameRouting(const audio_attributes_t &lAttr, Loading