IMediaPlayer.cpp revision e53b9ead781c36e96d6b6f012ddffc93a3d80f0d
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
18c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman#include <arpa/inet.h>
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h>
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h>
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
227562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h>
2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayer.h>
25d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <media/IStreamSource.h>
26d681bbb1767bed09415e050ba78975df214bcd68Dave Burke
271173118eace0e9e347cb007f0da817cee87579edGlenn Kasten#include <gui/ISurfaceTexture.h>
28d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <utils/String8.h>
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    DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
34d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    SET_DATA_SOURCE_URL,
35d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    SET_DATA_SOURCE_FD,
36d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    SET_DATA_SOURCE_STREAM,
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    PREPARE_ASYNC,
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    START,
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    STOP,
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    IS_PLAYING,
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    PAUSE,
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SEEK_TO,
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    GET_CURRENT_POSITION,
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    GET_DURATION,
4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    RESET,
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_AUDIO_STREAM_TYPE,
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    SET_LOOPING,
481d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    SET_VOLUME,
491d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    INVOKE,
50a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    SET_METADATA_FILTER,
518e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    GET_METADATA,
522beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    SET_AUX_EFFECT_SEND_LEVEL,
531173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    ATTACH_AUX_EFFECT,
541173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    SET_VIDEO_SURFACETEXTURE,
554f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    SET_PARAMETER,
564f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    GET_PARAMETER,
57c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman    SET_RETRANSMIT_ENDPOINT,
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayer: public BpInterface<IMediaPlayer>
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    BpMediaPlayer(const sp<IBinder>& impl)
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        : BpInterface<IMediaPlayer>(impl)
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    // disconnect from media player service
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    void disconnect()
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(DISCONNECT, data, &reply);
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
76d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    status_t setDataSource(const char* url,
77d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            const KeyedVector<String8, String8>* headers)
78d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    {
79d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        Parcel data, reply;
80d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
81d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeCString(url);
82d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        if (headers == NULL) {
83d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            data.writeInt32(0);
84d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        } else {
85d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            // serialize the headers
86d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            data.writeInt32(headers->size());
87d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            for (size_t i = 0; i < headers->size(); ++i) {
88d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                data.writeString8(headers->keyAt(i));
89d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                data.writeString8(headers->valueAt(i));
90d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            }
91d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        }
92d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        remote()->transact(SET_DATA_SOURCE_URL, data, &reply);
93d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        return reply.readInt32();
94d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    }
95d681bbb1767bed09415e050ba78975df214bcd68Dave Burke
96d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    status_t setDataSource(int fd, int64_t offset, int64_t length) {
97d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        Parcel data, reply;
98d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
99d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeFileDescriptor(fd);
100d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeInt64(offset);
101d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeInt64(length);
102d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        remote()->transact(SET_DATA_SOURCE_FD, data, &reply);
103d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        return reply.readInt32();
104d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    }
105d681bbb1767bed09415e050ba78975df214bcd68Dave Burke
106d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    status_t setDataSource(const sp<IStreamSource> &source) {
107d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        Parcel data, reply;
108d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
109d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        data.writeStrongBinder(source->asBinder());
1108d65510a2e9ff7b64f2f35bfe3cd745a717c9533Glenn Kasten        remote()->transact(SET_DATA_SOURCE_STREAM, data, &reply);
111d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        return reply.readInt32();
112d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    }
113d681bbb1767bed09415e050ba78975df214bcd68Dave Burke
1141173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    // pass the buffered ISurfaceTexture to the media player service
1151173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    status_t setVideoSurfaceTexture(const sp<ISurfaceTexture>& surfaceTexture)
1161173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    {
1171173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        Parcel data, reply;
1181173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
1191173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        sp<IBinder> b(surfaceTexture->asBinder());
1201173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        data.writeStrongBinder(b);
1211173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        remote()->transact(SET_VIDEO_SURFACETEXTURE, data, &reply);
1221173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        return reply.readInt32();
1231173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    }
1241173118eace0e9e347cb007f0da817cee87579edGlenn Kasten
12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t prepareAsync()
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PREPARE_ASYNC, data, &reply);
13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t start()
13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(START, data, &reply);
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t stop()
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(STOP, data, &reply);
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t isPlaying(bool* state)
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(IS_PLAYING, data, &reply);
15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *state = reply.readInt32();
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t pause()
15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(PAUSE, data, &reply);
16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t seekTo(int msec)
16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(msec);
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SEEK_TO, data, &reply);
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t getCurrentPosition(int* msec)
17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_CURRENT_POSITION, data, &reply);
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *msec = reply.readInt32();
18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t getDuration(int* msec)
18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(GET_DURATION, data, &reply);
18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        *msec = reply.readInt32();
19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t reset()
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(RESET, data, &reply);
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
201fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten    status_t setAudioStreamType(audio_stream_type_t stream)
20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
205fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten        data.writeInt32((int32_t) stream);
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_AUDIO_STREAM_TYPE, data, &reply);
20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setLooping(int loop)
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeInt32(loop);
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_LOOPING, data, &reply);
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setVolume(float leftVolume, float rightVolume)
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        Parcel data, reply;
222172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFloat(leftVolume);
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        data.writeFloat(rightVolume);
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        remote()->transact(SET_VOLUME, data, &reply);
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return reply.readInt32();
22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
2281d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania
2291d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    status_t invoke(const Parcel& request, Parcel *reply)
230040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong    {
231040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong        // Avoid doing any extra copy. The interface descriptor should
232040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong        // have been set by MediaPlayer.java.
2338e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        return remote()->transact(INVOKE, request, reply);
2341d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    }
235a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania
236a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    status_t setMetadataFilter(const Parcel& request)
237a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    {
238a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        Parcel reply;
239a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        // Avoid doing any extra copy of the request. The interface
240a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        // descriptor should have been set by MediaPlayer.java.
241a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        remote()->transact(SET_METADATA_FILTER, request, &reply);
242a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        return reply.readInt32();
243a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    }
2448e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania
2458e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    status_t getMetadata(bool update_only, bool apply_filter, Parcel *reply)
2468e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    {
2478e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        Parcel request;
2488e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        request.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
2498e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        // TODO: Burning 2 ints for 2 boolean. Should probably use flags in an int here.
2508e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        request.writeInt32(update_only);
2518e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        request.writeInt32(apply_filter);
2528e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        remote()->transact(GET_METADATA, request, reply);
2538e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        return reply->readInt32();
2548e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    }
2554e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber
2562beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    status_t setAuxEffectSendLevel(float level)
2572beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    {
2582beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        Parcel data, reply;
2592beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
2602beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        data.writeFloat(level);
2612beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        remote()->transact(SET_AUX_EFFECT_SEND_LEVEL, data, &reply);
2622beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        return reply.readInt32();
2632beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    }
2642beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent
2652beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    status_t attachAuxEffect(int effectId)
2662beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    {
2672beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        Parcel data, reply;
2682beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
2692beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        data.writeInt32(effectId);
2702beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        remote()->transact(ATTACH_AUX_EFFECT, data, &reply);
2712beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        return reply.readInt32();
2722beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    }
2731173118eace0e9e347cb007f0da817cee87579edGlenn Kasten
2744f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    status_t setParameter(int key, const Parcel& request)
2754f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    {
2764f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        Parcel data, reply;
2774f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
2784f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        data.writeInt32(key);
2794f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        if (request.dataSize() > 0) {
2804f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            data.appendFrom(const_cast<Parcel *>(&request), 0, request.dataSize());
2814f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        }
2824f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        remote()->transact(SET_PARAMETER, data, &reply);
2834f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        return reply.readInt32();
2844f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    }
2854f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang
2864f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    status_t getParameter(int key, Parcel *reply)
2874f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    {
2884f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        Parcel data;
2894f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
2904f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        data.writeInt32(key);
2914f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        return remote()->transact(GET_PARAMETER, data, reply);
2924f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    }
2934f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang
294c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman    status_t setRetransmitEndpoint(const struct sockaddr_in* endpoint) {
295c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        Parcel data, reply;
296c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        status_t err;
297c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman
298c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
299c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        if (NULL != endpoint) {
300c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            data.writeInt32(sizeof(*endpoint));
301c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            data.write(endpoint, sizeof(*endpoint));
302c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        } else {
303c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            data.writeInt32(0);
304c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        }
305c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman
306c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        err = remote()->transact(SET_RETRANSMIT_ENDPOINT, data, &reply);
307c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        if (OK != err) {
308c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            return err;
309c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        }
310c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman
311c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        return reply.readInt32();
312c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman    }
31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
31556f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer");
31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------
31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayer::onTransact(
32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
322e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten    switch (code) {
32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case DISCONNECT: {
32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            disconnect();
32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
328d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        case SET_DATA_SOURCE_URL: {
329d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            CHECK_INTERFACE(IMediaPlayer, data, reply);
330d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            const char* url = data.readCString();
331d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            KeyedVector<String8, String8> headers;
332d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            int32_t numHeaders = data.readInt32();
333d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            for (int i = 0; i < numHeaders; ++i) {
334d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                String8 key = data.readString8();
335d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                String8 value = data.readString8();
336d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                headers.add(key, value);
337d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            }
338d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            reply->writeInt32(setDataSource(url, numHeaders > 0 ? &headers : NULL));
339d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            return NO_ERROR;
340d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        } break;
341d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        case SET_DATA_SOURCE_FD: {
342d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            CHECK_INTERFACE(IMediaPlayer, data, reply);
343d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            int fd = data.readFileDescriptor();
344d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            int64_t offset = data.readInt64();
345d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            int64_t length = data.readInt64();
346d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            reply->writeInt32(setDataSource(fd, offset, length));
347d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            return NO_ERROR;
348d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        }
349d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        case SET_DATA_SOURCE_STREAM: {
350d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            CHECK_INTERFACE(IMediaPlayer, data, reply);
351d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            sp<IStreamSource> source =
352d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                interface_cast<IStreamSource>(data.readStrongBinder());
353d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            reply->writeInt32(setDataSource(source));
354d681bbb1767bed09415e050ba78975df214bcd68Dave Burke            return NO_ERROR;
355d681bbb1767bed09415e050ba78975df214bcd68Dave Burke        }
3561173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        case SET_VIDEO_SURFACETEXTURE: {
3571173118eace0e9e347cb007f0da817cee87579edGlenn Kasten            CHECK_INTERFACE(IMediaPlayer, data, reply);
3581173118eace0e9e347cb007f0da817cee87579edGlenn Kasten            sp<ISurfaceTexture> surfaceTexture =
3591173118eace0e9e347cb007f0da817cee87579edGlenn Kasten                    interface_cast<ISurfaceTexture>(data.readStrongBinder());
3601173118eace0e9e347cb007f0da817cee87579edGlenn Kasten            reply->writeInt32(setVideoSurfaceTexture(surfaceTexture));
3611173118eace0e9e347cb007f0da817cee87579edGlenn Kasten            return NO_ERROR;
3621173118eace0e9e347cb007f0da817cee87579edGlenn Kasten        } break;
36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PREPARE_ASYNC: {
36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(prepareAsync());
36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case START: {
36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(start());
37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
37389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case STOP: {
37489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
37589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(stop());
37689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
37789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
37889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case IS_PLAYING: {
37989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
38089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            bool state;
38189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = isPlaying(&state);
38289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(state);
38389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
38489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
38589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
38689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case PAUSE: {
38789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(pause());
38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SEEK_TO: {
39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(seekTo(data.readInt32()));
39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_CURRENT_POSITION: {
39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int msec;
39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getCurrentPosition(&msec);
40089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(msec);
40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case GET_DURATION: {
40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            int msec;
40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            status_t ret = getDuration(&msec);
40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(msec);
40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(ret);
41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case RESET: {
41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(reset());
41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_AUDIO_STREAM_TYPE: {
41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
419fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten            reply->writeInt32(setAudioStreamType((audio_stream_type_t) data.readInt32()));
42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_LOOPING: {
42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            CHECK_INTERFACE(IMediaPlayer, data, reply);
42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            reply->writeInt32(setLooping(data.readInt32()));
42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        case SET_VOLUME: {
428172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks            CHECK_INTERFACE(IMediaPlayer, data, reply);
429de162ff337723798381890151247b129c4fbe314Gloria Wang            float leftVolume = data.readFloat();
430de162ff337723798381890151247b129c4fbe314Gloria Wang            float rightVolume = data.readFloat();
431de162ff337723798381890151247b129c4fbe314Gloria Wang            reply->writeInt32(setVolume(leftVolume, rightVolume));
43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return NO_ERROR;
43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        } break;
4341d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania        case INVOKE: {
4351d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania            CHECK_INTERFACE(IMediaPlayer, data, reply);
436040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong            status_t result = invoke(data, reply);
437040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong            return result;
4381d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania        } break;
439a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        case SET_METADATA_FILTER: {
440a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania            CHECK_INTERFACE(IMediaPlayer, data, reply);
441a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania            reply->writeInt32(setMetadataFilter(data));
442a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania            return NO_ERROR;
443a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania        } break;
4448e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        case GET_METADATA: {
4458e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania            CHECK_INTERFACE(IMediaPlayer, data, reply);
446de162ff337723798381890151247b129c4fbe314Gloria Wang            bool update_only = static_cast<bool>(data.readInt32());
447de162ff337723798381890151247b129c4fbe314Gloria Wang            bool apply_filter = static_cast<bool>(data.readInt32());
448de162ff337723798381890151247b129c4fbe314Gloria Wang            const status_t retcode = getMetadata(update_only, apply_filter, reply);
4498e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania            reply->setDataPosition(0);
4508e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania            reply->writeInt32(retcode);
4518e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania            reply->setDataPosition(0);
4528e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania            return NO_ERROR;
4538e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania        } break;
4542beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        case SET_AUX_EFFECT_SEND_LEVEL: {
4552beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent            CHECK_INTERFACE(IMediaPlayer, data, reply);
4562beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent            reply->writeInt32(setAuxEffectSendLevel(data.readFloat()));
4572beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent            return NO_ERROR;
4582beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        } break;
4592beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        case ATTACH_AUX_EFFECT: {
4602beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent            CHECK_INTERFACE(IMediaPlayer, data, reply);
4612beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent            reply->writeInt32(attachAuxEffect(data.readInt32()));
4622beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent            return NO_ERROR;
4632beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent        } break;
4644f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        case SET_PARAMETER: {
4654f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            CHECK_INTERFACE(IMediaPlayer, data, reply);
4664f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            int key = data.readInt32();
4674f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang
4684f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            Parcel request;
4694f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            if (data.dataAvail() > 0) {
4704f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang                request.appendFrom(
4714f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang                        const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail());
4724f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            }
4734f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            request.setDataPosition(0);
4744f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            reply->writeInt32(setParameter(key, request));
4754f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            return NO_ERROR;
4764f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        } break;
4774f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        case GET_PARAMETER: {
4784f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            CHECK_INTERFACE(IMediaPlayer, data, reply);
4794f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang            return getParameter(data.readInt32(), reply);
4804f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang        } break;
481c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        case SET_RETRANSMIT_ENDPOINT: {
482c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            CHECK_INTERFACE(IMediaPlayer, data, reply);
483c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman
484c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            struct sockaddr_in endpoint;
485c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            int amt = data.readInt32();
486c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            if (amt == sizeof(endpoint)) {
487c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman                data.read(&endpoint, sizeof(struct sockaddr_in));
488c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman                reply->writeInt32(setRetransmitEndpoint(&endpoint));
489c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            } else {
490c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman                reply->writeInt32(setRetransmitEndpoint(NULL));
491c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            }
492c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman
493c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman            return NO_ERROR;
494c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman        } break;
49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        default:
49689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
49789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
50189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
50289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
503