189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Copyright 2008, The Android Open Source Project 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** you may not use this file except in compliance with the License. 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** You may obtain a copy of the License at 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** See the License for the specific language governing permissions and 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project*/ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <binder/Parcel.h> 227562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 23ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber#include <media/ICrypto.h> 24cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker#include <media/IDrm.h> 2559451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber#include <media/IHDCP.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h> 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/IOMX.h> 292013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <media/IRemoteDisplay.h> 302013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <media/IRemoteDisplayClient.h> 31e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#include <media/IStreamSource.h> 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/Errors.h> // for status_t 342013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <utils/String8.h> 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 39d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CREATE = IBinder::FIRST_CALL_TRANSACTION, 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_URL, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_FD, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_MEDIA_RECORDER, 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_METADATA_RETRIEVER, 447cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang GET_OMX, 45ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber MAKE_CRYPTO, 46cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker MAKE_DRM, 4759451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber MAKE_HDCP, 487cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang ADD_BATTERY_DATA, 492013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown PULL_BATTERY_DATA, 502013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown LISTEN_FOR_REMOTE_DISPLAY, 51b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber UPDATE_PROXY_CONFIG, 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayerService: public BpInterface<IMediaPlayerService> 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpMediaPlayerService(const sp<IBinder>& impl) 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayerService>(impl) 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 62f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten virtual sp<IMediaMetadataRetriever> createMetadataRetriever() 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply); 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 702db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual sp<IMediaPlayer> create( 71f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten const sp<IMediaPlayerClient>& client, int audioSessionId) { 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 75a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent data.writeInt32(audioSessionId); 762db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 77d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(CREATE, data, &reply); 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 81f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten virtual sp<IMediaRecorder> createMediaRecorder() 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_MEDIA_RECORDER, data, &reply); 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaRecorder>(reply.readStrongBinder()); 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 89e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(url); 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DECODE_URL, data, &reply); 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pNumChannels = reply.readInt32(); 97e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten *pFormat = (audio_format_t) reply.readInt32(); 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 101e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFileDescriptor(fd); 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(offset); 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(length); 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DECODE_FD, data, &reply); 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pNumChannels = reply.readInt32(); 111e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten *pFormat = (audio_format_t) reply.readInt32(); 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 115318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual sp<IOMX> getOMX() { 11620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 11720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 118318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber remote()->transact(GET_OMX, data, &reply); 11920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return interface_cast<IOMX>(reply.readStrongBinder()); 12020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 1217cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang 122ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber virtual sp<ICrypto> makeCrypto() { 123ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber Parcel data, reply; 124ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 125ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber remote()->transact(MAKE_CRYPTO, data, &reply); 126ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber return interface_cast<ICrypto>(reply.readStrongBinder()); 127ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber } 128ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 129cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker virtual sp<IDrm> makeDrm() { 130cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker Parcel data, reply; 131cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 132cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker remote()->transact(MAKE_DRM, data, &reply); 133cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return interface_cast<IDrm>(reply.readStrongBinder()); 134cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } 135cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker 136279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber virtual sp<IHDCP> makeHDCP(bool createEncryptionModule) { 13759451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber Parcel data, reply; 13859451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 139279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber data.writeInt32(createEncryptionModule); 14059451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber remote()->transact(MAKE_HDCP, data, &reply); 14159451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber return interface_cast<IHDCP>(reply.readStrongBinder()); 14259451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber } 14359451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber 1447cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang virtual void addBatteryData(uint32_t params) { 1457cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang Parcel data, reply; 1467cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1477cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInt32(params); 1487cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang remote()->transact(ADD_BATTERY_DATA, data, &reply); 1497cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } 1507cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang 1517cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang virtual status_t pullBatteryData(Parcel* reply) { 1527cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang Parcel data; 1537cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1547cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return remote()->transact(PULL_BATTERY_DATA, data, reply); 1557cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } 1562013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown 1572013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown virtual sp<IRemoteDisplay> listenForRemoteDisplay(const sp<IRemoteDisplayClient>& client, 1582013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown const String8& iface) 1592013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown { 1602013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown Parcel data, reply; 1612013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1622013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown data.writeStrongBinder(client->asBinder()); 1632013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown data.writeString8(iface); 1642013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown remote()->transact(LISTEN_FOR_REMOTE_DISPLAY, data, &reply); 1652013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown return interface_cast<IRemoteDisplay>(reply.readStrongBinder()); 1662013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown } 167b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 168b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber virtual status_t updateProxyConfig( 169b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber const char *host, int32_t port, const char *exclusionList) { 170b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber Parcel data, reply; 171b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 172b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 173b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber if (host == NULL) { 174b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber data.writeInt32(0); 175b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber } else { 176b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber data.writeInt32(1); 177b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber data.writeCString(host); 178b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber data.writeInt32(port); 179b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber data.writeCString(exclusionList); 180b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber } 181b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 182b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber remote()->transact(UPDATE_PROXY_CONFIG, data, &reply); 183b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 184b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber return reply.readInt32(); 185b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber } 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18856f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayerService, "android.media.IMediaPlayerService"); 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayerService::onTransact( 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 195e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 196d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case CREATE: { 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1982db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber sp<IMediaPlayerClient> client = 1992db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 200a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int audioSessionId = data.readInt32(); 201f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten sp<IMediaPlayer> player = create(client, audioSessionId); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_URL: { 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char* url = data.readCString(); 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 210e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten audio_format_t format; 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 214e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten reply->writeInt32((int32_t) format); 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_FD: { 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int fd = dup(data.readFileDescriptor()); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t offset = data.readInt64(); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t length = data.readInt64(); 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 225e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten audio_format_t format; 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 229e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten reply->writeInt32((int32_t) format); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_MEDIA_RECORDER: { 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 235f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten sp<IMediaRecorder> recorder = createMediaRecorder(); 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(recorder->asBinder()); 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_METADATA_RETRIEVER: { 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 241f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(retriever->asBinder()); 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 245318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber case GET_OMX: { 24620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 247318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMX> omx = getOMX(); 24820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeStrongBinder(omx->asBinder()); 24920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 25020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 251ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber case MAKE_CRYPTO: { 252ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 253ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber sp<ICrypto> crypto = makeCrypto(); 254ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber reply->writeStrongBinder(crypto->asBinder()); 255ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber return NO_ERROR; 256ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber } break; 257cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker case MAKE_DRM: { 258cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker CHECK_INTERFACE(IMediaPlayerService, data, reply); 259cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker sp<IDrm> drm = makeDrm(); 260cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker reply->writeStrongBinder(drm->asBinder()); 261cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker return NO_ERROR; 262cc82dc6d500023eba6048616301a4b12682458dbJeff Tinker } break; 26359451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber case MAKE_HDCP: { 26459451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 265279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber bool createEncryptionModule = data.readInt32(); 266279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber sp<IHDCP> hdcp = makeHDCP(createEncryptionModule); 26759451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber reply->writeStrongBinder(hdcp->asBinder()); 26859451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber return NO_ERROR; 26959451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber } break; 2707cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang case ADD_BATTERY_DATA: { 2717cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 2727cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang uint32_t params = data.readInt32(); 2737cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang addBatteryData(params); 2747cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return NO_ERROR; 2757cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } break; 2767cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang case PULL_BATTERY_DATA: { 2777cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 2787cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang pullBatteryData(reply); 2797cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return NO_ERROR; 2807cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } break; 2812013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown case LISTEN_FOR_REMOTE_DISPLAY: { 2822013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown CHECK_INTERFACE(IMediaPlayerService, data, reply); 2832013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown sp<IRemoteDisplayClient> client( 2842013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown interface_cast<IRemoteDisplayClient>(data.readStrongBinder())); 2852013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown String8 iface(data.readString8()); 2862013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown sp<IRemoteDisplay> display(listenForRemoteDisplay(client, iface)); 2872013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown reply->writeStrongBinder(display->asBinder()); 2882013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown return NO_ERROR; 2892013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown } break; 290b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber case UPDATE_PROXY_CONFIG: 291b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber { 292b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 293b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 294b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber const char *host = NULL; 295b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber int32_t port = 0; 296b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber const char *exclusionList = NULL; 297b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 298b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber if (data.readInt32()) { 299b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber host = data.readCString(); 300b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber port = data.readInt32(); 301b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber exclusionList = data.readCString(); 302b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber } 303b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 304b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber reply->writeInt32(updateProxyConfig(host, port, exclusionList)); 305b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 306b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber return OK; 307b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber } 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 316