IAudioFlinger.cpp revision e53b9ead781c36e96d6b6f012ddffc93a3d80f0d
13a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Copyright 2007, The Android Open Source Project 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** you may not use this file except in compliance with the License. 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** You may obtain a copy of the License at 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** See the License for the specific language governing permissions and 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project*/ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define LOG_TAG "IAudioFlinger" 19c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent//#define LOG_NDEBUG 0 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 257562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IAudioFlinger.h> 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_TRACK = IBinder::FIRST_CALL_TRANSACTION, 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project OPEN_RECORD, 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SAMPLE_RATE, 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHANNEL_COUNT, 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project FORMAT, 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project FRAME_COUNT, 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LATENCY, 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MASTER_VOLUME, 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MASTER_MUTE, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MASTER_VOLUME, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MASTER_MUTE, 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_STREAM_VOLUME, 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_STREAM_MUTE, 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STREAM_VOLUME, 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STREAM_MUTE, 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MODE, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MIC_MUTE, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_MIC_MUTE, 50c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent SET_PARAMETERS, 51c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent GET_PARAMETERS, 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project REGISTER_CLIENT, 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_INPUTBUFFERSIZE, 54c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent OPEN_OUTPUT, 55c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent OPEN_DUPLICATE_OUTPUT, 56c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CLOSE_OUTPUT, 57c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent SUSPEND_OUTPUT, 58c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent RESTORE_OUTPUT, 59c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent OPEN_INPUT, 60c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CLOSE_INPUT, 61f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent SET_STREAM_OUTPUT, 62342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent SET_VOICE_VOLUME, 6305bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent GET_RENDER_POSITION, 64be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent GET_INPUT_FRAMES_LOST, 65be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent NEW_AUDIO_SESSION_ID, 663a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen ACQUIRE_AUDIO_SESSION_ID, 673a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen RELEASE_AUDIO_SESSION_ID, 68be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent QUERY_NUM_EFFECTS, 69ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent QUERY_EFFECT, 70be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent GET_EFFECT_DESCRIPTOR, 71de070137f11d346fba77605bd76a44c040a618fcEric Laurent CREATE_EFFECT, 72de070137f11d346fba77605bd76a44c040a618fcEric Laurent MOVE_EFFECTS 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpAudioFlinger : public BpInterface<IAudioFlinger> 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpAudioFlinger(const sp<IBinder>& impl) 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IAudioFlinger>(impl) 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioTrack> createTrack( 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 85fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten audio_stream_type_t streamType, 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 8758f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format, 880d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi uint32_t channelMask, 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const sp<IMemory>& sharedBuffer, 9272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output, 934ff14bae91075eb274eb1c2975982358946e7e63John Grossman bool isTimed, 94be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *sessionId, 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 985841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IAudioTrack> track; 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 101fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) streamType); 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 1040d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi data.writeInt32(channelMask); 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(sharedBuffer->asBinder()); 10872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 1094ff14bae91075eb274eb1c2975982358946e7e63John Grossman data.writeInt32(isTimed); 110be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int lSessionId = 0; 111be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 112be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = *sessionId; 113be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 114be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(lSessionId); 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply); 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (lStatus != NO_ERROR) { 11729357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("createTrack error: %s", strerror(-lStatus)); 1185841db78dff14898538200287d246577b1fc37e2Eric Laurent } else { 119be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = reply.readInt32(); 120be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 121be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *sessionId = lSessionId; 122be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 1235841db78dff14898538200287d246577b1fc37e2Eric Laurent lStatus = reply.readInt32(); 1245841db78dff14898538200287d246577b1fc37e2Eric Laurent track = interface_cast<IAudioTrack>(reply.readStrongBinder()); 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 1295841db78dff14898538200287d246577b1fc37e2Eric Laurent return track; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioRecord> openRecord( 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 13472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t input, 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 13658f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format, 1370d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi uint32_t channelMask, 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 140be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *sessionId, 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 1445841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IAudioRecord> record; 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 14772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) input); 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 1500d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi data.writeInt32(channelMask); 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 153be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int lSessionId = 0; 154be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 155be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = *sessionId; 156be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 157be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(lSessionId); 1585841db78dff14898538200287d246577b1fc37e2Eric Laurent status_t lStatus = remote()->transact(OPEN_RECORD, data, &reply); 1595841db78dff14898538200287d246577b1fc37e2Eric Laurent if (lStatus != NO_ERROR) { 16029357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("openRecord error: %s", strerror(-lStatus)); 1615841db78dff14898538200287d246577b1fc37e2Eric Laurent } else { 162be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = reply.readInt32(); 163be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 164be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *sessionId = lSessionId; 165be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 1665841db78dff14898538200287d246577b1fc37e2Eric Laurent lStatus = reply.readInt32(); 1675841db78dff14898538200287d246577b1fc37e2Eric Laurent record = interface_cast<IAudioRecord>(reply.readStrongBinder()); 1685841db78dff14898538200287d246577b1fc37e2Eric Laurent } 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 1725841db78dff14898538200287d246577b1fc37e2Eric Laurent return record; 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 17572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual uint32_t sampleRate(audio_io_handle_t output) const 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 17972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SAMPLE_RATE, data, &reply); 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual int channelCount(audio_io_handle_t output) const 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 18872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CHANNEL_COUNT, data, &reply); 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual audio_format_t format(audio_io_handle_t output) const 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 19772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FORMAT, data, &reply); 19958f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten return (audio_format_t) reply.readInt32(); 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual size_t frameCount(audio_io_handle_t output) const 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 20672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FRAME_COUNT, data, &reply); 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual uint32_t latency(audio_io_handle_t output) const 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 21572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(LATENCY, data, &reply); 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterVolume(float value) 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_VOLUME, data, &reply); 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterMute(bool muted) 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_MUTE, data, &reply); 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float masterVolume() const 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_VOLUME, data, &reply); 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool masterMute() const 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_MUTE, data, &reply); 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t setStreamVolume(audio_stream_type_t stream, float value, 25572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output) 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 259fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 26172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_VOLUME, data, &reply); 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 266fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten virtual status_t setStreamMute(audio_stream_type_t stream, bool muted) 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 270fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_MUTE, data, &reply); 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual float streamVolume(audio_stream_type_t stream, audio_io_handle_t output) const 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 280fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 28172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_VOLUME, data, &reply); 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 286fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten virtual bool streamMute(audio_stream_type_t stream) const 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 290fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_MUTE, data, &reply); 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 295f78aee70d15daf4690de7e7b4983ee68b0d1381dGlenn Kasten virtual status_t setMode(audio_mode_t mode) 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(mode); 300c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MODE, data, &reply); 30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 304c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setMicMute(bool state) 30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 308c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(state); 309c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MIC_MUTE, data, &reply); 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 313c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual bool getMicMute() const 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 317c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_MIC_MUTE, data, &reply); 31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 32172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs) 32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 32572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) ioHandle); 326c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keyValuePairs); 327c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_PARAMETERS, data, &reply); 32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 33172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual String8 getParameters(audio_io_handle_t ioHandle, const String8& keys) const 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 33572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) ioHandle); 336c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keys); 337c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_PARAMETERS, data, &reply); 338c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readString8(); 339c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 340c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 341c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void registerClient(const sp<IAudioFlingerClient>& client) 342c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 343c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 344c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 345c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeStrongBinder(client->asBinder()); 346c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(REGISTER_CLIENT, data, &reply); 347c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 348c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 349f587ba5b991c7cd91e4df093d0d796bd419e5d67Glenn Kasten virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount) const 350c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 351c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 352c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 353c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(sampleRate); 354c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 355c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channelCount); 356c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); 35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual audio_io_handle_t openOutput(uint32_t *pDevices, 361c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pSamplingRate, 36258f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t *pFormat, 363c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pChannels, 364c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pLatencyMs, 36518868c5db2f90309c6d11e5837822135e4a0c0faGlenn Kasten audio_policy_output_flags_t flags) 36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 368c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 369c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 37058f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT; 371c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 372c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = pLatencyMs ? *pLatencyMs : 0; 373c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 375c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 376c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 377c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 378c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 379c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(latency); 38018868c5db2f90309c6d11e5837822135e4a0c0faGlenn Kasten data.writeInt32((int32_t) flags); 381c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_OUTPUT, data, &reply); 38272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = (audio_io_handle_t) reply.readInt32(); 38372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten ALOGV("openOutput() returned output, %d", output); 384c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 385c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 386c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 387c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 38858f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten format = (audio_format_t) reply.readInt32(); 389c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 390c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 391c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 392c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent latency = reply.readInt32(); 393c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pLatencyMs) *pLatencyMs = latency; 394c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return output; 395c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 396c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 39772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual audio_io_handle_t openDuplicateOutput(audio_io_handle_t output1, 39872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output2) 399c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 400c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 401c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 40272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output1); 40372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output2); 404c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_DUPLICATE_OUTPUT, data, &reply); 40572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten return (audio_io_handle_t) reply.readInt32(); 406c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 407c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 40872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t closeOutput(audio_io_handle_t output) 409c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 410c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 411c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 41272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 413c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_OUTPUT, data, &reply); 41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 41772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t suspendOutput(audio_io_handle_t output) 41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 42172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 422c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SUSPEND_OUTPUT, data, &reply); 42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 425c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 42672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t restoreOutput(audio_io_handle_t output) 42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 43072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 431c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(RESTORE_OUTPUT, data, &reply); 432c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 434c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 43572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual audio_io_handle_t openInput(uint32_t *pDevices, 436fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pSamplingRate, 43758f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t *pFormat, 438fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pChannels, 439de9719b3ec71472e6bf75117152176af51d1a515Glenn Kasten audio_in_acoustics_t acoustics) 44089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 442c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 443c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 44458f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT; 445c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 446c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 448c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 449c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 451c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 452de9719b3ec71472e6bf75117152176af51d1a515Glenn Kasten data.writeInt32((int32_t) acoustics); 453c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_INPUT, data, &reply); 45472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t input = (audio_io_handle_t) reply.readInt32(); 455c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 456c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 457c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 458c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 45958f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten format = (audio_format_t) reply.readInt32(); 460c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 461c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 462c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 463c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return input; 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 465c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 466fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeInput(int input) 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 470fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 471c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_INPUT, data, &reply); 472c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 47572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t setStreamOutput(audio_stream_type_t stream, audio_io_handle_t output) 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 479fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 48072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 481c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_STREAM_OUTPUT, data, &reply); 482c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 484f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent 485f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent virtual status_t setVoiceVolume(float volume) 486f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent { 487f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent Parcel data, reply; 488f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 489f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent data.writeFloat(volume); 490f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent remote()->transact(SET_VOICE_VOLUME, data, &reply); 491f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent return reply.readInt32(); 492f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent } 493342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent 49472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, 49572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output) const 496342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent { 497342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent Parcel data, reply; 498342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 49972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 500342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent remote()->transact(GET_RENDER_POSITION, data, &reply); 501342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent status_t status = reply.readInt32(); 502342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (status == NO_ERROR) { 503342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent uint32_t tmp = reply.readInt32(); 504342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (halFrames) { 505342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent *halFrames = tmp; 506342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 507342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent tmp = reply.readInt32(); 508342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (dspFrames) { 509342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent *dspFrames = tmp; 510342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 511342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 512342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent return status; 513342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 51405bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent 51572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual unsigned int getInputFramesLost(audio_io_handle_t ioHandle) const 51605bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent { 51705bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent Parcel data, reply; 51805bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 51972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) ioHandle); 52005bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent remote()->transact(GET_INPUT_FRAMES_LOST, data, &reply); 52105bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent return reply.readInt32(); 52205bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent } 523be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 524be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual int newAudioSessionId() 525be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 526be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 527be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 528be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = remote()->transact(NEW_AUDIO_SESSION_ID, data, &reply); 529be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int id = 0; 530be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 531be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent id = reply.readInt32(); 532be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 533be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return id; 534be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 535be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 5363a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen virtual void acquireAudioSessionId(int audioSession) 5373a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen { 5383a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen Parcel data, reply; 5393a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 5403a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInt32(audioSession); 5413a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen remote()->transact(ACQUIRE_AUDIO_SESSION_ID, data, &reply); 5423a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } 5433a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen 5443a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen virtual void releaseAudioSessionId(int audioSession) 5453a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen { 5463a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen Parcel data, reply; 5473a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 5483a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInt32(audioSession); 5493a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen remote()->transact(RELEASE_AUDIO_SESSION_ID, data, &reply); 5503a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } 5513a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen 552f587ba5b991c7cd91e4df093d0d796bd419e5d67Glenn Kasten virtual status_t queryNumberEffects(uint32_t *numEffects) const 553be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 554be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 555be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 556be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = remote()->transact(QUERY_NUM_EFFECTS, data, &reply); 557be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 558be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 559be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 560be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status = reply.readInt32(); 561be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 562be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 563be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 5649d1f02d74fd395ec4de6861147da289423f0ab6fGlenn Kasten if (numEffects != NULL) { 565be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *numEffects = (uint32_t)reply.readInt32(); 566be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 567be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 568be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 569be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 570f587ba5b991c7cd91e4df093d0d796bd419e5d67Glenn Kasten virtual status_t queryEffect(uint32_t index, effect_descriptor_t *pDescriptor) const 571be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 572be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (pDescriptor == NULL) { 573be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return BAD_VALUE; 574be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 575be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 576be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 577ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent data.writeInt32(index); 578ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent status_t status = remote()->transact(QUERY_EFFECT, data, &reply); 579be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 580be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 581be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 582be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status = reply.readInt32(); 583be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 584be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 585be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 586be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply.read(pDescriptor, sizeof(effect_descriptor_t)); 587be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 588be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 589be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 5905e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kasten virtual status_t getEffectDescriptor(const effect_uuid_t *pUuid, 591f587ba5b991c7cd91e4df093d0d796bd419e5d67Glenn Kasten effect_descriptor_t *pDescriptor) const 592be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 593be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (pUuid == NULL || pDescriptor == NULL) { 594be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return BAD_VALUE; 595be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 596be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 597be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 598be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.write(pUuid, sizeof(effect_uuid_t)); 599be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = remote()->transact(GET_EFFECT_DESCRIPTOR, data, &reply); 600be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 601be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 602be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 603be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status = reply.readInt32(); 604be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 605be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 606be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 607be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply.read(pDescriptor, sizeof(effect_descriptor_t)); 608be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 609be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 610be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 611be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual sp<IEffect> createEffect(pid_t pid, 612be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t *pDesc, 613be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent const sp<IEffectClient>& client, 614be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int32_t priority, 61572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output, 616be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId, 617be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t *status, 618be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *id, 619be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *enabled) 620be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 621be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 622be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sp<IEffect> effect; 623be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 624be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (pDesc == NULL) { 625e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten return effect; 626e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten if (status) { 627e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten *status = BAD_VALUE; 628e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten } 629e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten } 630be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 631be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 632be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(pid); 633be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.write(pDesc, sizeof(effect_descriptor_t)); 634be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeStrongBinder(client->asBinder()); 635be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(priority); 63672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) output); 637be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(sessionId); 638be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 639be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t lStatus = remote()->transact(CREATE_EFFECT, data, &reply); 640be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (lStatus != NO_ERROR) { 64129357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("createEffect error: %s", strerror(-lStatus)); 642be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } else { 643be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lStatus = reply.readInt32(); 644be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int tmp = reply.readInt32(); 645be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (id) { 646be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *id = tmp; 647be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 648be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent tmp = reply.readInt32(); 649a0d68338a88c2ddb4502f95017b546d603ef1ec7Glenn Kasten if (enabled != NULL) { 650be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *enabled = tmp; 651be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 652be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect = interface_cast<IEffect>(reply.readStrongBinder()); 653be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply.read(pDesc, sizeof(effect_descriptor_t)); 654be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 655be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status) { 656be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *status = lStatus; 657be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 658be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 659be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return effect; 660be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 661de070137f11d346fba77605bd76a44c040a618fcEric Laurent 66272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten virtual status_t moveEffects(int session, audio_io_handle_t srcOutput, 66372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t dstOutput) 664de070137f11d346fba77605bd76a44c040a618fcEric Laurent { 665de070137f11d346fba77605bd76a44c040a618fcEric Laurent Parcel data, reply; 666de070137f11d346fba77605bd76a44c040a618fcEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 667de070137f11d346fba77605bd76a44c040a618fcEric Laurent data.writeInt32(session); 66872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) srcOutput); 66972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten data.writeInt32((int32_t) dstOutput); 670de070137f11d346fba77605bd76a44c040a618fcEric Laurent remote()->transact(MOVE_EFFECTS, data, &reply); 671de070137f11d346fba77605bd76a44c040a618fcEric Laurent return reply.readInt32(); 672de070137f11d346fba77605bd76a44c040a618fcEric Laurent } 67389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 67489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 67589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 67689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 67789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 67889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 67989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 68089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 68189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 682e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 68389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_TRACK: { 68489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 68589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 68689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 68789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 68858f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = (audio_format_t) data.readInt32(); 68989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 69089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 69189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 69289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 69372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = (audio_io_handle_t) data.readInt32(); 6944ff14bae91075eb274eb1c2975982358946e7e63John Grossman bool isTimed = data.readInt32(); 695be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId = data.readInt32(); 69689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 69789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 698fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten (audio_stream_type_t) streamType, sampleRate, format, 6994ff14bae91075eb274eb1c2975982358946e7e63John Grossman channelCount, bufferCount, flags, buffer, output, isTimed, &sessionId, &status); 700be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(sessionId); 70189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 70289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 70389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 70489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 70589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case OPEN_RECORD: { 70689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 70789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 70872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t input = (audio_io_handle_t) data.readInt32(); 70989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 71058f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = (audio_format_t) data.readInt32(); 71189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 71289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 71389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 714be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId = data.readInt32(); 71589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 716c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent sp<IAudioRecord> record = openRecord(pid, input, 717be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sampleRate, format, channelCount, bufferCount, flags, &sessionId, &status); 718be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(sessionId); 71989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 72089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 72189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SAMPLE_RATE: { 72489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 72572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32( sampleRate((audio_io_handle_t) data.readInt32()) ); 72689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CHANNEL_COUNT: { 72989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 73072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32( channelCount((audio_io_handle_t) data.readInt32()) ); 73189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 73289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 73389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FORMAT: { 73489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 73572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32( format((audio_io_handle_t) data.readInt32()) ); 73689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 73789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 73889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FRAME_COUNT: { 73989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 74072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32( frameCount((audio_io_handle_t) data.readInt32()) ); 74189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 74289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 74389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case LATENCY: { 74489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 74572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32( latency((audio_io_handle_t) data.readInt32()) ); 74689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 74789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 748e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten case SET_MASTER_VOLUME: { 74989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 75089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 75189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 75289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 75389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_MUTE: { 75489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 75589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 75689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 75789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 75889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_VOLUME: { 75989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 76089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( masterVolume() ); 76189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 76289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 76389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_MUTE: { 76489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 76589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( masterMute() ); 76689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 76789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 76889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_VOLUME: { 76989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 77089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 771c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent float volume = data.readFloat(); 77272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = (audio_io_handle_t) data.readInt32(); 773fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32( setStreamVolume((audio_stream_type_t) stream, volume, output) ); 77489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 77589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 77689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_MUTE: { 77789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 77889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 779fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32( setStreamMute((audio_stream_type_t) stream, data.readInt32()) ); 78089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 78189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 78289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_VOLUME: { 78389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 78489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 785fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 786fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeFloat( streamVolume((audio_stream_type_t) stream, output) ); 78789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 78889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 78989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_MUTE: { 79089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 79189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 792fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32( streamMute((audio_stream_type_t) stream) ); 79389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 79489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 79589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MODE: { 79689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 797f78aee70d15daf4690de7e7b4983ee68b0d1381dGlenn Kasten audio_mode_t mode = (audio_mode_t) data.readInt32(); 79889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMode(mode) ); 79989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 80089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 80189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MIC_MUTE: { 80289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 80389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int state = data.readInt32(); 80489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMicMute(state) ); 80589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 80689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 80789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MIC_MUTE: { 80889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 80989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMicMute() ); 81089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 81189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 812c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_PARAMETERS: { 81389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 81472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t ioHandle = (audio_io_handle_t) data.readInt32(); 815c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keyValuePairs(data.readString8()); 816c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setParameters(ioHandle, keyValuePairs)); 81789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 818e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten } break; 819c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case GET_PARAMETERS: { 820c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 82172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t ioHandle = (audio_io_handle_t) data.readInt32(); 822c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keys(data.readString8()); 823c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeString8(getParameters(ioHandle, keys)); 824c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 825e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten } break; 826c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 82789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case REGISTER_CLIENT: { 82889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 82989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 83089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project registerClient(client); 83189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 83289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 83389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_INPUTBUFFERSIZE: { 83489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 83589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 83658f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = (audio_format_t) data.readInt32(); 83789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 83889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 83989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 84089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 841c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_OUTPUT: { 842c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 843c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 844c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 84558f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = (audio_format_t) data.readInt32(); 846c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 847c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = data.readInt32(); 84818868c5db2f90309c6d11e5837822135e4a0c0faGlenn Kasten audio_policy_output_flags_t flags = (audio_policy_output_flags_t) data.readInt32(); 84972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = openOutput(&devices, 850c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 851c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 852c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 853c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &latency, 854c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent flags); 8553856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("OPEN_OUTPUT output, %p", output); 85672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32((int32_t) output); 857c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 858c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 859c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 860c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 861c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(latency); 862c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 863c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 864c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_DUPLICATE_OUTPUT: { 865c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 86672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output1 = (audio_io_handle_t) data.readInt32(); 86772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output2 = (audio_io_handle_t) data.readInt32(); 86872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32((int32_t) openDuplicateOutput(output1, output2)); 869c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 870c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 871c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_OUTPUT: { 872c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 87372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32(closeOutput((audio_io_handle_t) data.readInt32())); 874c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 875c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 876c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SUSPEND_OUTPUT: { 877c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 87872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32(suspendOutput((audio_io_handle_t) data.readInt32())); 879c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 880c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 881c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case RESTORE_OUTPUT: { 882c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 88372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32(restoreOutput((audio_io_handle_t) data.readInt32())); 884c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 885c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 886c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_INPUT: { 887c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 888c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 889c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 89058f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten audio_format_t format = (audio_format_t) data.readInt32(); 891c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 892de9719b3ec71472e6bf75117152176af51d1a515Glenn Kasten audio_in_acoustics_t acoustics = (audio_in_acoustics_t) data.readInt32(); 893c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 89472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t input = openInput(&devices, 895c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 896c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 897c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 898de9719b3ec71472e6bf75117152176af51d1a515Glenn Kasten acoustics); 89972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32((int32_t) input); 900c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 901c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 902c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 903c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 904c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 905c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 906c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_INPUT: { 90789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 90872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten reply->writeInt32(closeInput((audio_io_handle_t) data.readInt32())); 90989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 91089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 911c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_STREAM_OUTPUT: { 91289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 913c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t stream = data.readInt32(); 91472ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = (audio_io_handle_t) data.readInt32(); 915fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32(setStreamOutput((audio_stream_type_t) stream, output)); 91689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 91789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 918f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent case SET_VOICE_VOLUME: { 919f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 920f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent float volume = data.readFloat(); 921f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent reply->writeInt32( setVoiceVolume(volume) ); 922f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent return NO_ERROR; 923f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent } break; 924342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent case GET_RENDER_POSITION: { 925342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 92672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = (audio_io_handle_t) data.readInt32(); 927342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent uint32_t halFrames; 928342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent uint32_t dspFrames; 929342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent status_t status = getRenderPosition(&halFrames, &dspFrames, output); 930342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent reply->writeInt32(status); 931342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (status == NO_ERROR) { 932342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent reply->writeInt32(halFrames); 933342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent reply->writeInt32(dspFrames); 934342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 935342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent return NO_ERROR; 936342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 93705bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent case GET_INPUT_FRAMES_LOST: { 93805bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 93972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t ioHandle = (audio_io_handle_t) data.readInt32(); 94005bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent reply->writeInt32(getInputFramesLost(ioHandle)); 94105bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent return NO_ERROR; 94205bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent } break; 943be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case NEW_AUDIO_SESSION_ID: { 944be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 945be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(newAudioSessionId()); 946be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 947be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } break; 9483a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen case ACQUIRE_AUDIO_SESSION_ID: { 9493a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen CHECK_INTERFACE(IAudioFlinger, data, reply); 9503a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen int audioSession = data.readInt32(); 9513a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen acquireAudioSessionId(audioSession); 9523a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen return NO_ERROR; 9533a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } break; 9543a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen case RELEASE_AUDIO_SESSION_ID: { 9553a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen CHECK_INTERFACE(IAudioFlinger, data, reply); 9563a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen int audioSession = data.readInt32(); 9573a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen releaseAudioSessionId(audioSession); 9583a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen return NO_ERROR; 9593a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } break; 960be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case QUERY_NUM_EFFECTS: { 961be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 962be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent uint32_t numEffects; 963be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = queryNumberEffects(&numEffects); 964be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 965be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 966be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32((int32_t)numEffects); 967be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 968be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 969be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 970ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent case QUERY_EFFECT: { 971be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 972be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t desc; 973ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent status_t status = queryEffect(data.readInt32(), &desc); 974be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 975be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 976be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->write(&desc, sizeof(effect_descriptor_t)); 977be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 978be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 979be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 980be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case GET_EFFECT_DESCRIPTOR: { 981be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 982be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_uuid_t uuid; 983be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.read(&uuid, sizeof(effect_uuid_t)); 984be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t desc; 985be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = getEffectDescriptor(&uuid, &desc); 986be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 987be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 988be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->write(&desc, sizeof(effect_descriptor_t)); 989be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 990be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 991be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 992be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case CREATE_EFFECT: { 993be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 994be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent pid_t pid = data.readInt32(); 995be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t desc; 996be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.read(&desc, sizeof(effect_descriptor_t)); 997be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sp<IEffectClient> client = interface_cast<IEffectClient>(data.readStrongBinder()); 998be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int32_t priority = data.readInt32(); 99972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t output = (audio_io_handle_t) data.readInt32(); 1000be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId = data.readInt32(); 1001be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status; 1002be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int id; 1003be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int enabled; 100405bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent 1005be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sp<IEffect> effect = createEffect(pid, &desc, client, priority, output, sessionId, &status, &id, &enabled); 1006be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 1007be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(id); 1008be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(enabled); 1009be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeStrongBinder(effect->asBinder()); 1010be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->write(&desc, sizeof(effect_descriptor_t)); 1011be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 1012be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } break; 1013de070137f11d346fba77605bd76a44c040a618fcEric Laurent case MOVE_EFFECTS: { 1014de070137f11d346fba77605bd76a44c040a618fcEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 1015de070137f11d346fba77605bd76a44c040a618fcEric Laurent int session = data.readInt32(); 101672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t srcOutput = (audio_io_handle_t) data.readInt32(); 101772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten audio_io_handle_t dstOutput = (audio_io_handle_t) data.readInt32(); 1018de070137f11d346fba77605bd76a44c040a618fcEric Laurent reply->writeInt32(moveEffects(session, srcOutput, dstOutput)); 1019de070137f11d346fba77605bd76a44c040a618fcEric Laurent return NO_ERROR; 1020de070137f11d346fba77605bd76a44c040a618fcEric Laurent } break; 102189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 102289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 102389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 102489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 102589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 102689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 102789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 102889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 1029