IAudioFlinger.cpp revision f78aee70d15daf4690de7e7b4983ee68b0d1381d
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, 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType, 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 870d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi uint32_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, 92fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output, 93be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *sessionId, 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 975841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IAudioTrack> track; 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(streamType); 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 1030d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi data.writeInt32(channelMask); 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(sharedBuffer->asBinder()); 107fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 108be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int lSessionId = 0; 109be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 110be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = *sessionId; 111be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 112be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(lSessionId); 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply); 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (lStatus != NO_ERROR) { 11529357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("createTrack error: %s", strerror(-lStatus)); 1165841db78dff14898538200287d246577b1fc37e2Eric Laurent } else { 117be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = reply.readInt32(); 118be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 119be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *sessionId = lSessionId; 120be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 1215841db78dff14898538200287d246577b1fc37e2Eric Laurent lStatus = reply.readInt32(); 1225841db78dff14898538200287d246577b1fc37e2Eric Laurent track = interface_cast<IAudioTrack>(reply.readStrongBinder()); 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 1275841db78dff14898538200287d246577b1fc37e2Eric Laurent return track; 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioRecord> openRecord( 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 132fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input, 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 1340d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi uint32_t format, 1350d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi uint32_t channelMask, 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 138be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *sessionId, 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 1425841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IAudioRecord> record; 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 145fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 1480d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi data.writeInt32(channelMask); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 151be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int lSessionId = 0; 152be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 153be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = *sessionId; 154be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 155be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(lSessionId); 1565841db78dff14898538200287d246577b1fc37e2Eric Laurent status_t lStatus = remote()->transact(OPEN_RECORD, data, &reply); 1575841db78dff14898538200287d246577b1fc37e2Eric Laurent if (lStatus != NO_ERROR) { 15829357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("openRecord error: %s", strerror(-lStatus)); 1595841db78dff14898538200287d246577b1fc37e2Eric Laurent } else { 160be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lSessionId = reply.readInt32(); 161be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (sessionId != NULL) { 162be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *sessionId = lSessionId; 163be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 1645841db78dff14898538200287d246577b1fc37e2Eric Laurent lStatus = reply.readInt32(); 1655841db78dff14898538200287d246577b1fc37e2Eric Laurent record = interface_cast<IAudioRecord>(reply.readStrongBinder()); 1665841db78dff14898538200287d246577b1fc37e2Eric Laurent } 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 1705841db78dff14898538200287d246577b1fc37e2Eric Laurent return record; 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 173fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual uint32_t sampleRate(int output) const 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 177fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SAMPLE_RATE, data, &reply); 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 182fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int channelCount(int output) const 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 186fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CHANNEL_COUNT, data, &reply); 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1910d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi virtual uint32_t format(int output) const 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 195fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FORMAT, data, &reply); 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 200fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual size_t frameCount(int output) const 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 204fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FRAME_COUNT, data, &reply); 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 209fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual uint32_t latency(int output) const 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 213fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(LATENCY, data, &reply); 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterVolume(float value) 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_VOLUME, data, &reply); 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterMute(bool muted) 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_MUTE, data, &reply); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float masterVolume() const 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_VOLUME, data, &reply); 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool masterMute() const 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_MUTE, data, &reply); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 252fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setStreamVolume(int stream, float value, int output) 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 258fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_VOLUME, data, &reply); 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setStreamMute(int stream, bool muted) 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_MUTE, data, &reply); 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 273fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual float streamVolume(int stream, int output) const 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 278fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_VOLUME, data, &reply); 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool streamMute(int stream) const 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_MUTE, data, &reply); 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 292f78aee70d15daf4690de7e7b4983ee68b0d1381dGlenn Kasten virtual status_t setMode(audio_mode_t mode) 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(mode); 297c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MODE, data, &reply); 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 301c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setMicMute(bool state) 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 305c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(state); 306c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MIC_MUTE, data, &reply); 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 310c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual bool getMicMute() const 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 314c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_MIC_MUTE, data, &reply); 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 318fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setParameters(int ioHandle, const String8& keyValuePairs) 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 322fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(ioHandle); 323c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keyValuePairs); 324c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_PARAMETERS, data, &reply); 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 328fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual String8 getParameters(int ioHandle, const String8& keys) 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 332fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(ioHandle); 333c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keys); 334c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_PARAMETERS, data, &reply); 335c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readString8(); 336c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 337c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 338c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void registerClient(const sp<IAudioFlingerClient>& client) 339c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 340c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 341c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 342c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeStrongBinder(client->asBinder()); 343c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(REGISTER_CLIENT, data, &reply); 344c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 345c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 346c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) 347c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 348c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 349c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 350c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(sampleRate); 351c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 352c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channelCount); 353c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); 35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 357fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openOutput(uint32_t *pDevices, 358c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pSamplingRate, 359c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pFormat, 360c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pChannels, 361c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pLatencyMs, 362c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags) 36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 365c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 366c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 367c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 368c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 369c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = pLatencyMs ? *pLatencyMs : 0; 370c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 372c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 373c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 374c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 375c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 376c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(latency); 377c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(flags); 378c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_OUTPUT, data, &reply); 379fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = reply.readInt32(); 3803856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("openOutput() returned output, %p", output); 381c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 382c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 383c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 384c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 385c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 386c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 387c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 388c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 389c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent latency = reply.readInt32(); 390c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pLatencyMs) *pLatencyMs = latency; 391c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return output; 392c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 393c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 394fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openDuplicateOutput(int output1, int output2) 395c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 396c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 397c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 398fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output1); 399fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output2); 400c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_DUPLICATE_OUTPUT, data, &reply); 401fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent return reply.readInt32(); 402c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 403c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 404fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeOutput(int output) 405c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 406c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 407c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 408fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 409c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_OUTPUT, data, &reply); 41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 413fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t suspendOutput(int output) 41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 417fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 418c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SUSPEND_OUTPUT, data, &reply); 41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 421c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 422fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t restoreOutput(int output) 42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 426fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 427c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(RESTORE_OUTPUT, data, &reply); 428c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 430c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 431fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openInput(uint32_t *pDevices, 432fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pSamplingRate, 433fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pFormat, 434fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pChannels, 435fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t acoustics) 43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 43789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 438c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 439c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 440c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 441c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 442c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 444c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 445c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 44689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 447c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 448c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(acoustics); 449c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_INPUT, data, &reply); 450fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = reply.readInt32(); 451c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 452c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 453c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 454c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 455c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 456c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 457c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 458c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 459c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return input; 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 461c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 462fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeInput(int input) 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 466fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 467c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_INPUT, data, &reply); 468c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 471fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setStreamOutput(uint32_t stream, int output) 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 475c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(stream); 476fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 477c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_STREAM_OUTPUT, data, &reply); 478c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 480f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent 481f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent virtual status_t setVoiceVolume(float volume) 482f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent { 483f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent Parcel data, reply; 484f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 485f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent data.writeFloat(volume); 486f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent remote()->transact(SET_VOICE_VOLUME, data, &reply); 487f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent return reply.readInt32(); 488f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent } 489342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent 490342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int output) 491342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent { 492342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent Parcel data, reply; 493342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 494342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent data.writeInt32(output); 495342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent remote()->transact(GET_RENDER_POSITION, data, &reply); 496342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent status_t status = reply.readInt32(); 497342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (status == NO_ERROR) { 498342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent uint32_t tmp = reply.readInt32(); 499342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (halFrames) { 500342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent *halFrames = tmp; 501342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 502342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent tmp = reply.readInt32(); 503342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (dspFrames) { 504342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent *dspFrames = tmp; 505342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 506342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 507342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent return status; 508342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 50905bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent 51005bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent virtual unsigned int getInputFramesLost(int ioHandle) 51105bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent { 51205bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent Parcel data, reply; 51305bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 51405bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent data.writeInt32(ioHandle); 51505bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent remote()->transact(GET_INPUT_FRAMES_LOST, data, &reply); 51605bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent return reply.readInt32(); 51705bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent } 518be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 519be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual int newAudioSessionId() 520be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 521be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 522be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 523be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = remote()->transact(NEW_AUDIO_SESSION_ID, data, &reply); 524be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int id = 0; 525be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 526be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent id = reply.readInt32(); 527be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 528be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return id; 529be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 530be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 5313a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen virtual void acquireAudioSessionId(int audioSession) 5323a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen { 5333a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen Parcel data, reply; 5343a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 5353a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInt32(audioSession); 5363a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen remote()->transact(ACQUIRE_AUDIO_SESSION_ID, data, &reply); 5373a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } 5383a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen 5393a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen virtual void releaseAudioSessionId(int audioSession) 5403a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen { 5413a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen Parcel data, reply; 5423a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 5433a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen data.writeInt32(audioSession); 5443a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen remote()->transact(RELEASE_AUDIO_SESSION_ID, data, &reply); 5453a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } 5463a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen 547be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual status_t queryNumberEffects(uint32_t *numEffects) 548be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 549be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 550be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 551be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = remote()->transact(QUERY_NUM_EFFECTS, data, &reply); 552be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 553be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 554be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 555be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status = reply.readInt32(); 556be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 557be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 558be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 559be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (numEffects) { 560be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *numEffects = (uint32_t)reply.readInt32(); 561be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 562be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 563be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 564be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 565ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent virtual status_t queryEffect(uint32_t index, effect_descriptor_t *pDescriptor) 566be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 567be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (pDescriptor == NULL) { 568be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return BAD_VALUE; 569be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 570be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 571be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 572ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent data.writeInt32(index); 573ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent status_t status = remote()->transact(QUERY_EFFECT, data, &reply); 574be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 575be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 576be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 577be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status = reply.readInt32(); 578be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 579be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 580be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 581be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply.read(pDescriptor, sizeof(effect_descriptor_t)); 582be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 583be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 584be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 585be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual status_t getEffectDescriptor(effect_uuid_t *pUuid, effect_descriptor_t *pDescriptor) 586be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 587be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (pUuid == NULL || pDescriptor == NULL) { 588be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return BAD_VALUE; 589be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 590be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 591be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 592be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.write(pUuid, sizeof(effect_uuid_t)); 593be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = remote()->transact(GET_EFFECT_DESCRIPTOR, data, &reply); 594be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 595be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 596be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 597be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status = reply.readInt32(); 598be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status != NO_ERROR) { 599be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return status; 600be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 601be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply.read(pDescriptor, sizeof(effect_descriptor_t)); 602be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 603be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 604be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 605be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent virtual sp<IEffect> createEffect(pid_t pid, 606be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t *pDesc, 607be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent const sp<IEffectClient>& client, 608be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int32_t priority, 609be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int output, 610be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId, 611be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t *status, 612be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *id, 613be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int *enabled) 614be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent { 615be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent Parcel data, reply; 616be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sp<IEffect> effect; 617be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 618be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (pDesc == NULL) { 619be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return effect; 620be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status) { 621be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *status = BAD_VALUE; 622be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 623be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 624be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 625be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 626be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(pid); 627be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.write(pDesc, sizeof(effect_descriptor_t)); 628be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeStrongBinder(client->asBinder()); 629be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(priority); 630be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(output); 631be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.writeInt32(sessionId); 632be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 633be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t lStatus = remote()->transact(CREATE_EFFECT, data, &reply); 634be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (lStatus != NO_ERROR) { 63529357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("createEffect error: %s", strerror(-lStatus)); 636be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } else { 637be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent lStatus = reply.readInt32(); 638be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int tmp = reply.readInt32(); 639be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (id) { 640be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *id = tmp; 641be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 642be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent tmp = reply.readInt32(); 643be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (enabled) { 644be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *enabled = tmp; 645be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 646be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect = interface_cast<IEffect>(reply.readStrongBinder()); 647be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply.read(pDesc, sizeof(effect_descriptor_t)); 648be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 649be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status) { 650be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent *status = lStatus; 651be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 652be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 653be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return effect; 654be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 655de070137f11d346fba77605bd76a44c040a618fcEric Laurent 656de070137f11d346fba77605bd76a44c040a618fcEric Laurent virtual status_t moveEffects(int session, int srcOutput, int dstOutput) 657de070137f11d346fba77605bd76a44c040a618fcEric Laurent { 658de070137f11d346fba77605bd76a44c040a618fcEric Laurent Parcel data, reply; 659de070137f11d346fba77605bd76a44c040a618fcEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 660de070137f11d346fba77605bd76a44c040a618fcEric Laurent data.writeInt32(session); 661de070137f11d346fba77605bd76a44c040a618fcEric Laurent data.writeInt32(srcOutput); 662de070137f11d346fba77605bd76a44c040a618fcEric Laurent data.writeInt32(dstOutput); 663de070137f11d346fba77605bd76a44c040a618fcEric Laurent remote()->transact(MOVE_EFFECTS, data, &reply); 664de070137f11d346fba77605bd76a44c040a618fcEric Laurent return reply.readInt32(); 665de070137f11d346fba77605bd76a44c040a618fcEric Laurent } 66689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 66789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 66889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 66989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 67089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 67189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 67289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 67389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 67489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 67589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 67689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_TRACK: { 67789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 67889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 67989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 68089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 68189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 68289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 68389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 68489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 68589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 686fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 687be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId = data.readInt32(); 68889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 68989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 69089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project streamType, sampleRate, format, 691be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent channelCount, bufferCount, flags, buffer, output, &sessionId, &status); 692be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(sessionId); 69389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 69489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 69589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 69689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 69789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case OPEN_RECORD: { 69889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 69989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 700fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = data.readInt32(); 70189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 70289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 70389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 70489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 70589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 706be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId = data.readInt32(); 70789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 708c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent sp<IAudioRecord> record = openRecord(pid, input, 709be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sampleRate, format, channelCount, bufferCount, flags, &sessionId, &status); 710be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(sessionId); 71189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 71289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 71389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 71489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 71589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SAMPLE_RATE: { 71689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 717fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( sampleRate(data.readInt32()) ); 71889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 71989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CHANNEL_COUNT: { 72189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 722fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( channelCount(data.readInt32()) ); 72389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FORMAT: { 72689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 727fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( format(data.readInt32()) ); 72889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 73089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FRAME_COUNT: { 73189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 732fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( frameCount(data.readInt32()) ); 73389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 73489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 73589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case LATENCY: { 73689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 737fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( latency(data.readInt32()) ); 73889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 73989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 74089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_VOLUME: { 74189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 74289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 74389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 74489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 74589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_MUTE: { 74689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 74789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 74889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 74989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 75089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_VOLUME: { 75189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 75289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( masterVolume() ); 75389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 75489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 75589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_MUTE: { 75689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 75789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( masterMute() ); 75889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 75989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 76089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_VOLUME: { 76189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 76289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 763c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent float volume = data.readFloat(); 764fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 765c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32( setStreamVolume(stream, volume, output) ); 76689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 76789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 76889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_MUTE: { 76989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 77089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 77189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setStreamMute(stream, data.readInt32()) ); 77289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 77389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 77489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_VOLUME: { 77589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 77689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 777fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 778c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeFloat( streamVolume(stream, output) ); 77989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 78089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 78189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_MUTE: { 78289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 78389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 78489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( streamMute(stream) ); 78589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 78689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 78789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MODE: { 78889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 789f78aee70d15daf4690de7e7b4983ee68b0d1381dGlenn Kasten audio_mode_t mode = (audio_mode_t) data.readInt32(); 79089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMode(mode) ); 79189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 79289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 79389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MIC_MUTE: { 79489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 79589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int state = data.readInt32(); 79689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMicMute(state) ); 79789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 79889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 79989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MIC_MUTE: { 80089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 80189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMicMute() ); 80289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 80389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 804c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_PARAMETERS: { 80589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 806fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int ioHandle = data.readInt32(); 807c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keyValuePairs(data.readString8()); 808c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setParameters(ioHandle, keyValuePairs)); 80989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 810c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 811c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case GET_PARAMETERS: { 812c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 813fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int ioHandle = data.readInt32(); 814c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keys(data.readString8()); 815c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeString8(getParameters(ioHandle, keys)); 816c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 817c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 818c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 81989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case REGISTER_CLIENT: { 82089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 82189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 82289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project registerClient(client); 82389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 82489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 82589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_INPUTBUFFERSIZE: { 82689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 82789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 82889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 82989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 83089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 83189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 83289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 833c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_OUTPUT: { 834c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 835c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 836c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 837c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 838c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 839c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = data.readInt32(); 840c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags = data.readInt32(); 841fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = openOutput(&devices, 842c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 843c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 844c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 845c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &latency, 846c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent flags); 8473856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("OPEN_OUTPUT output, %p", output); 848fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(output); 849c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 850c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 851c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 852c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 853c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(latency); 854c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 855c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 856c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_DUPLICATE_OUTPUT: { 857c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 858fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output1 = data.readInt32(); 859fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output2 = data.readInt32(); 860fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(openDuplicateOutput(output1, output2)); 861c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 862c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 863c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_OUTPUT: { 864c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 865fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(closeOutput(data.readInt32())); 866c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 867c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 868c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SUSPEND_OUTPUT: { 869c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 870fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(suspendOutput(data.readInt32())); 871c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 872c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 873c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case RESTORE_OUTPUT: { 874c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 875fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(restoreOutput(data.readInt32())); 876c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 877c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 878c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_INPUT: { 879c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 880c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 881c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 882c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 883c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 884c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t acoutics = data.readInt32(); 885c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 886fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = openInput(&devices, 887c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 888c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 889c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 890c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent acoutics); 891fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(input); 892c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 893c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 894c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 895c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 896c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 897c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 898c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_INPUT: { 89989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 900fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(closeInput(data.readInt32())); 90189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 90289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 903c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_STREAM_OUTPUT: { 90489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 905c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t stream = data.readInt32(); 906fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 907c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setStreamOutput(stream, output)); 90889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 90989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 910f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent case SET_VOICE_VOLUME: { 911f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 912f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent float volume = data.readFloat(); 913f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent reply->writeInt32( setVoiceVolume(volume) ); 914f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent return NO_ERROR; 915f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent } break; 916342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent case GET_RENDER_POSITION: { 917342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 918342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent int output = data.readInt32(); 919342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent uint32_t halFrames; 920342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent uint32_t dspFrames; 921342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent status_t status = getRenderPosition(&halFrames, &dspFrames, output); 922342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent reply->writeInt32(status); 923342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent if (status == NO_ERROR) { 924342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent reply->writeInt32(halFrames); 925342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent reply->writeInt32(dspFrames); 926342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 927342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent return NO_ERROR; 928342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent } 92905bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent case GET_INPUT_FRAMES_LOST: { 93005bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 93105bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent int ioHandle = data.readInt32(); 93205bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent reply->writeInt32(getInputFramesLost(ioHandle)); 93305bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent return NO_ERROR; 93405bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent } break; 935be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case NEW_AUDIO_SESSION_ID: { 936be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 937be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(newAudioSessionId()); 938be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 939be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } break; 9403a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen case ACQUIRE_AUDIO_SESSION_ID: { 9413a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen CHECK_INTERFACE(IAudioFlinger, data, reply); 9423a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen int audioSession = data.readInt32(); 9433a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen acquireAudioSessionId(audioSession); 9443a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen return NO_ERROR; 9453a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } break; 9463a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen case RELEASE_AUDIO_SESSION_ID: { 9473a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen CHECK_INTERFACE(IAudioFlinger, data, reply); 9483a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen int audioSession = data.readInt32(); 9493a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen releaseAudioSessionId(audioSession); 9503a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen return NO_ERROR; 9513a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen } break; 952be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case QUERY_NUM_EFFECTS: { 953be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 954be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent uint32_t numEffects; 955be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = queryNumberEffects(&numEffects); 956be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 957be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 958be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32((int32_t)numEffects); 959be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 960be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 961be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 962ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent case QUERY_EFFECT: { 963be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 964be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t desc; 965ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent status_t status = queryEffect(data.readInt32(), &desc); 966be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 967be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 968be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->write(&desc, sizeof(effect_descriptor_t)); 969be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 970be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 971be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 972be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case GET_EFFECT_DESCRIPTOR: { 973be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 974be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_uuid_t uuid; 975be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.read(&uuid, sizeof(effect_uuid_t)); 976be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t desc; 977be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status = getEffectDescriptor(&uuid, &desc); 978be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 979be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent if (status == NO_ERROR) { 980be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->write(&desc, sizeof(effect_descriptor_t)); 981be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 982be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 983be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 984be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent case CREATE_EFFECT: { 985be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 986be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent pid_t pid = data.readInt32(); 987be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent effect_descriptor_t desc; 988be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent data.read(&desc, sizeof(effect_descriptor_t)); 989be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sp<IEffectClient> client = interface_cast<IEffectClient>(data.readStrongBinder()); 990be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int32_t priority = data.readInt32(); 991be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int output = data.readInt32(); 992be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int sessionId = data.readInt32(); 993be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent status_t status; 994be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int id; 995be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent int enabled; 99605bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent 997be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent sp<IEffect> effect = createEffect(pid, &desc, client, priority, output, sessionId, &status, &id, &enabled); 998be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(status); 999be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(id); 1000be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeInt32(enabled); 1001be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->writeStrongBinder(effect->asBinder()); 1002be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent reply->write(&desc, sizeof(effect_descriptor_t)); 1003be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent return NO_ERROR; 1004be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } break; 1005de070137f11d346fba77605bd76a44c040a618fcEric Laurent case MOVE_EFFECTS: { 1006de070137f11d346fba77605bd76a44c040a618fcEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 1007de070137f11d346fba77605bd76a44c040a618fcEric Laurent int session = data.readInt32(); 1008de070137f11d346fba77605bd76a44c040a618fcEric Laurent int srcOutput = data.readInt32(); 1009de070137f11d346fba77605bd76a44c040a618fcEric Laurent int dstOutput = data.readInt32(); 1010de070137f11d346fba77605bd76a44c040a618fcEric Laurent reply->writeInt32(moveEffects(session, srcOutput, dstOutput)); 1011de070137f11d346fba77605bd76a44c040a618fcEric Laurent return NO_ERROR; 1012de070137f11d346fba77605bd76a44c040a618fcEric Laurent } break; 101389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 101489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 101589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 101689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 101789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 101889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 101989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 102089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 1021