Loading include/media/AudioPolicy.h +6 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,12 @@ public: uint32_t mCbFlags; // flags indicating which callbacks to use, see kCbFlag* }; // definitions for audio recording configuration updates // which update type is reported #define RECORD_CONFIG_EVENT_START 1 #define RECORD_CONFIG_EVENT_STOP 0 }; // namespace android #endif // ANDROID_AUDIO_POLICY_H include/media/AudioSystem.h +5 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ namespace android { typedef void (*audio_error_callback)(status_t err); typedef void (*dynamic_policy_callback)(int event, String8 regId, int val); typedef void (*record_config_callback)(int event, int session, int source); class IAudioFlinger; class IAudioPolicyService; Loading Loading @@ -92,6 +93,7 @@ public: static void setErrorCallback(audio_error_callback cb); static void setDynPolicyCallback(dynamic_policy_callback cb); static void setRecordConfigCallback(record_config_callback); // helper function to obtain AudioFlinger service handle static const sp<IAudioFlinger> get_audio_flinger(); Loading Loading @@ -421,6 +423,8 @@ private: virtual void onAudioPortListUpdate(); virtual void onAudioPatchListUpdate(); virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state); virtual void onRecordingConfigurationUpdate(int event, audio_session_t session, audio_source_t source); private: Mutex mLock; Loading @@ -440,6 +444,7 @@ private: static sp<IAudioFlinger> gAudioFlinger; static audio_error_callback gAudioErrorCallback; static dynamic_policy_callback gDynPolicyCallback; static record_config_callback gRecordConfigCallback; static size_t gInBuffSize; // previous parameters for recording buffer size queries Loading include/media/IAudioPolicyServiceClient.h +3 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ public: virtual void onAudioPatchListUpdate() = 0; // Notifies a change in the mixing state of a specific mix in a dynamic audio policy virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state) = 0; // Notifies a change of audio recording configuration virtual void onRecordingConfigurationUpdate(int event, audio_session_t session, audio_source_t source) = 0; }; Loading media/libmedia/AudioSystem.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ sp<IAudioFlinger> AudioSystem::gAudioFlinger; sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; audio_error_callback AudioSystem::gAudioErrorCallback = NULL; dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL; record_config_callback AudioSystem::gRecordConfigCallback = NULL; // establish binder interface to AudioFlinger service Loading Loading @@ -652,6 +653,12 @@ status_t AudioSystem::AudioFlingerClient::removeAudioDeviceCallback( gDynPolicyCallback = cb; } /*static*/ void AudioSystem::setRecordConfigCallback(record_config_callback cb) { Mutex::Autolock _l(gLock); gRecordConfigCallback = cb; } // client singleton for AudioPolicyService binder interface // protected by gLockAPS sp<IAudioPolicyService> AudioSystem::gAudioPolicyService; Loading Loading @@ -1237,6 +1244,19 @@ void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate( } } void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate( int event, audio_session_t session, audio_source_t source) { record_config_callback cb = NULL; { Mutex::Autolock _l(AudioSystem::gLock); cb = gRecordConfigCallback; } if (cb != NULL) { cb(event, session, source); } } void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused) { { Loading media/libmedia/IAudioPolicyServiceClient.cpp +21 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ namespace android { enum { PORT_LIST_UPDATE = IBinder::FIRST_CALL_TRANSACTION, PATCH_LIST_UPDATE, MIX_STATE_UPDATE MIX_STATE_UPDATE, RECORDING_CONFIGURATION_UPDATE }; class BpAudioPolicyServiceClient : public BpInterface<IAudioPolicyServiceClient> Loading Loading @@ -63,6 +64,16 @@ public: data.writeInt32(state); remote()->transact(MIX_STATE_UPDATE, data, &reply, IBinder::FLAG_ONEWAY); } void onRecordingConfigurationUpdate(int event, audio_session_t session, audio_source_t source) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor()); data.writeInt32(event); data.writeInt32(session); data.writeInt32(source); remote()->transact(RECORDING_CONFIGURATION_UPDATE, data, &reply, IBinder::FLAG_ONEWAY); } }; IMPLEMENT_META_INTERFACE(AudioPolicyServiceClient, "android.media.IAudioPolicyServiceClient"); Loading @@ -89,7 +100,15 @@ status_t BnAudioPolicyServiceClient::onTransact( int32_t state = data.readInt32(); onDynamicPolicyMixStateUpdate(regId, state); return NO_ERROR; } } break; case RECORDING_CONFIGURATION_UPDATE: { CHECK_INTERFACE(IAudioPolicyServiceClient, data, reply); int event = (int) data.readInt32(); audio_session_t session = (audio_session_t) data.readInt32(); audio_source_t source = (audio_source_t) data.readInt32(); onRecordingConfigurationUpdate(event, session, source); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading Loading
include/media/AudioPolicy.h +6 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,12 @@ public: uint32_t mCbFlags; // flags indicating which callbacks to use, see kCbFlag* }; // definitions for audio recording configuration updates // which update type is reported #define RECORD_CONFIG_EVENT_START 1 #define RECORD_CONFIG_EVENT_STOP 0 }; // namespace android #endif // ANDROID_AUDIO_POLICY_H
include/media/AudioSystem.h +5 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ namespace android { typedef void (*audio_error_callback)(status_t err); typedef void (*dynamic_policy_callback)(int event, String8 regId, int val); typedef void (*record_config_callback)(int event, int session, int source); class IAudioFlinger; class IAudioPolicyService; Loading Loading @@ -92,6 +93,7 @@ public: static void setErrorCallback(audio_error_callback cb); static void setDynPolicyCallback(dynamic_policy_callback cb); static void setRecordConfigCallback(record_config_callback); // helper function to obtain AudioFlinger service handle static const sp<IAudioFlinger> get_audio_flinger(); Loading Loading @@ -421,6 +423,8 @@ private: virtual void onAudioPortListUpdate(); virtual void onAudioPatchListUpdate(); virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state); virtual void onRecordingConfigurationUpdate(int event, audio_session_t session, audio_source_t source); private: Mutex mLock; Loading @@ -440,6 +444,7 @@ private: static sp<IAudioFlinger> gAudioFlinger; static audio_error_callback gAudioErrorCallback; static dynamic_policy_callback gDynPolicyCallback; static record_config_callback gRecordConfigCallback; static size_t gInBuffSize; // previous parameters for recording buffer size queries Loading
include/media/IAudioPolicyServiceClient.h +3 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ public: virtual void onAudioPatchListUpdate() = 0; // Notifies a change in the mixing state of a specific mix in a dynamic audio policy virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state) = 0; // Notifies a change of audio recording configuration virtual void onRecordingConfigurationUpdate(int event, audio_session_t session, audio_source_t source) = 0; }; Loading
media/libmedia/AudioSystem.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ sp<IAudioFlinger> AudioSystem::gAudioFlinger; sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; audio_error_callback AudioSystem::gAudioErrorCallback = NULL; dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL; record_config_callback AudioSystem::gRecordConfigCallback = NULL; // establish binder interface to AudioFlinger service Loading Loading @@ -652,6 +653,12 @@ status_t AudioSystem::AudioFlingerClient::removeAudioDeviceCallback( gDynPolicyCallback = cb; } /*static*/ void AudioSystem::setRecordConfigCallback(record_config_callback cb) { Mutex::Autolock _l(gLock); gRecordConfigCallback = cb; } // client singleton for AudioPolicyService binder interface // protected by gLockAPS sp<IAudioPolicyService> AudioSystem::gAudioPolicyService; Loading Loading @@ -1237,6 +1244,19 @@ void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate( } } void AudioSystem::AudioPolicyServiceClient::onRecordingConfigurationUpdate( int event, audio_session_t session, audio_source_t source) { record_config_callback cb = NULL; { Mutex::Autolock _l(AudioSystem::gLock); cb = gRecordConfigCallback; } if (cb != NULL) { cb(event, session, source); } } void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused) { { Loading
media/libmedia/IAudioPolicyServiceClient.cpp +21 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ namespace android { enum { PORT_LIST_UPDATE = IBinder::FIRST_CALL_TRANSACTION, PATCH_LIST_UPDATE, MIX_STATE_UPDATE MIX_STATE_UPDATE, RECORDING_CONFIGURATION_UPDATE }; class BpAudioPolicyServiceClient : public BpInterface<IAudioPolicyServiceClient> Loading Loading @@ -63,6 +64,16 @@ public: data.writeInt32(state); remote()->transact(MIX_STATE_UPDATE, data, &reply, IBinder::FLAG_ONEWAY); } void onRecordingConfigurationUpdate(int event, audio_session_t session, audio_source_t source) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor()); data.writeInt32(event); data.writeInt32(session); data.writeInt32(source); remote()->transact(RECORDING_CONFIGURATION_UPDATE, data, &reply, IBinder::FLAG_ONEWAY); } }; IMPLEMENT_META_INTERFACE(AudioPolicyServiceClient, "android.media.IAudioPolicyServiceClient"); Loading @@ -89,7 +100,15 @@ status_t BnAudioPolicyServiceClient::onTransact( int32_t state = data.readInt32(); onDynamicPolicyMixStateUpdate(regId, state); return NO_ERROR; } } break; case RECORDING_CONFIGURATION_UPDATE: { CHECK_INTERFACE(IAudioPolicyServiceClient, data, reply); int event = (int) data.readInt32(); audio_session_t session = (audio_session_t) data.readInt32(); audio_source_t source = (audio_source_t) data.readInt32(); onRecordingConfigurationUpdate(event, session, source); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading