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> 24efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber#include <media/IHDCP.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/IOMX.h> 28e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown#include <media/IRemoteDisplay.h> 29e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown#include <media/IRemoteDisplayClient.h> 30e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#include <media/IStreamSource.h> 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/Errors.h> // for status_t 33e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown#include <utils/String8.h> 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 38d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CREATE = IBinder::FIRST_CALL_TRANSACTION, 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_URL, 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_FD, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_MEDIA_RECORDER, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_METADATA_RETRIEVER, 437cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang GET_OMX, 44ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber MAKE_CRYPTO, 45efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber MAKE_HDCP, 467cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang ADD_BATTERY_DATA, 47e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown PULL_BATTERY_DATA, 48e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown LISTEN_FOR_REMOTE_DISPLAY, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayerService: public BpInterface<IMediaPlayerService> 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpMediaPlayerService(const sp<IBinder>& impl) 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayerService>(impl) 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid) 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply); 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 682db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual sp<IMediaPlayer> create( 69d681bbb1767bed09415e050ba78975df214bcd68Dave Burke pid_t pid, const sp<IMediaPlayerClient>& client, int audioSessionId) { 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 74a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent data.writeInt32(audioSessionId); 752db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 76d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(CREATE, data, &reply); 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid) 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 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 129efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber virtual sp<IHDCP> makeHDCP() { 130efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber Parcel data, reply; 131efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 132efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber remote()->transact(MAKE_HDCP, data, &reply); 133efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber return interface_cast<IHDCP>(reply.readStrongBinder()); 134efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber } 135efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber 1367cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang virtual void addBatteryData(uint32_t params) { 1377cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang Parcel data, reply; 1387cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1397cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInt32(params); 1407cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang remote()->transact(ADD_BATTERY_DATA, data, &reply); 1417cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } 1427cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang 1437cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang virtual status_t pullBatteryData(Parcel* reply) { 1447cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang Parcel data; 1457cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1467cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return remote()->transact(PULL_BATTERY_DATA, data, reply); 1477cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } 148e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown 149e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown virtual sp<IRemoteDisplay> listenForRemoteDisplay(const sp<IRemoteDisplayClient>& client, 150e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown const String8& iface) 151e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown { 152e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown Parcel data, reply; 153e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 154e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown data.writeStrongBinder(client->asBinder()); 155e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown data.writeString8(iface); 156e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown remote()->transact(LISTEN_FOR_REMOTE_DISPLAY, data, &reply); 157e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown return interface_cast<IRemoteDisplay>(reply.readStrongBinder()); 158e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown } 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16156f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayerService, "android.media.IMediaPlayerService"); 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayerService::onTransact( 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 168e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 169d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case CREATE: { 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 1722db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber sp<IMediaPlayerClient> client = 1732db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 174a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int audioSessionId = data.readInt32(); 175d681bbb1767bed09415e050ba78975df214bcd68Dave Burke sp<IMediaPlayer> player = create(pid, client, audioSessionId); 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_URL: { 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char* url = data.readCString(); 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 184e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten audio_format_t format; 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 188e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten reply->writeInt32((int32_t) format); 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_FD: { 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int fd = dup(data.readFileDescriptor()); 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t offset = data.readInt64(); 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t length = data.readInt64(); 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 199e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten audio_format_t format; 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 203e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten reply->writeInt32((int32_t) format); 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_MEDIA_RECORDER: { 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaRecorder> recorder = createMediaRecorder(pid); 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(recorder->asBinder()); 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_METADATA_RETRIEVER: { 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(pid); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(retriever->asBinder()); 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 221318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber case GET_OMX: { 22220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 223318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMX> omx = getOMX(); 22420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeStrongBinder(omx->asBinder()); 22520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 22620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 227ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber case MAKE_CRYPTO: { 228ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 229ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber sp<ICrypto> crypto = makeCrypto(); 230ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber reply->writeStrongBinder(crypto->asBinder()); 231ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber return NO_ERROR; 232ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber } break; 233efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber case MAKE_HDCP: { 234efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 235efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber sp<IHDCP> hdcp = makeHDCP(); 236efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber reply->writeStrongBinder(hdcp->asBinder()); 237efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber return NO_ERROR; 238efbb781c15abf8e085f5ab8d39710bd58ea0b6e4Andreas Huber } break; 2397cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang case ADD_BATTERY_DATA: { 2407cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 2417cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang uint32_t params = data.readInt32(); 2427cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang addBatteryData(params); 2437cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return NO_ERROR; 2447cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } break; 2457cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang case PULL_BATTERY_DATA: { 2467cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 2477cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang pullBatteryData(reply); 2487cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return NO_ERROR; 2497cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } break; 250e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown case LISTEN_FOR_REMOTE_DISPLAY: { 251e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown CHECK_INTERFACE(IMediaPlayerService, data, reply); 252e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown sp<IRemoteDisplayClient> client( 253e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown interface_cast<IRemoteDisplayClient>(data.readStrongBinder())); 254e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown String8 iface(data.readString8()); 255e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown sp<IRemoteDisplay> display(listenForRemoteDisplay(client, iface)); 256e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown reply->writeStrongBinder(display->asBinder()); 257e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown return NO_ERROR; 258e104596061b219e9bce6d4db49a9d15242f8d2e5Jeff Brown } break; 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 267