Loading media/libaudioclient/AudioSystem.cpp +7 −0 Original line number Original line Diff line number Diff line Loading @@ -792,6 +792,13 @@ const sp<IAudioPolicyService> AudioSystem::get_audio_policy_service() // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- void AudioSystem::onNewAudioModulesAvailable() { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return; aps->onNewAudioModulesAvailable(); } status_t AudioSystem::setDeviceConnectionState(audio_devices_t device, status_t AudioSystem::setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, audio_policy_dev_state_t state, const char *device_address, const char *device_address, Loading media/libaudioclient/IAudioPolicyService.cpp +16 −1 Original line number Original line Diff line number Diff line Loading @@ -113,6 +113,7 @@ enum { REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_DEVICES_FOR_ATTRIBUTES, GET_DEVICES_FOR_ATTRIBUTES, AUDIO_MODULES_UPDATED, // oneway }; }; #define MAX_ITEMS_PER_LIST 1024 #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -1451,6 +1452,13 @@ public: } } return NO_ERROR; return NO_ERROR; } } virtual void onNewAudioModulesAvailable() { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); remote()->transact(AUDIO_MODULES_UPDATED, data, &reply, IBinder::FLAG_ONEWAY); } }; }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -1522,7 +1530,8 @@ status_t BnAudioPolicyService::onTransact( case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_DEVICES_FOR_ATTRIBUTES: case GET_DEVICES_FOR_ATTRIBUTES: case SET_ALLOWED_CAPTURE_POLICY: { case SET_ALLOWED_CAPTURE_POLICY: case AUDIO_MODULES_UPDATED: { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -2672,6 +2681,12 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; return NO_ERROR; } } case AUDIO_MODULES_UPDATED: { CHECK_INTERFACE(IAudioPolicyService, data, reply); onNewAudioModulesAvailable(); return NO_ERROR; } break; default: default: return BBinder::onTransact(code, data, reply, flags); return BBinder::onTransact(code, data, reply, flags); } } Loading media/libaudioclient/include/media/AudioSystem.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -221,6 +221,7 @@ public: // // // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // // static void onNewAudioModulesAvailable(); static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address, const char *device_name, const char *device_address, const char *device_name, audio_format_t encodedFormat); audio_format_t encodedFormat); Loading media/libaudioclient/include/media/IAudioPolicyService.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -42,6 +42,7 @@ public: // // // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // // virtual void onNewAudioModulesAvailable() = 0; virtual status_t setDeviceConnectionState(audio_devices_t device, virtual status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, audio_policy_dev_state_t state, const char *device_address, const char *device_address, Loading services/audioflinger/AudioFlinger.cpp +17 −0 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <string> #include <string> #include <sys/time.h> #include <sys/time.h> #include <sys/resource.h> #include <sys/resource.h> #include <thread> #include <android/os/IExternalVibratorService.h> #include <android/os/IExternalVibratorService.h> #include <binder/IPCThreadState.h> #include <binder/IPCThreadState.h> Loading Loading @@ -144,6 +145,19 @@ static sp<os::IExternalVibratorService> getExternalVibratorService() { return sExternalVibratorService; return sExternalVibratorService; } } class DevicesFactoryHalCallbackImpl : public DevicesFactoryHalCallback { public: void onNewDevicesAvailable() override { // Start a detached thread to execute notification in parallel. // This is done to prevent mutual blocking of audio_flinger and // audio_policy services during system initialization. std::thread notifier([]() { AudioSystem::onNewAudioModulesAvailable(); }); notifier.detach(); } }; // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- std::string formatToString(audio_format_t format) { std::string formatToString(audio_format_t format) { Loading Loading @@ -227,6 +241,9 @@ void AudioFlinger::onFirstRef() mMode = AUDIO_MODE_NORMAL; mMode = AUDIO_MODE_NORMAL; gAudioFlinger = this; gAudioFlinger = this; mDevicesFactoryHalCallback = new DevicesFactoryHalCallbackImpl; mDevicesFactoryHal->setCallbackOnce(mDevicesFactoryHalCallback); } } status_t AudioFlinger::setAudioHalPids(const std::vector<pid_t>& pids) { status_t AudioFlinger::setAudioHalPids(const std::vector<pid_t>& pids) { Loading Loading
media/libaudioclient/AudioSystem.cpp +7 −0 Original line number Original line Diff line number Diff line Loading @@ -792,6 +792,13 @@ const sp<IAudioPolicyService> AudioSystem::get_audio_policy_service() // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- void AudioSystem::onNewAudioModulesAvailable() { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return; aps->onNewAudioModulesAvailable(); } status_t AudioSystem::setDeviceConnectionState(audio_devices_t device, status_t AudioSystem::setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, audio_policy_dev_state_t state, const char *device_address, const char *device_address, Loading
media/libaudioclient/IAudioPolicyService.cpp +16 −1 Original line number Original line Diff line number Diff line Loading @@ -113,6 +113,7 @@ enum { REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY, GET_DEVICES_FOR_ATTRIBUTES, GET_DEVICES_FOR_ATTRIBUTES, AUDIO_MODULES_UPDATED, // oneway }; }; #define MAX_ITEMS_PER_LIST 1024 #define MAX_ITEMS_PER_LIST 1024 Loading Loading @@ -1451,6 +1452,13 @@ public: } } return NO_ERROR; return NO_ERROR; } } virtual void onNewAudioModulesAvailable() { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); remote()->transact(AUDIO_MODULES_UPDATED, data, &reply, IBinder::FLAG_ONEWAY); } }; }; IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); Loading Loading @@ -1522,7 +1530,8 @@ status_t BnAudioPolicyService::onTransact( case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: case GET_DEVICES_FOR_ATTRIBUTES: case GET_DEVICES_FOR_ATTRIBUTES: case SET_ALLOWED_CAPTURE_POLICY: { case SET_ALLOWED_CAPTURE_POLICY: case AUDIO_MODULES_UPDATED: { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { if (!isServiceUid(IPCThreadState::self()->getCallingUid())) { ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", ALOGW("%s: transaction %d received from PID %d unauthorized UID %d", __func__, code, IPCThreadState::self()->getCallingPid(), __func__, code, IPCThreadState::self()->getCallingPid(), Loading Loading @@ -2672,6 +2681,12 @@ status_t BnAudioPolicyService::onTransact( return NO_ERROR; return NO_ERROR; } } case AUDIO_MODULES_UPDATED: { CHECK_INTERFACE(IAudioPolicyService, data, reply); onNewAudioModulesAvailable(); return NO_ERROR; } break; default: default: return BBinder::onTransact(code, data, reply, flags); return BBinder::onTransact(code, data, reply, flags); } } Loading
media/libaudioclient/include/media/AudioSystem.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -221,6 +221,7 @@ public: // // // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // // static void onNewAudioModulesAvailable(); static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address, const char *device_name, const char *device_address, const char *device_name, audio_format_t encodedFormat); audio_format_t encodedFormat); Loading
media/libaudioclient/include/media/IAudioPolicyService.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -42,6 +42,7 @@ public: // // // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) // // virtual void onNewAudioModulesAvailable() = 0; virtual status_t setDeviceConnectionState(audio_devices_t device, virtual status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, audio_policy_dev_state_t state, const char *device_address, const char *device_address, Loading
services/audioflinger/AudioFlinger.cpp +17 −0 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <string> #include <string> #include <sys/time.h> #include <sys/time.h> #include <sys/resource.h> #include <sys/resource.h> #include <thread> #include <android/os/IExternalVibratorService.h> #include <android/os/IExternalVibratorService.h> #include <binder/IPCThreadState.h> #include <binder/IPCThreadState.h> Loading Loading @@ -144,6 +145,19 @@ static sp<os::IExternalVibratorService> getExternalVibratorService() { return sExternalVibratorService; return sExternalVibratorService; } } class DevicesFactoryHalCallbackImpl : public DevicesFactoryHalCallback { public: void onNewDevicesAvailable() override { // Start a detached thread to execute notification in parallel. // This is done to prevent mutual blocking of audio_flinger and // audio_policy services during system initialization. std::thread notifier([]() { AudioSystem::onNewAudioModulesAvailable(); }); notifier.detach(); } }; // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- std::string formatToString(audio_format_t format) { std::string formatToString(audio_format_t format) { Loading Loading @@ -227,6 +241,9 @@ void AudioFlinger::onFirstRef() mMode = AUDIO_MODE_NORMAL; mMode = AUDIO_MODE_NORMAL; gAudioFlinger = this; gAudioFlinger = this; mDevicesFactoryHalCallback = new DevicesFactoryHalCallbackImpl; mDevicesFactoryHal->setCallbackOnce(mDevicesFactoryHalCallback); } } status_t AudioFlinger::setAudioHalPids(const std::vector<pid_t>& pids) { status_t AudioFlinger::setAudioHalPids(const std::vector<pid_t>& pids) { Loading