IMediaPlayerService.cpp revision e2b1028852120bcfded33b8f06f66b780437fe92
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> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h> 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/IOMX.h> 26e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#include <media/IStreamSource.h> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/Errors.h> // for status_t 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_URL = IBinder::FIRST_CALL_TRANSACTION, 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_FD, 35e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber CREATE_STREAM, 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_URL, 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_FD, 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_MEDIA_RECORDER, 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_METADATA_RETRIEVER, 40da7581b7b61b84f15e8d671c86fd117c322b009eEric Laurent GET_OMX 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayerService: public BpInterface<IMediaPlayerService> 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpMediaPlayerService(const sp<IBinder>& impl) 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayerService>(impl) 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid) 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply); 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 602db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual sp<IMediaPlayer> create( 612db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber pid_t pid, const sp<IMediaPlayerClient>& client, 62a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent const char* url, const KeyedVector<String8, String8> *headers, int audioSessionId) { 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(url); 682db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 692db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber if (headers == NULL) { 702db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber data.writeInt32(0); 712db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber } else { 722db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber // serialize the headers 732db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber data.writeInt32(headers->size()); 742db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber for (size_t i = 0; i < headers->size(); ++i) { 752db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber data.writeString8(headers->keyAt(i)); 762db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber data.writeString8(headers->valueAt(i)); 772db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber } 782db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber } 79a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent data.writeInt32(audioSessionId); 802db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_URL, data, &reply); 82a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid) 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_MEDIA_RECORDER, data, &reply); 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaRecorder>(reply.readStrongBinder()); 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 95a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int fd, 96a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int64_t offset, int64_t length, int audioSessionId) 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFileDescriptor(fd); 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(offset); 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(length); 105a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent data.writeInt32(audioSessionId); 106a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_FD, data, &reply); 108a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent 109a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent return interface_cast<IMediaPlayer>(reply.readStrongBinder());; 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 112e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual sp<IMediaPlayer> create( 113e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber pid_t pid, const sp<IMediaPlayerClient> &client, 114e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber const sp<IStreamSource> &source, int audioSessionId) { 115e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber Parcel data, reply; 116e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 117e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber data.writeInt32(static_cast<int32_t>(pid)); 118e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber data.writeStrongBinder(client->asBinder()); 119e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber data.writeStrongBinder(source->asBinder()); 120e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber data.writeInt32(static_cast<int32_t>(audioSessionId)); 121e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 122e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber remote()->transact(CREATE_STREAM, data, &reply); 123e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 124e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber return interface_cast<IMediaPlayer>(reply.readStrongBinder());; 125e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber } 126e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(url); 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DECODE_URL, data, &reply); 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pNumChannels = reply.readInt32(); 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pFormat = reply.readInt32(); 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFileDescriptor(fd); 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(offset); 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(length); 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DECODE_FD, data, &reply); 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pNumChannels = reply.readInt32(); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pFormat = reply.readInt32(); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 153318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual sp<IOMX> getOMX() { 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber Parcel data, reply; 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 156318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber remote()->transact(GET_OMX, data, &reply); 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return interface_cast<IOMX>(reply.readStrongBinder()); 15820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 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{ 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_URL: { 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()); 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char* url = data.readCString(); 1752db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 1762db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber KeyedVector<String8, String8> headers; 1772db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber int32_t numHeaders = data.readInt32(); 1782db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber for (int i = 0; i < numHeaders; ++i) { 1792db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber String8 key = data.readString8(); 1802db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber String8 value = data.readString8(); 1812db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber headers.add(key, value); 1822db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber } 183a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int audioSessionId = data.readInt32(); 1842db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 1852db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber sp<IMediaPlayer> player = create( 186a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent pid, client, url, numHeaders > 0 ? &headers : NULL, audioSessionId); 1872db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_FD: { 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int fd = dup(data.readFileDescriptor()); 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t offset = data.readInt64(); 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t length = data.readInt64(); 198a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int audioSessionId = data.readInt32(); 199a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent 200a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent sp<IMediaPlayer> player = create(pid, client, fd, offset, length, audioSessionId); 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 204e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber case CREATE_STREAM: 205e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber { 206e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 207e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 208e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber pid_t pid = static_cast<pid_t>(data.readInt32()); 209e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 210e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber sp<IMediaPlayerClient> client = 211e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 212e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 213e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber sp<IStreamSource> source = 214e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber interface_cast<IStreamSource>(data.readStrongBinder()); 215e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 216e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber int audioSessionId = static_cast<int>(data.readInt32()); 217e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 218e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber sp<IMediaPlayer> player = 219e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber create(pid, client, source, audioSessionId); 220e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 221e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber reply->writeStrongBinder(player->asBinder()); 222e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber return OK; 223e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber break; 224e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber } 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_URL: { 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char* url = data.readCString(); 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format; 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(format); 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_FD: { 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int fd = dup(data.readFileDescriptor()); 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t offset = data.readInt64(); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t length = data.readInt64(); 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format; 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(format); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_MEDIA_RECORDER: { 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaRecorder> recorder = createMediaRecorder(pid); 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(recorder->asBinder()); 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_METADATA_RETRIEVER: { 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(pid); 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(retriever->asBinder()); 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 267318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber case GET_OMX: { 26820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 269318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMX> omx = getOMX(); 27020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reply->writeStrongBinder(omx->asBinder()); 27120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return NO_ERROR; 27220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } break; 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 281