IAudioFlinger.cpp revision c2f1f07084818942352c6bbfb36af9b6b330eb4e
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, 82c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *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()); 95c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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, 109c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *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); 120c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&input, sizeof(void *)); 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 134c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual uint32_t sampleRate(void *output) const 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 138c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 143c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual int channelCount(void *output) const 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 147c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 152c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual int format(void *output) const 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 156c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 161c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual size_t frameCount(void *output) const 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 165c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 170c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual uint32_t latency(void *output) const 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 174c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 213c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setStreamVolume(int stream, float value, void *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); 219c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 234c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual float streamVolume(int stream, void *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); 239c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 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 287c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setParameters(void *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()); 291c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&ioHandle, sizeof(void *)); 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 297c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual String8 getParameters(void *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()); 301c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&ioHandle, sizeof(void *)); 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 326c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void *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); 348c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 349c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply.read(&output, sizeof(void *)); 350c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent LOGV("openOutput() returned output, %p", output); 351c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 352c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 353c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 354c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 355c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 356c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 357c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 358c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 359c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent latency = reply.readInt32(); 360c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pLatencyMs) *pLatencyMs = latency; 361c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return output; 362c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 363c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 364c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void *openDuplicateOutput(void *output1, void *output2) 365c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 366c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 367c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 368c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output1, sizeof(void *)); 369c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output2, sizeof(void *)); 370c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_DUPLICATE_OUTPUT, data, &reply); 371c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 372c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply.read(&output, sizeof(void *)); 373c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return output; 374c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 375c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 376c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t closeOutput(void *output) 377c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent { 378c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Parcel data, reply; 379c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 380c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 381c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_OUTPUT, data, &reply); 38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 385c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t suspendOutput(void *output) 38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 389c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 390c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SUSPEND_OUTPUT, data, &reply); 39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 393c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 394c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t restoreOutput(void *output) 39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 398c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 399c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(RESTORE_OUTPUT, data, &reply); 400c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 402c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 403c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual void *openInput(uint32_t *pDevices, 404c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pSamplingRate, 405c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pFormat, 406c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t *pChannels, 407c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t acoustics) 40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 410c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 411c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 412c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = pFormat ? *pFormat : 0; 413c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 414c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 416c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(devices); 417c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(samplingRate); 41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 419c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(channels); 420c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(acoustics); 421c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(OPEN_INPUT, data, &reply); 422c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *input; 423c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply.read(&input, sizeof(void *)); 424c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent devices = reply.readInt32(); 425c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pDevices) *pDevices = devices; 426c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent samplingRate = reply.readInt32(); 427c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 428c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent format = reply.readInt32(); 429c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pFormat) *pFormat = format; 430c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channels = reply.readInt32(); 431c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent if (pChannels) *pChannels = channels; 432c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return input; 43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 434c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 435c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t closeInput(void *input) 43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 43789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 439c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&input, sizeof(void *)); 440c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(CLOSE_INPUT, data, &reply); 441c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 444c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent virtual status_t setStreamOutput(uint32_t stream, void *output) 44589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 44689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 448c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(stream); 449c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.write(&output, sizeof(void *)); 450c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(SET_STREAM_OUTPUT, data, &reply); 451c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return reply.readInt32(); 45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 45389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 45489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 45589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_TRACK: { 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 473c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 474c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project streamType, sampleRate, format, 478c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent channelCount, bufferCount, flags, buffer, output, &status); 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 48289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case OPEN_RECORD: { 48489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 48589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 486c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *input; 487c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&input, sizeof(void *)); 48889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 48989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 49089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 49189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 49289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 49389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 494c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent sp<IAudioRecord> record = openRecord(pid, input, 49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sampleRate, format, channelCount, bufferCount, flags, &status); 49689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 49789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SAMPLE_RATE: { 50189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 502c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 503c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 50489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( sampleRate(output) ); 50589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CHANNEL_COUNT: { 50889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 509c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 510c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 51189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( channelCount(output) ); 51289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FORMAT: { 51589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 516c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 517c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 51889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( format(output) ); 51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FRAME_COUNT: { 52289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 523c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 524c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 52589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( frameCount(output) ); 52689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case LATENCY: { 52989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 530c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 531c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 53289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( latency(output) ); 53389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 53589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_VOLUME: { 53689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 53889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_MUTE: { 54189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 54389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_VOLUME: { 54689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( masterVolume() ); 54889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 55089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_MUTE: { 55189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 55289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( masterMute() ); 55389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 55489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 55589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_VOLUME: { 55689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 55789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 558c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent float volume = data.readFloat(); 559c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 560c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 561c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32( setStreamVolume(stream, volume, output) ); 56289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 56389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 56489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_MUTE: { 56589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 56689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 56789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setStreamMute(stream, data.readInt32()) ); 56889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 56989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 57089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_VOLUME: { 57189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 57289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 573c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 574c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 575c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeFloat( streamVolume(stream, output) ); 57689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 57789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 57889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_MUTE: { 57989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 58089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 58189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( streamMute(stream) ); 58289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 58389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 58489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MODE: { 58589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 58689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mode = data.readInt32(); 58789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMode(mode) ); 58889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 58989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 59089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MIC_MUTE: { 59189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 59289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int state = data.readInt32(); 59389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMicMute(state) ); 59489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 59589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 59689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MIC_MUTE: { 59789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 59889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMicMute() ); 59989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 60089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 60189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_MUSIC_ACTIVE: { 60289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 60389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( isMusicActive() ); 60489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 60589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 606c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_PARAMETERS: { 60789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 608c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *ioHandle; 609c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&ioHandle, sizeof(void *)); 610c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keyValuePairs(data.readString8()); 611c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setParameters(ioHandle, keyValuePairs)); 61289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 613c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 614c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case GET_PARAMETERS: { 615c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 616c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *ioHandle; 617c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&ioHandle, sizeof(void *)); 618c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent String8 keys(data.readString8()); 619c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeString8(getParameters(ioHandle, keys)); 620c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 621c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 622c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 62389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case REGISTER_CLIENT: { 62489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 62589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 62689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project registerClient(client); 62789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 62889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 62989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_INPUTBUFFERSIZE: { 63089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 63189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 63289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 63389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 63489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 63589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 63689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 637c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_OUTPUT: { 638c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 639c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 640c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 641c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 642c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 643c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t latency = data.readInt32(); 644c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t flags = data.readInt32(); 645c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output = openOutput(&devices, 646c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 647c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 648c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 649c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &latency, 650c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent flags); 651c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent LOGV("OPEN_OUTPUT output, %p", output); 652c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->write(&output, sizeof(void *)); 653c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 654c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 655c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 656c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 657c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(latency); 658c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 659c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 660c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_DUPLICATE_OUTPUT: { 661c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 662c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output1; 663c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output2; 664c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output1, sizeof(void *)); 665c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output2, sizeof(void *)); 666c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output = openDuplicateOutput(output1, output2); 667c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->write(&output, sizeof(void *)); 668c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 669c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 670c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_OUTPUT: { 671c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 672c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 673c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 674c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(closeOutput(output)); 675c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 676c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 677c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SUSPEND_OUTPUT: { 678c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 679c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 680c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 681c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(suspendOutput(output)); 682c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 683c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 684c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case RESTORE_OUTPUT: { 685c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 686c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 687c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 688c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(restoreOutput(output)); 689c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 690c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 691c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case OPEN_INPUT: { 692c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 693c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t devices = data.readInt32(); 694c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t samplingRate = data.readInt32(); 695c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t format = data.readInt32(); 696c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t channels = data.readInt32(); 697c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t acoutics = data.readInt32(); 698c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 699c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *input = openInput(&devices, 700c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &samplingRate, 701c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &format, 702c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent &channels, 703c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent acoutics); 704c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->write(&input, sizeof(void *)); 705c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(devices); 706c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(samplingRate); 707c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(format); 708c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(channels); 709c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent return NO_ERROR; 710c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } break; 711c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case CLOSE_INPUT: { 71289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 713c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *input; 714c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&input, sizeof(void *)); 715c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(closeInput(input)); 71689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 71789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 718c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case SET_STREAM_OUTPUT: { 71989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 720c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent void *output; 721c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent uint32_t stream = data.readInt32(); 722c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.read(&output, sizeof(void *)); 723c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent reply->writeInt32(setStreamOutput(stream, output)); 72489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 72789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 72889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 72989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 73089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 73189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 73289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 73389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 734