IMediaPlayer.cpp revision 40bc906252974d0b389ae4a147232d0c9a97193f
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 241b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <media/IMediaHTTPService.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayer.h> 26d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <media/IStreamSource.h> 27d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 288ba01021b573889802e67e029225a96f0dfa471aAndy McFadden#include <gui/IGraphicBufferProducer.h> 29d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <utils/String8.h> 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, 35d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_URL, 36d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_FD, 37d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_STREAM, 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PREPARE_ASYNC, 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project START, 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STOP, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project IS_PLAYING, 429816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia SET_PLAYBACK_RATE, 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PAUSE, 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SEEK_TO, 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_CURRENT_POSITION, 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_DURATION, 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project RESET, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_AUDIO_STREAM_TYPE, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_LOOPING, 501d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania SET_VOLUME, 511d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania INVOKE, 52a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania SET_METADATA_FILTER, 538e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania GET_METADATA, 542beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent SET_AUX_EFFECT_SEND_LEVEL, 551173118eace0e9e347cb007f0da817cee87579edGlenn Kasten ATTACH_AUX_EFFECT, 561173118eace0e9e347cb007f0da817cee87579edGlenn Kasten SET_VIDEO_SURFACETEXTURE, 574f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang SET_PARAMETER, 584f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang GET_PARAMETER, 59c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman SET_RETRANSMIT_ENDPOINT, 6044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman GET_RETRANSMIT_ENDPOINT, 616b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen SET_NEXT_PLAYER, 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayer: public BpInterface<IMediaPlayer> 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpMediaPlayer(const sp<IBinder>& impl) 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayer>(impl) 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // disconnect from media player service 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void disconnect() 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DISCONNECT, data, &reply); 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 801b86fe063badb5f28c467ade39be0f4008688947Andreas Huber status_t setDataSource( 811b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 821b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const char* url, 83d681bbb1767bed09415e050ba78975df214bcd68Dave Burke const KeyedVector<String8, String8>* headers) 84d681bbb1767bed09415e050ba78975df214bcd68Dave Burke { 85d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 86d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 871b86fe063badb5f28c467ade39be0f4008688947Andreas Huber data.writeInt32(httpService != NULL); 881b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (httpService != NULL) { 8906b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen data.writeStrongBinder(IInterface::asBinder(httpService)); 901b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 91d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeCString(url); 92d681bbb1767bed09415e050ba78975df214bcd68Dave Burke if (headers == NULL) { 93d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt32(0); 94d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } else { 95d681bbb1767bed09415e050ba78975df214bcd68Dave Burke // serialize the headers 96d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt32(headers->size()); 97d681bbb1767bed09415e050ba78975df214bcd68Dave Burke for (size_t i = 0; i < headers->size(); ++i) { 98d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeString8(headers->keyAt(i)); 99d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeString8(headers->valueAt(i)); 100d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 101d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 102d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(SET_DATA_SOURCE_URL, data, &reply); 103d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 104d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 105d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 106d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(int fd, int64_t offset, int64_t length) { 107d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 108d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 109d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeFileDescriptor(fd); 110d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt64(offset); 111d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt64(length); 112d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(SET_DATA_SOURCE_FD, data, &reply); 113d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 114d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 115d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 116d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(const sp<IStreamSource> &source) { 117d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 118d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 11906b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen data.writeStrongBinder(IInterface::asBinder(source)); 1208d65510a2e9ff7b64f2f35bfe3cd745a717c9533Glenn Kasten remote()->transact(SET_DATA_SOURCE_STREAM, data, &reply); 121d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 122d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 123d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 1248ba01021b573889802e67e029225a96f0dfa471aAndy McFadden // pass the buffered IGraphicBufferProducer to the media player service 1258ba01021b573889802e67e029225a96f0dfa471aAndy McFadden status_t setVideoSurfaceTexture(const sp<IGraphicBufferProducer>& bufferProducer) 1261173118eace0e9e347cb007f0da817cee87579edGlenn Kasten { 1271173118eace0e9e347cb007f0da817cee87579edGlenn Kasten Parcel data, reply; 1281173118eace0e9e347cb007f0da817cee87579edGlenn Kasten data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 12906b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen sp<IBinder> b(IInterface::asBinder(bufferProducer)); 1301173118eace0e9e347cb007f0da817cee87579edGlenn Kasten data.writeStrongBinder(b); 1311173118eace0e9e347cb007f0da817cee87579edGlenn Kasten remote()->transact(SET_VIDEO_SURFACETEXTURE, data, &reply); 1321173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return reply.readInt32(); 1331173118eace0e9e347cb007f0da817cee87579edGlenn Kasten } 1341173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync() 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PREPARE_ASYNC, data, &reply); 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start() 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(START, data, &reply); 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop() 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STOP, data, &reply); 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t isPlaying(bool* state) 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(IS_PLAYING, data, &reply); 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *state = reply.readInt32(); 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1689816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia status_t setPlaybackRate(float rate) 1699816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia { 1709816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia Parcel data, reply; 1719816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 1729816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia data.writeFloat(rate); 1739816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia remote()->transact(SET_PLAYBACK_RATE, data, &reply); 1749816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia return reply.readInt32(); 1759816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia } 1769816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t pause() 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PAUSE, data, &reply); 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t seekTo(int msec) 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(msec); 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SEEK_TO, data, &reply); 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getCurrentPosition(int* msec) 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_CURRENT_POSITION, data, &reply); 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *msec = reply.readInt32(); 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration(int* msec) 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_DURATION, data, &reply); 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *msec = reply.readInt32(); 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset() 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(RESET, data, &reply); 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 220fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten status_t setAudioStreamType(audio_stream_type_t stream) 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 224fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_AUDIO_STREAM_TYPE, data, &reply); 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setLooping(int loop) 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(loop); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_LOOPING, data, &reply); 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVolume(float leftVolume, float rightVolume) 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 241172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(leftVolume); 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(rightVolume); 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_VOLUME, data, &reply); 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 2471d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 2481d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania status_t invoke(const Parcel& request, Parcel *reply) 249040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong { 250040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong // Avoid doing any extra copy. The interface descriptor should 251040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong // have been set by MediaPlayer.java. 2528e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return remote()->transact(INVOKE, request, reply); 2531d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania } 254a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania 255a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania status_t setMetadataFilter(const Parcel& request) 256a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania { 257a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania Parcel reply; 258a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // Avoid doing any extra copy of the request. The interface 259a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // descriptor should have been set by MediaPlayer.java. 260a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania remote()->transact(SET_METADATA_FILTER, request, &reply); 261a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania return reply.readInt32(); 262a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania } 2638e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania 2648e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania status_t getMetadata(bool update_only, bool apply_filter, Parcel *reply) 2658e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania { 2668e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania Parcel request; 2678e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2688e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania // TODO: Burning 2 ints for 2 boolean. Should probably use flags in an int here. 2698e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInt32(update_only); 2708e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInt32(apply_filter); 2718e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania remote()->transact(GET_METADATA, request, reply); 2728e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return reply->readInt32(); 2738e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania } 2744e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber 2752beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t setAuxEffectSendLevel(float level) 2762beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent { 2772beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent Parcel data, reply; 2782beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2792beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeFloat(level); 2802beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent remote()->transact(SET_AUX_EFFECT_SEND_LEVEL, data, &reply); 2812beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return reply.readInt32(); 2822beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } 2832beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent 2842beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t attachAuxEffect(int effectId) 2852beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent { 2862beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent Parcel data, reply; 2872beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2882beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInt32(effectId); 2892beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent remote()->transact(ATTACH_AUX_EFFECT, data, &reply); 2902beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return reply.readInt32(); 2912beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } 2921173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 2934f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t setParameter(int key, const Parcel& request) 2944f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang { 2954f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel data, reply; 2964f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2974f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInt32(key); 2984f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang if (request.dataSize() > 0) { 2994f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.appendFrom(const_cast<Parcel *>(&request), 0, request.dataSize()); 3004f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 3014f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang remote()->transact(SET_PARAMETER, data, &reply); 3024f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return reply.readInt32(); 3034f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 3044f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 3054f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t getParameter(int key, Parcel *reply) 3064f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang { 3074f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel data; 3084f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 3094f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInt32(key); 3104f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return remote()->transact(GET_PARAMETER, data, reply); 3114f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 3124f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 31344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t setRetransmitEndpoint(const struct sockaddr_in* endpoint) 31444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman { 315c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman Parcel data, reply; 316c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman status_t err; 317c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 318c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 319c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (NULL != endpoint) { 320c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInt32(sizeof(*endpoint)); 321c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.write(endpoint, sizeof(*endpoint)); 322c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } else { 323c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInt32(0); 324c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 325c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 326c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman err = remote()->transact(SET_RETRANSMIT_ENDPOINT, data, &reply); 327c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (OK != err) { 328c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return err; 329c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 3306b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen return reply.readInt32(); 3316b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen } 332c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 3336b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen status_t setNextPlayer(const sp<IMediaPlayer>& player) { 3346b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen Parcel data, reply; 3356b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 33606b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen sp<IBinder> b(IInterface::asBinder(player)); 3376b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen data.writeStrongBinder(b); 3386b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen remote()->transact(SET_NEXT_PLAYER, data, &reply); 339c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return reply.readInt32(); 340c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 34144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 34244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t getRetransmitEndpoint(struct sockaddr_in* endpoint) 34344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman { 34444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman Parcel data, reply; 34544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t err; 34644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 34744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 34844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman err = remote()->transact(GET_RETRANSMIT_ENDPOINT, data, &reply); 34944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 35044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman if ((OK != err) || (OK != (err = reply.readInt32()))) { 35144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return err; 35244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 35344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 35444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman data.read(endpoint, sizeof(*endpoint)); 35544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 35644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return err; 35744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36056f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer"); 36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayer::onTransact( 36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 36689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 367e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DISCONNECT: { 36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project disconnect(); 37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 37289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 373d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_URL: { 374d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 3751b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 3761b86fe063badb5f28c467ade39be0f4008688947Andreas Huber sp<IMediaHTTPService> httpService; 3771b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (data.readInt32()) { 3781b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService = 3791b86fe063badb5f28c467ade39be0f4008688947Andreas Huber interface_cast<IMediaHTTPService>(data.readStrongBinder()); 3801b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 3811b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 382d681bbb1767bed09415e050ba78975df214bcd68Dave Burke const char* url = data.readCString(); 383d681bbb1767bed09415e050ba78975df214bcd68Dave Burke KeyedVector<String8, String8> headers; 384d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int32_t numHeaders = data.readInt32(); 385d681bbb1767bed09415e050ba78975df214bcd68Dave Burke for (int i = 0; i < numHeaders; ++i) { 386d681bbb1767bed09415e050ba78975df214bcd68Dave Burke String8 key = data.readString8(); 387d681bbb1767bed09415e050ba78975df214bcd68Dave Burke String8 value = data.readString8(); 388d681bbb1767bed09415e050ba78975df214bcd68Dave Burke headers.add(key, value); 389d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 3901b86fe063badb5f28c467ade39be0f4008688947Andreas Huber reply->writeInt32(setDataSource( 3911b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService, url, numHeaders > 0 ? &headers : NULL)); 392d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 393d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } break; 394d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_FD: { 395d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 396d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int fd = data.readFileDescriptor(); 397d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int64_t offset = data.readInt64(); 398d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int64_t length = data.readInt64(); 399d681bbb1767bed09415e050ba78975df214bcd68Dave Burke reply->writeInt32(setDataSource(fd, offset, length)); 400d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 401d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 402d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_STREAM: { 403d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 404d681bbb1767bed09415e050ba78975df214bcd68Dave Burke sp<IStreamSource> source = 405d681bbb1767bed09415e050ba78975df214bcd68Dave Burke interface_cast<IStreamSource>(data.readStrongBinder()); 406d681bbb1767bed09415e050ba78975df214bcd68Dave Burke reply->writeInt32(setDataSource(source)); 407d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 408d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 4091173118eace0e9e347cb007f0da817cee87579edGlenn Kasten case SET_VIDEO_SURFACETEXTURE: { 4101173118eace0e9e347cb007f0da817cee87579edGlenn Kasten CHECK_INTERFACE(IMediaPlayer, data, reply); 4118ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> bufferProducer = 4128ba01021b573889802e67e029225a96f0dfa471aAndy McFadden interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); 4138ba01021b573889802e67e029225a96f0dfa471aAndy McFadden reply->writeInt32(setVideoSurfaceTexture(bufferProducer)); 4141173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return NO_ERROR; 4151173118eace0e9e347cb007f0da817cee87579edGlenn Kasten } break; 41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PREPARE_ASYNC: { 41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(prepareAsync()); 41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 42189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case START: { 42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(start()); 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STOP: { 42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(stop()); 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_PLAYING: { 43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool state; 43489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = isPlaying(&state); 43589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(state); 43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 43789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 4399816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia case SET_PLAYBACK_RATE: { 4409816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 4419816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia reply->writeInt32(setPlaybackRate(data.readFloat())); 4429816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia return NO_ERROR; 4439816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia } break; 44489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PAUSE: { 44589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 44689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(pause()); 44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 44989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SEEK_TO: { 45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(seekTo(data.readInt32())); 45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 45389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 45489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_CURRENT_POSITION: { 45589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int msec; 45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = getCurrentPosition(&msec); 45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(msec); 45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_DURATION: { 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 46489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int msec; 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = getDuration(&msec); 46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(msec); 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case RESET: { 47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(reset()); 47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_AUDIO_STREAM_TYPE: { 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 477fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32(setAudioStreamType((audio_stream_type_t) data.readInt32())); 47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_LOOPING: { 48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 48289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(setLooping(data.readInt32())); 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 48489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 48589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_VOLUME: { 486172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks CHECK_INTERFACE(IMediaPlayer, data, reply); 487de162ff337723798381890151247b129c4fbe314Gloria Wang float leftVolume = data.readFloat(); 488de162ff337723798381890151247b129c4fbe314Gloria Wang float rightVolume = data.readFloat(); 489de162ff337723798381890151247b129c4fbe314Gloria Wang reply->writeInt32(setVolume(leftVolume, rightVolume)); 49089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 49189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 4921d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania case INVOKE: { 4931d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 494040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong status_t result = invoke(data, reply); 495040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong return result; 4961d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania } break; 497a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania case SET_METADATA_FILTER: { 498a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 499a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania reply->writeInt32(setMetadataFilter(data)); 500a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania return NO_ERROR; 501a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania } break; 5028e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania case GET_METADATA: { 5038e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 504de162ff337723798381890151247b129c4fbe314Gloria Wang bool update_only = static_cast<bool>(data.readInt32()); 505de162ff337723798381890151247b129c4fbe314Gloria Wang bool apply_filter = static_cast<bool>(data.readInt32()); 506de162ff337723798381890151247b129c4fbe314Gloria Wang const status_t retcode = getMetadata(update_only, apply_filter, reply); 5078e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->setDataPosition(0); 5088e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->writeInt32(retcode); 5098e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->setDataPosition(0); 5108e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return NO_ERROR; 5118e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania } break; 5122beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent case SET_AUX_EFFECT_SEND_LEVEL: { 5132beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent CHECK_INTERFACE(IMediaPlayer, data, reply); 5142beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent reply->writeInt32(setAuxEffectSendLevel(data.readFloat())); 5152beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return NO_ERROR; 5162beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } break; 5172beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent case ATTACH_AUX_EFFECT: { 5182beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent CHECK_INTERFACE(IMediaPlayer, data, reply); 5192beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent reply->writeInt32(attachAuxEffect(data.readInt32())); 5202beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return NO_ERROR; 5212beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } break; 5224f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang case SET_PARAMETER: { 5234f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang CHECK_INTERFACE(IMediaPlayer, data, reply); 5244f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang int key = data.readInt32(); 5254f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 5264f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel request; 5274f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang if (data.dataAvail() > 0) { 5284f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang request.appendFrom( 5294f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail()); 5304f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 5314f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang request.setDataPosition(0); 5324f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang reply->writeInt32(setParameter(key, request)); 5334f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return NO_ERROR; 5344f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } break; 5354f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang case GET_PARAMETER: { 5364f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang CHECK_INTERFACE(IMediaPlayer, data, reply); 5374f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return getParameter(data.readInt32(), reply); 5384f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } break; 539c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman case SET_RETRANSMIT_ENDPOINT: { 540c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman CHECK_INTERFACE(IMediaPlayer, data, reply); 541c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 542c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman struct sockaddr_in endpoint; 543c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman int amt = data.readInt32(); 544c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (amt == sizeof(endpoint)) { 545c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.read(&endpoint, sizeof(struct sockaddr_in)); 546c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman reply->writeInt32(setRetransmitEndpoint(&endpoint)); 547c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } else { 548c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman reply->writeInt32(setRetransmitEndpoint(NULL)); 549c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 55044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 55144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return NO_ERROR; 55244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } break; 55344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman case GET_RETRANSMIT_ENDPOINT: { 55444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman CHECK_INTERFACE(IMediaPlayer, data, reply); 55544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 55644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman struct sockaddr_in endpoint; 55744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t res = getRetransmitEndpoint(&endpoint); 55844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 55944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman reply->writeInt32(res); 56044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman reply->write(&endpoint, sizeof(endpoint)); 56144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 5626b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen return NO_ERROR; 5636b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen } break; 5646b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen case SET_NEXT_PLAYER: { 5656b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen CHECK_INTERFACE(IMediaPlayer, data, reply); 5666b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen reply->writeInt32(setNextPlayer(interface_cast<IMediaPlayer>(data.readStrongBinder()))); 56744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 568c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return NO_ERROR; 569c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } break; 57089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 57189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 57289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 57389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 57489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 57589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 57689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 57740bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android 578