IAudioFlinger.cpp revision 8a77a995c961c7c9a3888f4212f7be87d08afae1
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* //device/extlibs/pv/android/IAudioflinger.cpp 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2007, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "IAudioFlinger" 19a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent//#define LOG_NDEBUG 0 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 250795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/Parcel.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IAudioFlinger.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CREATE_TRACK = IBinder::FIRST_CALL_TRANSACTION, 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OPEN_RECORD, 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SAMPLE_RATE, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHANNEL_COUNT, 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FORMAT, 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FRAME_COUNT, 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LATENCY, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_MASTER_VOLUME, 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_MASTER_MUTE, 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MASTER_VOLUME, 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MASTER_MUTE, 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_STREAM_VOLUME, 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_STREAM_MUTE, 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STREAM_VOLUME, 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STREAM_MUTE, 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_MODE, 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_MIC_MUTE, 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GET_MIC_MUTE, 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IS_MUSIC_ACTIVE, 51a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent SET_PARAMETERS, 52a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent GET_PARAMETERS, 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REGISTER_CLIENT, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GET_INPUTBUFFERSIZE, 55a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent OPEN_OUTPUT, 56a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent OPEN_DUPLICATE_OUTPUT, 57a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CLOSE_OUTPUT, 58a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent SUSPEND_OUTPUT, 59a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent RESTORE_OUTPUT, 60a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent OPEN_INPUT, 61a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CLOSE_INPUT, 62a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent SET_STREAM_OUTPUT 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BpAudioFlinger : public BpInterface<IAudioFlinger> 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BpAudioFlinger(const sp<IBinder>& impl) 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : BpInterface<IAudioFlinger>(impl) 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IAudioTrack> createTrack( 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid, 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int streamType, 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate, 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format, 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount, 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int frameCount, 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags, 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<IMemory>& sharedBuffer, 82ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output, 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t *status) 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 868a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent sp<IAudioTrack> track; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(pid); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(streamType); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(sampleRate); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(format); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(channelCount); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(frameCount); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(flags); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeStrongBinder(sharedBuffer->asBinder()); 96ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t lStatus = remote()->transact(CREATE_TRACK, data, &reply); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lStatus != NO_ERROR) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("createTrack error: %s", strerror(-lStatus)); 1008a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent } else { 1018a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent lStatus = reply.readInt32(); 1028a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent track = interface_cast<IAudioTrack>(reply.readStrongBinder()); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (status) { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *status = lStatus; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1078a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent return track; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IAudioRecord> openRecord( 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid, 112ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int input, 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate, 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format, 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount, 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int frameCount, 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags, 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t *status) 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1218a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent sp<IAudioRecord> record; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(pid); 124ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(input); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(sampleRate); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(format); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(channelCount); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(frameCount); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(flags); 1308a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent status_t lStatus = remote()->transact(OPEN_RECORD, data, &reply); 1318a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent if (lStatus != NO_ERROR) { 1328a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent LOGE("openRecord error: %s", strerror(-lStatus)); 1338a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent } else { 1348a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent lStatus = reply.readInt32(); 1358a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent record = interface_cast<IAudioRecord>(reply.readStrongBinder()); 1368a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (status) { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *status = lStatus; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1408a77a995c961c7c9a3888f4212f7be87d08afae1Eric Laurent return record; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 143ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual uint32_t sampleRate(int output) const 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 147ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(SAMPLE_RATE, data, &reply); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 152ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual int channelCount(int output) const 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 156ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(CHANNEL_COUNT, data, &reply); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 161ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual int format(int output) const 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 165ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(FORMAT, data, &reply); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 170ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual size_t frameCount(int output) const 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 174ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(FRAME_COUNT, data, &reply); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual uint32_t latency(int output) const 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 183ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(LATENCY, data, &reply); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setMasterVolume(float value) 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeFloat(value); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(SET_MASTER_VOLUME, data, &reply); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setMasterMute(bool muted) 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(muted); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(SET_MASTER_MUTE, data, &reply); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual float masterVolume() const 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(MASTER_VOLUME, data, &reply); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readFloat(); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool masterMute() const 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(MASTER_MUTE, data, &reply); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 222ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t setStreamVolume(int stream, float value, int output) 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(stream); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeFloat(value); 228ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(SET_STREAM_VOLUME, data, &reply); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setStreamMute(int stream, bool muted) 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(stream); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(muted); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(SET_STREAM_MUTE, data, &reply); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 243ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual float streamVolume(int stream, int output) const 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(stream); 248ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(STREAM_VOLUME, data, &reply); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readFloat(); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool streamMute(int stream) const 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(stream); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(STREAM_MUTE, data, &reply); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 262a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual status_t setMode(int mode) 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(mode); 267a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(SET_MODE, data, &reply); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 271a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual status_t setMicMute(bool state) 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 275a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(state); 276a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(SET_MIC_MUTE, data, &reply); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 280a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual bool getMicMute() const 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 284a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(GET_MIC_MUTE, data, &reply); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 288a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual bool isMusicActive() const 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 292a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(IS_MUSIC_ACTIVE, data, &reply); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 296ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t setParameters(int ioHandle, const String8& keyValuePairs) 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 300ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(ioHandle); 301a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeString8(keyValuePairs); 302a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(SET_PARAMETERS, data, &reply); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 306ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual String8 getParameters(int ioHandle, const String8& keys) 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 310ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(ioHandle); 311a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeString8(keys); 312a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(GET_PARAMETERS, data, &reply); 313a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return reply.readString8(); 314a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 315a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 316a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual void registerClient(const sp<IAudioFlingerClient>& client) 317a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent { 318a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent Parcel data, reply; 319a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 320a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeStrongBinder(client->asBinder()); 321a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(REGISTER_CLIENT, data, &reply); 322a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 323a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 324a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) 325a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent { 326a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent Parcel data, reply; 327a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 328a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(sampleRate); 329a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(format); 330a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(channelCount); 331a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 335ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual int openOutput(uint32_t *pDevices, 336a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *pSamplingRate, 337a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *pFormat, 338a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *pChannels, 339a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t *pLatencyMs, 340a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t flags) 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 343a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 344a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 345a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t format = pFormat ? *pFormat : 0; 346a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 347a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t latency = pLatencyMs ? *pLatencyMs : 0; 348a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 350a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(devices); 351a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(samplingRate); 352a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(format); 353a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(channels); 354a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(latency); 355a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(flags); 356a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(OPEN_OUTPUT, data, &reply); 357ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output = reply.readInt32(); 358a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent LOGV("openOutput() returned output, %p", output); 359a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent devices = reply.readInt32(); 360a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pDevices) *pDevices = devices; 361a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent samplingRate = reply.readInt32(); 362a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 363a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent format = reply.readInt32(); 364a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pFormat) *pFormat = format; 365a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent channels = reply.readInt32(); 366a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pChannels) *pChannels = channels; 367a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent latency = reply.readInt32(); 368a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pLatencyMs) *pLatencyMs = latency; 369a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return output; 370a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 371a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 372ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual int openDuplicateOutput(int output1, int output2) 373a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent { 374a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent Parcel data, reply; 375a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 376ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output1); 377ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output2); 378a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(OPEN_DUPLICATE_OUTPUT, data, &reply); 379ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent return reply.readInt32(); 380a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 381a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 382ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t closeOutput(int output) 383a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent { 384a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent Parcel data, reply; 385a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 386ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 387a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(CLOSE_OUTPUT, data, &reply); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 391ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t suspendOutput(int output) 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 395ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 396a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(SUSPEND_OUTPUT, data, &reply); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return reply.readInt32(); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 399a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 400ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t restoreOutput(int output) 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 404ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 405a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(RESTORE_OUTPUT, data, &reply); 406a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return reply.readInt32(); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 408a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 409ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual int openInput(uint32_t *pDevices, 410ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent uint32_t *pSamplingRate, 411ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent uint32_t *pFormat, 412ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent uint32_t *pChannels, 413ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent uint32_t acoustics) 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 416a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t devices = pDevices ? *pDevices : 0; 417a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; 418a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t format = pFormat ? *pFormat : 0; 419a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t channels = pChannels ? *pChannels : 0; 420a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 422a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(devices); 423a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(samplingRate); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(format); 425a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(channels); 426a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(acoustics); 427a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(OPEN_INPUT, data, &reply); 428ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int input = reply.readInt32(); 429a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent devices = reply.readInt32(); 430a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pDevices) *pDevices = devices; 431a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent samplingRate = reply.readInt32(); 432a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pSamplingRate) *pSamplingRate = samplingRate; 433a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent format = reply.readInt32(); 434a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pFormat) *pFormat = format; 435a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent channels = reply.readInt32(); 436a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (pChannels) *pChannels = channels; 437a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return input; 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 439a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 440ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t closeInput(int input) 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 444ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(input); 445a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(CLOSE_INPUT, data, &reply); 446a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return reply.readInt32(); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent virtual status_t setStreamOutput(uint32_t stream, int output) 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); 453a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent data.writeInt32(stream); 454ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent data.writeInt32(output); 455a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent remote()->transact(SET_STREAM_OUTPUT, data, &reply); 456a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return reply.readInt32(); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------- 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t BnAudioFlinger::onTransact( 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(code) { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CREATE_TRACK: { 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid = data.readInt32(); 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int streamType = data.readInt32(); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate = data.readInt32(); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format = data.readInt32(); 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount = data.readInt32(); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t bufferCount = data.readInt32(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = data.readInt32(); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); 478ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output = data.readInt32(); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t status; 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IAudioTrack> track = createTrack(pid, 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project streamType, sampleRate, format, 482a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent channelCount, bufferCount, flags, buffer, output, &status); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(status); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(track->asBinder()); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case OPEN_RECORD: { 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid = data.readInt32(); 490ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int input = data.readInt32(); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate = data.readInt32(); 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format = data.readInt32(); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount = data.readInt32(); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t bufferCount = data.readInt32(); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags = data.readInt32(); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t status; 497a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent sp<IAudioRecord> record = openRecord(pid, input, 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sampleRate, format, channelCount, bufferCount, flags, &status); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(status); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(record->asBinder()); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SAMPLE_RATE: { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 505ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32( sampleRate(data.readInt32()) ); 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CHANNEL_COUNT: { 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 510ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32( channelCount(data.readInt32()) ); 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FORMAT: { 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 515ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32( format(data.readInt32()) ); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FRAME_COUNT: { 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 520ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32( frameCount(data.readInt32()) ); 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LATENCY: { 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 525ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32( latency(data.readInt32()) ); 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_MASTER_VOLUME: { 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( setMasterVolume(data.readFloat()) ); 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_MASTER_MUTE: { 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( setMasterMute(data.readInt32()) ); 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MASTER_VOLUME: { 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeFloat( masterVolume() ); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MASTER_MUTE: { 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( masterMute() ); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_STREAM_VOLUME: { 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int stream = data.readInt32(); 551a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent float volume = data.readFloat(); 552ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output = data.readInt32(); 553a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32( setStreamVolume(stream, volume, output) ); 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_STREAM_MUTE: { 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int stream = data.readInt32(); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( setStreamMute(stream, data.readInt32()) ); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STREAM_VOLUME: { 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int stream = data.readInt32(); 565ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output = data.readInt32(); 566a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeFloat( streamVolume(stream, output) ); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STREAM_MUTE: { 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int stream = data.readInt32(); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( streamMute(stream) ); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_MODE: { 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mode = data.readInt32(); 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( setMode(mode) ); 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_MIC_MUTE: { 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int state = data.readInt32(); 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( setMicMute(state) ); 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GET_MIC_MUTE: { 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( getMicMute() ); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case IS_MUSIC_ACTIVE: { 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( isMusicActive() ); 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 597a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case SET_PARAMETERS: { 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 599ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int ioHandle = data.readInt32(); 600a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 keyValuePairs(data.readString8()); 601a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(setParameters(ioHandle, keyValuePairs)); 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 603a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 604a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case GET_PARAMETERS: { 605a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 606ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int ioHandle = data.readInt32(); 607a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent String8 keys(data.readString8()); 608a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeString8(getParameters(ioHandle, keys)); 609a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 610a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 611a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case REGISTER_CLIENT: { 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IAudioFlingerClient> client = interface_cast<IAudioFlingerClient>(data.readStrongBinder()); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project registerClient(client); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GET_INPUTBUFFERSIZE: { 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate = data.readInt32(); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format = data.readInt32(); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelCount = data.readInt32(); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 626a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case OPEN_OUTPUT: { 627a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 628a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t devices = data.readInt32(); 629a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t samplingRate = data.readInt32(); 630a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t format = data.readInt32(); 631a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t channels = data.readInt32(); 632a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t latency = data.readInt32(); 633a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t flags = data.readInt32(); 634ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output = openOutput(&devices, 635a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &samplingRate, 636a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &format, 637a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &channels, 638a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &latency, 639a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent flags); 640a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent LOGV("OPEN_OUTPUT output, %p", output); 641ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(output); 642a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(devices); 643a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(samplingRate); 644a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(format); 645a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(channels); 646a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(latency); 647a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 648a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 649a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case OPEN_DUPLICATE_OUTPUT: { 650a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 651ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output1 = data.readInt32(); 652ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output2 = data.readInt32(); 653ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(openDuplicateOutput(output1, output2)); 654a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 655a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 656a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case CLOSE_OUTPUT: { 657a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 658ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(closeOutput(data.readInt32())); 659a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 660a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 661a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case SUSPEND_OUTPUT: { 662a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 663ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(suspendOutput(data.readInt32())); 664a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 665a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 666a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case RESTORE_OUTPUT: { 667a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 668ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(restoreOutput(data.readInt32())); 669a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 670a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 671a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case OPEN_INPUT: { 672a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent CHECK_INTERFACE(IAudioFlinger, data, reply); 673a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t devices = data.readInt32(); 674a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t samplingRate = data.readInt32(); 675a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t format = data.readInt32(); 676a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t channels = data.readInt32(); 677a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t acoutics = data.readInt32(); 678a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 679ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int input = openInput(&devices, 680a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &samplingRate, 681a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &format, 682a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent &channels, 683a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent acoutics); 684ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(input); 685a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(devices); 686a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(samplingRate); 687a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(format); 688a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(channels); 689a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent return NO_ERROR; 690a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } break; 691a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case CLOSE_INPUT: { 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 693ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent reply->writeInt32(closeInput(data.readInt32())); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 696a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent case SET_STREAM_OUTPUT: { 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IAudioFlinger, data, reply); 698a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent uint32_t stream = data.readInt32(); 699ddb78e7753be03937ad57ce7c3c842c52bdad65eEric Laurent int output = data.readInt32(); 700a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent reply->writeInt32(setStreamOutput(stream, output)); 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 711