IAudioFlinger.cpp revision 5841db78dff14898538200287d246577b1fc37e2
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* //device/extlibs/pv/android/IAudioflinger.cpp 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, 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project IS_MUSIC_ACTIVE, 51c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent SET_PARAMETERS, 52c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent GET_PARAMETERS, 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project REGISTER_CLIENT, 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_INPUTBUFFERSIZE, 55c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent OPEN_OUTPUT, 56c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent OPEN_DUPLICATE_OUTPUT, 57c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CLOSE_OUTPUT, 58c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent SUSPEND_OUTPUT, 59c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent RESTORE_OUTPUT, 60c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent OPEN_INPUT, 61c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CLOSE_INPUT, 62c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent SET_STREAM_OUTPUT 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpAudioFlinger : public BpInterface<IAudioFlinger> 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpAudioFlinger(const sp<IBinder>& impl) 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IAudioFlinger>(impl) 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioTrack> createTrack( 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType, 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format, 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount, 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const sp<IMemory>& sharedBuffer, 82fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output, 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 865841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IAudioTrack> track; 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(streamType); 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(sharedBuffer->asBinder()); 96fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply); 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (lStatus != NO_ERROR) { 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("createTrack error: %s", strerror(-lStatus)); 1005841db78dff14898538200287d246577b1fc37e2Eric Laurent } else { 1015841db78dff14898538200287d246577b1fc37e2Eric Laurent lStatus = reply.readInt32(); 1025841db78dff14898538200287d246577b1fc37e2Eric Laurent track = interface_cast<IAudioTrack>(reply.readStrongBinder()); 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 1075841db78dff14898538200287d246577b1fc37e2Eric Laurent return track; 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioRecord> openRecord( 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 112fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input, 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format, 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount, 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 1215841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IAudioRecord> record; 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 124fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 1305841db78dff14898538200287d246577b1fc37e2Eric Laurent status_t lStatus = remote()->transact(OPEN_RECORD, data, &reply); 1315841db78dff14898538200287d246577b1fc37e2Eric Laurent if (lStatus != NO_ERROR) { 1325841db78dff14898538200287d246577b1fc37e2Eric Laurent LOGE("openRecord error: %s", strerror(-lStatus)); 1335841db78dff14898538200287d246577b1fc37e2Eric Laurent } else { 1345841db78dff14898538200287d246577b1fc37e2Eric Laurent lStatus = reply.readInt32(); 1355841db78dff14898538200287d246577b1fc37e2Eric Laurent record = interface_cast<IAudioRecord>(reply.readStrongBinder()); 1365841db78dff14898538200287d246577b1fc37e2Eric Laurent } 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 1405841db78dff14898538200287d246577b1fc37e2Eric Laurent return record; 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 143fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual uint32_t sampleRate(int output) const 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 147fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SAMPLE_RATE, data, &reply); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 152fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int channelCount(int output) const 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 156fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CHANNEL_COUNT, data, &reply); 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 161fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int format(int output) const 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 165fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FORMAT, data, &reply); 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 170fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual size_t frameCount(int output) const 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 174fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FRAME_COUNT, data, &reply); 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 179fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual uint32_t latency(int output) const 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 183fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(LATENCY, data, &reply); 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterVolume(float value) 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_VOLUME, data, &reply); 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterMute(bool muted) 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_MUTE, data, &reply); 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float masterVolume() const 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_VOLUME, data, &reply); 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool masterMute() const 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_MUTE, data, &reply); 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 222fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setStreamVolume(int stream, float value, int output) 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 228fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_VOLUME, data, &reply); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setStreamMute(int stream, bool muted) 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_MUTE, data, &reply); 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 243fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual float streamVolume(int stream, int output) const 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 248fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_VOLUME, data, &reply); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool streamMute(int stream) const 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_MUTE, data, &reply); 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 262c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setMode(int mode) 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(mode); 267c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MODE, data, &reply); 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 271c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setMicMute(bool state) 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 275c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(state); 276c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MIC_MUTE, data, &reply); 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 280c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual bool getMicMute() const 28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 284c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_MIC_MUTE, data, &reply); 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 288c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual bool isMusicActive() const 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 292c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(IS_MUSIC_ACTIVE, data, &reply); 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 296fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setParameters(int ioHandle, const String8& keyValuePairs) 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 300fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(ioHandle); 301c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keyValuePairs); 302c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_PARAMETERS, data, &reply); 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 306fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual String8 getParameters(int ioHandle, const String8& keys) 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 310fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(ioHandle); 311c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keys); 312c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_PARAMETERS, data, &reply); 313c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readString8(); 314c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 315c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 316c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void registerClient(const sp<IAudioFlingerClient>& client) 317c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 318c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 319c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 320c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeStrongBinder(client->asBinder()); 321c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(REGISTER_CLIENT, data, &reply); 322c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 323c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 324c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) 325c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 326c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 327c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 328c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(sampleRate); 329c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 330c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channelCount); 331c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 335fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openOutput(uint32_t *pDevices, 336c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pSamplingRate, 337c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pFormat, 338c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pChannels, 339c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pLatencyMs, 340c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags) 34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 343c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 344c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 345c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 346c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 347c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = pLatencyMs ? *pLatencyMs : 0; 348c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 350c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 351c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 352c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 353c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 354c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(latency); 355c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(flags); 356c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_OUTPUT, data, &reply); 357fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = reply.readInt32(); 358c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent LOGV("openOutput() returned output, %p", output); 359c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 360c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 361c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 362c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 363c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 364c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 365c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 366c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 367c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent latency = reply.readInt32(); 368c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pLatencyMs) *pLatencyMs = latency; 369c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return output; 370c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 371c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 372fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openDuplicateOutput(int output1, int output2) 373c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 374c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 375c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 376fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output1); 377fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output2); 378c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_DUPLICATE_OUTPUT, data, &reply); 379fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent return reply.readInt32(); 380c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 381c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 382fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeOutput(int output) 383c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 384c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 385c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 386fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 387c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_OUTPUT, data, &reply); 38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 391fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t suspendOutput(int output) 39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 395fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 396c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SUSPEND_OUTPUT, data, &reply); 39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 399c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 400fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t restoreOutput(int output) 40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 404fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 405c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(RESTORE_OUTPUT, data, &reply); 406c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 408c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 409fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openInput(uint32_t *pDevices, 410fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pSamplingRate, 411fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pFormat, 412fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pChannels, 413fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t acoustics) 41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 416c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 417c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 418c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 419c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 420c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 422c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 423c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 425c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 426c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(acoustics); 427c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_INPUT, data, &reply); 428fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = reply.readInt32(); 429c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 430c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 431c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 432c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 433c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 434c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 435c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 436c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 437c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return input; 43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 439c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 440fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeInput(int input) 44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 444fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 445c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_INPUT, data, &reply); 446c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 449fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setStreamOutput(uint32_t stream, int output) 45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 453c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(stream); 454fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 455c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_STREAM_OUTPUT, data, &reply); 456c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_TRACK: { 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 478fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project streamType, sampleRate, format, 482c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channelCount, bufferCount, flags, buffer, output, &status); 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 48489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 48589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 48689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 48789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case OPEN_RECORD: { 48889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 48989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 490fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = data.readInt32(); 49189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 49289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 49389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 49489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 49689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 497c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent sp<IAudioRecord> record = openRecord(pid, input, 49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sampleRate, format, channelCount, bufferCount, flags, &status); 49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 50189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SAMPLE_RATE: { 50489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 505fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( sampleRate(data.readInt32()) ); 50689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CHANNEL_COUNT: { 50989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 510fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( channelCount(data.readInt32()) ); 51189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 51289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FORMAT: { 51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 515fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( format(data.readInt32()) ); 51689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 51789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FRAME_COUNT: { 51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 520fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( frameCount(data.readInt32()) ); 52189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case LATENCY: { 52489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 525fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( latency(data.readInt32()) ); 52689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_VOLUME: { 52989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 53189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 53389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_MUTE: { 53489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 53689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 53889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_VOLUME: { 53989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( masterVolume() ); 54189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_MUTE: { 54489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( masterMute() ); 54689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_VOLUME: { 54989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 55089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 551c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent float volume = data.readFloat(); 552fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 553c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32( setStreamVolume(stream, volume, output) ); 55489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 55589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 55689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_MUTE: { 55789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 55889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 55989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setStreamMute(stream, data.readInt32()) ); 56089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 56189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 56289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_VOLUME: { 56389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 56489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 565fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 566c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeFloat( streamVolume(stream, output) ); 56789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 56889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 56989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_MUTE: { 57089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 57189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 57289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( streamMute(stream) ); 57389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 57489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 57589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MODE: { 57689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 57789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mode = data.readInt32(); 57889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMode(mode) ); 57989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 58089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 58189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MIC_MUTE: { 58289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 58389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int state = data.readInt32(); 58489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMicMute(state) ); 58589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 58689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 58789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MIC_MUTE: { 58889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 58989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMicMute() ); 59089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 59189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 59289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_MUSIC_ACTIVE: { 59389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 59489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( isMusicActive() ); 59589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 59689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 597c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_PARAMETERS: { 59889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 599fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int ioHandle = data.readInt32(); 600c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keyValuePairs(data.readString8()); 601c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setParameters(ioHandle, keyValuePairs)); 60289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 603c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 604c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case GET_PARAMETERS: { 605c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 606fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int ioHandle = data.readInt32(); 607c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keys(data.readString8()); 608c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeString8(getParameters(ioHandle, keys)); 609c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 610c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 611c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 61289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case REGISTER_CLIENT: { 61389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 61489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 61589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project registerClient(client); 61689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 61789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 61889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_INPUTBUFFERSIZE: { 61989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 62089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 62189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 62289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 62389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 62489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 62589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 626c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_OUTPUT: { 627c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 628c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 629c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 630c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 631c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 632c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = data.readInt32(); 633c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags = data.readInt32(); 634fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = openOutput(&devices, 635c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 636c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 637c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 638c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &latency, 639c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent flags); 640c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent LOGV("OPEN_OUTPUT output, %p", output); 641fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(output); 642c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 643c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 644c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 645c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 646c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(latency); 647c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 648c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 649c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_DUPLICATE_OUTPUT: { 650c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 651fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output1 = data.readInt32(); 652fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output2 = data.readInt32(); 653fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(openDuplicateOutput(output1, output2)); 654c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 655c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 656c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_OUTPUT: { 657c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 658fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(closeOutput(data.readInt32())); 659c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 660c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 661c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SUSPEND_OUTPUT: { 662c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 663fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(suspendOutput(data.readInt32())); 664c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 665c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 666c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case RESTORE_OUTPUT: { 667c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 668fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(restoreOutput(data.readInt32())); 669c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 670c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 671c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_INPUT: { 672c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 673c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 674c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 675c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 676c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 677c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t acoutics = data.readInt32(); 678c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 679fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = openInput(&devices, 680c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 681c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 682c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 683c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent acoutics); 684fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(input); 685c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 686c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 687c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 688c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 689c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 690c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 691c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_INPUT: { 69289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 693fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(closeInput(data.readInt32())); 69489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 69589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 696c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_STREAM_OUTPUT: { 69789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 698c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t stream = data.readInt32(); 699fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 700c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setStreamOutput(stream, output)); 70189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 70289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 70389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 70489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 70589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 70689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 70789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 70889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 70989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 71089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 711