blob: 5b81b9d79c94c123fe5228c533f57745e66790d9 [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 Laurent2d388ec2014-03-07 13:25:54 -080020#include "AudioPolicyService.h"
Eric Laurent2d388ec2014-03-07 13:25:54 -080021
Ytai Ben-Tsvi74cd6b02019-10-25 10:06:40 -070022#include <android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.h>
23#include <utils/Log.h>
24
25#include "BinderProxy.h"
26
Eric Laurent2d388ec2014-03-07 13:25:54 -080027namespace android {
28
Eric Laurentdce54a12014-03-10 12:19:46 -070029/* implementation of the client interface from the policy manager */
Eric Laurent2d388ec2014-03-07 13:25:54 -080030
Eric Laurentdce54a12014-03-10 12:19:46 -070031audio_module_handle_t AudioPolicyService::AudioPolicyClient::loadHwModule(const char *name)
Eric Laurent2d388ec2014-03-07 13:25:54 -080032{
33 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
34 if (af == 0) {
35 ALOGW("%s: could not get AudioFlinger", __func__);
Glenn Kastena13cde92016-03-28 15:26:02 -070036 return AUDIO_MODULE_HANDLE_NONE;
Eric Laurent2d388ec2014-03-07 13:25:54 -080037 }
38
39 return af->loadHwModule(name);
40}
41
Eric Laurentcf2c0212014-07-25 16:20:43 -070042status_t AudioPolicyService::AudioPolicyClient::openOutput(audio_module_handle_t module,
43 audio_io_handle_t *output,
44 audio_config_t *config,
jiabin43810402019-10-24 14:58:31 -070045 const sp<DeviceDescriptorBase>& device,
Eric Laurentcf2c0212014-07-25 16:20:43 -070046 uint32_t *latencyMs,
47 audio_output_flags_t flags)
Eric Laurent2d388ec2014-03-07 13:25:54 -080048{
49 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
50 if (af == 0) {
51 ALOGW("%s: could not get AudioFlinger", __func__);
Eric Laurentcf2c0212014-07-25 16:20:43 -070052 return PERMISSION_DENIED;
Eric Laurent2d388ec2014-03-07 13:25:54 -080053 }
jiabin43810402019-10-24 14:58:31 -070054 return af->openOutput(module, output, config, device, latencyMs, flags);
Eric Laurent2d388ec2014-03-07 13:25:54 -080055}
56
Eric Laurentdce54a12014-03-10 12:19:46 -070057audio_io_handle_t AudioPolicyService::AudioPolicyClient::openDuplicateOutput(
58 audio_io_handle_t output1,
59 audio_io_handle_t output2)
Eric Laurent2d388ec2014-03-07 13:25:54 -080060{
61 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
62 if (af == 0) {
63 ALOGW("%s: could not get AudioFlinger", __func__);
64 return 0;
65 }
66 return af->openDuplicateOutput(output1, output2);
67}
68
Eric Laurentdce54a12014-03-10 12:19:46 -070069status_t AudioPolicyService::AudioPolicyClient::closeOutput(audio_io_handle_t output)
Eric Laurent2d388ec2014-03-07 13:25:54 -080070{
71 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
72 if (af == 0) {
73 return PERMISSION_DENIED;
74 }
75
76 return af->closeOutput(output);
77}
78
Eric Laurentdce54a12014-03-10 12:19:46 -070079status_t AudioPolicyService::AudioPolicyClient::suspendOutput(audio_io_handle_t output)
Eric Laurent2d388ec2014-03-07 13:25:54 -080080{
81 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
82 if (af == 0) {
83 ALOGW("%s: could not get AudioFlinger", __func__);
84 return PERMISSION_DENIED;
85 }
86
87 return af->suspendOutput(output);
88}
89
Eric Laurentdce54a12014-03-10 12:19:46 -070090status_t AudioPolicyService::AudioPolicyClient::restoreOutput(audio_io_handle_t output)
Eric Laurent2d388ec2014-03-07 13:25:54 -080091{
92 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
93 if (af == 0) {
94 ALOGW("%s: could not get AudioFlinger", __func__);
95 return PERMISSION_DENIED;
96 }
97
98 return af->restoreOutput(output);
99}
100
Eric Laurentcf2c0212014-07-25 16:20:43 -0700101status_t AudioPolicyService::AudioPolicyClient::openInput(audio_module_handle_t module,
102 audio_io_handle_t *input,
103 audio_config_t *config,
104 audio_devices_t *device,
105 const String8& address,
106 audio_source_t source,
107 audio_input_flags_t flags)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800108{
109 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
110 if (af == 0) {
111 ALOGW("%s: could not get AudioFlinger", __func__);
Eric Laurentcf2c0212014-07-25 16:20:43 -0700112 return PERMISSION_DENIED;
Eric Laurent2d388ec2014-03-07 13:25:54 -0800113 }
114
Eric Laurentcf2c0212014-07-25 16:20:43 -0700115 return af->openInput(module, input, config, device, address, source, flags);
Eric Laurent2d388ec2014-03-07 13:25:54 -0800116}
117
Eric Laurentdce54a12014-03-10 12:19:46 -0700118status_t AudioPolicyService::AudioPolicyClient::closeInput(audio_io_handle_t input)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800119{
120 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
121 if (af == 0) {
122 return PERMISSION_DENIED;
123 }
124
125 return af->closeInput(input);
126}
127
Eric Laurentdce54a12014-03-10 12:19:46 -0700128status_t AudioPolicyService::AudioPolicyClient::setStreamVolume(audio_stream_type_t stream,
129 float volume, audio_io_handle_t output,
130 int delay_ms)
131{
132 return mAudioPolicyService->setStreamVolume(stream, volume, output,
133 delay_ms);
134}
135
136status_t AudioPolicyService::AudioPolicyClient::invalidateStream(audio_stream_type_t stream)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800137{
138 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
139 if (af == 0) {
140 return PERMISSION_DENIED;
141 }
142
143 return af->invalidateStream(stream);
144}
145
Eric Laurentdce54a12014-03-10 12:19:46 -0700146void AudioPolicyService::AudioPolicyClient::setParameters(audio_io_handle_t io_handle,
147 const String8& keyValuePairs,
148 int delay_ms)
149{
150 mAudioPolicyService->setParameters(io_handle, keyValuePairs.string(), delay_ms);
151}
152
153String8 AudioPolicyService::AudioPolicyClient::getParameters(audio_io_handle_t io_handle,
154 const String8& keys)
155{
156 String8 result = AudioSystem::getParameters(io_handle, keys);
157 return result;
158}
159
Eric Laurentdce54a12014-03-10 12:19:46 -0700160status_t AudioPolicyService::AudioPolicyClient::setVoiceVolume(float volume, int delay_ms)
161{
162 return mAudioPolicyService->setVoiceVolume(volume, delay_ms);
163}
164
Glenn Kastend848eb42016-03-08 13:42:11 -0800165status_t AudioPolicyService::AudioPolicyClient::moveEffects(audio_session_t session,
Eric Laurentdce54a12014-03-10 12:19:46 -0700166 audio_io_handle_t src_output,
167 audio_io_handle_t dst_output)
Eric Laurent2d388ec2014-03-07 13:25:54 -0800168{
169 sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
170 if (af == 0) {
171 return PERMISSION_DENIED;
172 }
173
174 return af->moveEffects(session, src_output, dst_output);
175}
176
Eric Laurentb20cf7d2019-04-05 19:37:34 -0700177void AudioPolicyService::AudioPolicyClient::setEffectSuspended(int effectId,
178 audio_session_t sessionId,
179 bool suspended)
180{
181 mAudioPolicyService->setEffectSuspended(effectId, sessionId, suspended);
182}
183
Eric Laurent951f4552014-05-20 10:48:17 -0700184status_t AudioPolicyService::AudioPolicyClient::createAudioPatch(const struct audio_patch *patch,
185 audio_patch_handle_t *handle,
186 int delayMs)
187{
188 return mAudioPolicyService->clientCreateAudioPatch(patch, handle, delayMs);
189}
Eric Laurent2d388ec2014-03-07 13:25:54 -0800190
Eric Laurent951f4552014-05-20 10:48:17 -0700191status_t AudioPolicyService::AudioPolicyClient::releaseAudioPatch(audio_patch_handle_t handle,
192 int delayMs)
193{
194 return mAudioPolicyService->clientReleaseAudioPatch(handle, delayMs);
195}
Eric Laurent2d388ec2014-03-07 13:25:54 -0800196
Eric Laurente1715a42014-05-20 11:30:42 -0700197status_t AudioPolicyService::AudioPolicyClient::setAudioPortConfig(
198 const struct audio_port_config *config,
199 int delayMs)
200{
201 return mAudioPolicyService->clientSetAudioPortConfig(config, delayMs);
202}
203
Eric Laurentb52c1522014-05-20 11:27:36 -0700204void AudioPolicyService::AudioPolicyClient::onAudioPortListUpdate()
205{
206 mAudioPolicyService->onAudioPortListUpdate();
207}
208
209void AudioPolicyService::AudioPolicyClient::onAudioPatchListUpdate()
210{
211 mAudioPolicyService->onAudioPatchListUpdate();
212}
213
Jean-Michel Trivide801052015-04-14 19:10:14 -0700214void AudioPolicyService::AudioPolicyClient::onDynamicPolicyMixStateUpdate(
215 String8 regId, int32_t state)
216{
217 mAudioPolicyService->onDynamicPolicyMixStateUpdate(regId, state);
218}
219
Jean-Michel Trivi2f4fe9f2015-12-04 16:20:59 -0800220void AudioPolicyService::AudioPolicyClient::onRecordingConfigurationUpdate(
Eric Laurenta9f86652018-11-28 17:23:11 -0800221 int event,
222 const record_client_info_t *clientInfo,
223 const audio_config_base_t *clientConfig,
224 std::vector<effect_descriptor_t> clientEffects,
225 const audio_config_base_t *deviceConfig,
226 std::vector<effect_descriptor_t> effects,
227 audio_patch_handle_t patchHandle,
228 audio_source_t source)
Jean-Michel Trivi2f4fe9f2015-12-04 16:20:59 -0800229{
Jean-Michel Triviac4e4292016-12-22 11:39:31 -0800230 mAudioPolicyService->onRecordingConfigurationUpdate(event, clientInfo,
Eric Laurenta9f86652018-11-28 17:23:11 -0800231 clientConfig, clientEffects, deviceConfig, effects, patchHandle, source);
Jean-Michel Trivi2f4fe9f2015-12-04 16:20:59 -0800232}
233
François Gaffiecfe17322018-11-07 13:41:29 +0100234void AudioPolicyService::AudioPolicyClient::onAudioVolumeGroupChanged(volume_group_t group,
235 int flags)
236{
237 mAudioPolicyService->onAudioVolumeGroupChanged(group, flags);
238}
239
Glenn Kasteneeecb982016-02-26 10:44:04 -0800240audio_unique_id_t AudioPolicyService::AudioPolicyClient::newAudioUniqueId(audio_unique_id_use_t use)
Eric Laurentde3f8392014-07-27 18:38:22 -0700241{
Glenn Kasteneeecb982016-02-26 10:44:04 -0800242 return AudioSystem::newAudioUniqueId(use);
Eric Laurentde3f8392014-07-27 18:38:22 -0700243}
244
Ytai Ben-Tsvi74cd6b02019-10-25 10:06:40 -0700245void AudioPolicyService::AudioPolicyClient::setSoundTriggerCaptureState(bool active) {
246 using media::soundtrigger_middleware::ISoundTriggerMiddlewareService;
247
248 static BinderProxy<ISoundTriggerMiddlewareService>
249 proxy("soundtrigger_middleware");
250 proxy.waitServiceOrDie()->setExternalCaptureState(active);
251}
252
Mikhail Naganov1b2a7942017-12-08 10:18:09 -0800253} // namespace android