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