IMediaPlayer.cpp revision 9fc8b5cd4a64ef07e84c69112461324d5c13a0b0
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 243a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar#include <media/AudioResamplerPublic.h> 253a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar#include <media/AVSyncSettings.h> 26d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia#include <media/BufferingSettings.h> 273a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 2899f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins#include <media/IDataSource.h> 291b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <media/IMediaHTTPService.h> 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayer.h> 31d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <media/IStreamSource.h> 32d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 338ba01021b573889802e67e029225a96f0dfa471aAndy McFadden#include <gui/IGraphicBufferProducer.h> 34d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <utils/String8.h> 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, 40d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_URL, 41d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_FD, 42d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_STREAM, 4399f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins SET_DATA_SOURCE_CALLBACK, 44d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia SET_BUFFERING_SETTINGS, 45d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia GET_DEFAULT_BUFFERING_SETTINGS, 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PREPARE_ASYNC, 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project START, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STOP, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project IS_PLAYING, 503a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar SET_PLAYBACK_SETTINGS, 513a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar GET_PLAYBACK_SETTINGS, 523a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar SET_SYNC_SETTINGS, 533a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar GET_SYNC_SETTINGS, 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PAUSE, 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SEEK_TO, 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_CURRENT_POSITION, 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_DURATION, 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project RESET, 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_AUDIO_STREAM_TYPE, 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_LOOPING, 611d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania SET_VOLUME, 621d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania INVOKE, 63a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania SET_METADATA_FILTER, 648e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania GET_METADATA, 652beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent SET_AUX_EFFECT_SEND_LEVEL, 661173118eace0e9e347cb007f0da817cee87579edGlenn Kasten ATTACH_AUX_EFFECT, 671173118eace0e9e347cb007f0da817cee87579edGlenn Kasten SET_VIDEO_SURFACETEXTURE, 684f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang SET_PARAMETER, 694f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang GET_PARAMETER, 70c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman SET_RETRANSMIT_ENDPOINT, 7144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman GET_RETRANSMIT_ENDPOINT, 726b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen SET_NEXT_PLAYER, 739fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung APPLY_VOLUME_SHAPER, 749fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung GET_VOLUME_SHAPER_STATE, 75071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania // ModDrm 76071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania PREPARE_DRM, 77071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania RELEASE_DRM, 78071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania GET_KEY_REQUEST, 79071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania PROVIDE_KEY_RESPONSE, 80071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania RESTORE_KEYS, 81071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania GET_DRM_PROPERTY_STRING, 82071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania SET_DRM_PROPERTY_STRING, 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 85071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania// ModDrm helpers 86071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojaniastatic void readVector(const Parcel& reply, Vector<uint8_t>& vector) { 87071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t size = reply.readUint32(); 88071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania vector.insertAt((size_t)0, size); 89071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply.read(vector.editArray(), size); 90071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania} 91071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 92071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojaniastatic void writeVector(Parcel& data, Vector<uint8_t> const& vector) { 93071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeUint32(vector.size()); 94071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.write(vector.array(), vector.size()); 95071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania} 96071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayer: public BpInterface<IMediaPlayer> 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 100090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh explicit BpMediaPlayer(const sp<IBinder>& impl) 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayer>(impl) 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // disconnect from media player service 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void disconnect() 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DISCONNECT, data, &reply); 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1131b86fe063badb5f28c467ade39be0f4008688947Andreas Huber status_t setDataSource( 1141b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 1151b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const char* url, 116d681bbb1767bed09415e050ba78975df214bcd68Dave Burke const KeyedVector<String8, String8>* headers) 117d681bbb1767bed09415e050ba78975df214bcd68Dave Burke { 118d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 119d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 1201b86fe063badb5f28c467ade39be0f4008688947Andreas Huber data.writeInt32(httpService != NULL); 1211b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (httpService != NULL) { 12206b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen data.writeStrongBinder(IInterface::asBinder(httpService)); 1231b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 124d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeCString(url); 125d681bbb1767bed09415e050ba78975df214bcd68Dave Burke if (headers == NULL) { 126d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt32(0); 127d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } else { 128d681bbb1767bed09415e050ba78975df214bcd68Dave Burke // serialize the headers 129d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt32(headers->size()); 130d681bbb1767bed09415e050ba78975df214bcd68Dave Burke for (size_t i = 0; i < headers->size(); ++i) { 131d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeString8(headers->keyAt(i)); 132d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeString8(headers->valueAt(i)); 133d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 134d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 135d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(SET_DATA_SOURCE_URL, data, &reply); 136d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 137d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 138d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 139d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(int fd, int64_t offset, int64_t length) { 140d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 141d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 142d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeFileDescriptor(fd); 143d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt64(offset); 144d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt64(length); 145d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(SET_DATA_SOURCE_FD, data, &reply); 146d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 147d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 148d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 149d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(const sp<IStreamSource> &source) { 150d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 151d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 15206b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen data.writeStrongBinder(IInterface::asBinder(source)); 1538d65510a2e9ff7b64f2f35bfe3cd745a717c9533Glenn Kasten remote()->transact(SET_DATA_SOURCE_STREAM, data, &reply); 154d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 155d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 156d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 15799f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins status_t setDataSource(const sp<IDataSource> &source) { 15899f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins Parcel data, reply; 15999f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 16099f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins data.writeStrongBinder(IInterface::asBinder(source)); 16199f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins remote()->transact(SET_DATA_SOURCE_CALLBACK, data, &reply); 16299f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins return reply.readInt32(); 16399f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins } 16499f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins 1658ba01021b573889802e67e029225a96f0dfa471aAndy McFadden // pass the buffered IGraphicBufferProducer to the media player service 1668ba01021b573889802e67e029225a96f0dfa471aAndy McFadden status_t setVideoSurfaceTexture(const sp<IGraphicBufferProducer>& bufferProducer) 1671173118eace0e9e347cb007f0da817cee87579edGlenn Kasten { 1681173118eace0e9e347cb007f0da817cee87579edGlenn Kasten Parcel data, reply; 1691173118eace0e9e347cb007f0da817cee87579edGlenn Kasten data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 17006b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen sp<IBinder> b(IInterface::asBinder(bufferProducer)); 1711173118eace0e9e347cb007f0da817cee87579edGlenn Kasten data.writeStrongBinder(b); 1721173118eace0e9e347cb007f0da817cee87579edGlenn Kasten remote()->transact(SET_VIDEO_SURFACETEXTURE, data, &reply); 1731173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return reply.readInt32(); 1741173118eace0e9e347cb007f0da817cee87579edGlenn Kasten } 1751173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 176d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia status_t setBufferingSettings(const BufferingSettings& buffering) 177d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia { 178d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia Parcel data, reply; 179d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 180d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia buffering.writeToParcel(&data); 181d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia remote()->transact(SET_BUFFERING_SETTINGS, data, &reply); 182d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return reply.readInt32(); 183d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 184d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia 185d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia status_t getDefaultBufferingSettings(BufferingSettings* buffering /* nonnull */) 186d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia { 187d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia if (buffering == nullptr) { 188d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return BAD_VALUE; 189d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 190d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia Parcel data, reply; 191d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 192d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia remote()->transact(GET_DEFAULT_BUFFERING_SETTINGS, data, &reply); 193d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia status_t err = reply.readInt32(); 194d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia if (err == OK) { 195d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia err = buffering->readFromParcel(&reply); 196d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 197d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return err; 198d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 199d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync() 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PREPARE_ASYNC, data, &reply); 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start() 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(START, data, &reply); 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop() 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STOP, data, &reply); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t isPlaying(bool* state) 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(IS_PLAYING, data, &reply); 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *state = reply.readInt32(); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2333a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t setPlaybackSettings(const AudioPlaybackRate& rate) 2343a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar { 2353a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar Parcel data, reply; 2363a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2373a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(rate.mSpeed); 2383a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(rate.mPitch); 2393a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)rate.mFallbackMode); 2403a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)rate.mStretchMode); 2413a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(SET_PLAYBACK_SETTINGS, data, &reply); 2423a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return reply.readInt32(); 2433a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2443a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 2453a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */) 2463a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar { 2473a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar Parcel data, reply; 2483a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2493a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(GET_PLAYBACK_SETTINGS, data, &reply); 2503a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = reply.readInt32(); 2513a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 2523a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar *rate = AUDIO_PLAYBACK_RATE_DEFAULT; 2533a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mSpeed = reply.readFloat(); 2543a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mPitch = reply.readFloat(); 2553a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mFallbackMode = (AudioTimestretchFallbackMode)reply.readInt32(); 2563a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mStretchMode = (AudioTimestretchStretchMode)reply.readInt32(); 2573a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2583a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return err; 2593a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2603a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 2613a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t setSyncSettings(const AVSyncSettings& sync, float videoFpsHint) 2629816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia { 2639816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia Parcel data, reply; 2649816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2653a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)sync.mSource); 2663a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)sync.mAudioAdjustMode); 2673a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(sync.mTolerance); 2683a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(videoFpsHint); 2693a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(SET_SYNC_SETTINGS, data, &reply); 2709816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia return reply.readInt32(); 2719816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia } 2729816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia 2733a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t getSyncSettings(AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */) 2743a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar { 2753a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar Parcel data, reply; 2763a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2773a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(GET_SYNC_SETTINGS, data, &reply); 2783a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = reply.readInt32(); 2793a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 2803a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AVSyncSettings settings; 2813a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar settings.mSource = (AVSyncSource)reply.readInt32(); 2823a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar settings.mAudioAdjustMode = (AVSyncAudioAdjustMode)reply.readInt32(); 2833a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar settings.mTolerance = reply.readFloat(); 2843a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar *sync = settings; 2853a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar *videoFps = reply.readFloat(); 2863a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2873a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return err; 2883a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2893a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t pause() 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PAUSE, data, &reply); 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 298c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia status_t seekTo(int msec, MediaPlayerSeekMode mode) 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(msec); 303c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia data.writeInt32(mode); 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SEEK_TO, data, &reply); 30589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getCurrentPosition(int* msec) 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_CURRENT_POSITION, data, &reply); 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *msec = reply.readInt32(); 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration(int* msec) 31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_DURATION, data, &reply); 32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *msec = reply.readInt32(); 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset() 32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(RESET, data, &reply); 33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 334fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten status_t setAudioStreamType(audio_stream_type_t stream) 33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 33689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 338fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_AUDIO_STREAM_TYPE, data, &reply); 34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setLooping(int loop) 34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(loop); 34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_LOOPING, data, &reply); 34989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVolume(float leftVolume, float rightVolume) 35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 355172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(leftVolume); 35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(rightVolume); 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_VOLUME, data, &reply); 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 3611d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 3621d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania status_t invoke(const Parcel& request, Parcel *reply) 363040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong { 364040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong // Avoid doing any extra copy. The interface descriptor should 365040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong // have been set by MediaPlayer.java. 3668e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return remote()->transact(INVOKE, request, reply); 3671d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania } 368a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania 369a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania status_t setMetadataFilter(const Parcel& request) 370a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania { 371a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania Parcel reply; 372a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // Avoid doing any extra copy of the request. The interface 373a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // descriptor should have been set by MediaPlayer.java. 374a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania remote()->transact(SET_METADATA_FILTER, request, &reply); 375a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania return reply.readInt32(); 376a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania } 3778e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania 3788e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania status_t getMetadata(bool update_only, bool apply_filter, Parcel *reply) 3798e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania { 3808e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania Parcel request; 3818e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 3828e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania // TODO: Burning 2 ints for 2 boolean. Should probably use flags in an int here. 3838e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInt32(update_only); 3848e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInt32(apply_filter); 3858e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania remote()->transact(GET_METADATA, request, reply); 3868e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return reply->readInt32(); 3878e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania } 3884e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber 3892beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t setAuxEffectSendLevel(float level) 3902beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent { 3912beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent Parcel data, reply; 3922beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 3932beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeFloat(level); 3942beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent remote()->transact(SET_AUX_EFFECT_SEND_LEVEL, data, &reply); 3952beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return reply.readInt32(); 3962beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } 3972beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent 3982beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t attachAuxEffect(int effectId) 3992beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent { 4002beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent Parcel data, reply; 4012beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4022beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInt32(effectId); 4032beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent remote()->transact(ATTACH_AUX_EFFECT, data, &reply); 4042beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return reply.readInt32(); 4052beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } 4061173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 4074f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t setParameter(int key, const Parcel& request) 4084f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang { 4094f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel data, reply; 4104f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4114f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInt32(key); 4124f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang if (request.dataSize() > 0) { 4134f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.appendFrom(const_cast<Parcel *>(&request), 0, request.dataSize()); 4144f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 4154f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang remote()->transact(SET_PARAMETER, data, &reply); 4164f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return reply.readInt32(); 4174f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 4184f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 4194f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t getParameter(int key, Parcel *reply) 4204f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang { 4214f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel data; 4224f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4234f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInt32(key); 4244f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return remote()->transact(GET_PARAMETER, data, reply); 4254f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 4264f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 42744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t setRetransmitEndpoint(const struct sockaddr_in* endpoint) 42844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman { 429c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman Parcel data, reply; 430c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman status_t err; 431c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 432c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 433c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (NULL != endpoint) { 434c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInt32(sizeof(*endpoint)); 435c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.write(endpoint, sizeof(*endpoint)); 436c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } else { 437c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInt32(0); 438c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 439c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 440c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman err = remote()->transact(SET_RETRANSMIT_ENDPOINT, data, &reply); 441c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (OK != err) { 442c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return err; 443c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 4446b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen return reply.readInt32(); 4456b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen } 446c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 4476b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen status_t setNextPlayer(const sp<IMediaPlayer>& player) { 4486b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen Parcel data, reply; 4496b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 45006b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen sp<IBinder> b(IInterface::asBinder(player)); 4516b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen data.writeStrongBinder(b); 4526b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen remote()->transact(SET_NEXT_PLAYER, data, &reply); 453c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return reply.readInt32(); 454c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 45544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 45644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t getRetransmitEndpoint(struct sockaddr_in* endpoint) 45744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman { 45844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman Parcel data, reply; 45944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t err; 46044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 46144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 46244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman err = remote()->transact(GET_RETRANSMIT_ENDPOINT, data, &reply); 46344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 46444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman if ((OK != err) || (OK != (err = reply.readInt32()))) { 46544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return err; 46644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 46744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 46844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman data.read(endpoint, sizeof(*endpoint)); 46944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 47044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return err; 47144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 472071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 4739fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung virtual VolumeShaper::Status applyVolumeShaper( 4749fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung const sp<VolumeShaper::Configuration>& configuration, 4759fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung const sp<VolumeShaper::Operation>& operation) { 4769fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung Parcel data, reply; 4779fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4789fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 4799fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t tmp; 4809fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = configuration.get() == nullptr 4819fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? data.writeInt32(0) 4829fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung : (tmp = data.writeInt32(1)) != NO_ERROR 4839fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? tmp : configuration->writeToParcel(&data); 4849fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 4859fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(status); 4869fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 4879fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 4889fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = operation.get() == nullptr 4899fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? status = data.writeInt32(0) 4909fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung : (tmp = data.writeInt32(1)) != NO_ERROR 4919fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? tmp : operation->writeToParcel(&data); 4929fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 4939fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(status); 4949fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 4959fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 4969fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung int32_t remoteVolumeShaperStatus; 4979fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = remote()->transact(APPLY_VOLUME_SHAPER, data, &reply); 4989fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 4999fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = reply.readInt32(&remoteVolumeShaperStatus); 5009fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5019fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5029fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(status); 5039fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5049fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(remoteVolumeShaperStatus); 5059fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5069fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 5079fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung virtual sp<VolumeShaper::State> getVolumeShaperState(int id) { 5089fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung Parcel data, reply; 5099fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 5109fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 5119fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung data.writeInt32(id); 5129fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = remote()->transact(GET_VOLUME_SHAPER_STATE, data, &reply); 5139fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5149fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return nullptr; 5159fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5169fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::State> state = new VolumeShaper::State(); 5179fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = state->readFromParcel(reply); 5189fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5199fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return nullptr; 5209fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5219fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return state; 5229fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5239fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 524071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania // ModDrm 525071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t prepareDrm(const uint8_t uuid[16], const int mode) 526071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 527071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 528071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 529071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 530071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.write(uuid, 16); 531071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInt32(mode); 532071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 533071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(PREPARE_DRM, data, &reply); 534071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 535071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("prepareDrm: binder call failed: %d", status); 536071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 537071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 538071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 539071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 540071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 541071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 542071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t releaseDrm() 543071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 544071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 545071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 546071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 547071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(RELEASE_DRM, data, &reply); 548071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 549071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("releaseDrm: binder call failed: %d", status); 550071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 551071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 552071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 553071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 554071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 555071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 556071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t getKeyRequest(Vector<uint8_t> const& scope, String8 const& mimeType, 557071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania DrmPlugin::KeyType keyType, KeyedVector<String8, String8>& optionalParameters, 558071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Vector<uint8_t>& request, String8& defaultUrl, 559071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania DrmPlugin::KeyRequestType& keyRequestType) 560071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 561071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 562071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 563071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 564071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania writeVector(data, scope); 565071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeString8(mimeType); 566071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInt32((int32_t)keyType); 567071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 568071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeUint32(optionalParameters.size()); 569071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania for (size_t i = 0; i < optionalParameters.size(); ++i) { 570071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeString8(optionalParameters.keyAt(i)); 571071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeString8(optionalParameters.valueAt(i)); 572071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 573071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 574071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(GET_KEY_REQUEST, data, &reply); 575071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 576071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("getKeyRequest: binder call failed: %d", status); 577071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 578071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 579071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 580071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania readVector(reply, request); 581071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania defaultUrl = reply.readString8(); 582071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania keyRequestType = (DrmPlugin::KeyRequestType)reply.readInt32(); 583071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 584071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 585071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 586071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 587071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t provideKeyResponse(Vector<uint8_t>& releaseKeySetId, Vector<uint8_t>& response, 588071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Vector<uint8_t> &keySetId) 589071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 590071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 591071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 592071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 593071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania writeVector(data, releaseKeySetId); 594071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania writeVector(data, response); 595071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 596071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(PROVIDE_KEY_RESPONSE, data, &reply); 597071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 598071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("provideKeyResponse: binder call failed: %d", status); 599071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 600071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 601071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 602071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania readVector(reply, keySetId); 603071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 604071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 605071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 606071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 607071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t restoreKeys(Vector<uint8_t> const& keySetId) 608071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 609071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 610071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 611071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 612071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania writeVector(data, keySetId); 613071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 614071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(RESTORE_KEYS, data, &reply); 615071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 616071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("restoreKeys: binder call failed: %d", status); 617071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 618071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 619071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 620071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 621071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 622071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 623071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t getDrmPropertyString(String8 const& name, String8& value) 624071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 625071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 626071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 627071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 628071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeString8(name); 629071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(GET_DRM_PROPERTY_STRING, data, &reply); 630071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 631071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("getDrmPropertyString: binder call failed: %d", status); 632071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 633071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 634071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 635071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania value = reply.readString8(); 636071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 637071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 638071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 639071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t setDrmPropertyString(String8 const& name, String8 const& value) 640071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 641071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 642071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 643071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 644071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeString8(name); 645071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeString8(value); 646071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(SET_DRM_PROPERTY_STRING, data, &reply); 647071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 648071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("setDrmPropertyString: binder call failed: %d", status); 649071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 650071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 651071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 652071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 653071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 65489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 65589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 65656f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer"); 65789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 65889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 65989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 66089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayer::onTransact( 66189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 66289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 663e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 66489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DISCONNECT: { 66589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 66689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project disconnect(); 66789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 66889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 669d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_URL: { 670d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 6711b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 6721b86fe063badb5f28c467ade39be0f4008688947Andreas Huber sp<IMediaHTTPService> httpService; 6731b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (data.readInt32()) { 6741b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService = 6751b86fe063badb5f28c467ade39be0f4008688947Andreas Huber interface_cast<IMediaHTTPService>(data.readStrongBinder()); 6761b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 6771b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 678d681bbb1767bed09415e050ba78975df214bcd68Dave Burke const char* url = data.readCString(); 6790ca02a0c2c77bf88aa7d7b7c3ec04f9153ddce93Wei Jia if (url == NULL) { 6802afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(BAD_VALUE); 6812afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia return NO_ERROR; 6822afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 683d681bbb1767bed09415e050ba78975df214bcd68Dave Burke KeyedVector<String8, String8> headers; 684d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int32_t numHeaders = data.readInt32(); 685d681bbb1767bed09415e050ba78975df214bcd68Dave Burke for (int i = 0; i < numHeaders; ++i) { 686d681bbb1767bed09415e050ba78975df214bcd68Dave Burke String8 key = data.readString8(); 687d681bbb1767bed09415e050ba78975df214bcd68Dave Burke String8 value = data.readString8(); 688d681bbb1767bed09415e050ba78975df214bcd68Dave Burke headers.add(key, value); 689d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 6901b86fe063badb5f28c467ade39be0f4008688947Andreas Huber reply->writeInt32(setDataSource( 6911b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService, url, numHeaders > 0 ? &headers : NULL)); 692d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 693d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } break; 694d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_FD: { 695d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 696d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int fd = data.readFileDescriptor(); 697d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int64_t offset = data.readInt64(); 698d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int64_t length = data.readInt64(); 699d681bbb1767bed09415e050ba78975df214bcd68Dave Burke reply->writeInt32(setDataSource(fd, offset, length)); 700d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 701d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 702d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_STREAM: { 703d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 704d681bbb1767bed09415e050ba78975df214bcd68Dave Burke sp<IStreamSource> source = 705d681bbb1767bed09415e050ba78975df214bcd68Dave Burke interface_cast<IStreamSource>(data.readStrongBinder()); 7062afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia if (source == NULL) { 7072afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(BAD_VALUE); 7082afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } else { 7092afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(setDataSource(source)); 7102afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 711d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 712d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 71399f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins case SET_DATA_SOURCE_CALLBACK: { 71499f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins CHECK_INTERFACE(IMediaPlayer, data, reply); 71599f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins sp<IDataSource> source = 71699f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins interface_cast<IDataSource>(data.readStrongBinder()); 7172afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia if (source == NULL) { 7182afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(BAD_VALUE); 7192afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } else { 7202afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(setDataSource(source)); 7212afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 72299f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins return NO_ERROR; 72399f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins } 7241173118eace0e9e347cb007f0da817cee87579edGlenn Kasten case SET_VIDEO_SURFACETEXTURE: { 7251173118eace0e9e347cb007f0da817cee87579edGlenn Kasten CHECK_INTERFACE(IMediaPlayer, data, reply); 7268ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> bufferProducer = 7278ba01021b573889802e67e029225a96f0dfa471aAndy McFadden interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); 7288ba01021b573889802e67e029225a96f0dfa471aAndy McFadden reply->writeInt32(setVideoSurfaceTexture(bufferProducer)); 7291173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return NO_ERROR; 7301173118eace0e9e347cb007f0da817cee87579edGlenn Kasten } break; 731d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia case SET_BUFFERING_SETTINGS: { 732d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 733d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia BufferingSettings buffering; 734d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia buffering.readFromParcel(&data); 735d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia reply->writeInt32(setBufferingSettings(buffering)); 736d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return NO_ERROR; 737d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } break; 738d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia case GET_DEFAULT_BUFFERING_SETTINGS: { 739d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 740d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia BufferingSettings buffering; 741d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia status_t err = getDefaultBufferingSettings(&buffering); 742d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia reply->writeInt32(err); 743d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia if (err == OK) { 744d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia buffering.writeToParcel(reply); 745d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 746d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return NO_ERROR; 747d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } break; 74889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PREPARE_ASYNC: { 74989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 75089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(prepareAsync()); 75189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 75289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 75389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case START: { 75489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 75589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(start()); 75689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 75789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 75889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STOP: { 75989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 76089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(stop()); 76189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 76289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 76389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_PLAYING: { 76489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 76589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool state; 76689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = isPlaying(&state); 76789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(state); 76889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 76989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 77089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 7713a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case SET_PLAYBACK_SETTINGS: { 7723a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar CHECK_INTERFACE(IMediaPlayer, data, reply); 7733a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AudioPlaybackRate rate = AUDIO_PLAYBACK_RATE_DEFAULT; 7743a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mSpeed = data.readFloat(); 7753a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mPitch = data.readFloat(); 7763a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mFallbackMode = (AudioTimestretchFallbackMode)data.readInt32(); 7773a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mStretchMode = (AudioTimestretchStretchMode)data.readInt32(); 7783a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(setPlaybackSettings(rate)); 7793a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return NO_ERROR; 7803a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } break; 7813a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case GET_PLAYBACK_SETTINGS: { 7829816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 7833a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AudioPlaybackRate rate = AUDIO_PLAYBACK_RATE_DEFAULT; 7843a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = getPlaybackSettings(&rate); 7853a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(err); 7863a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 7873a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(rate.mSpeed); 7883a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(rate.mPitch); 7893a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)rate.mFallbackMode); 7903a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)rate.mStretchMode); 7913a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 7923a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return NO_ERROR; 7933a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } break; 7943a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case SET_SYNC_SETTINGS: { 7953a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar CHECK_INTERFACE(IMediaPlayer, data, reply); 7963a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AVSyncSettings sync; 7973a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar sync.mSource = (AVSyncSource)data.readInt32(); 7983a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar sync.mAudioAdjustMode = (AVSyncAudioAdjustMode)data.readInt32(); 7993a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar sync.mTolerance = data.readFloat(); 8003a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar float videoFpsHint = data.readFloat(); 8013a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(setSyncSettings(sync, videoFpsHint)); 8023a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return NO_ERROR; 8033a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } break; 8043a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case GET_SYNC_SETTINGS: { 8053a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar CHECK_INTERFACE(IMediaPlayer, data, reply); 8063a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AVSyncSettings sync; 8073a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar float videoFps; 8083a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = getSyncSettings(&sync, &videoFps); 8093a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(err); 8103a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 8113a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)sync.mSource); 8123a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)sync.mAudioAdjustMode); 8133a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(sync.mTolerance); 8143a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(videoFps); 8153a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 8169816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia return NO_ERROR; 8179816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia } break; 81889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PAUSE: { 81989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 82089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(pause()); 82189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 82289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 82389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SEEK_TO: { 82489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 82567b6dccfd7b59efa772a3c2c553e7382c8f9f24cWei Jia int msec = data.readInt32(); 826c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia MediaPlayerSeekMode mode = (MediaPlayerSeekMode)data.readInt32(); 827c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia reply->writeInt32(seekTo(msec, mode)); 82889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 82989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 83089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_CURRENT_POSITION: { 83189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 832892354335d49f0b9fcd10e20e0c13e3cd0f1f1cbRobert Shih int msec = 0; 83389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = getCurrentPosition(&msec); 83489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(msec); 83589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 83689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 83789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 83889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_DURATION: { 83989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 840892354335d49f0b9fcd10e20e0c13e3cd0f1f1cbRobert Shih int msec = 0; 84189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = getDuration(&msec); 84289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(msec); 84389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 84489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 84589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 84689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case RESET: { 84789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 84889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(reset()); 84989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 85089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 85189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_AUDIO_STREAM_TYPE: { 85289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 853fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32(setAudioStreamType((audio_stream_type_t) data.readInt32())); 85489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 85589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 85689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_LOOPING: { 85789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 85889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(setLooping(data.readInt32())); 85989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 86089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 86189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_VOLUME: { 862172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks CHECK_INTERFACE(IMediaPlayer, data, reply); 863de162ff337723798381890151247b129c4fbe314Gloria Wang float leftVolume = data.readFloat(); 864de162ff337723798381890151247b129c4fbe314Gloria Wang float rightVolume = data.readFloat(); 865de162ff337723798381890151247b129c4fbe314Gloria Wang reply->writeInt32(setVolume(leftVolume, rightVolume)); 86689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 86789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 8681d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania case INVOKE: { 8691d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 870040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong status_t result = invoke(data, reply); 871040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong return result; 8721d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania } break; 873a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania case SET_METADATA_FILTER: { 874a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 875a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania reply->writeInt32(setMetadataFilter(data)); 876a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania return NO_ERROR; 877a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania } break; 8788e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania case GET_METADATA: { 8798e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 880de162ff337723798381890151247b129c4fbe314Gloria Wang bool update_only = static_cast<bool>(data.readInt32()); 881de162ff337723798381890151247b129c4fbe314Gloria Wang bool apply_filter = static_cast<bool>(data.readInt32()); 882de162ff337723798381890151247b129c4fbe314Gloria Wang const status_t retcode = getMetadata(update_only, apply_filter, reply); 8838e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->setDataPosition(0); 8848e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->writeInt32(retcode); 8858e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->setDataPosition(0); 8868e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return NO_ERROR; 8878e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania } break; 8882beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent case SET_AUX_EFFECT_SEND_LEVEL: { 8892beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent CHECK_INTERFACE(IMediaPlayer, data, reply); 8902beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent reply->writeInt32(setAuxEffectSendLevel(data.readFloat())); 8912beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return NO_ERROR; 8922beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } break; 8932beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent case ATTACH_AUX_EFFECT: { 8942beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent CHECK_INTERFACE(IMediaPlayer, data, reply); 8952beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent reply->writeInt32(attachAuxEffect(data.readInt32())); 8962beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return NO_ERROR; 8972beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } break; 8984f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang case SET_PARAMETER: { 8994f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang CHECK_INTERFACE(IMediaPlayer, data, reply); 9004f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang int key = data.readInt32(); 9014f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 9024f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel request; 9034f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang if (data.dataAvail() > 0) { 9044f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang request.appendFrom( 9054f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail()); 9064f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 9074f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang request.setDataPosition(0); 9084f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang reply->writeInt32(setParameter(key, request)); 9094f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return NO_ERROR; 9104f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } break; 9114f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang case GET_PARAMETER: { 9124f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang CHECK_INTERFACE(IMediaPlayer, data, reply); 9134f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return getParameter(data.readInt32(), reply); 9144f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } break; 915c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman case SET_RETRANSMIT_ENDPOINT: { 916c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman CHECK_INTERFACE(IMediaPlayer, data, reply); 917c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 918c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman struct sockaddr_in endpoint; 9190981df6e3db106bfb7a56a2b668c012fcc34dd2cNick Kralevich memset(&endpoint, 0, sizeof(endpoint)); 920c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman int amt = data.readInt32(); 921c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (amt == sizeof(endpoint)) { 922c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.read(&endpoint, sizeof(struct sockaddr_in)); 923c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman reply->writeInt32(setRetransmitEndpoint(&endpoint)); 924c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } else { 925c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman reply->writeInt32(setRetransmitEndpoint(NULL)); 926c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 92744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 92844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return NO_ERROR; 92944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } break; 93044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman case GET_RETRANSMIT_ENDPOINT: { 93144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman CHECK_INTERFACE(IMediaPlayer, data, reply); 93244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 93344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman struct sockaddr_in endpoint; 9340981df6e3db106bfb7a56a2b668c012fcc34dd2cNick Kralevich memset(&endpoint, 0, sizeof(endpoint)); 93544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t res = getRetransmitEndpoint(&endpoint); 93644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 93744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman reply->writeInt32(res); 93844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman reply->write(&endpoint, sizeof(endpoint)); 93944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 9406b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen return NO_ERROR; 9416b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen } break; 9426b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen case SET_NEXT_PLAYER: { 9436b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen CHECK_INTERFACE(IMediaPlayer, data, reply); 9446b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen reply->writeInt32(setNextPlayer(interface_cast<IMediaPlayer>(data.readStrongBinder()))); 94544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 946c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return NO_ERROR; 947c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } break; 948071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 9499fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung case APPLY_VOLUME_SHAPER: { 9509fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung CHECK_INTERFACE(IMediaPlayer, data, reply); 9519fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::Configuration> configuration; 9529fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::Operation> operation; 9539fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 9549fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung int32_t present; 9559fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = data.readInt32(&present); 9569fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR && present != 0) { 9579fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung configuration = new VolumeShaper::Configuration(); 9589fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = configuration->readFromParcel(data); 9599fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9609fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 9619fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = data.readInt32(&present); 9629fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9639fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR && present != 0) { 9649fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung operation = new VolumeShaper::Operation(); 9659fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = operation->readFromParcel(data); 9669fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9679fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 9689fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = (status_t)applyVolumeShaper(configuration, operation); 9699fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9709fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung reply->writeInt32(status); 9719fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return NO_ERROR; 9729fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } break; 9739fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung case GET_VOLUME_SHAPER_STATE: { 9749fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung CHECK_INTERFACE(IMediaPlayer, data, reply); 9759fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung int id; 9769fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = data.readInt32(&id); 9779fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 9789fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::State> state = getVolumeShaperState(id); 9799fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (state.get() != nullptr) { 9809fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = state->writeToParcel(reply); 9819fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9829fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9839fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return NO_ERROR; 9849fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } break; 9859fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 986071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania // ModDrm 987071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case PREPARE_DRM: { 988071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 989071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint8_t uuid[16]; 990071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.read(uuid, sizeof(uuid)); 991071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 992071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania int mode = data.readInt32(); 993071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 994071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = prepareDrm(uuid, mode); 995071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 996071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 997071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 998071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case RELEASE_DRM: { 999071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 1000071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1001071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = releaseDrm(); 1002071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 1003071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 1004071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 1005071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case GET_KEY_REQUEST: { 1006071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 1007071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1008071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Vector<uint8_t> scope; 1009071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania readVector(data, scope); 1010071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania String8 mimeType = data.readString8(); 1011071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania DrmPlugin::KeyType keyType = (DrmPlugin::KeyType)data.readInt32(); 1012071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1013071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania KeyedVector<String8, String8> optionalParameters; 1014071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t count = data.readUint32(); 1015071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania for (size_t i = 0; i < count; ++i) { 1016071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania String8 key, value; 1017071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania key = data.readString8(); 1018071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania value = data.readString8(); 1019071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania optionalParameters.add(key, value); 1020071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 1021071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1022071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Vector<uint8_t> request; 1023071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania String8 defaultUrl; 1024071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania DrmPlugin::KeyRequestType keyRequestType = DrmPlugin::kKeyRequestType_Unknown; 1025071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1026071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t result = getKeyRequest(scope, mimeType, keyType, optionalParameters, 1027071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania request, defaultUrl, keyRequestType); 1028071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1029071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania writeVector(*reply, request); 1030071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeString8(defaultUrl); 1031071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(keyRequestType); 1032071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 1033071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 1034071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 1035071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case PROVIDE_KEY_RESPONSE: { 1036071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 1037071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Vector<uint8_t> releaseKeySetId, response, keySetId; 1038071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania readVector(data, releaseKeySetId); 1039071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania readVector(data, response); 1040071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = provideKeyResponse(releaseKeySetId, response, keySetId); 1041071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania writeVector(*reply, keySetId); 1042071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 1043071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 1044071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 1045071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case RESTORE_KEYS: { 1046071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 1047071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 1048071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Vector<uint8_t> keySetId; 1049071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania readVector(data, keySetId); 1050071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = restoreKeys(keySetId); 1051071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 1052071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 1053071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 1054071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case GET_DRM_PROPERTY_STRING: { 1055071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 1056071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania String8 name, value; 1057071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania name = data.readString8(); 1058071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = getDrmPropertyString(name, value); 1059071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeString8(value); 1060071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 1061071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 1062071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 1063071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case SET_DRM_PROPERTY_STRING: { 1064071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 1065071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania String8 name, value; 1066071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania name = data.readString8(); 1067071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania value = data.readString8(); 1068071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = setDrmPropertyString(name, value); 1069071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 1070071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 1071071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 107289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 107389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 107489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 107589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 107689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 107789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 107889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 107940bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android 1080