blob: b89a27891fcaad21ece878e98ccf96d29c3e024b [file] [log] [blame]
Eric Laurenta553c252009-07-17 12:17:14 -07001/*
2**
3** Copyright 2009, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#define LOG_TAG "IAudioPolicyService"
19#include <utils/Log.h>
20
21#include <stdint.h>
22#include <sys/types.h>
23
24#include <binder/Parcel.h>
25
26#include <media/IAudioPolicyService.h>
27
28namespace android {
29
30enum {
31 SET_DEVICE_CONNECTION_STATE = IBinder::FIRST_CALL_TRANSACTION,
32 GET_DEVICE_CONNECTION_STATE,
33 SET_PHONE_STATE,
34 SET_RINGER_MODE,
35 SET_FORCE_USE,
36 GET_FORCE_USE,
37 GET_OUTPUT,
38 START_OUTPUT,
39 STOP_OUTPUT,
40 RELEASE_OUTPUT,
41 GET_INPUT,
42 START_INPUT,
43 STOP_INPUT,
44 RELEASE_INPUT,
45 INIT_STREAM_VOLUME,
46 SET_STREAM_VOLUME,
Eric Laurent8ed6ed02010-07-13 04:45:46 -070047 GET_STREAM_VOLUME,
48 GET_STRATEGY_FOR_STREAM,
49 GET_OUTPUT_FOR_EFFECT,
50 REGISTER_EFFECT,
Eric Laurent25101b02011-02-02 09:33:30 -080051 UNREGISTER_EFFECT,
Glenn Kasten8b4b97a2011-02-04 13:54:26 -080052 IS_STREAM_ACTIVE,
53 GET_DEVICES_FOR_STREAM,
Eric Laurenta553c252009-07-17 12:17:14 -070054};
55
56class BpAudioPolicyService : public BpInterface<IAudioPolicyService>
57{
58public:
59 BpAudioPolicyService(const sp<IBinder>& impl)
60 : BpInterface<IAudioPolicyService>(impl)
61 {
62 }
63
64 virtual status_t setDeviceConnectionState(
65 AudioSystem::audio_devices device,
66 AudioSystem::device_connection_state state,
67 const char *device_address)
68 {
69 Parcel data, reply;
70 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
71 data.writeInt32(static_cast <uint32_t>(device));
72 data.writeInt32(static_cast <uint32_t>(state));
73 data.writeCString(device_address);
74 remote()->transact(SET_DEVICE_CONNECTION_STATE, data, &reply);
75 return static_cast <status_t> (reply.readInt32());
76 }
77
78 virtual AudioSystem::device_connection_state getDeviceConnectionState(
79 AudioSystem::audio_devices device,
80 const char *device_address)
81 {
82 Parcel data, reply;
83 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
84 data.writeInt32(static_cast <uint32_t>(device));
85 data.writeCString(device_address);
86 remote()->transact(GET_DEVICE_CONNECTION_STATE, data, &reply);
87 return static_cast <AudioSystem::device_connection_state>(reply.readInt32());
88 }
89
90 virtual status_t setPhoneState(int state)
91 {
92 Parcel data, reply;
93 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
94 data.writeInt32(state);
95 remote()->transact(SET_PHONE_STATE, data, &reply);
96 return static_cast <status_t> (reply.readInt32());
97 }
98
99 virtual status_t setRingerMode(uint32_t mode, uint32_t mask)
100 {
101 Parcel data, reply;
102 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
103 data.writeInt32(mode);
104 data.writeInt32(mask);
105 remote()->transact(SET_RINGER_MODE, data, &reply);
106 return static_cast <status_t> (reply.readInt32());
107 }
108
109 virtual status_t setForceUse(AudioSystem::force_use usage, AudioSystem::forced_config config)
110 {
111 Parcel data, reply;
112 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
113 data.writeInt32(static_cast <uint32_t>(usage));
114 data.writeInt32(static_cast <uint32_t>(config));
115 remote()->transact(SET_FORCE_USE, data, &reply);
116 return static_cast <status_t> (reply.readInt32());
117 }
118
119 virtual AudioSystem::forced_config getForceUse(AudioSystem::force_use usage)
120 {
121 Parcel data, reply;
122 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
123 data.writeInt32(static_cast <uint32_t>(usage));
124 remote()->transact(GET_FORCE_USE, data, &reply);
125 return static_cast <AudioSystem::forced_config> (reply.readInt32());
126 }
127
128 virtual audio_io_handle_t getOutput(
129 AudioSystem::stream_type stream,
130 uint32_t samplingRate,
131 uint32_t format,
132 uint32_t channels,
133 AudioSystem::output_flags flags)
134 {
135 Parcel data, reply;
136 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
137 data.writeInt32(static_cast <uint32_t>(stream));
138 data.writeInt32(samplingRate);
139 data.writeInt32(static_cast <uint32_t>(format));
140 data.writeInt32(channels);
141 data.writeInt32(static_cast <uint32_t>(flags));
142 remote()->transact(GET_OUTPUT, data, &reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700143 return static_cast <audio_io_handle_t> (reply.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700144 }
145
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700146 virtual status_t startOutput(audio_io_handle_t output,
147 AudioSystem::stream_type stream,
148 int session)
Eric Laurenta553c252009-07-17 12:17:14 -0700149 {
150 Parcel data, reply;
151 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
Eric Laurentddb78e72009-07-28 08:44:33 -0700152 data.writeInt32(output);
Eric Laurenta553c252009-07-17 12:17:14 -0700153 data.writeInt32(stream);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700154 data.writeInt32(session);
Eric Laurenta553c252009-07-17 12:17:14 -0700155 remote()->transact(START_OUTPUT, data, &reply);
156 return static_cast <status_t> (reply.readInt32());
157 }
158
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700159 virtual status_t stopOutput(audio_io_handle_t output,
160 AudioSystem::stream_type stream,
161 int session)
Eric Laurenta553c252009-07-17 12:17:14 -0700162 {
163 Parcel data, reply;
164 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
Eric Laurentddb78e72009-07-28 08:44:33 -0700165 data.writeInt32(output);
Eric Laurenta553c252009-07-17 12:17:14 -0700166 data.writeInt32(stream);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700167 data.writeInt32(session);
Eric Laurenta553c252009-07-17 12:17:14 -0700168 remote()->transact(STOP_OUTPUT, data, &reply);
169 return static_cast <status_t> (reply.readInt32());
170 }
171
172 virtual void releaseOutput(audio_io_handle_t output)
173 {
174 Parcel data, reply;
175 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
Eric Laurentddb78e72009-07-28 08:44:33 -0700176 data.writeInt32(output);
Eric Laurenta553c252009-07-17 12:17:14 -0700177 remote()->transact(RELEASE_OUTPUT, data, &reply);
178 }
179
180 virtual audio_io_handle_t getInput(
181 int inputSource,
182 uint32_t samplingRate,
183 uint32_t format,
184 uint32_t channels,
185 AudioSystem::audio_in_acoustics acoustics)
186 {
187 Parcel data, reply;
188 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
189 data.writeInt32(inputSource);
190 data.writeInt32(samplingRate);
191 data.writeInt32(static_cast <uint32_t>(format));
192 data.writeInt32(channels);
193 data.writeInt32(static_cast <uint32_t>(acoustics));
194 remote()->transact(GET_INPUT, data, &reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700195 return static_cast <audio_io_handle_t> (reply.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700196 }
197
198 virtual status_t startInput(audio_io_handle_t input)
199 {
200 Parcel data, reply;
201 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
Eric Laurentddb78e72009-07-28 08:44:33 -0700202 data.writeInt32(input);
Eric Laurenta553c252009-07-17 12:17:14 -0700203 remote()->transact(START_INPUT, data, &reply);
204 return static_cast <status_t> (reply.readInt32());
205 }
206
207 virtual status_t stopInput(audio_io_handle_t input)
208 {
209 Parcel data, reply;
210 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
Eric Laurentddb78e72009-07-28 08:44:33 -0700211 data.writeInt32(input);
Eric Laurenta553c252009-07-17 12:17:14 -0700212 remote()->transact(STOP_INPUT, data, &reply);
213 return static_cast <status_t> (reply.readInt32());
214 }
215
216 virtual void releaseInput(audio_io_handle_t input)
217 {
218 Parcel data, reply;
219 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
Eric Laurentddb78e72009-07-28 08:44:33 -0700220 data.writeInt32(input);
Eric Laurenta553c252009-07-17 12:17:14 -0700221 remote()->transact(RELEASE_INPUT, data, &reply);
222 }
223
224 virtual status_t initStreamVolume(AudioSystem::stream_type stream,
225 int indexMin,
226 int indexMax)
227 {
228 Parcel data, reply;
229 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
230 data.writeInt32(static_cast <uint32_t>(stream));
231 data.writeInt32(indexMin);
232 data.writeInt32(indexMax);
233 remote()->transact(INIT_STREAM_VOLUME, data, &reply);
234 return static_cast <status_t> (reply.readInt32());
235 }
236
237 virtual status_t setStreamVolumeIndex(AudioSystem::stream_type stream, int index)
238 {
239 Parcel data, reply;
240 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
241 data.writeInt32(static_cast <uint32_t>(stream));
242 data.writeInt32(index);
243 remote()->transact(SET_STREAM_VOLUME, data, &reply);
244 return static_cast <status_t> (reply.readInt32());
245 }
246
247 virtual status_t getStreamVolumeIndex(AudioSystem::stream_type stream, int *index)
248 {
249 Parcel data, reply;
250 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
251 data.writeInt32(static_cast <uint32_t>(stream));
252 remote()->transact(GET_STREAM_VOLUME, data, &reply);
253 int lIndex = reply.readInt32();
254 if (index) *index = lIndex;
255 return static_cast <status_t> (reply.readInt32());
256 }
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700257
258 virtual uint32_t getStrategyForStream(AudioSystem::stream_type stream)
259 {
260 Parcel data, reply;
261 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
262 data.writeInt32(static_cast <uint32_t>(stream));
263 remote()->transact(GET_STRATEGY_FOR_STREAM, data, &reply);
264 return reply.readInt32();
265 }
266
Glenn Kasten8b4b97a2011-02-04 13:54:26 -0800267 virtual uint32_t getDevicesForStream(AudioSystem::stream_type stream)
268 {
269 Parcel data, reply;
270 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
271 data.writeInt32(static_cast <uint32_t>(stream));
272 remote()->transact(GET_DEVICES_FOR_STREAM, data, &reply);
273 return (uint32_t) reply.readInt32();
274 }
275
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700276 virtual audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc)
277 {
278 Parcel data, reply;
279 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
280 data.write(desc, sizeof(effect_descriptor_t));
281 remote()->transact(GET_OUTPUT_FOR_EFFECT, data, &reply);
282 return static_cast <audio_io_handle_t> (reply.readInt32());
283 }
284
285 virtual status_t registerEffect(effect_descriptor_t *desc,
286 audio_io_handle_t output,
287 uint32_t strategy,
288 int session,
289 int id)
290 {
291 Parcel data, reply;
292 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
293 data.write(desc, sizeof(effect_descriptor_t));
294 data.writeInt32(output);
295 data.writeInt32(strategy);
296 data.writeInt32(session);
297 data.writeInt32(id);
298 remote()->transact(REGISTER_EFFECT, data, &reply);
299 return static_cast <status_t> (reply.readInt32());
300 }
301
302 virtual status_t unregisterEffect(int id)
303 {
304 Parcel data, reply;
305 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
306 data.writeInt32(id);
307 remote()->transact(UNREGISTER_EFFECT, data, &reply);
308 return static_cast <status_t> (reply.readInt32());
309 }
310
Eric Laurent25101b02011-02-02 09:33:30 -0800311 virtual bool isStreamActive(int stream, uint32_t inPastMs) const
312 {
313 Parcel data, reply;
314 data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
315 data.writeInt32(stream);
316 data.writeInt32(inPastMs);
317 remote()->transact(IS_STREAM_ACTIVE, data, &reply);
318 return reply.readInt32();
319 }
Eric Laurenta553c252009-07-17 12:17:14 -0700320};
321
322IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService");
323
324// ----------------------------------------------------------------------
325
326
327status_t BnAudioPolicyService::onTransact(
328 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
329{
330 switch(code) {
331 case SET_DEVICE_CONNECTION_STATE: {
332 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700333 AudioSystem::audio_devices device =
334 static_cast <AudioSystem::audio_devices>(data.readInt32());
335 AudioSystem::device_connection_state state =
336 static_cast <AudioSystem::device_connection_state>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700337 const char *device_address = data.readCString();
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700338 reply->writeInt32(static_cast<uint32_t> (setDeviceConnectionState(device,
339 state,
340 device_address)));
Eric Laurenta553c252009-07-17 12:17:14 -0700341 return NO_ERROR;
342 } break;
343
344 case GET_DEVICE_CONNECTION_STATE: {
345 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700346 AudioSystem::audio_devices device =
347 static_cast<AudioSystem::audio_devices> (data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700348 const char *device_address = data.readCString();
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700349 reply->writeInt32(static_cast<uint32_t> (getDeviceConnectionState(device,
350 device_address)));
Eric Laurenta553c252009-07-17 12:17:14 -0700351 return NO_ERROR;
352 } break;
353
354 case SET_PHONE_STATE: {
355 CHECK_INTERFACE(IAudioPolicyService, data, reply);
356 reply->writeInt32(static_cast <uint32_t>(setPhoneState(data.readInt32())));
357 return NO_ERROR;
358 } break;
359
360 case SET_RINGER_MODE: {
361 CHECK_INTERFACE(IAudioPolicyService, data, reply);
362 uint32_t mode = data.readInt32();
363 uint32_t mask = data.readInt32();
364 reply->writeInt32(static_cast <uint32_t>(setRingerMode(mode, mask)));
365 return NO_ERROR;
366 } break;
367
368 case SET_FORCE_USE: {
369 CHECK_INTERFACE(IAudioPolicyService, data, reply);
370 AudioSystem::force_use usage = static_cast <AudioSystem::force_use>(data.readInt32());
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700371 AudioSystem::forced_config config =
372 static_cast <AudioSystem::forced_config>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700373 reply->writeInt32(static_cast <uint32_t>(setForceUse(usage, config)));
374 return NO_ERROR;
375 } break;
376
377 case GET_FORCE_USE: {
378 CHECK_INTERFACE(IAudioPolicyService, data, reply);
379 AudioSystem::force_use usage = static_cast <AudioSystem::force_use>(data.readInt32());
380 reply->writeInt32(static_cast <uint32_t>(getForceUse(usage)));
381 return NO_ERROR;
382 } break;
383
384 case GET_OUTPUT: {
385 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700386 AudioSystem::stream_type stream =
387 static_cast <AudioSystem::stream_type>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700388 uint32_t samplingRate = data.readInt32();
389 uint32_t format = data.readInt32();
390 uint32_t channels = data.readInt32();
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700391 AudioSystem::output_flags flags =
392 static_cast <AudioSystem::output_flags>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700393
394 audio_io_handle_t output = getOutput(stream,
395 samplingRate,
396 format,
397 channels,
398 flags);
Eric Laurentddb78e72009-07-28 08:44:33 -0700399 reply->writeInt32(static_cast <int>(output));
Eric Laurenta553c252009-07-17 12:17:14 -0700400 return NO_ERROR;
401 } break;
402
403 case START_OUTPUT: {
404 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700405 audio_io_handle_t output = static_cast <audio_io_handle_t>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700406 uint32_t stream = data.readInt32();
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700407 int session = data.readInt32();
408 reply->writeInt32(static_cast <uint32_t>(startOutput(output,
409 (AudioSystem::stream_type)stream,
410 session)));
Eric Laurenta553c252009-07-17 12:17:14 -0700411 return NO_ERROR;
412 } break;
413
414 case STOP_OUTPUT: {
415 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700416 audio_io_handle_t output = static_cast <audio_io_handle_t>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700417 uint32_t stream = data.readInt32();
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700418 int session = data.readInt32();
419 reply->writeInt32(static_cast <uint32_t>(stopOutput(output,
420 (AudioSystem::stream_type)stream,
421 session)));
Eric Laurenta553c252009-07-17 12:17:14 -0700422 return NO_ERROR;
423 } break;
424
425 case RELEASE_OUTPUT: {
426 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700427 audio_io_handle_t output = static_cast <audio_io_handle_t>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700428 releaseOutput(output);
429 return NO_ERROR;
430 } break;
431
432 case GET_INPUT: {
433 CHECK_INTERFACE(IAudioPolicyService, data, reply);
434 int inputSource = data.readInt32();
435 uint32_t samplingRate = data.readInt32();
436 uint32_t format = data.readInt32();
437 uint32_t channels = data.readInt32();
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700438 AudioSystem::audio_in_acoustics acoustics =
439 static_cast <AudioSystem::audio_in_acoustics>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700440 audio_io_handle_t input = getInput(inputSource,
441 samplingRate,
442 format,
443 channels,
444 acoustics);
Eric Laurentddb78e72009-07-28 08:44:33 -0700445 reply->writeInt32(static_cast <int>(input));
Eric Laurenta553c252009-07-17 12:17:14 -0700446 return NO_ERROR;
447 } break;
448
449 case START_INPUT: {
450 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700451 audio_io_handle_t input = static_cast <audio_io_handle_t>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700452 reply->writeInt32(static_cast <uint32_t>(startInput(input)));
453 return NO_ERROR;
454 } break;
455
456 case STOP_INPUT: {
457 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700458 audio_io_handle_t input = static_cast <audio_io_handle_t>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700459 reply->writeInt32(static_cast <uint32_t>(stopInput(input)));
460 return NO_ERROR;
461 } break;
462
463 case RELEASE_INPUT: {
464 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurentddb78e72009-07-28 08:44:33 -0700465 audio_io_handle_t input = static_cast <audio_io_handle_t>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700466 releaseInput(input);
467 return NO_ERROR;
468 } break;
469
470 case INIT_STREAM_VOLUME: {
471 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700472 AudioSystem::stream_type stream =
473 static_cast <AudioSystem::stream_type>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700474 int indexMin = data.readInt32();
475 int indexMax = data.readInt32();
476 reply->writeInt32(static_cast <uint32_t>(initStreamVolume(stream, indexMin,indexMax)));
477 return NO_ERROR;
478 } break;
479
480 case SET_STREAM_VOLUME: {
481 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700482 AudioSystem::stream_type stream =
483 static_cast <AudioSystem::stream_type>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700484 int index = data.readInt32();
485 reply->writeInt32(static_cast <uint32_t>(setStreamVolumeIndex(stream, index)));
486 return NO_ERROR;
487 } break;
488
489 case GET_STREAM_VOLUME: {
490 CHECK_INTERFACE(IAudioPolicyService, data, reply);
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700491 AudioSystem::stream_type stream =
492 static_cast <AudioSystem::stream_type>(data.readInt32());
Eric Laurenta553c252009-07-17 12:17:14 -0700493 int index;
494 status_t status = getStreamVolumeIndex(stream, &index);
495 reply->writeInt32(index);
496 reply->writeInt32(static_cast <uint32_t>(status));
497 return NO_ERROR;
498 } break;
499
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700500 case GET_STRATEGY_FOR_STREAM: {
501 CHECK_INTERFACE(IAudioPolicyService, data, reply);
502 AudioSystem::stream_type stream =
503 static_cast <AudioSystem::stream_type>(data.readInt32());
504 reply->writeInt32(getStrategyForStream(stream));
505 return NO_ERROR;
506 } break;
507
Glenn Kasten8b4b97a2011-02-04 13:54:26 -0800508 case GET_DEVICES_FOR_STREAM: {
509 CHECK_INTERFACE(IAudioPolicyService, data, reply);
510 AudioSystem::stream_type stream =
511 static_cast <AudioSystem::stream_type>(data.readInt32());
512 reply->writeInt32(static_cast <int>(getDevicesForStream(stream)));
513 return NO_ERROR;
514 } break;
515
Eric Laurent8ed6ed02010-07-13 04:45:46 -0700516 case GET_OUTPUT_FOR_EFFECT: {
517 CHECK_INTERFACE(IAudioPolicyService, data, reply);
518 effect_descriptor_t desc;
519 data.read(&desc, sizeof(effect_descriptor_t));
520 audio_io_handle_t output = getOutputForEffect(&desc);
521 reply->writeInt32(static_cast <int>(output));
522 return NO_ERROR;
523 } break;
524
525 case REGISTER_EFFECT: {
526 CHECK_INTERFACE(IAudioPolicyService, data, reply);
527 effect_descriptor_t desc;
528 data.read(&desc, sizeof(effect_descriptor_t));
529 audio_io_handle_t output = data.readInt32();
530 uint32_t strategy = data.readInt32();
531 int session = data.readInt32();
532 int id = data.readInt32();
533 reply->writeInt32(static_cast <int32_t>(registerEffect(&desc,
534 output,
535 strategy,
536 session,
537 id)));
538 return NO_ERROR;
539 } break;
540
541 case UNREGISTER_EFFECT: {
542 CHECK_INTERFACE(IAudioPolicyService, data, reply);
543 int id = data.readInt32();
544 reply->writeInt32(static_cast <int32_t>(unregisterEffect(id)));
545 return NO_ERROR;
546 } break;
547
Eric Laurent25101b02011-02-02 09:33:30 -0800548 case IS_STREAM_ACTIVE: {
549 CHECK_INTERFACE(IAudioPolicyService, data, reply);
550 int stream = data.readInt32();
551 uint32_t inPastMs = (uint32_t)data.readInt32();
552 reply->writeInt32( isStreamActive(stream, inPastMs) );
553 return NO_ERROR;
554 } break;
555
Eric Laurenta553c252009-07-17 12:17:14 -0700556 default:
557 return BBinder::onTransact(code, data, reply, flags);
558 }
559}
560
561// ----------------------------------------------------------------------------
562
563}; // namespace android