IAudioFlinger.cpp revision fa2877b9ea48baed934b866d2ab3658b69c4c869
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; 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(streamType); 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(sharedBuffer->asBinder()); 95fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply); 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (lStatus != NO_ERROR) { 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("createTrack error: %s", strerror(-lStatus)); 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project lStatus = reply.readInt32(); 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IAudioTrack>(reply.readStrongBinder()); 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioRecord> openRecord( 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 109fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input, 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format, 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount, 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 120fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(OPEN_RECORD, data, &reply); 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = reply.readInt32(); 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IAudioRecord>(reply.readStrongBinder()); 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 134fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual uint32_t sampleRate(int output) const 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 138fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SAMPLE_RATE, data, &reply); 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 143fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int channelCount(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(CHANNEL_COUNT, data, &reply); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 152fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int format(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(FORMAT, data, &reply); 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 161fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual size_t frameCount(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(FRAME_COUNT, data, &reply); 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 170fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual uint32_t latency(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(LATENCY, data, &reply); 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterVolume(float value) 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_VOLUME, 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 setMasterMute(bool muted) 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.writeInt32(muted); 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_MUTE, 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 float masterVolume() const 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 remote()->transact(MASTER_VOLUME, data, &reply); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool masterMute() const 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_MUTE, data, &reply); 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 213fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setStreamVolume(int stream, float value, int output) 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 219fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_VOLUME, data, &reply); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setStreamMute(int stream, bool muted) 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_MUTE, data, &reply); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 234fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual float streamVolume(int stream, int output) const 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 239fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_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 streamMute(int stream) 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 data.writeInt32(stream); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_MUTE, data, &reply); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 253c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setMode(int mode) 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(mode); 258c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MODE, 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 setMicMute(bool state) 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 266c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(state); 267c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_MIC_MUTE, data, &reply); 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 271c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual bool getMicMute() const 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 275c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_MIC_MUTE, data, &reply); 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 279c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual bool isMusicActive() const 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 283c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(IS_MUSIC_ACTIVE, data, &reply); 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 287fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setParameters(int ioHandle, const String8& keyValuePairs) 28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 291fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(ioHandle); 292c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keyValuePairs); 293c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_PARAMETERS, data, &reply); 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 297fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual String8 getParameters(int ioHandle, const String8& keys) 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 301fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(ioHandle); 302c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeString8(keys); 303c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_PARAMETERS, data, &reply); 304c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readString8(); 305c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 306c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 307c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void registerClient(const sp<IAudioFlingerClient>& client) 308c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 309c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 310c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 311c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeStrongBinder(client->asBinder()); 312c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(REGISTER_CLIENT, data, &reply); 313c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 314c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 315c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) 316c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 317c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 318c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 319c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(sampleRate); 320c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 321c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channelCount); 322c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 326fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openOutput(uint32_t *pDevices, 327c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pSamplingRate, 328c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pFormat, 329c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pChannels, 330c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pLatencyMs, 331c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags) 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 334c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 335c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 336c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 337c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 338c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = pLatencyMs ? *pLatencyMs : 0; 339c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 341c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 342c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 343c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(format); 344c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 345c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(latency); 346c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(flags); 347c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_OUTPUT, data, &reply); 348fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = reply.readInt32(); 349c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent LOGV("openOutput() returned output, %p", output); 350c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 351c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 352c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 353c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 354c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 355c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 356c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 357c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 358c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent latency = reply.readInt32(); 359c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pLatencyMs) *pLatencyMs = latency; 360c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return output; 361c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 362c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 363fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openDuplicateOutput(int output1, int output2) 364c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 365c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 366c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 367fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output1); 368fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output2); 369c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_DUPLICATE_OUTPUT, data, &reply); 370fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent return reply.readInt32(); 371c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 372c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 373fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeOutput(int output) 374c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 375c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 376c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 377fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 378c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_OUTPUT, data, &reply); 37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 382fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t suspendOutput(int output) 38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 386fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 387c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SUSPEND_OUTPUT, data, &reply); 38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 390c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 391fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t restoreOutput(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(RESTORE_OUTPUT, data, &reply); 397c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 399c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 400fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual int openInput(uint32_t *pDevices, 401fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pSamplingRate, 402fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pFormat, 403fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t *pChannels, 404fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent uint32_t acoustics) 40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 407c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 408c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 409c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 410c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 411c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 413c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 414c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 416c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 417c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(acoustics); 418c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_INPUT, data, &reply); 419fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = reply.readInt32(); 420c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 421c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 422c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 423c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 424c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 425c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 426c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 427c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 428c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return input; 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 430c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 431fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t closeInput(int input) 43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 43489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 435fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(input); 436c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_INPUT, data, &reply); 437c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 43989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 440fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent virtual status_t setStreamOutput(uint32_t stream, int output) 44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 444c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(stream); 445fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent data.writeInt32(output); 446c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_STREAM_OUTPUT, data, &reply); 447c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 44989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 45389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 45489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 45589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_TRACK: { 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 469fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project streamType, sampleRate, format, 473c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channelCount, bufferCount, flags, buffer, output, &status); 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case OPEN_RECORD: { 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 481fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = data.readInt32(); 48289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 48489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 48589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 48689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 48789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 488c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent sp<IAudioRecord> record = openRecord(pid, input, 48989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sampleRate, format, channelCount, bufferCount, flags, &status); 49089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 49189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 49289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 49389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 49489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SAMPLE_RATE: { 49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 496fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( sampleRate(data.readInt32()) ); 49789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CHANNEL_COUNT: { 50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 501fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( channelCount(data.readInt32()) ); 50289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FORMAT: { 50589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 506fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( format(data.readInt32()) ); 50789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FRAME_COUNT: { 51089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 511fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( frameCount(data.readInt32()) ); 51289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case LATENCY: { 51589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 516fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32( latency(data.readInt32()) ); 51789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 51889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_VOLUME: { 52089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 52189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 52289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_MUTE: { 52589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 52689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 52789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_VOLUME: { 53089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( masterVolume() ); 53289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 53489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_MUTE: { 53589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( masterMute() ); 53789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 53989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_VOLUME: { 54089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 542c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent float volume = data.readFloat(); 543fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 544c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32( setStreamVolume(stream, volume, output) ); 54589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_MUTE: { 54889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 55089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setStreamMute(stream, data.readInt32()) ); 55189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 55289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 55389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_VOLUME: { 55489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 55589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 556fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 557c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeFloat( streamVolume(stream, output) ); 55889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 55989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 56089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_MUTE: { 56189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 56289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 56389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( streamMute(stream) ); 56489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 56589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 56689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MODE: { 56789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 56889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mode = data.readInt32(); 56989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMode(mode) ); 57089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 57189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 57289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MIC_MUTE: { 57389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 57489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int state = data.readInt32(); 57589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMicMute(state) ); 57689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 57789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 57889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MIC_MUTE: { 57989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 58089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMicMute() ); 58189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 58289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 58389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_MUSIC_ACTIVE: { 58489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 58589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( isMusicActive() ); 58689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 58789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 588c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_PARAMETERS: { 58989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 590fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int ioHandle = data.readInt32(); 591c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keyValuePairs(data.readString8()); 592c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setParameters(ioHandle, keyValuePairs)); 59389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 594c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 595c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case GET_PARAMETERS: { 596c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 597fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int ioHandle = data.readInt32(); 598c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keys(data.readString8()); 599c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeString8(getParameters(ioHandle, keys)); 600c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 601c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 602c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 60389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case REGISTER_CLIENT: { 60489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 60589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 60689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project registerClient(client); 60789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 60889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 60989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_INPUTBUFFERSIZE: { 61089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 61189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 61289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 61389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 61489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 61589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 61689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 617c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_OUTPUT: { 618c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 619c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 620c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 621c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 622c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 623c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = data.readInt32(); 624c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags = data.readInt32(); 625fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = openOutput(&devices, 626c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 627c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 628c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 629c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &latency, 630c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent flags); 631c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent LOGV("OPEN_OUTPUT output, %p", output); 632fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(output); 633c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 634c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 635c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 636c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 637c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(latency); 638c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 639c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 640c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_DUPLICATE_OUTPUT: { 641c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 642fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output1 = data.readInt32(); 643fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output2 = data.readInt32(); 644fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(openDuplicateOutput(output1, output2)); 645c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 646c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 647c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_OUTPUT: { 648c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 649fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(closeOutput(data.readInt32())); 650c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 651c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 652c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SUSPEND_OUTPUT: { 653c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 654fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(suspendOutput(data.readInt32())); 655c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 656c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 657c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case RESTORE_OUTPUT: { 658c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 659fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(restoreOutput(data.readInt32())); 660c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 661c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 662c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_INPUT: { 663c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 664c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 665c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 666c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 667c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 668c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t acoutics = data.readInt32(); 669c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 670fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int input = openInput(&devices, 671c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 672c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 673c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 674c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent acoutics); 675fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(input); 676c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 677c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 678c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 679c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 680c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 681c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 682c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_INPUT: { 68389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 684fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent reply->writeInt32(closeInput(data.readInt32())); 68589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 68689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 687c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_STREAM_OUTPUT: { 68889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 689c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t stream = data.readInt32(); 690fa2877b9ea48baed934b866d2ab3658b69c4c869Eric Laurent int output = data.readInt32(); 691c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setStreamOutput(stream, output)); 69289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 69389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 69489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 69589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 69689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 69789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 69889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 69989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 70089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 70189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 702