IMediaPlayerService.cpp revision 7562408b2261d38415453378b6188f74fda99d88
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> 207562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 227562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_URL = IBinder::FIRST_CALL_TRANSACTION, 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_FD, 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_URL, 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DECODE_FD, 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_MEDIA_RECORDER, 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_METADATA_RETRIEVER, 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayerService: public BpInterface<IMediaPlayerService> 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpMediaPlayerService(const sp<IBinder>& impl) 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayerService>(impl) 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid) 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply); 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url) 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(url); 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_URL, data, &reply); 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid) 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_MEDIA_RECORDER, data, &reply); 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaRecorder>(reply.readStrongBinder()); 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int fd, int64_t offset, int64_t length) 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(pid); 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeStrongBinder(client->asBinder()); 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFileDescriptor(fd); 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(offset); 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(length); 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_FD, data, &reply); 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeCString(url); 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DECODE_URL, data, &reply); 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pNumChannels = reply.readInt32(); 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pFormat = reply.readInt32(); 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFileDescriptor(fd); 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(offset); 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt64(length); 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DECODE_FD, data, &reply); 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pNumChannels = reply.readInt32(); 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *pFormat = reply.readInt32(); 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectIMPLEMENT_META_INTERFACE(MediaPlayerService, "android.hardware.IMediaPlayerService"); 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define CHECK_INTERFACE(interface, data, reply) \ 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \ 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGW("Call incorrectly routed to " #interface); \ 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return PERMISSION_DENIED; \ 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } } while (0) 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayerService::onTransact( 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(code) { 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_URL: { 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char* url = data.readCString(); 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayer> player = create(pid, client, url); 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_FD: { 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int fd = dup(data.readFileDescriptor()); 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t offset = data.readInt64(); 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t length = data.readInt64(); 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayer> player = create(pid, client, fd, offset, length); 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_URL: { 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const char* url = data.readCString(); 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format; 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(format); 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DECODE_FD: { 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int fd = dup(data.readFileDescriptor()); 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t offset = data.readInt64(); 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int64_t length = data.readInt64(); 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t sampleRate; 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int numChannels; 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int format; 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(sampleRate); 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(numChannels); 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(format); 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_MEDIA_RECORDER: { 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaRecorder> recorder = createMediaRecorder(pid); 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(recorder->asBinder()); 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_METADATA_RETRIEVER: { 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t pid = data.readInt32(); 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(pid); 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeStrongBinder(retriever->asBinder()); 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 199