189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License. 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License. 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define LOG_TAG "IAudioFlingerClient" 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h> 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 237562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IAudioFlingerClient.h> 26c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent#include <media/AudioSystem.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 31c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent IO_CONFIG_CHANGED = IBinder::FIRST_CALL_TRANSACTION 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpAudioFlingerClient : public BpInterface<IAudioFlingerClient> 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 37090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh explicit BpAudioFlingerClient(const sp<IBinder>& impl) 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IAudioFlingerClient>(impl) 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4273e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent void ioConfigChanged(audio_io_config_event event, const sp<AudioIoDescriptor>& ioDesc) 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IAudioFlingerClient::getInterfaceDescriptor()); 46c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent data.writeInt32(event); 4773e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent data.writeInt32((int32_t)ioDesc->mIoHandle); 48296fb13dd9b5e90d6a05cce897c3b1e7914a478aEric Laurent data.write(&ioDesc->mPatch, sizeof(struct audio_patch)); 4973e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent data.writeInt32(ioDesc->mSamplingRate); 5073e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent data.writeInt32(ioDesc->mFormat); 5173e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent data.writeInt32(ioDesc->mChannelMask); 5273e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent data.writeInt64(ioDesc->mFrameCount); 534a8308b11b92e608cdaf29f73f7919e75706f9a2Glenn Kasten data.writeInt64(ioDesc->mFrameCountHAL); 5473e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent data.writeInt32(ioDesc->mLatency); 55c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent remote()->transact(IO_CONFIG_CHANGED, data, &reply, IBinder::FLAG_ONEWAY); 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(AudioFlingerClient, "android.media.IAudioFlingerClient"); 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnAudioFlingerClient::onTransact( 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 66e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 67c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent case IO_CONFIG_CHANGED: { 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IAudioFlingerClient, data, reply); 6973e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent audio_io_config_event event = (audio_io_config_event)data.readInt32(); 7073e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent sp<AudioIoDescriptor> ioDesc = new AudioIoDescriptor(); 7173e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioDesc->mIoHandle = (audio_io_handle_t) data.readInt32(); 72296fb13dd9b5e90d6a05cce897c3b1e7914a478aEric Laurent data.read(&ioDesc->mPatch, sizeof(struct audio_patch)); 7373e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioDesc->mSamplingRate = data.readInt32(); 7473e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioDesc->mFormat = (audio_format_t) data.readInt32(); 7573e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioDesc->mChannelMask = (audio_channel_mask_t) data.readInt32(); 7673e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioDesc->mFrameCount = data.readInt64(); 774a8308b11b92e608cdaf29f73f7919e75706f9a2Glenn Kasten ioDesc->mFrameCountHAL = data.readInt64(); 7873e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioDesc->mLatency = data.readInt32(); 7973e26b661af50be2c0a4ff6c9ac85f7347a8b235Eric Laurent ioConfigChanged(event, ioDesc); 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8940bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android 90