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 388cf3a0788df2ee184b498086b1b8da322eeadccaIvan Lozanousing media::VolumeShaper; 398cf3a0788df2ee184b498086b1b8da322eeadccaIvan Lozano 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum { 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, 42d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_URL, 43d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_FD, 44d681bbb1767bed09415e050ba78975df214bcd68Dave Burke SET_DATA_SOURCE_STREAM, 4599f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins SET_DATA_SOURCE_CALLBACK, 46d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia SET_BUFFERING_SETTINGS, 479bb3803a80a680ea7a3bc11e07b8a89ccddee003Wei Jia GET_BUFFERING_SETTINGS, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PREPARE_ASYNC, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project START, 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project STOP, 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project IS_PLAYING, 523a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar SET_PLAYBACK_SETTINGS, 533a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar GET_PLAYBACK_SETTINGS, 543a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar SET_SYNC_SETTINGS, 553a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar GET_SYNC_SETTINGS, 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PAUSE, 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SEEK_TO, 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_CURRENT_POSITION, 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GET_DURATION, 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project RESET, 6152c2851b30588df1aba00766c37ffde86a3345bcWei Jia NOTIFY_AT, 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_AUDIO_STREAM_TYPE, 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SET_LOOPING, 641d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania SET_VOLUME, 651d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania INVOKE, 66a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania SET_METADATA_FILTER, 678e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania GET_METADATA, 682beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent SET_AUX_EFFECT_SEND_LEVEL, 691173118eace0e9e347cb007f0da817cee87579edGlenn Kasten ATTACH_AUX_EFFECT, 701173118eace0e9e347cb007f0da817cee87579edGlenn Kasten SET_VIDEO_SURFACETEXTURE, 714f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang SET_PARAMETER, 724f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang GET_PARAMETER, 73c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman SET_RETRANSMIT_ENDPOINT, 7444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman GET_RETRANSMIT_ENDPOINT, 756b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen SET_NEXT_PLAYER, 769fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung APPLY_VOLUME_SHAPER, 779fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung GET_VOLUME_SHAPER_STATE, 78cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania // Modular DRM 79071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania PREPARE_DRM, 80071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania RELEASE_DRM, 81156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin // AudioRouting 82156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin SET_OUTPUT_DEVICE, 83156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin GET_ROUTED_DEVICE_ID, 84156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin ENABLE_AUDIO_DEVICE_CALLBACK, 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 87071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania// ModDrm helpers 88071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojaniastatic void readVector(const Parcel& reply, Vector<uint8_t>& vector) { 89071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t size = reply.readUint32(); 90071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania vector.insertAt((size_t)0, size); 91071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply.read(vector.editArray(), size); 92071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania} 93071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 94071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojaniastatic void writeVector(Parcel& data, Vector<uint8_t> const& vector) { 95071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeUint32(vector.size()); 96071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.write(vector.array(), vector.size()); 97071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania} 98071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayer: public BpInterface<IMediaPlayer> 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 102090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh explicit BpMediaPlayer(const sp<IBinder>& impl) 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayer>(impl) 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // disconnect from media player service 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void disconnect() 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(DISCONNECT, data, &reply); 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1151b86fe063badb5f28c467ade39be0f4008688947Andreas Huber status_t setDataSource( 1161b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 1171b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const char* url, 118d681bbb1767bed09415e050ba78975df214bcd68Dave Burke const KeyedVector<String8, String8>* headers) 119d681bbb1767bed09415e050ba78975df214bcd68Dave Burke { 120d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 121d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 1221b86fe063badb5f28c467ade39be0f4008688947Andreas Huber data.writeInt32(httpService != NULL); 1231b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (httpService != NULL) { 12406b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen data.writeStrongBinder(IInterface::asBinder(httpService)); 1251b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 126d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeCString(url); 127d681bbb1767bed09415e050ba78975df214bcd68Dave Burke if (headers == NULL) { 128d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt32(0); 129d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } else { 130d681bbb1767bed09415e050ba78975df214bcd68Dave Burke // serialize the headers 131d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt32(headers->size()); 132d681bbb1767bed09415e050ba78975df214bcd68Dave Burke for (size_t i = 0; i < headers->size(); ++i) { 133d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeString8(headers->keyAt(i)); 134d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeString8(headers->valueAt(i)); 135d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 136d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 137d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(SET_DATA_SOURCE_URL, data, &reply); 138d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 139d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 140d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 141d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(int fd, int64_t offset, int64_t length) { 142d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 143d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 144d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeFileDescriptor(fd); 145d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt64(offset); 146d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInt64(length); 147d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(SET_DATA_SOURCE_FD, data, &reply); 148d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 149d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 150d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 151d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(const sp<IStreamSource> &source) { 152d681bbb1767bed09415e050ba78975df214bcd68Dave Burke Parcel data, reply; 153d681bbb1767bed09415e050ba78975df214bcd68Dave Burke data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 15406b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen data.writeStrongBinder(IInterface::asBinder(source)); 1558d65510a2e9ff7b64f2f35bfe3cd745a717c9533Glenn Kasten remote()->transact(SET_DATA_SOURCE_STREAM, data, &reply); 156d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return reply.readInt32(); 157d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 158d681bbb1767bed09415e050ba78975df214bcd68Dave Burke 15999f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins status_t setDataSource(const sp<IDataSource> &source) { 16099f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins Parcel data, reply; 16199f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 16299f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins data.writeStrongBinder(IInterface::asBinder(source)); 16399f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins remote()->transact(SET_DATA_SOURCE_CALLBACK, data, &reply); 16499f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins return reply.readInt32(); 16599f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins } 16699f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins 1678ba01021b573889802e67e029225a96f0dfa471aAndy McFadden // pass the buffered IGraphicBufferProducer to the media player service 1688ba01021b573889802e67e029225a96f0dfa471aAndy McFadden status_t setVideoSurfaceTexture(const sp<IGraphicBufferProducer>& bufferProducer) 1691173118eace0e9e347cb007f0da817cee87579edGlenn Kasten { 1701173118eace0e9e347cb007f0da817cee87579edGlenn Kasten Parcel data, reply; 1711173118eace0e9e347cb007f0da817cee87579edGlenn Kasten data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 17206b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen sp<IBinder> b(IInterface::asBinder(bufferProducer)); 1731173118eace0e9e347cb007f0da817cee87579edGlenn Kasten data.writeStrongBinder(b); 1741173118eace0e9e347cb007f0da817cee87579edGlenn Kasten remote()->transact(SET_VIDEO_SURFACETEXTURE, data, &reply); 1751173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return reply.readInt32(); 1761173118eace0e9e347cb007f0da817cee87579edGlenn Kasten } 1771173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 178d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia status_t setBufferingSettings(const BufferingSettings& buffering) 179d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia { 180d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia Parcel data, reply; 181d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 182d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia buffering.writeToParcel(&data); 183d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia remote()->transact(SET_BUFFERING_SETTINGS, data, &reply); 184d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return reply.readInt32(); 185d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 186d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia 1879bb3803a80a680ea7a3bc11e07b8a89ccddee003Wei Jia status_t getBufferingSettings(BufferingSettings* buffering /* nonnull */) 188d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia { 189d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia if (buffering == nullptr) { 190d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return BAD_VALUE; 191d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 192d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia Parcel data, reply; 193d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 1949bb3803a80a680ea7a3bc11e07b8a89ccddee003Wei Jia remote()->transact(GET_BUFFERING_SETTINGS, data, &reply); 195d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia status_t err = reply.readInt32(); 196d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia if (err == OK) { 197d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia err = buffering->readFromParcel(&reply); 198d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 199d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return err; 200d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 201d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync() 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PREPARE_ASYNC, data, &reply); 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start() 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(START, data, &reply); 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop() 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(STOP, data, &reply); 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t isPlaying(bool* state) 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(IS_PLAYING, data, &reply); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *state = reply.readInt32(); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2353a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t setPlaybackSettings(const AudioPlaybackRate& rate) 2363a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar { 2373a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar Parcel data, reply; 2383a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2393a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(rate.mSpeed); 2403a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(rate.mPitch); 2413a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)rate.mFallbackMode); 2423a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)rate.mStretchMode); 2433a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(SET_PLAYBACK_SETTINGS, data, &reply); 2443a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return reply.readInt32(); 2453a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2463a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 2473a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */) 2483a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar { 2493a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar Parcel data, reply; 2503a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2513a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(GET_PLAYBACK_SETTINGS, data, &reply); 2523a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = reply.readInt32(); 2533a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 2543a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar *rate = AUDIO_PLAYBACK_RATE_DEFAULT; 2553a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mSpeed = reply.readFloat(); 2563a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mPitch = reply.readFloat(); 2573a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mFallbackMode = (AudioTimestretchFallbackMode)reply.readInt32(); 2583a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate->mStretchMode = (AudioTimestretchStretchMode)reply.readInt32(); 2593a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2603a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return err; 2613a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2623a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 2633a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t setSyncSettings(const AVSyncSettings& sync, float videoFpsHint) 2649816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia { 2659816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia Parcel data, reply; 2669816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2673a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)sync.mSource); 2683a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInt32((int32_t)sync.mAudioAdjustMode); 2693a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(sync.mTolerance); 2703a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeFloat(videoFpsHint); 2713a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(SET_SYNC_SETTINGS, data, &reply); 2729816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia return reply.readInt32(); 2739816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia } 2749816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia 2753a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t getSyncSettings(AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */) 2763a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar { 2773a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar Parcel data, reply; 2783a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 2793a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar remote()->transact(GET_SYNC_SETTINGS, data, &reply); 2803a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = reply.readInt32(); 2813a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 2823a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AVSyncSettings settings; 2833a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar settings.mSource = (AVSyncSource)reply.readInt32(); 2843a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar settings.mAudioAdjustMode = (AVSyncAudioAdjustMode)reply.readInt32(); 2853a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar settings.mTolerance = reply.readFloat(); 2863a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar *sync = settings; 2873a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar *videoFps = reply.readFloat(); 2883a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2893a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return err; 2903a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 2913a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t pause() 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(PAUSE, data, &reply); 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 300c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia status_t seekTo(int msec, MediaPlayerSeekMode mode) 30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(msec); 305c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia data.writeInt32(mode); 30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SEEK_TO, data, &reply); 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getCurrentPosition(int* msec) 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_CURRENT_POSITION, data, &reply); 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *msec = reply.readInt32(); 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration(int* msec) 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(GET_DURATION, data, &reply); 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *msec = reply.readInt32(); 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset() 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 33189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(RESET, data, &reply); 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 33652c2851b30588df1aba00766c37ffde86a3345bcWei Jia status_t notifyAt(int64_t mediaTimeUs) 33752c2851b30588df1aba00766c37ffde86a3345bcWei Jia { 33852c2851b30588df1aba00766c37ffde86a3345bcWei Jia Parcel data, reply; 33952c2851b30588df1aba00766c37ffde86a3345bcWei Jia data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 34052c2851b30588df1aba00766c37ffde86a3345bcWei Jia data.writeInt64(mediaTimeUs); 34152c2851b30588df1aba00766c37ffde86a3345bcWei Jia remote()->transact(NOTIFY_AT, data, &reply); 34252c2851b30588df1aba00766c37ffde86a3345bcWei Jia return reply.readInt32(); 34352c2851b30588df1aba00766c37ffde86a3345bcWei Jia } 34452c2851b30588df1aba00766c37ffde86a3345bcWei Jia 345fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten status_t setAudioStreamType(audio_stream_type_t stream) 34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 349fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten data.writeInt32((int32_t) stream); 35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_AUDIO_STREAM_TYPE, data, &reply); 35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setLooping(int loop) 35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 35689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInt32(loop); 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_LOOPING, data, &reply); 36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 36189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 36289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 36389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVolume(float leftVolume, float rightVolume) 36489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 36589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 366172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 36789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(leftVolume); 36889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeFloat(rightVolume); 36989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(SET_VOLUME, data, &reply); 37089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return reply.readInt32(); 37189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 3721d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 3731d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania status_t invoke(const Parcel& request, Parcel *reply) 374040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong { 375040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong // Avoid doing any extra copy. The interface descriptor should 376040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong // have been set by MediaPlayer.java. 3778e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return remote()->transact(INVOKE, request, reply); 3781d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania } 379a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania 380a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania status_t setMetadataFilter(const Parcel& request) 381a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania { 382a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania Parcel reply; 383a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // Avoid doing any extra copy of the request. The interface 384a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // descriptor should have been set by MediaPlayer.java. 385a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania remote()->transact(SET_METADATA_FILTER, request, &reply); 386a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania return reply.readInt32(); 387a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania } 3888e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania 3898e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania status_t getMetadata(bool update_only, bool apply_filter, Parcel *reply) 3908e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania { 3918e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania Parcel request; 3928e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 3938e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania // TODO: Burning 2 ints for 2 boolean. Should probably use flags in an int here. 3948e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInt32(update_only); 3958e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania request.writeInt32(apply_filter); 3968e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania remote()->transact(GET_METADATA, request, reply); 3978e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return reply->readInt32(); 3988e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania } 3994e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber 4002beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t setAuxEffectSendLevel(float level) 4012beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent { 4022beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent Parcel data, reply; 4032beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4042beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeFloat(level); 4052beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent remote()->transact(SET_AUX_EFFECT_SEND_LEVEL, data, &reply); 4062beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return reply.readInt32(); 4072beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } 4082beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent 4092beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t attachAuxEffect(int effectId) 4102beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent { 4112beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent Parcel data, reply; 4122beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4132beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent data.writeInt32(effectId); 4142beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent remote()->transact(ATTACH_AUX_EFFECT, data, &reply); 4152beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return reply.readInt32(); 4162beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } 4171173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 4184f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t setParameter(int key, const Parcel& request) 4194f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang { 4204f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel data, reply; 4214f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4224f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInt32(key); 4234f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang if (request.dataSize() > 0) { 4244f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.appendFrom(const_cast<Parcel *>(&request), 0, request.dataSize()); 4254f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 4264f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang remote()->transact(SET_PARAMETER, data, &reply); 4274f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return reply.readInt32(); 4284f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 4294f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 4304f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t getParameter(int key, Parcel *reply) 4314f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang { 4324f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel data; 4334f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4344f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang data.writeInt32(key); 4354f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return remote()->transact(GET_PARAMETER, data, reply); 4364f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 4374f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 43844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t setRetransmitEndpoint(const struct sockaddr_in* endpoint) 43944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman { 440c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman Parcel data, reply; 441c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman status_t err; 442c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 443c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 444c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (NULL != endpoint) { 445c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInt32(sizeof(*endpoint)); 446c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.write(endpoint, sizeof(*endpoint)); 447c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } else { 448c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.writeInt32(0); 449c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 450c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 451c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman err = remote()->transact(SET_RETRANSMIT_ENDPOINT, data, &reply); 452c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (OK != err) { 453c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return err; 454c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 4556b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen return reply.readInt32(); 4566b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen } 457c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 4586b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen status_t setNextPlayer(const sp<IMediaPlayer>& player) { 4596b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen Parcel data, reply; 4606b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 46106b46062d2f8bc82ca3061a23d197734ae51918bMarco Nelissen sp<IBinder> b(IInterface::asBinder(player)); 4626b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen data.writeStrongBinder(b); 4636b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen remote()->transact(SET_NEXT_PLAYER, data, &reply); 464c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return reply.readInt32(); 465c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 46644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 46744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t getRetransmitEndpoint(struct sockaddr_in* endpoint) 46844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman { 46944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman Parcel data, reply; 47044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t err; 47144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 47244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 47344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman err = remote()->transact(GET_RETRANSMIT_ENDPOINT, data, &reply); 47444a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 47544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman if ((OK != err) || (OK != (err = reply.readInt32()))) { 47644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return err; 47744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 47844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 47944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman data.read(endpoint, sizeof(*endpoint)); 48044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 48144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return err; 48244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 483071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 4849fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung virtual VolumeShaper::Status applyVolumeShaper( 4859fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung const sp<VolumeShaper::Configuration>& configuration, 4869fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung const sp<VolumeShaper::Operation>& operation) { 4879fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung Parcel data, reply; 4889fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 4899fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 4909fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t tmp; 4919fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = configuration.get() == nullptr 4929fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? data.writeInt32(0) 4939fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung : (tmp = data.writeInt32(1)) != NO_ERROR 4949fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? tmp : configuration->writeToParcel(&data); 4959fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 4969fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(status); 4979fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 4989fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 4999fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = operation.get() == nullptr 5009fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? status = data.writeInt32(0) 5019fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung : (tmp = data.writeInt32(1)) != NO_ERROR 5029fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung ? tmp : operation->writeToParcel(&data); 5039fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5049fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(status); 5059fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5069fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 5079fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung int32_t remoteVolumeShaperStatus; 5089fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = remote()->transact(APPLY_VOLUME_SHAPER, data, &reply); 5099fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 5109fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = reply.readInt32(&remoteVolumeShaperStatus); 5119fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5129fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5139fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(status); 5149fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5159fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return VolumeShaper::Status(remoteVolumeShaperStatus); 5169fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5179fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 5189fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung virtual sp<VolumeShaper::State> getVolumeShaperState(int id) { 5199fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung Parcel data, reply; 5209fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 5219fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 5229fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung data.writeInt32(id); 5239fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = remote()->transact(GET_VOLUME_SHAPER_STATE, data, &reply); 5249fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5259fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return nullptr; 5269fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5279fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::State> state = new VolumeShaper::State(); 5288cf3a0788df2ee184b498086b1b8da322eeadccaIvan Lozano status = state->readFromParcel(&reply); 5299fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status != NO_ERROR) { 5309fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return nullptr; 5319fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5329fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return state; 5339fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 5349fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 535cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania // Modular DRM 536cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania status_t prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId) 537071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 538071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 539071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 540071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 541071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.write(uuid, 16); 542cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania writeVector(data, drmSessionId); 543071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 544071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(PREPARE_DRM, data, &reply); 545071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 546071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("prepareDrm: binder call failed: %d", status); 547071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 548071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 549071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 550071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 551071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 552071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 553071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t releaseDrm() 554071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania { 555071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania Parcel data, reply; 556071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 557071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 558071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania status_t status = remote()->transact(RELEASE_DRM, data, &reply); 559071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania if (status != OK) { 560071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania ALOGE("releaseDrm: binder call failed: %d", status); 561071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return status; 562071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 563071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 564071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return reply.readInt32(); 565071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 566156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 567156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t setOutputDevice(audio_port_handle_t deviceId) 568156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin { 569156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin Parcel data, reply; 570156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 571156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 572156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin data.writeInt32(deviceId); 573156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 574156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t status = remote()->transact(SET_OUTPUT_DEVICE, data, &reply); 575156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (status != OK) { 576156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin ALOGE("setOutputDevice: binder call failed: %d", status); 577156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return status; 578156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 579156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 580156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return reply.readInt32(); 581156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 582156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 583156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t getRoutedDeviceId(audio_port_handle_t* deviceId) 584156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin { 585156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin Parcel data, reply; 586156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 587156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 588156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t status = remote()->transact(GET_ROUTED_DEVICE_ID, data, &reply); 589156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (status != OK) { 590156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin ALOGE("getRoutedDeviceid: binder call failed: %d", status); 591156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin *deviceId = AUDIO_PORT_HANDLE_NONE; 592156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return status; 593156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 594156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 595156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status = reply.readInt32(); 596156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (status != NO_ERROR) { 597156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin *deviceId = AUDIO_PORT_HANDLE_NONE; 598156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } else { 599156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin *deviceId = reply.readInt32(); 600156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 601156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return status; 602156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 603156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 604156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t enableAudioDeviceCallback(bool enabled) 605156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin { 606156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin Parcel data, reply; 607156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); 608156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 609156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin data.writeBool(enabled); 610156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 611156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t status = remote()->transact(ENABLE_AUDIO_DEVICE_CALLBACK, data, &reply); 612156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (status != OK) { 613156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin ALOGE("enableAudioDeviceCallback: binder call failed: %d, %d", enabled, status); 614156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return status; 615156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 616156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 617156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return reply.readInt32(); 618156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 61989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 62089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 62156f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer"); 62289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 62389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 62489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 62589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayer::onTransact( 62689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 62789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 628e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 62989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case DISCONNECT: { 63089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 63189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project disconnect(); 63289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 63389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 634d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_URL: { 635d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 6361b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 6371b86fe063badb5f28c467ade39be0f4008688947Andreas Huber sp<IMediaHTTPService> httpService; 6381b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (data.readInt32()) { 6391b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService = 6401b86fe063badb5f28c467ade39be0f4008688947Andreas Huber interface_cast<IMediaHTTPService>(data.readStrongBinder()); 6411b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 6421b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 643d681bbb1767bed09415e050ba78975df214bcd68Dave Burke const char* url = data.readCString(); 6440ca02a0c2c77bf88aa7d7b7c3ec04f9153ddce93Wei Jia if (url == NULL) { 6452afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(BAD_VALUE); 6462afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia return NO_ERROR; 6472afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 648d681bbb1767bed09415e050ba78975df214bcd68Dave Burke KeyedVector<String8, String8> headers; 649d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int32_t numHeaders = data.readInt32(); 650d681bbb1767bed09415e050ba78975df214bcd68Dave Burke for (int i = 0; i < numHeaders; ++i) { 651d681bbb1767bed09415e050ba78975df214bcd68Dave Burke String8 key = data.readString8(); 652d681bbb1767bed09415e050ba78975df214bcd68Dave Burke String8 value = data.readString8(); 653d681bbb1767bed09415e050ba78975df214bcd68Dave Burke headers.add(key, value); 654d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 6551b86fe063badb5f28c467ade39be0f4008688947Andreas Huber reply->writeInt32(setDataSource( 6561b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService, url, numHeaders > 0 ? &headers : NULL)); 657d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 658d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } break; 659d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_FD: { 660d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 661d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int fd = data.readFileDescriptor(); 662d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int64_t offset = data.readInt64(); 663d681bbb1767bed09415e050ba78975df214bcd68Dave Burke int64_t length = data.readInt64(); 664d681bbb1767bed09415e050ba78975df214bcd68Dave Burke reply->writeInt32(setDataSource(fd, offset, length)); 665d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 666d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 667d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case SET_DATA_SOURCE_STREAM: { 668d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CHECK_INTERFACE(IMediaPlayer, data, reply); 669d681bbb1767bed09415e050ba78975df214bcd68Dave Burke sp<IStreamSource> source = 670d681bbb1767bed09415e050ba78975df214bcd68Dave Burke interface_cast<IStreamSource>(data.readStrongBinder()); 6712afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia if (source == NULL) { 6722afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(BAD_VALUE); 6732afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } else { 6742afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(setDataSource(source)); 6752afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 676d681bbb1767bed09415e050ba78975df214bcd68Dave Burke return NO_ERROR; 677d681bbb1767bed09415e050ba78975df214bcd68Dave Burke } 67899f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins case SET_DATA_SOURCE_CALLBACK: { 67999f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins CHECK_INTERFACE(IMediaPlayer, data, reply); 68099f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins sp<IDataSource> source = 68199f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins interface_cast<IDataSource>(data.readStrongBinder()); 6822afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia if (source == NULL) { 6832afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(BAD_VALUE); 6842afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } else { 6852afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeInt32(setDataSource(source)); 6862afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 68799f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins return NO_ERROR; 68899f31604136d66ae10e20669fb6b5716f342bde0Chris Watkins } 6891173118eace0e9e347cb007f0da817cee87579edGlenn Kasten case SET_VIDEO_SURFACETEXTURE: { 6901173118eace0e9e347cb007f0da817cee87579edGlenn Kasten CHECK_INTERFACE(IMediaPlayer, data, reply); 6918ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> bufferProducer = 6928ba01021b573889802e67e029225a96f0dfa471aAndy McFadden interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); 6938ba01021b573889802e67e029225a96f0dfa471aAndy McFadden reply->writeInt32(setVideoSurfaceTexture(bufferProducer)); 6941173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return NO_ERROR; 6951173118eace0e9e347cb007f0da817cee87579edGlenn Kasten } break; 696d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia case SET_BUFFERING_SETTINGS: { 697d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 698d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia BufferingSettings buffering; 699d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia buffering.readFromParcel(&data); 700d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia reply->writeInt32(setBufferingSettings(buffering)); 701d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return NO_ERROR; 702d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } break; 7039bb3803a80a680ea7a3bc11e07b8a89ccddee003Wei Jia case GET_BUFFERING_SETTINGS: { 704d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 705d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia BufferingSettings buffering; 7069bb3803a80a680ea7a3bc11e07b8a89ccddee003Wei Jia status_t err = getBufferingSettings(&buffering); 707d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia reply->writeInt32(err); 708d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia if (err == OK) { 709d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia buffering.writeToParcel(reply); 710d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } 711d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia return NO_ERROR; 712d399e7e6065aa310e025ab633f633d5b4831a358Wei Jia } break; 71389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PREPARE_ASYNC: { 71489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 71589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(prepareAsync()); 71689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 71789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 71889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case START: { 71989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 72089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(start()); 72189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case STOP: { 72489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 72589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(stop()); 72689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 72789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 72889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case IS_PLAYING: { 72989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 73089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool state; 73189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = isPlaying(&state); 73289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(state); 73389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 73489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 73589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 7363a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case SET_PLAYBACK_SETTINGS: { 7373a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar CHECK_INTERFACE(IMediaPlayer, data, reply); 7383a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AudioPlaybackRate rate = AUDIO_PLAYBACK_RATE_DEFAULT; 7393a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mSpeed = data.readFloat(); 7403a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mPitch = data.readFloat(); 7413a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mFallbackMode = (AudioTimestretchFallbackMode)data.readInt32(); 7423a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar rate.mStretchMode = (AudioTimestretchStretchMode)data.readInt32(); 7433a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(setPlaybackSettings(rate)); 7443a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return NO_ERROR; 7453a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } break; 7463a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case GET_PLAYBACK_SETTINGS: { 7479816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 7483a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AudioPlaybackRate rate = AUDIO_PLAYBACK_RATE_DEFAULT; 7493a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = getPlaybackSettings(&rate); 7503a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(err); 7513a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 7523a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(rate.mSpeed); 7533a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(rate.mPitch); 7543a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)rate.mFallbackMode); 7553a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)rate.mStretchMode); 7563a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 7573a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return NO_ERROR; 7583a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } break; 7593a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case SET_SYNC_SETTINGS: { 7603a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar CHECK_INTERFACE(IMediaPlayer, data, reply); 7613a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AVSyncSettings sync; 7623a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar sync.mSource = (AVSyncSource)data.readInt32(); 7633a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar sync.mAudioAdjustMode = (AVSyncAudioAdjustMode)data.readInt32(); 7643a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar sync.mTolerance = data.readFloat(); 7653a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar float videoFpsHint = data.readFloat(); 7663a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(setSyncSettings(sync, videoFpsHint)); 7673a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar return NO_ERROR; 7683a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } break; 7693a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar case GET_SYNC_SETTINGS: { 7703a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar CHECK_INTERFACE(IMediaPlayer, data, reply); 7713a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar AVSyncSettings sync; 7723a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar float videoFps; 7733a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar status_t err = getSyncSettings(&sync, &videoFps); 7743a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32(err); 7753a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar if (err == OK) { 7763a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)sync.mSource); 7773a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeInt32((int32_t)sync.mAudioAdjustMode); 7783a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(sync.mTolerance); 7793a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar reply->writeFloat(videoFps); 7803a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar } 7819816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia return NO_ERROR; 7829816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia } break; 78389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case PAUSE: { 78489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 78589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(pause()); 78689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 78789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 78889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SEEK_TO: { 78989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 79067b6dccfd7b59efa772a3c2c553e7382c8f9f24cWei Jia int msec = data.readInt32(); 791c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia MediaPlayerSeekMode mode = (MediaPlayerSeekMode)data.readInt32(); 792c5de09127e9e0d5df7aa587be317e1487d793245Wei Jia reply->writeInt32(seekTo(msec, mode)); 79389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 79489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 79589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_CURRENT_POSITION: { 79689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 797892354335d49f0b9fcd10e20e0c13e3cd0f1f1cbRobert Shih int msec = 0; 79889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = getCurrentPosition(&msec); 79989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(msec); 80089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 80189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 80289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 80389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case GET_DURATION: { 80489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 805892354335d49f0b9fcd10e20e0c13e3cd0f1f1cbRobert Shih int msec = 0; 80689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = getDuration(&msec); 80789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(msec); 80889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(ret); 80989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 81089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 81189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case RESET: { 81289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 81389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(reset()); 81489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 81589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 81652c2851b30588df1aba00766c37ffde86a3345bcWei Jia case NOTIFY_AT: { 81752c2851b30588df1aba00766c37ffde86a3345bcWei Jia CHECK_INTERFACE(IMediaPlayer, data, reply); 81852c2851b30588df1aba00766c37ffde86a3345bcWei Jia reply->writeInt32(notifyAt(data.readInt64())); 81952c2851b30588df1aba00766c37ffde86a3345bcWei Jia return NO_ERROR; 82052c2851b30588df1aba00766c37ffde86a3345bcWei Jia } break; 82189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_AUDIO_STREAM_TYPE: { 82289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 823fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten reply->writeInt32(setAudioStreamType((audio_stream_type_t) data.readInt32())); 82489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 82589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 82689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_LOOPING: { 82789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayer, data, reply); 82889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project reply->writeInt32(setLooping(data.readInt32())); 82989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 83089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 83189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case SET_VOLUME: { 832172fb9ab347e146642234f0bd6f223d351e9fd0bDave Sparks CHECK_INTERFACE(IMediaPlayer, data, reply); 833de162ff337723798381890151247b129c4fbe314Gloria Wang float leftVolume = data.readFloat(); 834de162ff337723798381890151247b129c4fbe314Gloria Wang float rightVolume = data.readFloat(); 835de162ff337723798381890151247b129c4fbe314Gloria Wang reply->writeInt32(setVolume(leftVolume, rightVolume)); 83689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 83789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 8381d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania case INVOKE: { 8391d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 840040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong status_t result = invoke(data, reply); 841040e4a14ef9cafd5d08d9a180e6237fb79687995James Dong return result; 8421d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania } break; 843a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania case SET_METADATA_FILTER: { 844a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 845a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania reply->writeInt32(setMetadataFilter(data)); 846a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania return NO_ERROR; 847a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania } break; 8488e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania case GET_METADATA: { 8498e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania CHECK_INTERFACE(IMediaPlayer, data, reply); 850de162ff337723798381890151247b129c4fbe314Gloria Wang bool update_only = static_cast<bool>(data.readInt32()); 851de162ff337723798381890151247b129c4fbe314Gloria Wang bool apply_filter = static_cast<bool>(data.readInt32()); 852de162ff337723798381890151247b129c4fbe314Gloria Wang const status_t retcode = getMetadata(update_only, apply_filter, reply); 8538e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->setDataPosition(0); 8548e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->writeInt32(retcode); 8558e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania reply->setDataPosition(0); 8568e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania return NO_ERROR; 8578e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania } break; 8582beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent case SET_AUX_EFFECT_SEND_LEVEL: { 8592beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent CHECK_INTERFACE(IMediaPlayer, data, reply); 8602beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent reply->writeInt32(setAuxEffectSendLevel(data.readFloat())); 8612beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return NO_ERROR; 8622beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } break; 8632beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent case ATTACH_AUX_EFFECT: { 8642beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent CHECK_INTERFACE(IMediaPlayer, data, reply); 8652beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent reply->writeInt32(attachAuxEffect(data.readInt32())); 8662beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent return NO_ERROR; 8672beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent } break; 8684f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang case SET_PARAMETER: { 8694f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang CHECK_INTERFACE(IMediaPlayer, data, reply); 8704f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang int key = data.readInt32(); 8714f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 8724f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang Parcel request; 8734f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang if (data.dataAvail() > 0) { 8744f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang request.appendFrom( 8754f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail()); 8764f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 8774f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang request.setDataPosition(0); 8784f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang reply->writeInt32(setParameter(key, request)); 8794f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return NO_ERROR; 8804f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } break; 8814f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang case GET_PARAMETER: { 8824f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang CHECK_INTERFACE(IMediaPlayer, data, reply); 8834f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return getParameter(data.readInt32(), reply); 8844f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } break; 885c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman case SET_RETRANSMIT_ENDPOINT: { 886c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman CHECK_INTERFACE(IMediaPlayer, data, reply); 887c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 888c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman struct sockaddr_in endpoint; 8890981df6e3db106bfb7a56a2b668c012fcc34dd2cNick Kralevich memset(&endpoint, 0, sizeof(endpoint)); 890c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman int amt = data.readInt32(); 891c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman if (amt == sizeof(endpoint)) { 892c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman data.read(&endpoint, sizeof(struct sockaddr_in)); 893c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman reply->writeInt32(setRetransmitEndpoint(&endpoint)); 894c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } else { 895c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman reply->writeInt32(setRetransmitEndpoint(NULL)); 896c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 89744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 89844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return NO_ERROR; 89944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } break; 90044a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman case GET_RETRANSMIT_ENDPOINT: { 90144a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman CHECK_INTERFACE(IMediaPlayer, data, reply); 90244a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 90344a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman struct sockaddr_in endpoint; 9040981df6e3db106bfb7a56a2b668c012fcc34dd2cNick Kralevich memset(&endpoint, 0, sizeof(endpoint)); 90544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman status_t res = getRetransmitEndpoint(&endpoint); 90644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 90744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman reply->writeInt32(res); 90844a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman reply->write(&endpoint, sizeof(endpoint)); 90944a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 9106b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen return NO_ERROR; 9116b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen } break; 9126b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen case SET_NEXT_PLAYER: { 9136b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen CHECK_INTERFACE(IMediaPlayer, data, reply); 9146b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen reply->writeInt32(setNextPlayer(interface_cast<IMediaPlayer>(data.readStrongBinder()))); 91544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman 916c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return NO_ERROR; 917c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } break; 918071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 9199fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung case APPLY_VOLUME_SHAPER: { 9209fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung CHECK_INTERFACE(IMediaPlayer, data, reply); 9219fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::Configuration> configuration; 9229fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::Operation> operation; 9239fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 9249fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung int32_t present; 9259fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = data.readInt32(&present); 9269fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR && present != 0) { 9279fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung configuration = new VolumeShaper::Configuration(); 9288cf3a0788df2ee184b498086b1b8da322eeadccaIvan Lozano status = configuration->readFromParcel(&data); 9299fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9309fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 9319fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = data.readInt32(&present); 9329fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9339fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR && present != 0) { 9349fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung operation = new VolumeShaper::Operation(); 9358cf3a0788df2ee184b498086b1b8da322eeadccaIvan Lozano status = operation->readFromParcel(&data); 9369fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9379fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 9389fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = (status_t)applyVolumeShaper(configuration, operation); 9399fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9409fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung reply->writeInt32(status); 9419fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return NO_ERROR; 9429fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } break; 9439fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung case GET_VOLUME_SHAPER_STATE: { 9449fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung CHECK_INTERFACE(IMediaPlayer, data, reply); 9459fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung int id; 9469fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status_t status = data.readInt32(&id); 9479fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (status == NO_ERROR) { 9489fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung sp<VolumeShaper::State> state = getVolumeShaperState(id); 9499fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung if (state.get() != nullptr) { 9509fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung status = state->writeToParcel(reply); 9519fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9529fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } 9539fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung return NO_ERROR; 9549fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung } break; 9559fc8b5cd4a64ef07e84c69112461324d5c13a0b0Andy Hung 956cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania // Modular DRM 957071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case PREPARE_DRM: { 958071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 959cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania 960071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint8_t uuid[16]; 961071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania data.read(uuid, sizeof(uuid)); 962cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania Vector<uint8_t> drmSessionId; 963cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania readVector(data, drmSessionId); 964071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 965cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania uint32_t result = prepareDrm(uuid, drmSessionId); 966071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 967071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 968071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 969071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania case RELEASE_DRM: { 970071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania CHECK_INTERFACE(IMediaPlayer, data, reply); 971071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania 972071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania uint32_t result = releaseDrm(); 973071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania reply->writeInt32(result); 974071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania return OK; 975071437a2005e39969983ec619a4c7bc54c2dc5a9Hassan Shojania } 976156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 977156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin // AudioRouting 978156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin case SET_OUTPUT_DEVICE: { 979156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin CHECK_INTERFACE(IMediaPlayer, data, reply); 980156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin int deviceId; 981156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t status = data.readInt32(&deviceId); 982156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (status == NO_ERROR) { 983156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin reply->writeInt32(setOutputDevice(deviceId)); 984156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } else { 985156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin reply->writeInt32(BAD_VALUE); 986156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 987156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return NO_ERROR; 988156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 989156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin case GET_ROUTED_DEVICE_ID: { 990156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin CHECK_INTERFACE(IMediaPlayer, data, reply); 991156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin audio_port_handle_t deviceId; 992156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t ret = getRoutedDeviceId(&deviceId); 993156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin reply->writeInt32(ret); 994156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (ret == NO_ERROR) { 995156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin reply->writeInt32(deviceId); 996156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 997156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return NO_ERROR; 998156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } break; 999156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin case ENABLE_AUDIO_DEVICE_CALLBACK: { 1000156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin CHECK_INTERFACE(IMediaPlayer, data, reply); 1001156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin bool enabled; 1002156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin status_t status = data.readBool(&enabled); 1003156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin if (status == NO_ERROR) { 1004156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin reply->writeInt32(enableAudioDeviceCallback(enabled)); 1005156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } else { 1006156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin reply->writeInt32(BAD_VALUE); 1007156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } 1008156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin return NO_ERROR; 1009156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin } break; 1010156c6873a5e69af71f3c28b236c5831b9cb2ac95jiabin 101189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 101289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 101389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 101489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 101589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 101689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 101789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 101840bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android 1019