12d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent/* 22d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * Copyright (C) 2009 The Android Open Source Project 32d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * 42d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 52d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * you may not use this file except in compliance with the License. 62d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * You may obtain a copy of the License at 72d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * 82d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 92d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * 102d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * Unless required by applicable law or agreed to in writing, software 112d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 122d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * See the License for the specific language governing permissions and 142d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent * limitations under the License. 152d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent */ 162d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 17dce54a1492c410ad0d93253b341fb33305337505Eric Laurent#define LOG_TAG "AudioPolicyClientImpl" 182d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent//#define LOG_NDEBUG 0 192d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 20df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent#include <soundtrigger/SoundTrigger.h> 212d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent#include <utils/Log.h> 222d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent#include "AudioPolicyService.h" 232d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 242d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurentnamespace android { 252d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 26dce54a1492c410ad0d93253b341fb33305337505Eric Laurent/* implementation of the client interface from the policy manager */ 272d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 28dce54a1492c410ad0d93253b341fb33305337505Eric Laurentaudio_module_handle_t AudioPolicyService::AudioPolicyClient::loadHwModule(const char *name) 292d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 302d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 312d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 322d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent ALOGW("%s: could not get AudioFlinger", __func__); 33a13cde98a880341f0a56d91da6364b093fb5d24eGlenn Kasten return AUDIO_MODULE_HANDLE_NONE; 342d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 352d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 362d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return af->loadHwModule(name); 372d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 382d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 39cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurentstatus_t AudioPolicyService::AudioPolicyClient::openOutput(audio_module_handle_t module, 40cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_io_handle_t *output, 41cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_config_t *config, 42cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_devices_t *devices, 43cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent const String8& address, 44cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent uint32_t *latencyMs, 45cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_output_flags_t flags) 462d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 472d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 482d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 492d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent ALOGW("%s: could not get AudioFlinger", __func__); 50cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent return PERMISSION_DENIED; 512d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 52cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent return af->openOutput(module, output, config, devices, address, latencyMs, flags); 532d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 542d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 55dce54a1492c410ad0d93253b341fb33305337505Eric Laurentaudio_io_handle_t AudioPolicyService::AudioPolicyClient::openDuplicateOutput( 56dce54a1492c410ad0d93253b341fb33305337505Eric Laurent audio_io_handle_t output1, 57dce54a1492c410ad0d93253b341fb33305337505Eric Laurent audio_io_handle_t output2) 582d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 592d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 602d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 612d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent ALOGW("%s: could not get AudioFlinger", __func__); 622d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return 0; 632d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 642d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return af->openDuplicateOutput(output1, output2); 652d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 662d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 67dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::closeOutput(audio_io_handle_t output) 682d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 692d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 702d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 712d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return PERMISSION_DENIED; 722d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 732d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 742d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return af->closeOutput(output); 752d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 762d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 77dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::suspendOutput(audio_io_handle_t output) 782d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 792d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 802d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 812d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent ALOGW("%s: could not get AudioFlinger", __func__); 822d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return PERMISSION_DENIED; 832d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 842d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 852d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return af->suspendOutput(output); 862d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 872d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 88dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::restoreOutput(audio_io_handle_t output) 892d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 902d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 912d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 922d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent ALOGW("%s: could not get AudioFlinger", __func__); 932d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return PERMISSION_DENIED; 942d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 952d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 962d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return af->restoreOutput(output); 972d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 982d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 99cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurentstatus_t AudioPolicyService::AudioPolicyClient::openInput(audio_module_handle_t module, 100cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_io_handle_t *input, 101cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_config_t *config, 102cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_devices_t *device, 103cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent const String8& address, 104cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_source_t source, 105cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent audio_input_flags_t flags) 1062d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 1072d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 1082d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 1092d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent ALOGW("%s: could not get AudioFlinger", __func__); 110cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent return PERMISSION_DENIED; 1112d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 1122d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 113cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bfEric Laurent return af->openInput(module, input, config, device, address, source, flags); 1142d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1152d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 116dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::closeInput(audio_io_handle_t input) 1172d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 1182d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 1192d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 1202d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return PERMISSION_DENIED; 1212d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 1222d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 1232d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return af->closeInput(input); 1242d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1252d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 126dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::setStreamVolume(audio_stream_type_t stream, 127dce54a1492c410ad0d93253b341fb33305337505Eric Laurent float volume, audio_io_handle_t output, 128dce54a1492c410ad0d93253b341fb33305337505Eric Laurent int delay_ms) 1292d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 130dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return mAudioPolicyService->setStreamVolume(stream, volume, output, 131dce54a1492c410ad0d93253b341fb33305337505Eric Laurent delay_ms); 1322d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1332d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 134dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::invalidateStream(audio_stream_type_t stream) 1352d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 1362d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 1372d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent if (af == 0) { 1382d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent return PERMISSION_DENIED; 1392d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent } 1402d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 141dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return af->invalidateStream(stream); 1422d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1432d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 144dce54a1492c410ad0d93253b341fb33305337505Eric Laurentvoid AudioPolicyService::AudioPolicyClient::setParameters(audio_io_handle_t io_handle, 145dce54a1492c410ad0d93253b341fb33305337505Eric Laurent const String8& keyValuePairs, 146dce54a1492c410ad0d93253b341fb33305337505Eric Laurent int delay_ms) 1472d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 148dce54a1492c410ad0d93253b341fb33305337505Eric Laurent mAudioPolicyService->setParameters(io_handle, keyValuePairs.string(), delay_ms); 1492d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1502d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 151dce54a1492c410ad0d93253b341fb33305337505Eric LaurentString8 AudioPolicyService::AudioPolicyClient::getParameters(audio_io_handle_t io_handle, 152dce54a1492c410ad0d93253b341fb33305337505Eric Laurent const String8& keys) 1532d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 154dce54a1492c410ad0d93253b341fb33305337505Eric Laurent String8 result = AudioSystem::getParameters(io_handle, keys); 155dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return result; 1562d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1572d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 158dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::startTone(audio_policy_tone_t tone, 159dce54a1492c410ad0d93253b341fb33305337505Eric Laurent audio_stream_type_t stream) 1602d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 161dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return mAudioPolicyService->startTone(tone, stream); 1622d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1632d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 164dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::stopTone() 1652d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 166dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return mAudioPolicyService->stopTone(); 1672d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1682d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 169dce54a1492c410ad0d93253b341fb33305337505Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::setVoiceVolume(float volume, int delay_ms) 1702d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 171dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return mAudioPolicyService->setVoiceVolume(volume, delay_ms); 1722d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1732d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 174d848eb48c121c119e8ba7583efc75415fe102570Glenn Kastenstatus_t AudioPolicyService::AudioPolicyClient::moveEffects(audio_session_t session, 175dce54a1492c410ad0d93253b341fb33305337505Eric Laurent audio_io_handle_t src_output, 176dce54a1492c410ad0d93253b341fb33305337505Eric Laurent audio_io_handle_t dst_output) 1772d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent{ 178dce54a1492c410ad0d93253b341fb33305337505Eric Laurent sp<IAudioFlinger> af = AudioSystem::get_audio_flinger(); 179dce54a1492c410ad0d93253b341fb33305337505Eric Laurent if (af == 0) { 180dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return PERMISSION_DENIED; 181dce54a1492c410ad0d93253b341fb33305337505Eric Laurent } 1822d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 183dce54a1492c410ad0d93253b341fb33305337505Eric Laurent return af->moveEffects(session, src_output, dst_output); 1842d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent} 1852d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 186951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::createAudioPatch(const struct audio_patch *patch, 187951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent audio_patch_handle_t *handle, 188951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent int delayMs) 189951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent{ 190951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent return mAudioPolicyService->clientCreateAudioPatch(patch, handle, delayMs); 191951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent} 192dce54a1492c410ad0d93253b341fb33305337505Eric Laurent 193951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::releaseAudioPatch(audio_patch_handle_t handle, 194951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent int delayMs) 195951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent{ 196951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent return mAudioPolicyService->clientReleaseAudioPatch(handle, delayMs); 197951f455566775e5f01e67c5ee26863d7d19209d7Eric Laurent} 1982d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent 199e1715a465a29db625da9d0ea365edf371e39e201Eric Laurentstatus_t AudioPolicyService::AudioPolicyClient::setAudioPortConfig( 200e1715a465a29db625da9d0ea365edf371e39e201Eric Laurent const struct audio_port_config *config, 201e1715a465a29db625da9d0ea365edf371e39e201Eric Laurent int delayMs) 202e1715a465a29db625da9d0ea365edf371e39e201Eric Laurent{ 203e1715a465a29db625da9d0ea365edf371e39e201Eric Laurent return mAudioPolicyService->clientSetAudioPortConfig(config, delayMs); 204e1715a465a29db625da9d0ea365edf371e39e201Eric Laurent} 205e1715a465a29db625da9d0ea365edf371e39e201Eric Laurent 206b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurentvoid AudioPolicyService::AudioPolicyClient::onAudioPortListUpdate() 207b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent{ 208b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent mAudioPolicyService->onAudioPortListUpdate(); 209b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent} 210b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent 211b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurentvoid AudioPolicyService::AudioPolicyClient::onAudioPatchListUpdate() 212b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent{ 213b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent mAudioPolicyService->onAudioPatchListUpdate(); 214b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent} 215b52c152d553556b2d227ffc943489de0c60b4b02Eric Laurent 216de80105c3f2db0eabd47640c49387ea3b44d4782Jean-Michel Trivivoid AudioPolicyService::AudioPolicyClient::onDynamicPolicyMixStateUpdate( 217de80105c3f2db0eabd47640c49387ea3b44d4782Jean-Michel Trivi String8 regId, int32_t state) 218de80105c3f2db0eabd47640c49387ea3b44d4782Jean-Michel Trivi{ 219de80105c3f2db0eabd47640c49387ea3b44d4782Jean-Michel Trivi mAudioPolicyService->onDynamicPolicyMixStateUpdate(regId, state); 220de80105c3f2db0eabd47640c49387ea3b44d4782Jean-Michel Trivi} 221de80105c3f2db0eabd47640c49387ea3b44d4782Jean-Michel Trivi 2222f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivivoid AudioPolicyService::AudioPolicyClient::onRecordingConfigurationUpdate( 2237281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi int event, audio_session_t session, audio_source_t source, 2248c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig, 2258c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi audio_patch_handle_t patchHandle) 2262f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi{ 2277281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi mAudioPolicyService->onRecordingConfigurationUpdate(event, session, source, 2288c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi clientConfig, deviceConfig, patchHandle); 2292f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi} 2302f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi 231eeecb980ff4c202d0a3c4b0bfe040dce2f73336dGlenn Kastenaudio_unique_id_t AudioPolicyService::AudioPolicyClient::newAudioUniqueId(audio_unique_id_use_t use) 232de3f8392fbf380ba6f09d009b00d7172477389a2Eric Laurent{ 233eeecb980ff4c202d0a3c4b0bfe040dce2f73336dGlenn Kasten return AudioSystem::newAudioUniqueId(use); 234de3f8392fbf380ba6f09d009b00d7172477389a2Eric Laurent} 235de3f8392fbf380ba6f09d009b00d7172477389a2Eric Laurent 2362d388eccc9dc085337c7a03a68467cbee6b809e1Eric Laurent}; // namespace android 237