Loading include/media/AudioPolicy.h +13 −6 Original line number Diff line number Diff line Loading @@ -38,14 +38,17 @@ namespace android { #define MIX_TYPE_PLAYERS 0 #define MIX_TYPE_RECORDERS 1 // definition of the different events that can be reported on a dynamic policy from // AudioSystem's implementation of the AudioPolicyClient interface // keep in sync with AudioSystem.java #define DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE 0 #define MIX_STATE_DISABLED -1 #define MIX_STATE_IDLE 0 #define MIX_STATE_MIXING 1 #define ROUTE_FLAG_RENDER 0x1 #define ROUTE_FLAG_LOOP_BACK (0x1 << 1) #define MIX_FLAG_NOTIFY_ACTIVITY 0x1 #define MIX_ROUTE_FLAG_RENDER 0x1 #define MIX_ROUTE_FLAG_LOOP_BACK (0x1 << 1) #define MAX_MIXES_PER_POLICY 10 #define MAX_CRITERIA_PER_MIX 20 Loading @@ -67,11 +70,15 @@ public: class AudioMix { public: // flag on an AudioMix indicating the activity on this mix (IDLE, MIXING) // must be reported through the AudioPolicyClient interface static const uint32_t kCbFlagNotifyActivity = 0x1; AudioMix() {} AudioMix(Vector<AttributeMatchCriterion> criteria, uint32_t mixType, audio_config_t format, uint32_t routeFlags, String8 registrationId, uint32_t flags) : mCriteria(criteria), mMixType(mixType), mFormat(format), mRouteFlags(routeFlags), mRegistrationId(registrationId), mFlags(flags){} mRouteFlags(routeFlags), mRegistrationId(registrationId), mCbFlags(flags){} status_t readFromParcel(Parcel *parcel); status_t writeToParcel(Parcel *parcel) const; Loading @@ -81,7 +88,7 @@ public: audio_config_t mFormat; uint32_t mRouteFlags; String8 mRegistrationId; uint32_t mFlags; uint32_t mCbFlags; // flags indicating which callbacks to use, see kCbFlag* }; }; // namespace android Loading include/media/AudioSystem.h +3 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ namespace android { typedef void (*audio_error_callback)(status_t err); typedef void (*dynamic_policy_callback)(int event, String8 regId, int val); class IAudioFlinger; class IAudioPolicyService; Loading Loading @@ -89,6 +90,7 @@ public: static String8 getParameters(const String8& keys); static void setErrorCallback(audio_error_callback cb); static void setDynPolicyCallback(dynamic_policy_callback cb); // helper function to obtain AudioFlinger service handle static const sp<IAudioFlinger> get_audio_flinger(); Loading Loading @@ -409,6 +411,7 @@ private: static Mutex gLockAPS; // protects gAudioPolicyService and gAudioPolicyServiceClient static sp<IAudioFlinger> gAudioFlinger; static audio_error_callback gAudioErrorCallback; static dynamic_policy_callback gDynPolicyCallback; static size_t gInBuffSize; // previous parameters for recording buffer size queries Loading media/libmedia/AudioPolicy.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ status_t AudioMix::readFromParcel(Parcel *parcel) mFormat.format = (audio_format_t)parcel->readInt32(); mRouteFlags = parcel->readInt32(); mRegistrationId = parcel->readString8(); mFlags = (uint32_t)parcel->readInt32(); mCbFlags = (uint32_t)parcel->readInt32(); size_t size = (size_t)parcel->readInt32(); if (size > MAX_CRITERIA_PER_MIX) { size = MAX_CRITERIA_PER_MIX; Loading @@ -90,7 +90,7 @@ status_t AudioMix::writeToParcel(Parcel *parcel) const parcel->writeInt32(mFormat.format); parcel->writeInt32(mRouteFlags); parcel->writeString8(mRegistrationId); parcel->writeInt32(mFlags); parcel->writeInt32(mCbFlags); size_t size = mCriteria.size(); if (size > MAX_CRITERIA_PER_MIX) { size = MAX_CRITERIA_PER_MIX; Loading media/libmedia/AudioSystem.cpp +19 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ Mutex AudioSystem::gLockAPS; sp<IAudioFlinger> AudioSystem::gAudioFlinger; sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; audio_error_callback AudioSystem::gAudioErrorCallback = NULL; dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL; // Cached values for output handles DefaultKeyedVector<audio_io_handle_t, AudioSystem::OutputDescriptor *> AudioSystem::gOutputs(NULL); Loading Loading @@ -536,12 +537,18 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, audio_io_handle } } void AudioSystem::setErrorCallback(audio_error_callback cb) /*static*/ void AudioSystem::setErrorCallback(audio_error_callback cb) { Mutex::Autolock _l(gLock); gAudioErrorCallback = cb; } /*static*/ void AudioSystem::setDynPolicyCallback(dynamic_policy_callback cb) { Mutex::Autolock _l(gLock); gDynPolicyCallback = cb; } // client singleton for AudioPolicyService binder interface // protected by gLockAPS sp<IAudioPolicyService> AudioSystem::gAudioPolicyService; Loading Loading @@ -943,6 +950,7 @@ status_t AudioSystem::addAudioPortCallback(const sp<AudioPortCallback>& callBack return gAudioPolicyServiceClient->addAudioPortCallback(callBack); } /*static*/ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callBack) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); Loading @@ -955,7 +963,6 @@ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callB return gAudioPolicyServiceClient->removeAudioPortCallback(callBack); } status_t AudioSystem::acquireSoundTriggerSession(audio_session_t *session, audio_io_handle_t *ioHandle, audio_devices_t *device) Loading Loading @@ -1053,7 +1060,16 @@ void AudioSystem::AudioPolicyServiceClient::onAudioPatchListUpdate() void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate( String8 regId, int32_t state) { ALOGV("TODO propagate onDynamicPolicyMixStateUpdate(%s, %d)", regId.string(), state); ALOGV("AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(%s, %d)", regId.string(), state); dynamic_policy_callback cb = NULL; { Mutex::Autolock _l(AudioSystem::gLock); cb = gDynPolicyCallback; } if (cb != NULL) { cb(DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE, regId, state); } } void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused) Loading services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -315,13 +315,15 @@ void SwAudioOutputDescriptor::changeRefCount(audio_stream_type_t stream, mGlobalRefCount += delta; } if ((oldGlobalRefCount == 0) && (mGlobalRefCount > 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mFlags & MIX_FLAG_NOTIFY_ACTIVITY) != 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) { mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mRegistrationId, MIX_STATE_MIXING); } } else if ((oldGlobalRefCount > 0) && (mGlobalRefCount == 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mFlags & MIX_FLAG_NOTIFY_ACTIVITY) != 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) { mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mRegistrationId, MIX_STATE_IDLE); } Loading Loading
include/media/AudioPolicy.h +13 −6 Original line number Diff line number Diff line Loading @@ -38,14 +38,17 @@ namespace android { #define MIX_TYPE_PLAYERS 0 #define MIX_TYPE_RECORDERS 1 // definition of the different events that can be reported on a dynamic policy from // AudioSystem's implementation of the AudioPolicyClient interface // keep in sync with AudioSystem.java #define DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE 0 #define MIX_STATE_DISABLED -1 #define MIX_STATE_IDLE 0 #define MIX_STATE_MIXING 1 #define ROUTE_FLAG_RENDER 0x1 #define ROUTE_FLAG_LOOP_BACK (0x1 << 1) #define MIX_FLAG_NOTIFY_ACTIVITY 0x1 #define MIX_ROUTE_FLAG_RENDER 0x1 #define MIX_ROUTE_FLAG_LOOP_BACK (0x1 << 1) #define MAX_MIXES_PER_POLICY 10 #define MAX_CRITERIA_PER_MIX 20 Loading @@ -67,11 +70,15 @@ public: class AudioMix { public: // flag on an AudioMix indicating the activity on this mix (IDLE, MIXING) // must be reported through the AudioPolicyClient interface static const uint32_t kCbFlagNotifyActivity = 0x1; AudioMix() {} AudioMix(Vector<AttributeMatchCriterion> criteria, uint32_t mixType, audio_config_t format, uint32_t routeFlags, String8 registrationId, uint32_t flags) : mCriteria(criteria), mMixType(mixType), mFormat(format), mRouteFlags(routeFlags), mRegistrationId(registrationId), mFlags(flags){} mRouteFlags(routeFlags), mRegistrationId(registrationId), mCbFlags(flags){} status_t readFromParcel(Parcel *parcel); status_t writeToParcel(Parcel *parcel) const; Loading @@ -81,7 +88,7 @@ public: audio_config_t mFormat; uint32_t mRouteFlags; String8 mRegistrationId; uint32_t mFlags; uint32_t mCbFlags; // flags indicating which callbacks to use, see kCbFlag* }; }; // namespace android Loading
include/media/AudioSystem.h +3 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ namespace android { typedef void (*audio_error_callback)(status_t err); typedef void (*dynamic_policy_callback)(int event, String8 regId, int val); class IAudioFlinger; class IAudioPolicyService; Loading Loading @@ -89,6 +90,7 @@ public: static String8 getParameters(const String8& keys); static void setErrorCallback(audio_error_callback cb); static void setDynPolicyCallback(dynamic_policy_callback cb); // helper function to obtain AudioFlinger service handle static const sp<IAudioFlinger> get_audio_flinger(); Loading Loading @@ -409,6 +411,7 @@ private: static Mutex gLockAPS; // protects gAudioPolicyService and gAudioPolicyServiceClient static sp<IAudioFlinger> gAudioFlinger; static audio_error_callback gAudioErrorCallback; static dynamic_policy_callback gDynPolicyCallback; static size_t gInBuffSize; // previous parameters for recording buffer size queries Loading
media/libmedia/AudioPolicy.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ status_t AudioMix::readFromParcel(Parcel *parcel) mFormat.format = (audio_format_t)parcel->readInt32(); mRouteFlags = parcel->readInt32(); mRegistrationId = parcel->readString8(); mFlags = (uint32_t)parcel->readInt32(); mCbFlags = (uint32_t)parcel->readInt32(); size_t size = (size_t)parcel->readInt32(); if (size > MAX_CRITERIA_PER_MIX) { size = MAX_CRITERIA_PER_MIX; Loading @@ -90,7 +90,7 @@ status_t AudioMix::writeToParcel(Parcel *parcel) const parcel->writeInt32(mFormat.format); parcel->writeInt32(mRouteFlags); parcel->writeString8(mRegistrationId); parcel->writeInt32(mFlags); parcel->writeInt32(mCbFlags); size_t size = mCriteria.size(); if (size > MAX_CRITERIA_PER_MIX) { size = MAX_CRITERIA_PER_MIX; Loading
media/libmedia/AudioSystem.cpp +19 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ Mutex AudioSystem::gLockAPS; sp<IAudioFlinger> AudioSystem::gAudioFlinger; sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; audio_error_callback AudioSystem::gAudioErrorCallback = NULL; dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL; // Cached values for output handles DefaultKeyedVector<audio_io_handle_t, AudioSystem::OutputDescriptor *> AudioSystem::gOutputs(NULL); Loading Loading @@ -536,12 +537,18 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, audio_io_handle } } void AudioSystem::setErrorCallback(audio_error_callback cb) /*static*/ void AudioSystem::setErrorCallback(audio_error_callback cb) { Mutex::Autolock _l(gLock); gAudioErrorCallback = cb; } /*static*/ void AudioSystem::setDynPolicyCallback(dynamic_policy_callback cb) { Mutex::Autolock _l(gLock); gDynPolicyCallback = cb; } // client singleton for AudioPolicyService binder interface // protected by gLockAPS sp<IAudioPolicyService> AudioSystem::gAudioPolicyService; Loading Loading @@ -943,6 +950,7 @@ status_t AudioSystem::addAudioPortCallback(const sp<AudioPortCallback>& callBack return gAudioPolicyServiceClient->addAudioPortCallback(callBack); } /*static*/ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callBack) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); Loading @@ -955,7 +963,6 @@ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callB return gAudioPolicyServiceClient->removeAudioPortCallback(callBack); } status_t AudioSystem::acquireSoundTriggerSession(audio_session_t *session, audio_io_handle_t *ioHandle, audio_devices_t *device) Loading Loading @@ -1053,7 +1060,16 @@ void AudioSystem::AudioPolicyServiceClient::onAudioPatchListUpdate() void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate( String8 regId, int32_t state) { ALOGV("TODO propagate onDynamicPolicyMixStateUpdate(%s, %d)", regId.string(), state); ALOGV("AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(%s, %d)", regId.string(), state); dynamic_policy_callback cb = NULL; { Mutex::Autolock _l(AudioSystem::gLock); cb = gDynPolicyCallback; } if (cb != NULL) { cb(DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE, regId, state); } } void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused) Loading
services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -315,13 +315,15 @@ void SwAudioOutputDescriptor::changeRefCount(audio_stream_type_t stream, mGlobalRefCount += delta; } if ((oldGlobalRefCount == 0) && (mGlobalRefCount > 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mFlags & MIX_FLAG_NOTIFY_ACTIVITY) != 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) { mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mRegistrationId, MIX_STATE_MIXING); } } else if ((oldGlobalRefCount > 0) && (mGlobalRefCount == 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mFlags & MIX_FLAG_NOTIFY_ACTIVITY) != 0)) { if ((mPolicyMix != NULL) && ((mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) { mClientInterface->onDynamicPolicyMixStateUpdate(mPolicyMix->mRegistrationId, MIX_STATE_IDLE); } Loading