blob: d51cc6ecc68775c9d6ac5c77f2f9cc0eaff629bb [file] [log] [blame]
Eric Laurent2d388ec2014-03-07 13:25:54 -08001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Eric Laurentdce54a12014-03-10 12:19:46 -070017#define LOG_TAG "AudioPolicyClientImpl"
Eric Laurent2d388ec2014-03-07 13:25:54 -080018//#define LOG_NDEBUG 0
19
Eric Laurentdf3dc7e2014-07-27 18:39:40 -070020#include <soundtrigger/SoundTrigger.h>
Eric Laurent2d388ec2014-03-07 13:25:54 -080021#include <utils/Log.h>
Eric Laurent2d388ec2014-03-07 13:25:54 -080022#include "AudioPolicyService.h"
Eric Laurent2d388ec2014-03-07 13:25:54 -080023
24namespace android {
25
Eric Laurentdce54a12014-03-10 12:19:46 -070026/* implementation of the client interface from the policy manager */
Eric Laurent2d388ec2014-03-07 13:25:54 -080027
Eric Laurentdce54a12014-03-10 12:19:46 -070028audio_module_handle_t AudioPolicyService::AudioPolicyClient::loadHwModule(const char *name)
Eric Laurent2d388ec2014-03-07 13:25:54 -080029{
30 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
31 if (af == 0) {
32 ALOGW("%s: could not get AudioFlinger", __func__);
Glenn Kastena13cde92016-03-28 15:26:02 -070033 return AUDIO_MODULE_HANDLE_NONE;
Eric Laurent2d388ec2014-03-07 13:25:54 -080034 }
35
36 return af->loadHwModule(name);
37}
38
Eric Laurentcf2c0212014-07-25 16:20:43 -070039status_t AudioPolicyService::AudioPolicyClient::openOutput(audio_module_handle_t module,
40 audio_io_handle_t *output,
41 audio_config_t *config,
42 audio_devices_t *devices,
43 const String8& address,
44 uint32_t *latencyMs,
45 audio_output_flags_t flags)
Eric Laurent2d388ec2014-03-07 13:25:54 -080046{
47 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
48 if (af == 0) {
49 ALOGW("%s: could not get AudioFlinger", __func__);
Eric Laurentcf2c0212014-07-25 16:20:43 -070050 return PERMISSION_DENIED;
Eric Laurent2d388ec2014-03-07 13:25:54 -080051 }
Eric Laurentcf2c0212014-07-25 16:20:43 -070052 return af->openOutput(module, output, config, devices, address, latencyMs, flags);
Eric Laurent2d388ec2014-03-07 13:25:54 -080053}
54
Eric Laurentdce54a12014-03-10 12:19:46 -070055audio_io_handle_t AudioPolicyService::AudioPolicyClient::openDuplicateOutput(
56 audio_io_handle_t output1,
57 audio_io_handle_t output2)
Eric Laurent2d388ec2014-03-07 13:25:54 -080058{
59 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
60 if (af == 0) {
61 ALOGW("%s: could not get AudioFlinger", __func__);
62 return 0;
63 }
64 return af->openDuplicateOutput(output1, output2);
65}
66
Eric Laurentdce54a12014-03-10 12:19:46 -070067status_t AudioPolicyService::AudioPolicyClient::closeOutput(audio_io_handle_t output)
Eric Laurent2d388ec2014-03-07 13:25:54 -080068{
69 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
70 if (af == 0) {
71 return PERMISSION_DENIED;
72 }
73
74 return af->closeOutput(output);
75}
76
Eric Laurentdce54a12014-03-10 12:19:46 -070077status_t AudioPolicyService::AudioPolicyClient::suspendOutput(audio_io_handle_t output)
Eric Laurent2d388ec2014-03-07 13:25:54 -080078{
79 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
80 if (af == 0) {
81 ALOGW("%s: could not get AudioFlinger", __func__);
82 return PERMISSION_DENIED;
83 }
84
85 return af->suspendOutput(output);
86}
87
Eric Laurentdce54a12014-03-10 12:19:46 -070088status_t AudioPolicyService::AudioPolicyClient::restoreOutput(audio_io_handle_t output)
Eric Laurent2d388ec2014-03-07 13:25:54 -080089{
90 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
91 if (af == 0) {
92 ALOGW("%s: could not get AudioFlinger", __func__);
93 return PERMISSION_DENIED;
94 }
95
96 return af->restoreOutput(output);
97}
98
Eric Laurentcf2c0212014-07-25 16:20:43 -070099status_t AudioPolicyService::AudioPolicyClient::openInput(audio_module_handle_t module,
100 audio_io_handle_t *input,
101 audio_config_t *config,
102 audio_devices_t *device,
103 const String8& address,
104 audio_source_t source,
105 audio_input_flags_t flags)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800106{
107 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
108 if (af == 0) {
109 ALOGW("%s: could not get AudioFlinger", __func__);
Eric Laurentcf2c0212014-07-25 16:20:43 -0700110 return PERMISSION_DENIED;
Eric Laurent2d388ec2014-03-07 13:25:54 -0800111 }
112
Eric Laurentcf2c0212014-07-25 16:20:43 -0700113 return af->openInput(module, input, config, device, address, source, flags);
Eric Laurent2d388ec2014-03-07 13:25:54 -0800114}
115
Eric Laurentdce54a12014-03-10 12:19:46 -0700116status_t AudioPolicyService::AudioPolicyClient::closeInput(audio_io_handle_t input)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800117{
118 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
119 if (af == 0) {
120 return PERMISSION_DENIED;
121 }
122
123 return af->closeInput(input);
124}
125
Eric Laurentdce54a12014-03-10 12:19:46 -0700126status_t AudioPolicyService::AudioPolicyClient::setStreamVolume(audio_stream_type_t stream,
127 float volume, audio_io_handle_t output,
128 int delay_ms)
129{
130 return mAudioPolicyService->setStreamVolume(stream, volume, output,
131 delay_ms);
132}
133
134status_t AudioPolicyService::AudioPolicyClient::invalidateStream(audio_stream_type_t stream)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800135{
136 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
137 if (af == 0) {
138 return PERMISSION_DENIED;
139 }
140
141 return af->invalidateStream(stream);
142}
143
Eric Laurentdce54a12014-03-10 12:19:46 -0700144void AudioPolicyService::AudioPolicyClient::setParameters(audio_io_handle_t io_handle,
145 const String8& keyValuePairs,
146 int delay_ms)
147{
148 mAudioPolicyService->setParameters(io_handle, keyValuePairs.string(), delay_ms);
149}
150
151String8 AudioPolicyService::AudioPolicyClient::getParameters(audio_io_handle_t io_handle,
152 const String8& keys)
153{
154 String8 result = AudioSystem::getParameters(io_handle, keys);
155 return result;
156}
157
Eric Laurentdce54a12014-03-10 12:19:46 -0700158status_t AudioPolicyService::AudioPolicyClient::setVoiceVolume(float volume, int delay_ms)
159{
160 return mAudioPolicyService->setVoiceVolume(volume, delay_ms);
161}
162
Glenn Kastend848eb42016-03-08 13:42:11 -0800163status_t AudioPolicyService::AudioPolicyClient::moveEffects(audio_session_t session,
Eric Laurentdce54a12014-03-10 12:19:46 -0700164 audio_io_handle_t src_output,
165 audio_io_handle_t dst_output)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800166{
167 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
168 if (af == 0) {
169 return PERMISSION_DENIED;
170 }
171
172 return af->moveEffects(session, src_output, dst_output);
173}
174
Eric Laurentb20cf7d2019-04-05 19:37:34 -0700175void AudioPolicyService::AudioPolicyClient::setEffectSuspended(int effectId,
176 audio_session_t sessionId,
177 bool suspended)
178{
179 mAudioPolicyService->setEffectSuspended(effectId, sessionId, suspended);
180}
181
Eric Laurent951f4552014-05-20 10:48:17 -0700182status_t AudioPolicyService::AudioPolicyClient::createAudioPatch(const struct audio_patch *patch,
183 audio_patch_handle_t *handle,
184 int delayMs)
185{
186 return mAudioPolicyService->clientCreateAudioPatch(patch, handle, delayMs);
187}
Eric Laurent2d388ec2014-03-07 13:25:54 -0800188
Eric Laurent951f4552014-05-20 10:48:17 -0700189status_t AudioPolicyService::AudioPolicyClient::releaseAudioPatch(audio_patch_handle_t handle,
190 int delayMs)
191{
192 return mAudioPolicyService->clientReleaseAudioPatch(handle, delayMs);
193}
Eric Laurent2d388ec2014-03-07 13:25:54 -0800194
Eric Laurente1715a42014-05-20 11:30:42 -0700195status_t AudioPolicyService::AudioPolicyClient::setAudioPortConfig(
196 const struct audio_port_config *config,
197 int delayMs)
198{
199 return mAudioPolicyService->clientSetAudioPortConfig(config, delayMs);
200}
201
Eric Laurentb52c1522014-05-20 11:27:36 -0700202void AudioPolicyService::AudioPolicyClient::onAudioPortListUpdate()
203{
204 mAudioPolicyService->onAudioPortListUpdate();
205}
206
207void AudioPolicyService::AudioPolicyClient::onAudioPatchListUpdate()
208{
209 mAudioPolicyService->onAudioPatchListUpdate();
210}
211
Jean-Michel Trivide801052015-04-14 19:10:14 -0700212void AudioPolicyService::AudioPolicyClient::onDynamicPolicyMixStateUpdate(
213 String8 regId, int32_t state)
214{
215 mAudioPolicyService->onDynamicPolicyMixStateUpdate(regId, state);
216}
217
Jean-Michel Trivi2f4fe9f2015-12-04 16:20:59 -0800218void AudioPolicyService::AudioPolicyClient::onRecordingConfigurationUpdate(
Eric Laurenta9f86652018-11-28 17:23:11 -0800219 int event,
220 const record_client_info_t *clientInfo,
221 const audio_config_base_t *clientConfig,
222 std::vector<effect_descriptor_t> clientEffects,
223 const audio_config_base_t *deviceConfig,
224 std::vector<effect_descriptor_t> effects,
225 audio_patch_handle_t patchHandle,
226 audio_source_t source)
Jean-Michel Trivi2f4fe9f2015-12-04 16:20:59 -0800227{
Jean-Michel Triviac4e4292016-12-22 11:39:31 -0800228 mAudioPolicyService->onRecordingConfigurationUpdate(event, clientInfo,
Eric Laurenta9f86652018-11-28 17:23:11 -0800229 clientConfig, clientEffects, deviceConfig, effects, patchHandle, source);
Jean-Michel Trivi2f4fe9f2015-12-04 16:20:59 -0800230}
231
François Gaffiecfe17322018-11-07 13:41:29 +0100232void AudioPolicyService::AudioPolicyClient::onAudioVolumeGroupChanged(volume_group_t group,
233 int flags)
234{
235 mAudioPolicyService->onAudioVolumeGroupChanged(group, flags);
236}
237
Glenn Kasteneeecb982016-02-26 10:44:04 -0800238audio_unique_id_t AudioPolicyService::AudioPolicyClient::newAudioUniqueId(audio_unique_id_use_t use)
Eric Laurentde3f8392014-07-27 18:38:22 -0700239{
Glenn Kasteneeecb982016-02-26 10:44:04 -0800240 return AudioSystem::newAudioUniqueId(use);
Eric Laurentde3f8392014-07-27 18:38:22 -0700241}
242
Mikhail Naganov1b2a7942017-12-08 10:18:09 -0800243} // namespace android