189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Copyright 2008, The Android Open Source Project 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** you may not use this file except in compliance with the License. 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** You may obtain a copy of the License at 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** See the License for the specific language governing permissions and 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project*/ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h> 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <binder/Parcel.h> 227562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 2359451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber#include <media/IHDCP.h> 241381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar#include <media/IMediaCodecList.h> 251b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <media/IMediaHTTPService.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h> 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/IOMX.h> 292013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <media/IRemoteDisplay.h> 302013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#include <media/IRemoteDisplayClient.h> 31e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber#include <media/IStreamSource.h> 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/Errors.h> // for status_t 342013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown#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 { 39d681bbb1767bed09415e050ba78975df214bcd68Dave Burke CREATE = IBinder::FIRST_CALL_TRANSACTION, 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_MEDIA_RECORDER, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CREATE_METADATA_RETRIEVER, 42260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen GET_OMX, 4359451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber MAKE_HDCP, 447cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang ADD_BATTERY_DATA, 452013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown PULL_BATTERY_DATA, 462013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown LISTEN_FOR_REMOTE_DISPLAY, 471381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar GET_CODEC_LIST, 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BpMediaPlayerService: public BpInterface<IMediaPlayerService> 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project BpMediaPlayerService(const sp<IBinder>& impl) 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project : BpInterface<IMediaPlayerService>(impl) 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 58f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten virtual sp<IMediaMetadataRetriever> createMetadataRetriever() 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply); 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 662db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual sp<IMediaPlayer> create( 67d848eb48c121c119e8ba7583efc75415fe102570Glenn Kasten const sp<IMediaPlayerClient>& client, audio_session_t audioSessionId) { 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 70f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen data.writeStrongBinder(IInterface::asBinder(client)); 71a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent data.writeInt32(audioSessionId); 722db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 73d681bbb1767bed09415e050ba78975df214bcd68Dave Burke remote()->transact(CREATE, data, &reply); 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 77be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov virtual sp<IMediaRecorder> createMediaRecorder(const String16 &opPackageName) 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Parcel data, reply; 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 81be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov data.writeString16(opPackageName); 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project remote()->transact(CREATE_MEDIA_RECORDER, data, &reply); 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return interface_cast<IMediaRecorder>(reply.readStrongBinder()); 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 86260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen virtual sp<IOMX> getOMX() { 87260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen Parcel data, reply; 88260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 89260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen remote()->transact(GET_OMX, data, &reply); 90260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen return interface_cast<IOMX>(reply.readStrongBinder()); 91260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen } 927cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang 93279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber virtual sp<IHDCP> makeHDCP(bool createEncryptionModule) { 9459451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber Parcel data, reply; 9559451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 96279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber data.writeInt32(createEncryptionModule); 9759451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber remote()->transact(MAKE_HDCP, data, &reply); 9859451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber return interface_cast<IHDCP>(reply.readStrongBinder()); 9959451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber } 10059451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber 1017cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang virtual void addBatteryData(uint32_t params) { 1027cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang Parcel data, reply; 1037cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1047cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInt32(params); 1057cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang remote()->transact(ADD_BATTERY_DATA, data, &reply); 1067cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } 1077cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang 1087cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang virtual status_t pullBatteryData(Parcel* reply) { 1097cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang Parcel data; 1107cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1117cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return remote()->transact(PULL_BATTERY_DATA, data, reply); 1127cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } 1132013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown 114be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov virtual sp<IRemoteDisplay> listenForRemoteDisplay(const String16 &opPackageName, 115be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov const sp<IRemoteDisplayClient>& client, const String8& iface) 1162013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown { 1172013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown Parcel data, reply; 1182013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 119be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov data.writeString16(opPackageName); 120f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen data.writeStrongBinder(IInterface::asBinder(client)); 1212013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown data.writeString8(iface); 1222013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown remote()->transact(LISTEN_FOR_REMOTE_DISPLAY, data, &reply); 1232013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown return interface_cast<IRemoteDisplay>(reply.readStrongBinder()); 1242013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown } 1251381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar 1261381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar virtual sp<IMediaCodecList> getCodecList() const { 1271381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar Parcel data, reply; 1281381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 1291381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar remote()->transact(GET_CODEC_LIST, data, &reply); 1301381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar return interface_cast<IMediaCodecList>(reply.readStrongBinder()); 1311381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar } 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13456f0cc533a38bdb84bc03adcb43515614ab21baenikoIMPLEMENT_META_INTERFACE(MediaPlayerService, "android.media.IMediaPlayerService"); 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------- 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t BnMediaPlayerService::onTransact( 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 141e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten switch (code) { 142d681bbb1767bed09415e050ba78975df214bcd68Dave Burke case CREATE: { 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1442db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber sp<IMediaPlayerClient> client = 1452db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 146d848eb48c121c119e8ba7583efc75415fe102570Glenn Kasten audio_session_t audioSessionId = (audio_session_t) data.readInt32(); 147f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten sp<IMediaPlayer> player = create(client, audioSessionId); 148f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(player)); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_MEDIA_RECORDER: { 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 153be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov const String16 opPackageName = data.readString16(); 154be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov sp<IMediaRecorder> recorder = createMediaRecorder(opPackageName); 155f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(recorder)); 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case CREATE_METADATA_RETRIEVER: { 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 160f37971f624164c3ed185d3f976404a6f60f49b9aGlenn Kasten sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(); 161f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(retriever)); 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } break; 164260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen case GET_OMX: { 165260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen CHECK_INTERFACE(IMediaPlayerService, data, reply); 166260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen sp<IOMX> omx = getOMX(); 167260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(omx)); 168260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen return NO_ERROR; 169260e56c9a17737bf280d776797d6dee411c9b4daMarco Nelissen } break; 17059451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber case MAKE_HDCP: { 17159451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 172279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber bool createEncryptionModule = data.readInt32(); 173279dcd89ab1d2de91dfe95e461412a0f577a6891Andreas Huber sp<IHDCP> hdcp = makeHDCP(createEncryptionModule); 174f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(hdcp)); 17559451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber return NO_ERROR; 17659451f8ced48874427ff1550391c4f3cd2ba2e35Andreas Huber } break; 1777cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang case ADD_BATTERY_DATA: { 1787cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 1797cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang uint32_t params = data.readInt32(); 1807cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang addBatteryData(params); 1817cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return NO_ERROR; 1827cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } break; 1837cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang case PULL_BATTERY_DATA: { 1847cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 1857cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang pullBatteryData(reply); 1867cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang return NO_ERROR; 1877cf180c9bff69e5cc4a2f4e53b432db45ebbebabGloria Wang } break; 1882013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown case LISTEN_FOR_REMOTE_DISPLAY: { 1892013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown CHECK_INTERFACE(IMediaPlayerService, data, reply); 190be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov const String16 opPackageName = data.readString16(); 1912013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown sp<IRemoteDisplayClient> client( 1922013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown interface_cast<IRemoteDisplayClient>(data.readStrongBinder())); 1932afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia if (client == NULL) { 1942afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia reply->writeStrongBinder(NULL); 1952afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia return NO_ERROR; 1962afac0c7c42560ff5b8f133c6074b7e023279d6dWei Jia } 1972013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown String8 iface(data.readString8()); 198be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov sp<IRemoteDisplay> display(listenForRemoteDisplay(opPackageName, client, iface)); 199f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(display)); 2002013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown return NO_ERROR; 2012013a54981d4ffb036dff279b88cc9f08c0ee1c2Jeff Brown } break; 2021381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar case GET_CODEC_LIST: { 2031381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar CHECK_INTERFACE(IMediaPlayerService, data, reply); 2041381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar sp<IMediaCodecList> mcl = getCodecList(); 205f888020c6e2735624f2b2a30e72aca24e17b8b4dMarco Nelissen reply->writeStrongBinder(IInterface::asBinder(mcl)); 2061381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar return NO_ERROR; 2071381d4b5c0385aec3741073e5998773b064c1fb0Lajos Molnar } break; 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21540bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android 216