IAudioFlinger.cpp revision 89fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5
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" 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h> 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Parcel.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IAudioFlinger.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_TRACK = IBinder::FIRST_CALL_TRANSACTION, 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project OPEN_RECORD, 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SAMPLE_RATE, 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHANNEL_COUNT, 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project FORMAT, 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project FRAME_COUNT, 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LATENCY, 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MASTER_VOLUME, 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MASTER_MUTE, 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MASTER_VOLUME, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MASTER_MUTE, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_STREAM_VOLUME, 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_STREAM_MUTE, 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STREAM_VOLUME, 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STREAM_MUTE, 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MODE, 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_MODE, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_ROUTING, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_ROUTING, 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_MIC_MUTE, 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_MIC_MUTE, 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project IS_MUSIC_ACTIVE, 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_PARAMETER, 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project REGISTER_CLIENT, 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_INPUTBUFFERSIZE, 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project WAKE_UP, 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project IS_A2DP_ENABLED 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpAudioFlinger : public BpInterface<IAudioFlinger> 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpAudioFlinger(const sp<IBinder>& impl) 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IAudioFlinger>(impl) 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioTrack> createTrack( 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType, 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format, 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount, 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const sp<IMemory>& sharedBuffer, 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(streamType); 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(sharedBuffer->asBinder()); 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply); 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (lStatus != NO_ERROR) { 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("createTrack error: %s", strerror(-lStatus)); 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project lStatus = reply.readInt32(); 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IAudioTrack>(reply.readStrongBinder()); 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IAudioRecord> openRecord( 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid, 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType, 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate, 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format, 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount, 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int frameCount, 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags, 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t *status) 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(streamType); 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(frameCount); 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(flags); 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(OPEN_RECORD, data, &reply); 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t lStatus = reply.readInt32(); 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (status) { 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *status = lStatus; 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IAudioRecord>(reply.readStrongBinder()); 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual uint32_t sampleRate(int output) const 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(output); 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SAMPLE_RATE, data, &reply); 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual int channelCount(int output) const 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(output); 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CHANNEL_COUNT, data, &reply); 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual int format(int output) const 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(output); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FORMAT, data, &reply); 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual size_t frameCount(int output) const 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(output); 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FRAME_COUNT, data, &reply); 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual uint32_t latency(int output) const 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(output); 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(LATENCY, data, &reply); 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterVolume(float value) 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_VOLUME, data, &reply); 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMasterMute(bool muted) 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MASTER_MUTE, data, &reply); 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float masterVolume() const 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_VOLUME, data, &reply); 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool masterMute() const 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MASTER_MUTE, data, &reply); 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setStreamVolume(int stream, float value) 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(value); 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_VOLUME, data, &reply); 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setStreamMute(int stream, bool muted) 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(muted); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_STREAM_MUTE, data, &reply); 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float streamVolume(int stream) const 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_VOLUME, data, &reply); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readFloat(); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool streamMute(int stream) const 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(stream); 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STREAM_MUTE, data, &reply); 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setRouting(int mode, uint32_t routes, uint32_t mask) 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(mode); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(routes); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(mask); 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_ROUTING, data, &reply); 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual uint32_t getRouting(int mode) const 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(mode); 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_ROUTING, data, &reply); 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMode(int mode) 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(mode); 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MODE, data, &reply); 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual int getMode() const 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_MODE, data, &reply); 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setMicMute(bool state) 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(state); 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_MIC_MUTE, data, &reply); 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool getMicMute() const 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_MIC_MUTE, data, &reply); 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool isMusicActive() const 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(IS_MUSIC_ACTIVE, data, &reply); 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setParameter(const char* key, const char* value) 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(key); 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(value); 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_PARAMETER, data, &reply); 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void registerClient(const sp<IAudioFlingerClient>& client) 31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(REGISTER_CLIENT, data, &reply); 32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(sampleRate); 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(format); 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(channelCount); 33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void wakeUp() 33689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 33889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(WAKE_UP, data, &reply); 34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return; 34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool isA2dpEnabled() const 34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(IS_A2DP_ENABLED, data, &reply); 34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return (bool)reply.readInt32(); 34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define CHECK_INTERFACE(interface, data, reply) \ 35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \ 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGW("Call incorrectly routed to " #interface); \ 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return PERMISSION_DENIED; \ 36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } } while (0) 36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_TRACK: { 36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 37389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 37589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 37689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 37889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project streamType, sampleRate, format, 37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project channelCount, bufferCount, flags, buffer, &status); 38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case OPEN_RECORD: { 38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int streamType = data.readInt32(); 38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project size_t bufferCount = data.readInt32(); 39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t flags = data.readInt32(); 39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t status; 39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioRecord> record = openRecord(pid, streamType, 39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sampleRate, format, channelCount, bufferCount, flags, &status); 39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(status); 39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 40089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SAMPLE_RATE: { 40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int output = data.readInt32(); 40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( sampleRate(output) ); 40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CHANNEL_COUNT: { 40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int output = data.readInt32(); 40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( channelCount(output) ); 41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FORMAT: { 41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int output = data.readInt32(); 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( format(output) ); 41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FRAME_COUNT: { 41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int output = data.readInt32(); 42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( frameCount(output) ); 42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case LATENCY: { 42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int output = data.readInt32(); 42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( latency(output) ); 42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_VOLUME: { 43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 43489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 43589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MASTER_MUTE: { 43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 43789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 43989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 44089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_VOLUME: { 44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( masterVolume() ); 44389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 44489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 44589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MASTER_MUTE: { 44689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( masterMute() ); 44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 44989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_VOLUME: { 45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 45389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setStreamVolume(stream, data.readFloat()) ); 45489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 45589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_STREAM_MUTE: { 45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setStreamMute(stream, data.readInt32()) ); 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_VOLUME: { 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeFloat( streamVolume(stream) ); 46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STREAM_MUTE: { 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int stream = data.readInt32(); 47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( streamMute(stream) ); 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_ROUTING: { 47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mode = data.readInt32(); 47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t routes = data.readInt32(); 47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mask = data.readInt32(); 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setRouting(mode, routes, mask) ); 48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 48289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_ROUTING: { 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 48489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mode = data.readInt32(); 48589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getRouting(mode) ); 48689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 48789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 48889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MODE: { 48989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 49089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mode = data.readInt32(); 49189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMode(mode) ); 49289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 49389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 49489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MODE: { 49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 49689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMode() ); 49789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_MIC_MUTE: { 50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 50189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int state = data.readInt32(); 50289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setMicMute(state) ); 50389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 50589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_MIC_MUTE: { 50689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 50789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getMicMute() ); 50889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 50989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_MUSIC_ACTIVE: { 51189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 51289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( isMusicActive() ); 51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 51589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_PARAMETER: { 51689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 51789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char *key = data.readCString(); 51889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char *value = data.readCString(); 51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( setParameter(key, value) ); 52089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case REGISTER_CLIENT: { 52389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 52489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 52589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project registerClient(client); 52689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 52789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 52889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_INPUTBUFFERSIZE: { 52989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate = data.readInt32(); 53189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format = data.readInt32(); 53289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int channelCount = data.readInt32(); 53389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 53489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 53589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 53689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case WAKE_UP: { 53789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 53889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project wakeUp(); 53989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_A2DP_ENABLED: { 54289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 54389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32( (int)isA2dpEnabled() ); 54489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 54589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 54689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 54789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 54889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 54989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 55089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 55189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 55289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 55389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 554