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