1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #define LOG_TAG "IAudioManager" 18 //#define LOG_NDEBUG 0 19 #include <utils/Log.h> 20 21 #include <stdint.h> 22 #include <sys/types.h> 23 24 #include <binder/Parcel.h> 25 #include <audiomanager/AudioManager.h> 26 #include <audiomanager/IAudioManager.h> 27 28 namespace android { 29 30 class BpAudioManager : public BpInterface<IAudioManager> 31 { 32 public: BpAudioManager(const sp<IBinder> & impl)33 explicit BpAudioManager(const sp<IBinder>& impl) 34 : BpInterface<IAudioManager>(impl) 35 { 36 } 37 trackPlayer(player_type_t playerType,audio_usage_t usage,audio_content_type_t content,const sp<IBinder> & player)38 virtual audio_unique_id_t trackPlayer(player_type_t playerType, audio_usage_t usage, 39 audio_content_type_t content, const sp<IBinder>& player) { 40 Parcel data, reply; 41 data.writeInterfaceToken(IAudioManager::getInterfaceDescriptor()); 42 data.writeInt32(1); // non-null PlayerIdCard parcelable 43 // marshall PlayerIdCard data 44 data.writeInt32((int32_t) playerType); 45 // write attributes of PlayerIdCard 46 data.writeInt32((int32_t) usage); 47 data.writeInt32((int32_t) content); 48 data.writeInt32(0 /*source: none here, this is a player*/); 49 data.writeInt32(0 /*flags*/); 50 // write attributes' tags 51 data.writeInt32(1 /*FLATTEN_TAGS*/); 52 data.writeString16(String16("")); // no tags 53 // write attributes' bundle 54 data.writeInt32(-1977 /*ATTR_PARCEL_IS_NULL_BUNDLE*/); // no bundle 55 // write IPlayer 56 data.writeStrongBinder(player); 57 // get new PIId in reply 58 const status_t res = remote()->transact(TRACK_PLAYER, data, &reply, 0); 59 if (res != OK || reply.readExceptionCode() != 0) { 60 ALOGE("trackPlayer() failed, piid is %d", PLAYER_PIID_INVALID); 61 return PLAYER_PIID_INVALID; 62 } else { 63 const audio_unique_id_t piid = (audio_unique_id_t) reply.readInt32(); 64 ALOGV("trackPlayer() returned piid %d", piid); 65 return piid; 66 } 67 } 68 playerAttributes(audio_unique_id_t piid,audio_usage_t usage,audio_content_type_t content)69 virtual status_t playerAttributes(audio_unique_id_t piid, audio_usage_t usage, 70 audio_content_type_t content) { 71 Parcel data, reply; 72 data.writeInterfaceToken(IAudioManager::getInterfaceDescriptor()); 73 data.writeInt32((int32_t) piid); 74 data.writeInt32(1); // non-null AudioAttributes parcelable 75 data.writeInt32((int32_t) usage); 76 data.writeInt32((int32_t) content); 77 data.writeInt32(0 /*source: none here, this is a player*/); 78 data.writeInt32(0 /*flags*/); 79 // write attributes' tags 80 data.writeInt32(1 /*FLATTEN_TAGS*/); 81 data.writeString16(String16("")); // no tags 82 // write attributes' bundle 83 data.writeInt32(-1977 /*ATTR_PARCEL_IS_NULL_BUNDLE*/); // no bundle 84 return remote()->transact(PLAYER_ATTRIBUTES, data, &reply, IBinder::FLAG_ONEWAY); 85 } 86 playerEvent(audio_unique_id_t piid,player_state_t event)87 virtual status_t playerEvent(audio_unique_id_t piid, player_state_t event) { 88 Parcel data, reply; 89 data.writeInterfaceToken(IAudioManager::getInterfaceDescriptor()); 90 data.writeInt32((int32_t) piid); 91 data.writeInt32((int32_t) event); 92 return remote()->transact(PLAYER_EVENT, data, &reply, IBinder::FLAG_ONEWAY); 93 } 94 releasePlayer(audio_unique_id_t piid)95 virtual status_t releasePlayer(audio_unique_id_t piid) { 96 Parcel data, reply; 97 data.writeInterfaceToken(IAudioManager::getInterfaceDescriptor()); 98 data.writeInt32((int32_t) piid); 99 return remote()->transact(RELEASE_PLAYER, data, &reply, IBinder::FLAG_ONEWAY); 100 } 101 }; 102 103 IMPLEMENT_META_INTERFACE(AudioManager, "android.media.IAudioService"); 104 105 // ---------------------------------------------------------------------------- 106 107 }; // namespace android 108