IAudioPolicyService.cpp revision 8af901cdea0af7e536579dee6d56e69987035a01
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** Copyright 2009, The Android Open Source Project 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** Licensed under the Apache License, Version 2.0 (the "License"); 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** you may not use this file except in compliance with the License. 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** You may obtain a copy of the License at 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** http://www.apache.org/licenses/LICENSE-2.0 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** Unless required by applicable law or agreed to in writing, software 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** distributed under the License is distributed on an "AS IS" BASIS, 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** See the License for the specific language governing permissions and 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams** limitations under the License. 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams*/ 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define LOG_TAG "IAudioPolicyService" 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include <utils/Log.h> 205ae678f2e68e25bd74cdc408df354c3b6fe481bfMathias Agopian 21afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams#include <stdint.h> 229b97c2906aed2b6dea9e0824f91f27c08d3690a7Mathias Agopian#include <sys/types.h> 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams#include <binder/Parcel.h> 25158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams 267bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams#include <media/IAudioPolicyService.h> 27158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams 2876371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato#include <system/audio.h> 2976371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato 301aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Samsnamespace android { 311aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams 324815c0d121310cfcd6a8aba4eab77a9910af53acJason Samsenum { 334815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams SET_DEVICE_CONNECTION_STATE = IBinder::FIRST_CALL_TRANSACTION, 341aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams GET_DEVICE_CONNECTION_STATE, 35158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams SET_PHONE_STATE, 36158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams SET_RINGER_MODE, // reserved, no longer used 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams SET_FORCE_USE, 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams GET_FORCE_USE, 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams GET_OUTPUT, 40e57691037aea219562ac686429b4b98202aab7bcJason Sams START_OUTPUT, 41fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams STOP_OUTPUT, 4233b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams RELEASE_OUTPUT, 43fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams GET_INPUT, 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams START_INPUT, 4533b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams STOP_INPUT, 4633b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams RELEASE_INPUT, 4733b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams INIT_STREAM_VOLUME, 4833b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams SET_STREAM_VOLUME, 4933b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams GET_STREAM_VOLUME, 5033b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams GET_STRATEGY_FOR_STREAM, 5133b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams GET_OUTPUT_FOR_EFFECT, 5233b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams REGISTER_EFFECT, 5333b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams UNREGISTER_EFFECT, 5433b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams IS_STREAM_ACTIVE, 5533b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams IS_SOURCE_ACTIVE, 5633b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams GET_DEVICES_FOR_STREAM, 57c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams QUERY_DEFAULT_PRE_PROCESSING, 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams SET_EFFECT_ENABLED 59afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams}; 60afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams 61afcb25c65e8145d15aaf50a0ca38333954a97000Jason Samsclass BpAudioPolicyService : public BpInterface<IAudioPolicyService> 62c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams{ 63afcb25c65e8145d15aaf50a0ca38333954a97000Jason Samspublic: 64afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams BpAudioPolicyService(const sp<IBinder>& impl) 65afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams : BpInterface<IAudioPolicyService>(impl) 66afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams { 67afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams } 68afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams 69afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams virtual status_t setDeviceConnectionState( 70c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams audio_devices_t device, 71c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams audio_policy_dev_state_t state, 72c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams const char *device_address) 73c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams { 74c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams Parcel data, reply; 75c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 76afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeInt32(static_cast <uint32_t>(device)); 77afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeInt32(static_cast <uint32_t>(state)); 78afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeCString(device_address); 79afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams remote()->transact(SET_DEVICE_CONNECTION_STATE, data, &reply); 80afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams return static_cast <status_t> (reply.readInt32()); 819397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams } 825fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams 835fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams virtual audio_policy_dev_state_t getDeviceConnectionState( 845fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams audio_devices_t device, 855fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams const char *device_address) 865fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams { 875fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams Parcel data, reply; 88afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 89afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeInt32(static_cast <uint32_t>(device)); 90afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeCString(device_address); 916d751ef1b4611c6b5fc2085fa5ef9ae2f4e60c5aJason Sams remote()->transact(GET_DEVICE_CONNECTION_STATE, data, &reply); 92afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams return static_cast <audio_policy_dev_state_t>(reply.readInt32()); 9333b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams } 9433b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams 95afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams virtual status_t setPhoneState(audio_mode_t state) 9633b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams { 97afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams Parcel data, reply; 98afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 99afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams data.writeInt32(state); 1009397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams remote()->transact(SET_PHONE_STATE, data, &reply); 101afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams return static_cast <status_t> (reply.readInt32()); 102afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams } 103afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams 10433b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) 105c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams { 106c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams Parcel data, reply; 107c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 108c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInt32(static_cast <uint32_t>(usage)); 109c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInt32(static_cast <uint32_t>(config)); 11033b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams remote()->transact(SET_FORCE_USE, data, &reply); 11133b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams return static_cast <status_t> (reply.readInt32()); 11233b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams } 11333b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams 11433b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Parcel data, reply; 11733b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 11833b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams data.writeInt32(static_cast <uint32_t>(usage)); 119613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams remote()->transact(GET_FORCE_USE, data, &reply); 120613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams return static_cast <audio_policy_forced_cfg_t> (reply.readInt32()); 12133b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams } 12233b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams 12333b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams virtual audio_io_handle_t getOutput( 12433b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams audio_stream_type_t stream, 12533b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams uint32_t samplingRate, 12633b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams audio_format_t format, 12733b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams audio_channel_mask_t channelMask, 12833b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams audio_output_flags_t flags) 12933b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams { 13033b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams Parcel data, reply; 131c61346b91434307c5003029017b54ce9c49112beJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 1321030893d9b99b72468034da13df025bda479bb97Jason Sams data.writeInt32(static_cast <uint32_t>(stream)); 1331030893d9b99b72468034da13df025bda479bb97Jason Sams data.writeInt32(samplingRate); 1341030893d9b99b72468034da13df025bda479bb97Jason Sams data.writeInt32(static_cast <uint32_t>(format)); 135ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams data.writeInt32(channelMask); 136b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams data.writeInt32(static_cast <uint32_t>(flags)); 137d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk remote()->transact(GET_OUTPUT, data, &reply); 1381030893d9b99b72468034da13df025bda479bb97Jason Sams return static_cast <audio_io_handle_t> (reply.readInt32()); 139c61346b91434307c5003029017b54ce9c49112beJason Sams } 1401030893d9b99b72468034da13df025bda479bb97Jason Sams 141a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams virtual status_t startOutput(audio_io_handle_t output, 142a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams audio_stream_type_t stream, 143a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams int session) 144b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams { 145d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk Parcel data, reply; 146c9d43db4d216b01b13aebfdb31d5615909591b33Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 1471030893d9b99b72468034da13df025bda479bb97Jason Sams data.writeInt32(output); 1481030893d9b99b72468034da13df025bda479bb97Jason Sams data.writeInt32((int32_t) stream); 149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams data.writeInt32(session); 150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams remote()->transact(START_OUTPUT, data, &reply); 151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams return static_cast <status_t> (reply.readInt32()); 152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } 153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams virtual status_t stopOutput(audio_io_handle_t output, 155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams audio_stream_type_t stream, 1561030893d9b99b72468034da13df025bda479bb97Jason Sams int session) 1572dca84dd6c07992f78ad050177975f16486dd77eJason Sams { 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Parcel data, reply; 159771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 160306fb23e57c4a389eaf3159b9701a64cb56e284eJason Sams data.writeInt32(output); 1612dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32((int32_t) stream); 1628c401effb0837155fc39ca0364f57a882d127d38Jason Sams data.writeInt32(session); 163c61346b91434307c5003029017b54ce9c49112beJason Sams remote()->transact(STOP_OUTPUT, data, &reply); 1648cfdd24fec22080b72266d33f61befc4a98b77c6Jason Sams return static_cast <status_t> (reply.readInt32()); 165d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } 166a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams 167a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams virtual void releaseOutput(audio_io_handle_t output) 168a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams { 169a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams Parcel data, reply; 170a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 17124371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(output); 17224371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams remote()->transact(RELEASE_OUTPUT, data, &reply); 173cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams } 17424371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams 17524371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams virtual audio_io_handle_t getInput( 17624371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams audio_source_t inputSource, 17724371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams uint32_t samplingRate, 17824371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams audio_format_t format, 17924371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams audio_channel_mask_t channelMask, 180cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams int audioSession) 18124371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams { 18224371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams Parcel data, reply; 18324371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 18424371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32((int32_t) inputSource); 18524371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(samplingRate); 18624371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(static_cast <uint32_t>(format)); 187cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams data.writeInt32(channelMask); 18824371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(audioSession); 18924371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams remote()->transact(GET_INPUT, data, &reply); 19024371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams return static_cast <audio_io_handle_t> (reply.readInt32()); 1911d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams } 1921d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams 19324371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams virtual status_t startInput(audio_io_handle_t input) 19424371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams { 19524371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams Parcel data, reply; 19624371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 1971d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams data.writeInt32(input); 1981d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams remote()->transact(START_INPUT, data, &reply); 1991d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams return static_cast <status_t> (reply.readInt32()); 2001d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams } 2011d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams 2021d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams virtual status_t stopInput(audio_io_handle_t input) 20324371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams { 20424371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams Parcel data, reply; 20524371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 20624371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(input); 20724371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams remote()->transact(STOP_INPUT, data, &reply); 20824371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams return static_cast <status_t> (reply.readInt32()); 20924371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams } 21024371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams 21124371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams virtual void releaseInput(audio_io_handle_t input) 21224371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams { 21324371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams Parcel data, reply; 21424371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 21524371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(input); 21624371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams remote()->transact(RELEASE_INPUT, data, &reply); 2171d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams } 2182dca84dd6c07992f78ad050177975f16486dd77eJason Sams 2192dca84dd6c07992f78ad050177975f16486dd77eJason Sams virtual status_t initStreamVolume(audio_stream_type_t stream, 2202dca84dd6c07992f78ad050177975f16486dd77eJason Sams int indexMin, 22124371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams int indexMax) 2222dca84dd6c07992f78ad050177975f16486dd77eJason Sams { 2232dca84dd6c07992f78ad050177975f16486dd77eJason Sams Parcel data, reply; 2242dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 2252dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32(static_cast <uint32_t>(stream)); 2262dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32(indexMin); 2272dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32(indexMax); 2282dca84dd6c07992f78ad050177975f16486dd77eJason Sams remote()->transact(INIT_STREAM_VOLUME, data, &reply); 2292dca84dd6c07992f78ad050177975f16486dd77eJason Sams return static_cast <status_t> (reply.readInt32()); 2302dca84dd6c07992f78ad050177975f16486dd77eJason Sams } 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, 233a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams int index, 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_devices_t device) 235c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams { 236a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams Parcel data, reply; 237a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 238a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams data.writeInt32(static_cast <uint32_t>(stream)); 239a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams data.writeInt32(index); 240c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInt32(static_cast <uint32_t>(device)); 241c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams remote()->transact(SET_STREAM_VOLUME, data, &reply); 242c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams return static_cast <status_t> (reply.readInt32()); 243c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } 244c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams 245c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, 246c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams int *index, 247c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams audio_devices_t device) 248c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams { 249c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams Parcel data, reply; 250c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 251c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams data.writeInt32(static_cast <uint32_t>(stream)); 252a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams data.writeInt32(static_cast <uint32_t>(device)); 253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams remote()->transact(GET_STREAM_VOLUME, data, &reply); 2551fddd90849deaae89b546ff492c345d485bbce42Jason Sams int lIndex = reply.readInt32(); 25676371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato if (index) *index = lIndex; 25776371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato return static_cast <status_t> (reply.readInt32()); 2581fddd90849deaae89b546ff492c345d485bbce42Jason Sams } 25976371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato 26076371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato virtual uint32_t getStrategyForStream(audio_stream_type_t stream) 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams { 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Parcel data, reply; 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams data.writeInt32(static_cast <uint32_t>(stream)); 265158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams remote()->transact(GET_STRATEGY_FOR_STREAM, data, &reply); 266158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams return reply.readInt32(); 267158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams } 2682dca84dd6c07992f78ad050177975f16486dd77eJason Sams 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams virtual audio_devices_t getDevicesForStream(audio_stream_type_t stream) 2701fddd90849deaae89b546ff492c345d485bbce42Jason Sams { 2711fddd90849deaae89b546ff492c345d485bbce42Jason Sams Parcel data, reply; 272433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 273433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams data.writeInt32(static_cast <uint32_t>(stream)); 27476371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato remote()->transact(GET_DEVICES_FOR_STREAM, data, &reply); 275e57691037aea219562ac686429b4b98202aab7bcJason Sams return (audio_devices_t) reply.readInt32(); 276e57691037aea219562ac686429b4b98202aab7bcJason Sams } 277e57691037aea219562ac686429b4b98202aab7bcJason Sams 278e57691037aea219562ac686429b4b98202aab7bcJason Sams virtual audio_io_handle_t getOutputForEffect(const effect_descriptor_t *desc) 279e57691037aea219562ac686429b4b98202aab7bcJason Sams { 280e57691037aea219562ac686429b4b98202aab7bcJason Sams Parcel data, reply; 281e57691037aea219562ac686429b4b98202aab7bcJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 282e57691037aea219562ac686429b4b98202aab7bcJason Sams data.write(desc, sizeof(effect_descriptor_t)); 283e57691037aea219562ac686429b4b98202aab7bcJason Sams remote()->transact(GET_OUTPUT_FOR_EFFECT, data, &reply); 284e57691037aea219562ac686429b4b98202aab7bcJason Sams return static_cast <audio_io_handle_t> (reply.readInt32()); 285e57691037aea219562ac686429b4b98202aab7bcJason Sams } 286e57691037aea219562ac686429b4b98202aab7bcJason Sams 2874820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams virtual status_t registerEffect(const effect_descriptor_t *desc, 288771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams audio_io_handle_t io, 2894820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams uint32_t strategy, 290771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams int session, 2914820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams int id) 292771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams { 2934820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams Parcel data, reply; 294771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 2954820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.write(desc, sizeof(effect_descriptor_t)); 296d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk data.writeInt32(io); 297d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk data.writeInt32(strategy); 2984820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.writeInt32(session); 2994820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.writeInt32(id); 3008ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams remote()->transact(REGISTER_EFFECT, data, &reply); 301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return static_cast <status_t> (reply.readInt32()); 302a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams } 303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 304fcd3192ebff8ab58d841836b7e94361d0998338cJason Sams virtual status_t unregisterEffect(int id) 305732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Sams { 306458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams Parcel data, reply; 307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 3082dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32(id); 3094820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams remote()->transact(UNREGISTER_EFFECT, data, &reply); 3102dca84dd6c07992f78ad050177975f16486dd77eJason Sams return static_cast <status_t> (reply.readInt32()); 3112dca84dd6c07992f78ad050177975f16486dd77eJason Sams } 3122dca84dd6c07992f78ad050177975f16486dd77eJason Sams 313afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams virtual status_t setEffectEnabled(int id, bool enabled) 3142dca84dd6c07992f78ad050177975f16486dd77eJason Sams { 3152dca84dd6c07992f78ad050177975f16486dd77eJason Sams Parcel data, reply; 3162dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 3172dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32(id); 31824371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams data.writeInt32(enabled); 31924371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams remote()->transact(SET_EFFECT_ENABLED, data, &reply); 32024371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams return static_cast <status_t> (reply.readInt32()); 321326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 3222dca84dd6c07992f78ad050177975f16486dd77eJason Sams 3232dca84dd6c07992f78ad050177975f16486dd77eJason Sams virtual bool isStreamActive(audio_stream_type_t stream, uint32_t inPastMs) const 3242dca84dd6c07992f78ad050177975f16486dd77eJason Sams { 3252dca84dd6c07992f78ad050177975f16486dd77eJason Sams Parcel data, reply; 3262dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 3272dca84dd6c07992f78ad050177975f16486dd77eJason Sams data.writeInt32((int32_t) stream); 328326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams data.writeInt32(inPastMs); 329326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams remote()->transact(IS_STREAM_ACTIVE, data, &reply); 3308c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams return reply.readInt32(); 3314820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams } 3324820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams 3334820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams virtual bool isSourceActive(audio_source_t source) const 3344820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams { 3354820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams Parcel data, reply; 336d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 3374820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.writeInt32((int32_t) source); 3384820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams remote()->transact(IS_SOURCE_ACTIVE, data, &reply); 3394820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams return reply.readInt32(); 3404820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams } 3414820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams 342d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk virtual status_t queryDefaultPreProcessing(int audioSession, 3434820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams effect_descriptor_t *descriptors, 344e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams uint32_t *count) 345e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams { 346e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams if (descriptors == NULL || count == NULL) { 347e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams return BAD_VALUE; 348e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams } 3494820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams Parcel data, reply; 3504820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); 3514820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.writeInt32(audioSession); 3524820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams data.writeInt32(*count); 3534820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams status_t status = remote()->transact(QUERY_DEFAULT_PRE_PROCESSING, data, &reply); 35433b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams if (status != NO_ERROR) { 3558c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams return status; 356326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 357326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams status = static_cast <status_t> (reply.readInt32()); 358326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams uint32_t retCount = reply.readInt32(); 3597bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams if (retCount != 0) { 3607bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams uint32_t numDesc = (retCount < *count) ? retCount : *count; 3617bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams reply.read(descriptors, sizeof(effect_descriptor_t) * numDesc); 3627bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams } 3637bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams *count = retCount; 3647bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return status; 3657bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams } 3667bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams}; 3677bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 3687bf29ddc35450d8064541c42c99a1f48be6cf0ddJason SamsIMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService"); 3697bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 3707bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams// ---------------------------------------------------------------------- 3717bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 3727bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 3737bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsstatus_t BnAudioPolicyService::onTransact( 3747bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 3757bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams{ 3767bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams switch (code) { 3777bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams case SET_DEVICE_CONNECTION_STATE: { 3787bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 3797bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audio_devices_t device = 3807bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams static_cast <audio_devices_t>(data.readInt32()); 3817bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audio_policy_dev_state_t state = 3827bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams static_cast <audio_policy_dev_state_t>(data.readInt32()); 3837bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const char *device_address = data.readCString(); 3847bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams reply->writeInt32(static_cast<uint32_t> (setDeviceConnectionState(device, 3857bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams state, 3867bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams device_address))); 3877bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return NO_ERROR; 3887bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams } break; 3897bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 3907bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams case GET_DEVICE_CONNECTION_STATE: { 3917bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 3927bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audio_devices_t device = 3937bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams static_cast<audio_devices_t> (data.readInt32()); 3947bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const char *device_address = data.readCString(); 3957bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams reply->writeInt32(static_cast<uint32_t> (getDeviceConnectionState(device, 3967bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams device_address))); 3977bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return NO_ERROR; 3987bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams } break; 3997bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 4007bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams case SET_PHONE_STATE: { 4017bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 402158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams reply->writeInt32(static_cast <uint32_t>(setPhoneState( 403158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams (audio_mode_t) data.readInt32()))); 404158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams return NO_ERROR; 405158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams } break; 406158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams 407158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams case SET_FORCE_USE: { 4082dca84dd6c07992f78ad050177975f16486dd77eJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 409158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams audio_policy_force_use_t usage = static_cast <audio_policy_force_use_t>( 410158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams data.readInt32()); 411158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams audio_policy_forced_cfg_t config = 412158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams static_cast <audio_policy_forced_cfg_t>(data.readInt32()); 413158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams reply->writeInt32(static_cast <uint32_t>(setForceUse(usage, config))); 414158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams return NO_ERROR; 415158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams } break; 416158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams 417158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams case GET_FORCE_USE: { 4187bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 4197bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audio_policy_force_use_t usage = static_cast <audio_policy_force_use_t>( 4207bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams data.readInt32()); 4217bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams reply->writeInt32(static_cast <uint32_t>(getForceUse(usage))); 422158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams return NO_ERROR; 423158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams } break; 424158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams 4254820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams case GET_OUTPUT: { 426326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 427fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams audio_stream_type_t stream = 428fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams static_cast <audio_stream_type_t>(data.readInt32()); 429326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams uint32_t samplingRate = data.readInt32(); 430326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_format_t format = (audio_format_t) data.readInt32(); 431326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_channel_mask_t channelMask = data.readInt32(); 432326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_output_flags_t flags = 433afcb25c65e8145d15aaf50a0ca38333954a97000Jason Sams static_cast <audio_output_flags_t>(data.readInt32()); 43486f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams 435e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams audio_io_handle_t output = getOutput(stream, 436a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams samplingRate, 437a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams format, 438a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams channelMask, 439613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams flags); 4404820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams reply->writeInt32(static_cast <int>(output)); 4414820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams return NO_ERROR; 442326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } break; 443a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 444a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams case START_OUTPUT: { 445a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 446fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams audio_io_handle_t output = static_cast <audio_io_handle_t>(data.readInt32()); 4479e4e13d87e834b1cb770407cef0778c262b02b72Jason Sams uint32_t stream = data.readInt32(); 4489e4e13d87e834b1cb770407cef0778c262b02b72Jason Sams int session = data.readInt32(); 4499e4e13d87e834b1cb770407cef0778c262b02b72Jason Sams reply->writeInt32(static_cast <uint32_t>(startOutput(output, 450fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams (audio_stream_type_t)stream, 4519e4e13d87e834b1cb770407cef0778c262b02b72Jason Sams session))); 4529e4e13d87e834b1cb770407cef0778c262b02b72Jason Sams return NO_ERROR; 453e57691037aea219562ac686429b4b98202aab7bcJason Sams } break; 454fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams 455fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams case STOP_OUTPUT: { 456fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 457fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams audio_io_handle_t output = static_cast <audio_io_handle_t>(data.readInt32()); 458e57691037aea219562ac686429b4b98202aab7bcJason Sams uint32_t stream = data.readInt32(); 459a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams int session = data.readInt32(); 460a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams reply->writeInt32(static_cast <uint32_t>(stopOutput(output, 461a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams (audio_stream_type_t)stream, 462a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams session))); 463a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams return NO_ERROR; 464a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams } break; 465613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams 466992a0b70d8fd7a14f0c57bc3c7e16c1f269a6609Jason Sams case RELEASE_OUTPUT: { 4675086938044e0a9b6b1138f915d0d252fe046e102Jason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 46824371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams audio_io_handle_t output = static_cast <audio_io_handle_t>(data.readInt32()); 469a891933b4c5ab1b63103add167269cfc404c2adfJason Sams releaseOutput(output); 4705086938044e0a9b6b1138f915d0d252fe046e102Jason Sams return NO_ERROR; 4717bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams } break; 4727bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 4737bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams case GET_INPUT: { 4747bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 4757bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audio_source_t inputSource = (audio_source_t) data.readInt32(); 4767bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams uint32_t samplingRate = data.readInt32(); 477a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams audio_format_t format = (audio_format_t) data.readInt32(); 478326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_channel_mask_t channelMask = data.readInt32(); 479326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int audioSession = data.readInt32(); 4807bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audio_io_handle_t input = getInput(inputSource, 4817bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams samplingRate, 4827bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams format, 4837bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams channelMask, 4847bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams audioSession); 4857bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams reply->writeInt32(static_cast <int>(input)); 4867bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return NO_ERROR; 4877bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams } break; 4887bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 4897bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams case START_INPUT: { 4907bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 491326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_io_handle_t input = static_cast <audio_io_handle_t>(data.readInt32()); 492326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams reply->writeInt32(static_cast <uint32_t>(startInput(input))); 493326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return NO_ERROR; 494ada7f272890d8791bc518c95989ad7d13050834dJason Sams } break; 495326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 496326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case STOP_INPUT: { 497a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 498326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_io_handle_t input = static_cast <audio_io_handle_t>(data.readInt32()); 499326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams reply->writeInt32(static_cast <uint32_t>(stopInput(input))); 500326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return NO_ERROR; 501326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } break; 5028c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams 503326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams case RELEASE_INPUT: { 50486f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 505326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_io_handle_t input = static_cast <audio_io_handle_t>(data.readInt32()); 506326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams releaseInput(input); 5078c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams return NO_ERROR; 508326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } break; 509bf3c14ebf456c745c084605dddeda08afdfc7987Jason Sams 5105086938044e0a9b6b1138f915d0d252fe046e102Jason Sams case INIT_STREAM_VOLUME: { 511326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 512fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams audio_stream_type_t stream = 513fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams static_cast <audio_stream_type_t>(data.readInt32()); 514326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int indexMin = data.readInt32(); 515326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int indexMax = data.readInt32(); 516fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams reply->writeInt32(static_cast <uint32_t>(initStreamVolume(stream, indexMin,indexMax))); 517fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams return NO_ERROR; 518fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams } break; 519fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams 520bf3c14ebf456c745c084605dddeda08afdfc7987Jason Sams case SET_STREAM_VOLUME: { 521326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 522fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams audio_stream_type_t stream = 5235086938044e0a9b6b1138f915d0d252fe046e102Jason Sams static_cast <audio_stream_type_t>(data.readInt32()); 5245086938044e0a9b6b1138f915d0d252fe046e102Jason Sams int index = data.readInt32(); 525326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams audio_devices_t device = static_cast <audio_devices_t>(data.readInt32()); 526326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams reply->writeInt32(static_cast <uint32_t>(setStreamVolumeIndex(stream, 5271c769c3d0e5f08e78ecdb4508c6bc69fcb69bfa8Dianne Hackborn index, 528458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams device))); 5294820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams return NO_ERROR; 530613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams } break; 531458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams 532458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams case GET_STREAM_VOLUME: { 533458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 534458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams audio_stream_type_t stream = 535458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams static_cast <audio_stream_type_t>(data.readInt32()); 536458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams audio_devices_t device = static_cast <audio_devices_t>(data.readInt32()); 537458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams int index; 538458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams status_t status = getStreamVolumeIndex(stream, &index, device); 539458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams reply->writeInt32(index); 540613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams reply->writeInt32(static_cast <uint32_t>(status)); 541613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams return NO_ERROR; 542458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams } break; 543458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams 544458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams case GET_STRATEGY_FOR_STREAM: { 545458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 546771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams audio_stream_type_t stream = 547771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams static_cast <audio_stream_type_t>(data.readInt32()); 548613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams reply->writeInt32(getStrategyForStream(stream)); 549613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams return NO_ERROR; 550613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams } break; 551613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams 552f2a5d7326b38e5a28b6618f9b1e5a021aef7179fJason Sams case GET_DEVICES_FOR_STREAM: { 553613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 554613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams audio_stream_type_t stream = 555613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams static_cast <audio_stream_type_t>(data.readInt32()); 556458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams reply->writeInt32(static_cast <int>(getDevicesForStream(stream))); 557458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams return NO_ERROR; 558458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams } break; 559458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams 560458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams case GET_OUTPUT_FOR_EFFECT: { 561458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 562458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams effect_descriptor_t desc; 563458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams data.read(&desc, sizeof(effect_descriptor_t)); 564613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams audio_io_handle_t output = getOutputForEffect(&desc); 565771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams reply->writeInt32(static_cast <int>(output)); 566613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams return NO_ERROR; 567613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams } break; 568613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams 569613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams case REGISTER_EFFECT: { 570613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 571613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams effect_descriptor_t desc; 572613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams data.read(&desc, sizeof(effect_descriptor_t)); 573613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams audio_io_handle_t io = data.readInt32(); 574613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams uint32_t strategy = data.readInt32(); 575c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams int session = data.readInt32(); 576613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams int id = data.readInt32(); 577613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams reply->writeInt32(static_cast <int32_t>(registerEffect(&desc, 578613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams io, 579c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams strategy, 580c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams session, 581c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams id))); 582c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams return NO_ERROR; 583c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams } break; 584c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams 585c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams case UNREGISTER_EFFECT: { 586c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 587c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams int id = data.readInt32(); 588c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams reply->writeInt32(static_cast <int32_t>(unregisterEffect(id))); 589c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams return NO_ERROR; 590613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams } break; 591613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams 592c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams case SET_EFFECT_ENABLED: { 593613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 5944815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams int id = data.readInt32(); 5954815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams bool enabled = static_cast <bool>(data.readInt32()); 5964815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams reply->writeInt32(static_cast <int32_t>(setEffectEnabled(id, enabled))); 5974815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return NO_ERROR; 5984815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } break; 5994815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 6004815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case IS_STREAM_ACTIVE: { 6014815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 6024815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams audio_stream_type_t stream = (audio_stream_type_t) data.readInt32(); 6034815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams uint32_t inPastMs = (uint32_t)data.readInt32(); 604ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams reply->writeInt32( isStreamActive((audio_stream_type_t) stream, inPastMs) ); 605ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams return NO_ERROR; 606613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams } break; 607613cad1702dbb76eb2a6ba0cfcb43b9fe207cebcJason Sams 608458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams case IS_SOURCE_ACTIVE: { 609458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 610458f2dc26b7d34c2138c7bfbd95914240084e6bdJason Sams audio_source_t source = (audio_source_t) data.readInt32(); 61186f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams reply->writeInt32( isSourceActive(source)); 61286f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams return NO_ERROR; 6134820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams } 61486f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams 61586f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams case QUERY_DEFAULT_PRE_PROCESSING: { 61686f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams CHECK_INTERFACE(IAudioPolicyService, data, reply); 61786f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams int audioSession = data.readInt32(); 61886f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams uint32_t count = data.readInt32(); 6194820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams uint32_t retCount = count; 62086f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams effect_descriptor_t *descriptors = 62186f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams (effect_descriptor_t *)new char[count * sizeof(effect_descriptor_t)]; 62286f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams status_t status = queryDefaultPreProcessing(audioSession, descriptors, &retCount); 623326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams reply->writeInt32(status); 624326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (status != NO_ERROR && status != NO_MEMORY) { 6254820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams retCount = 0; 626326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 627326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams reply->writeInt32(retCount); 628326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (retCount) { 629ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams if (retCount < count) { 630326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams count = retCount; 6314820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams } 6328ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams reply->write(descriptors, sizeof(effect_descriptor_t) * count); 6338ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 6348ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams delete[] descriptors; 6358ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams return status; 6368ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 637326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 638326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams default: 639326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return BBinder::onTransact(code, data, reply, flags); 640326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 6414820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams} 6428ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 6438ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams// ---------------------------------------------------------------------------- 6448ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 6458ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams}; // namespace android 6468ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams