1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2009 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker *
4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker *
8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker *
10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker */
16*ec779b8eSAndroid Build Coastguard Worker
17*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "AudioPolicyClientImpl"
18*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
19*ec779b8eSAndroid Build Coastguard Worker
20*ec779b8eSAndroid Build Coastguard Worker #include "AudioPolicyService.h"
21*ec779b8eSAndroid Build Coastguard Worker
22*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
23*ec779b8eSAndroid Build Coastguard Worker
24*ec779b8eSAndroid Build Coastguard Worker #include "BinderProxy.h"
25*ec779b8eSAndroid Build Coastguard Worker
26*ec779b8eSAndroid Build Coastguard Worker namespace android {
27*ec779b8eSAndroid Build Coastguard Worker
28*ec779b8eSAndroid Build Coastguard Worker /* implementation of the client interface from the policy manager */
29*ec779b8eSAndroid Build Coastguard Worker
getAudioPolicyConfig(media::AudioPolicyConfig * config)30*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::getAudioPolicyConfig(
31*ec779b8eSAndroid Build Coastguard Worker media::AudioPolicyConfig *config)
32*ec779b8eSAndroid Build Coastguard Worker {
33*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
34*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
35*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
36*ec779b8eSAndroid Build Coastguard Worker return AUDIO_MODULE_HANDLE_NONE;
37*ec779b8eSAndroid Build Coastguard Worker }
38*ec779b8eSAndroid Build Coastguard Worker
39*ec779b8eSAndroid Build Coastguard Worker return af->getAudioPolicyConfig(config);
40*ec779b8eSAndroid Build Coastguard Worker }
41*ec779b8eSAndroid Build Coastguard Worker
loadHwModule(const char * name)42*ec779b8eSAndroid Build Coastguard Worker audio_module_handle_t AudioPolicyService::AudioPolicyClient::loadHwModule(const char *name)
43*ec779b8eSAndroid Build Coastguard Worker {
44*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
45*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
46*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
47*ec779b8eSAndroid Build Coastguard Worker return AUDIO_MODULE_HANDLE_NONE;
48*ec779b8eSAndroid Build Coastguard Worker }
49*ec779b8eSAndroid Build Coastguard Worker
50*ec779b8eSAndroid Build Coastguard Worker return af->loadHwModule(name);
51*ec779b8eSAndroid Build Coastguard Worker }
52*ec779b8eSAndroid Build Coastguard Worker
openOutput(audio_module_handle_t module,audio_io_handle_t * output,audio_config_t * halConfig,audio_config_base_t * mixerConfig,const sp<DeviceDescriptorBase> & device,uint32_t * latencyMs,audio_output_flags_t * flags,audio_attributes_t attributes)53*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::openOutput(audio_module_handle_t module,
54*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *output,
55*ec779b8eSAndroid Build Coastguard Worker audio_config_t *halConfig,
56*ec779b8eSAndroid Build Coastguard Worker audio_config_base_t *mixerConfig,
57*ec779b8eSAndroid Build Coastguard Worker const sp<DeviceDescriptorBase>& device,
58*ec779b8eSAndroid Build Coastguard Worker uint32_t *latencyMs,
59*ec779b8eSAndroid Build Coastguard Worker audio_output_flags_t *flags,
60*ec779b8eSAndroid Build Coastguard Worker audio_attributes_t attributes)
61*ec779b8eSAndroid Build Coastguard Worker {
62*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
63*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
64*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
65*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
66*ec779b8eSAndroid Build Coastguard Worker }
67*ec779b8eSAndroid Build Coastguard Worker
68*ec779b8eSAndroid Build Coastguard Worker media::OpenOutputRequest request;
69*ec779b8eSAndroid Build Coastguard Worker media::OpenOutputResponse response;
70*ec779b8eSAndroid Build Coastguard Worker
71*ec779b8eSAndroid Build Coastguard Worker request.module = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_module_handle_t_int32_t(module));
72*ec779b8eSAndroid Build Coastguard Worker request.halConfig = VALUE_OR_RETURN_STATUS(
73*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_config_t_AudioConfig(*halConfig, false /*isInput*/));
74*ec779b8eSAndroid Build Coastguard Worker request.mixerConfig = VALUE_OR_RETURN_STATUS(
75*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_config_base_t_AudioConfigBase(*mixerConfig, false /*isInput*/));
76*ec779b8eSAndroid Build Coastguard Worker request.device = VALUE_OR_RETURN_STATUS(legacy2aidl_DeviceDescriptorBase(device));
77*ec779b8eSAndroid Build Coastguard Worker request.flags = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_output_flags_t_int32_t_mask(*flags));
78*ec779b8eSAndroid Build Coastguard Worker request.attributes = VALUE_OR_RETURN_STATUS(
79*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_attributes_t_AudioAttributes(attributes));
80*ec779b8eSAndroid Build Coastguard Worker
81*ec779b8eSAndroid Build Coastguard Worker status_t status = af->openOutput(request, &response);
82*ec779b8eSAndroid Build Coastguard Worker if (status == OK) {
83*ec779b8eSAndroid Build Coastguard Worker *output = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_io_handle_t(response.output));
84*ec779b8eSAndroid Build Coastguard Worker *halConfig = VALUE_OR_RETURN_STATUS(
85*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioConfig_audio_config_t(response.config, false /*isInput*/));
86*ec779b8eSAndroid Build Coastguard Worker *latencyMs = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(response.latencyMs));
87*ec779b8eSAndroid Build Coastguard Worker
88*ec779b8eSAndroid Build Coastguard Worker audio_config_base_t config = {.sample_rate = halConfig->sample_rate,
89*ec779b8eSAndroid Build Coastguard Worker .channel_mask = halConfig->channel_mask,
90*ec779b8eSAndroid Build Coastguard Worker .format = halConfig->format,
91*ec779b8eSAndroid Build Coastguard Worker };
92*ec779b8eSAndroid Build Coastguard Worker *flags = VALUE_OR_RETURN_STATUS(
93*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_int32_t_audio_output_flags_t_mask(response.flags));
94*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->registerOutput(*output, config, *flags);
95*ec779b8eSAndroid Build Coastguard Worker }
96*ec779b8eSAndroid Build Coastguard Worker return status;
97*ec779b8eSAndroid Build Coastguard Worker }
98*ec779b8eSAndroid Build Coastguard Worker
openDuplicateOutput(audio_io_handle_t output1,audio_io_handle_t output2)99*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t AudioPolicyService::AudioPolicyClient::openDuplicateOutput(
100*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t output1,
101*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t output2)
102*ec779b8eSAndroid Build Coastguard Worker {
103*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
104*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
105*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
106*ec779b8eSAndroid Build Coastguard Worker return 0;
107*ec779b8eSAndroid Build Coastguard Worker }
108*ec779b8eSAndroid Build Coastguard Worker return af->openDuplicateOutput(output1, output2);
109*ec779b8eSAndroid Build Coastguard Worker }
110*ec779b8eSAndroid Build Coastguard Worker
closeOutput(audio_io_handle_t output)111*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::closeOutput(audio_io_handle_t output)
112*ec779b8eSAndroid Build Coastguard Worker {
113*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
114*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
115*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
116*ec779b8eSAndroid Build Coastguard Worker }
117*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->unregisterOutput(output);
118*ec779b8eSAndroid Build Coastguard Worker return af->closeOutput(output);
119*ec779b8eSAndroid Build Coastguard Worker }
120*ec779b8eSAndroid Build Coastguard Worker
suspendOutput(audio_io_handle_t output)121*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::suspendOutput(audio_io_handle_t output)
122*ec779b8eSAndroid Build Coastguard Worker {
123*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
124*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
125*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
126*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
127*ec779b8eSAndroid Build Coastguard Worker }
128*ec779b8eSAndroid Build Coastguard Worker
129*ec779b8eSAndroid Build Coastguard Worker return af->suspendOutput(output);
130*ec779b8eSAndroid Build Coastguard Worker }
131*ec779b8eSAndroid Build Coastguard Worker
restoreOutput(audio_io_handle_t output)132*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::restoreOutput(audio_io_handle_t output)
133*ec779b8eSAndroid Build Coastguard Worker {
134*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
135*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
136*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
137*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
138*ec779b8eSAndroid Build Coastguard Worker }
139*ec779b8eSAndroid Build Coastguard Worker
140*ec779b8eSAndroid Build Coastguard Worker return af->restoreOutput(output);
141*ec779b8eSAndroid Build Coastguard Worker }
142*ec779b8eSAndroid Build Coastguard Worker
openInput(audio_module_handle_t module,audio_io_handle_t * input,audio_config_t * config,audio_devices_t * device,const String8 & address,audio_source_t source,audio_input_flags_t flags)143*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::openInput(audio_module_handle_t module,
144*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *input,
145*ec779b8eSAndroid Build Coastguard Worker audio_config_t *config,
146*ec779b8eSAndroid Build Coastguard Worker audio_devices_t *device,
147*ec779b8eSAndroid Build Coastguard Worker const String8& address,
148*ec779b8eSAndroid Build Coastguard Worker audio_source_t source,
149*ec779b8eSAndroid Build Coastguard Worker audio_input_flags_t flags)
150*ec779b8eSAndroid Build Coastguard Worker {
151*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
152*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
153*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
154*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
155*ec779b8eSAndroid Build Coastguard Worker }
156*ec779b8eSAndroid Build Coastguard Worker
157*ec779b8eSAndroid Build Coastguard Worker AudioDeviceTypeAddr deviceTypeAddr(*device, address.c_str());
158*ec779b8eSAndroid Build Coastguard Worker
159*ec779b8eSAndroid Build Coastguard Worker media::OpenInputRequest request;
160*ec779b8eSAndroid Build Coastguard Worker request.module = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_module_handle_t_int32_t(module));
161*ec779b8eSAndroid Build Coastguard Worker request.input = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(*input));
162*ec779b8eSAndroid Build Coastguard Worker request.config = VALUE_OR_RETURN_STATUS(
163*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_config_t_AudioConfig(*config, true /*isInput*/));
164*ec779b8eSAndroid Build Coastguard Worker request.device = VALUE_OR_RETURN_STATUS(legacy2aidl_AudioDeviceTypeAddress(deviceTypeAddr));
165*ec779b8eSAndroid Build Coastguard Worker request.source = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_source_t_AudioSource(source));
166*ec779b8eSAndroid Build Coastguard Worker request.flags = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
167*ec779b8eSAndroid Build Coastguard Worker
168*ec779b8eSAndroid Build Coastguard Worker media::OpenInputResponse response;
169*ec779b8eSAndroid Build Coastguard Worker status_t status = af->openInput(request, &response);
170*ec779b8eSAndroid Build Coastguard Worker if (status == OK) {
171*ec779b8eSAndroid Build Coastguard Worker *input = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_module_handle_t(response.input));
172*ec779b8eSAndroid Build Coastguard Worker *config = VALUE_OR_RETURN_STATUS(
173*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioConfig_audio_config_t(response.config, true /*isInput*/));
174*ec779b8eSAndroid Build Coastguard Worker }
175*ec779b8eSAndroid Build Coastguard Worker return status;
176*ec779b8eSAndroid Build Coastguard Worker }
177*ec779b8eSAndroid Build Coastguard Worker
closeInput(audio_io_handle_t input)178*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::closeInput(audio_io_handle_t input)
179*ec779b8eSAndroid Build Coastguard Worker {
180*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
181*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
182*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
183*ec779b8eSAndroid Build Coastguard Worker }
184*ec779b8eSAndroid Build Coastguard Worker
185*ec779b8eSAndroid Build Coastguard Worker return af->closeInput(input);
186*ec779b8eSAndroid Build Coastguard Worker }
187*ec779b8eSAndroid Build Coastguard Worker
setStreamVolume(audio_stream_type_t stream,float volume,bool muted,audio_io_handle_t output,int delay_ms)188*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::setStreamVolume(audio_stream_type_t stream,
189*ec779b8eSAndroid Build Coastguard Worker float volume, bool muted, audio_io_handle_t output, int delay_ms)
190*ec779b8eSAndroid Build Coastguard Worker {
191*ec779b8eSAndroid Build Coastguard Worker return mAudioPolicyService->setStreamVolume(stream, volume, muted, output, delay_ms);
192*ec779b8eSAndroid Build Coastguard Worker }
193*ec779b8eSAndroid Build Coastguard Worker
setPortsVolume(const std::vector<audio_port_handle_t> & ports,float volume,bool muted,audio_io_handle_t output,int delayMs)194*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::setPortsVolume(
195*ec779b8eSAndroid Build Coastguard Worker const std::vector<audio_port_handle_t> &ports, float volume, bool muted,
196*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t output, int delayMs)
197*ec779b8eSAndroid Build Coastguard Worker {
198*ec779b8eSAndroid Build Coastguard Worker if (ports.empty()) {
199*ec779b8eSAndroid Build Coastguard Worker return NO_ERROR;
200*ec779b8eSAndroid Build Coastguard Worker }
201*ec779b8eSAndroid Build Coastguard Worker return mAudioPolicyService->setPortsVolume(ports, volume, muted, output, delayMs);
202*ec779b8eSAndroid Build Coastguard Worker }
203*ec779b8eSAndroid Build Coastguard Worker
setParameters(audio_io_handle_t io_handle,const String8 & keyValuePairs,int delay_ms)204*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::setParameters(audio_io_handle_t io_handle,
205*ec779b8eSAndroid Build Coastguard Worker const String8& keyValuePairs,
206*ec779b8eSAndroid Build Coastguard Worker int delay_ms)
207*ec779b8eSAndroid Build Coastguard Worker {
208*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->setParameters(io_handle, keyValuePairs.c_str(), delay_ms);
209*ec779b8eSAndroid Build Coastguard Worker }
210*ec779b8eSAndroid Build Coastguard Worker
getParameters(audio_io_handle_t io_handle,const String8 & keys)211*ec779b8eSAndroid Build Coastguard Worker String8 AudioPolicyService::AudioPolicyClient::getParameters(audio_io_handle_t io_handle,
212*ec779b8eSAndroid Build Coastguard Worker const String8& keys)
213*ec779b8eSAndroid Build Coastguard Worker {
214*ec779b8eSAndroid Build Coastguard Worker String8 result = AudioSystem::getParameters(io_handle, keys);
215*ec779b8eSAndroid Build Coastguard Worker return result;
216*ec779b8eSAndroid Build Coastguard Worker }
217*ec779b8eSAndroid Build Coastguard Worker
setVoiceVolume(float volume,int delay_ms)218*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::setVoiceVolume(float volume, int delay_ms)
219*ec779b8eSAndroid Build Coastguard Worker {
220*ec779b8eSAndroid Build Coastguard Worker return mAudioPolicyService->setVoiceVolume(volume, delay_ms);
221*ec779b8eSAndroid Build Coastguard Worker }
222*ec779b8eSAndroid Build Coastguard Worker
moveEffects(audio_session_t session,audio_io_handle_t src_output,audio_io_handle_t dst_output)223*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::moveEffects(audio_session_t session,
224*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t src_output,
225*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t dst_output)
226*ec779b8eSAndroid Build Coastguard Worker {
227*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
228*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
229*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
230*ec779b8eSAndroid Build Coastguard Worker }
231*ec779b8eSAndroid Build Coastguard Worker
232*ec779b8eSAndroid Build Coastguard Worker return af->moveEffects(session, src_output, dst_output);
233*ec779b8eSAndroid Build Coastguard Worker }
234*ec779b8eSAndroid Build Coastguard Worker
setEffectSuspended(int effectId,audio_session_t sessionId,bool suspended)235*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::setEffectSuspended(int effectId,
236*ec779b8eSAndroid Build Coastguard Worker audio_session_t sessionId,
237*ec779b8eSAndroid Build Coastguard Worker bool suspended)
238*ec779b8eSAndroid Build Coastguard Worker {
239*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->setEffectSuspended(effectId, sessionId, suspended);
240*ec779b8eSAndroid Build Coastguard Worker }
241*ec779b8eSAndroid Build Coastguard Worker
createAudioPatch(const struct audio_patch * patch,audio_patch_handle_t * handle,int delayMs)242*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::createAudioPatch(const struct audio_patch *patch,
243*ec779b8eSAndroid Build Coastguard Worker audio_patch_handle_t *handle,
244*ec779b8eSAndroid Build Coastguard Worker int delayMs)
245*ec779b8eSAndroid Build Coastguard Worker {
246*ec779b8eSAndroid Build Coastguard Worker return mAudioPolicyService->clientCreateAudioPatch(patch, handle, delayMs);
247*ec779b8eSAndroid Build Coastguard Worker }
248*ec779b8eSAndroid Build Coastguard Worker
releaseAudioPatch(audio_patch_handle_t handle,int delayMs)249*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::releaseAudioPatch(audio_patch_handle_t handle,
250*ec779b8eSAndroid Build Coastguard Worker int delayMs)
251*ec779b8eSAndroid Build Coastguard Worker {
252*ec779b8eSAndroid Build Coastguard Worker return mAudioPolicyService->clientReleaseAudioPatch(handle, delayMs);
253*ec779b8eSAndroid Build Coastguard Worker }
254*ec779b8eSAndroid Build Coastguard Worker
setAudioPortConfig(const struct audio_port_config * config,int delayMs)255*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::setAudioPortConfig(
256*ec779b8eSAndroid Build Coastguard Worker const struct audio_port_config *config,
257*ec779b8eSAndroid Build Coastguard Worker int delayMs)
258*ec779b8eSAndroid Build Coastguard Worker {
259*ec779b8eSAndroid Build Coastguard Worker return mAudioPolicyService->clientSetAudioPortConfig(config, delayMs);
260*ec779b8eSAndroid Build Coastguard Worker }
261*ec779b8eSAndroid Build Coastguard Worker
onAudioPortListUpdate()262*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onAudioPortListUpdate()
263*ec779b8eSAndroid Build Coastguard Worker {
264*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onAudioPortListUpdate();
265*ec779b8eSAndroid Build Coastguard Worker }
266*ec779b8eSAndroid Build Coastguard Worker
onAudioPatchListUpdate()267*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onAudioPatchListUpdate()
268*ec779b8eSAndroid Build Coastguard Worker {
269*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onAudioPatchListUpdate();
270*ec779b8eSAndroid Build Coastguard Worker }
271*ec779b8eSAndroid Build Coastguard Worker
onDynamicPolicyMixStateUpdate(String8 regId,int32_t state)272*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onDynamicPolicyMixStateUpdate(
273*ec779b8eSAndroid Build Coastguard Worker String8 regId, int32_t state)
274*ec779b8eSAndroid Build Coastguard Worker {
275*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onDynamicPolicyMixStateUpdate(regId, state);
276*ec779b8eSAndroid Build Coastguard Worker }
277*ec779b8eSAndroid Build Coastguard Worker
onRecordingConfigurationUpdate(int event,const record_client_info_t * clientInfo,const audio_config_base_t * clientConfig,std::vector<effect_descriptor_t> clientEffects,const audio_config_base_t * deviceConfig,std::vector<effect_descriptor_t> effects,audio_patch_handle_t patchHandle,audio_source_t source)278*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onRecordingConfigurationUpdate(
279*ec779b8eSAndroid Build Coastguard Worker int event,
280*ec779b8eSAndroid Build Coastguard Worker const record_client_info_t *clientInfo,
281*ec779b8eSAndroid Build Coastguard Worker const audio_config_base_t *clientConfig,
282*ec779b8eSAndroid Build Coastguard Worker std::vector<effect_descriptor_t> clientEffects,
283*ec779b8eSAndroid Build Coastguard Worker const audio_config_base_t *deviceConfig,
284*ec779b8eSAndroid Build Coastguard Worker std::vector<effect_descriptor_t> effects,
285*ec779b8eSAndroid Build Coastguard Worker audio_patch_handle_t patchHandle,
286*ec779b8eSAndroid Build Coastguard Worker audio_source_t source)
287*ec779b8eSAndroid Build Coastguard Worker {
288*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onRecordingConfigurationUpdate(event, clientInfo,
289*ec779b8eSAndroid Build Coastguard Worker clientConfig, clientEffects, deviceConfig, effects, patchHandle, source);
290*ec779b8eSAndroid Build Coastguard Worker }
291*ec779b8eSAndroid Build Coastguard Worker
onAudioVolumeGroupChanged(volume_group_t group,int flags)292*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onAudioVolumeGroupChanged(volume_group_t group,
293*ec779b8eSAndroid Build Coastguard Worker int flags)
294*ec779b8eSAndroid Build Coastguard Worker {
295*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onAudioVolumeGroupChanged(group, flags);
296*ec779b8eSAndroid Build Coastguard Worker }
297*ec779b8eSAndroid Build Coastguard Worker
onRoutingUpdated()298*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onRoutingUpdated()
299*ec779b8eSAndroid Build Coastguard Worker {
300*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onRoutingUpdated();
301*ec779b8eSAndroid Build Coastguard Worker }
302*ec779b8eSAndroid Build Coastguard Worker
onVolumeRangeInitRequest()303*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::onVolumeRangeInitRequest()
304*ec779b8eSAndroid Build Coastguard Worker {
305*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->onVolumeRangeInitRequest();
306*ec779b8eSAndroid Build Coastguard Worker }
307*ec779b8eSAndroid Build Coastguard Worker
newAudioUniqueId(audio_unique_id_use_t use)308*ec779b8eSAndroid Build Coastguard Worker audio_unique_id_t AudioPolicyService::AudioPolicyClient::newAudioUniqueId(audio_unique_id_use_t use)
309*ec779b8eSAndroid Build Coastguard Worker {
310*ec779b8eSAndroid Build Coastguard Worker return AudioSystem::newAudioUniqueId(use);
311*ec779b8eSAndroid Build Coastguard Worker }
312*ec779b8eSAndroid Build Coastguard Worker
setSoundTriggerCaptureState(bool active)313*ec779b8eSAndroid Build Coastguard Worker void AudioPolicyService::AudioPolicyClient::setSoundTriggerCaptureState(bool active)
314*ec779b8eSAndroid Build Coastguard Worker {
315*ec779b8eSAndroid Build Coastguard Worker mAudioPolicyService->mCaptureStateNotifier.setCaptureState(active);
316*ec779b8eSAndroid Build Coastguard Worker }
317*ec779b8eSAndroid Build Coastguard Worker
getAudioPort(struct audio_port_v7 * port)318*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::getAudioPort(struct audio_port_v7 *port)
319*ec779b8eSAndroid Build Coastguard Worker {
320*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
321*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
322*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
323*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
324*ec779b8eSAndroid Build Coastguard Worker }
325*ec779b8eSAndroid Build Coastguard Worker return af->getAudioPort(port);
326*ec779b8eSAndroid Build Coastguard Worker }
327*ec779b8eSAndroid Build Coastguard Worker
updateSecondaryOutputs(const TrackSecondaryOutputsMap & trackSecondaryOutputs)328*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::updateSecondaryOutputs(
329*ec779b8eSAndroid Build Coastguard Worker const TrackSecondaryOutputsMap& trackSecondaryOutputs) {
330*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
331*ec779b8eSAndroid Build Coastguard Worker if (af == nullptr) {
332*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
333*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
334*ec779b8eSAndroid Build Coastguard Worker }
335*ec779b8eSAndroid Build Coastguard Worker return af->updateSecondaryOutputs(trackSecondaryOutputs);
336*ec779b8eSAndroid Build Coastguard Worker }
337*ec779b8eSAndroid Build Coastguard Worker
setDeviceConnectedState(const struct audio_port_v7 * port,media::DeviceConnectedState state)338*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::setDeviceConnectedState(
339*ec779b8eSAndroid Build Coastguard Worker const struct audio_port_v7 *port, media::DeviceConnectedState state) {
340*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
341*ec779b8eSAndroid Build Coastguard Worker if (af == nullptr) {
342*ec779b8eSAndroid Build Coastguard Worker ALOGW("%s: could not get AudioFlinger", __func__);
343*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
344*ec779b8eSAndroid Build Coastguard Worker }
345*ec779b8eSAndroid Build Coastguard Worker return af->setDeviceConnectedState(port, state);
346*ec779b8eSAndroid Build Coastguard Worker }
347*ec779b8eSAndroid Build Coastguard Worker
invalidateTracks(const std::vector<audio_port_handle_t> & portIds)348*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::invalidateTracks(
349*ec779b8eSAndroid Build Coastguard Worker const std::vector<audio_port_handle_t>& portIds) {
350*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
351*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
352*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
353*ec779b8eSAndroid Build Coastguard Worker }
354*ec779b8eSAndroid Build Coastguard Worker
355*ec779b8eSAndroid Build Coastguard Worker return af->invalidateTracks(portIds);
356*ec779b8eSAndroid Build Coastguard Worker }
357*ec779b8eSAndroid Build Coastguard Worker
getAudioMixPort(const struct audio_port_v7 * devicePort,struct audio_port_v7 * port)358*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::getAudioMixPort(
359*ec779b8eSAndroid Build Coastguard Worker const struct audio_port_v7 *devicePort,
360*ec779b8eSAndroid Build Coastguard Worker struct audio_port_v7 *port) {
361*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
362*ec779b8eSAndroid Build Coastguard Worker if (af == 0) {
363*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
364*ec779b8eSAndroid Build Coastguard Worker }
365*ec779b8eSAndroid Build Coastguard Worker return af->getAudioMixPort(devicePort, port);
366*ec779b8eSAndroid Build Coastguard Worker }
367*ec779b8eSAndroid Build Coastguard Worker
setTracksInternalMute(const std::vector<media::TrackInternalMuteInfo> & tracksInternalMute)368*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::setTracksInternalMute(
369*ec779b8eSAndroid Build Coastguard Worker const std::vector<media::TrackInternalMuteInfo>& tracksInternalMute) {
370*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
371*ec779b8eSAndroid Build Coastguard Worker if (af == nullptr) {
372*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
373*ec779b8eSAndroid Build Coastguard Worker }
374*ec779b8eSAndroid Build Coastguard Worker return af->setTracksInternalMute(tracksInternalMute);
375*ec779b8eSAndroid Build Coastguard Worker }
376*ec779b8eSAndroid Build Coastguard Worker
getMmapPolicyInfos(media::audio::common::AudioMMapPolicyType policyType,std::vector<media::audio::common::AudioMMapPolicyInfo> * policyInfos)377*ec779b8eSAndroid Build Coastguard Worker status_t AudioPolicyService::AudioPolicyClient::getMmapPolicyInfos(
378*ec779b8eSAndroid Build Coastguard Worker media::audio::common::AudioMMapPolicyType policyType,
379*ec779b8eSAndroid Build Coastguard Worker std::vector<media::audio::common::AudioMMapPolicyInfo> *policyInfos) {
380*ec779b8eSAndroid Build Coastguard Worker sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
381*ec779b8eSAndroid Build Coastguard Worker if (af == nullptr) {
382*ec779b8eSAndroid Build Coastguard Worker return PERMISSION_DENIED;
383*ec779b8eSAndroid Build Coastguard Worker }
384*ec779b8eSAndroid Build Coastguard Worker return af->getMmapPolicyInfos(policyType, policyInfos);
385*ec779b8eSAndroid Build Coastguard Worker }
386*ec779b8eSAndroid Build Coastguard Worker
387*ec779b8eSAndroid Build Coastguard Worker } // namespace android
388