IAudioTrack.cpp revision 34f1d8ecd23169a5f299937e3aaf1bd7937578a0
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* //device/extlibs/pv/android/IAudioTrack.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 1834f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent#define LOG_TAG "IAudioTrack" 1934f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent//#define LOG_NDEBUG 0 2034f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent#include <utils/Log.h> 2134f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 257562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IAudioTrack.h> 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_CBLK = IBinder::FIRST_CALL_TRANSACTION, 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project START, 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STOP, 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project FLUSH, 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MUTE, 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PAUSE 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpAudioTrack : public BpInterface<IAudioTrack> 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpAudioTrack(const sp<IBinder>& impl) 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IAudioTrack>(impl) 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t start() 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); 5234f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent status_t status = remote()->transact(START, data, &reply); 5334f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent if (status == NO_ERROR) { 5434f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent status = reply.readInt32(); 5534f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent } else { 5634f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent LOGW("start() error: %s", strerror(-status)); 5734f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent } 5834f1d8ecd23169a5f299937e3aaf1bd7937578a0Eric Laurent return status; 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void stop() 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STOP, data, &reply); 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void flush() 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(FLUSH, data, &reply); 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void mute(bool e) 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(e); 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(MUTE, data, &reply); 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void pause() 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PAUSE, data, &reply); 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMemory> getCblk() const 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 935841db78dff14898538200287d246577b1fc37e2Eric Laurent sp<IMemory> cblk; 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); 955841db78dff14898538200287d246577b1fc37e2Eric Laurent status_t status = remote()->transact(GET_CBLK, data, &reply); 965841db78dff14898538200287d246577b1fc37e2Eric Laurent if (status == NO_ERROR) { 975841db78dff14898538200287d246577b1fc37e2Eric Laurent cblk = interface_cast<IMemory>(reply.readStrongBinder()); 985841db78dff14898538200287d246577b1fc37e2Eric Laurent } 995841db78dff14898538200287d246577b1fc37e2Eric Laurent return cblk; 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioTrack, "android.media.IAudioTrack"); 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioTrack::onTransact( 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_CBLK: { 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioTrack, data, reply); 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(getCblk()->asBinder()); 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case START: { 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioTrack, data, reply); 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(start()); 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STOP: { 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioTrack, data, reply); 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project stop(); 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case FLUSH: { 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioTrack, data, reply); 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project flush(); 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MUTE: { 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioTrack, data, reply); 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mute( data.readInt32() ); 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PAUSE: { 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioTrack, data, reply); 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pause(); 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 148