1a69729dc76b97c44387088d351480d5d0701517eJeff Tinker/* 2a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** 3a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** Copyright 2015, The Android Open Source Project 4a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** 5a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** Licensed under the Apache License, Version 2.0 (the "License"); 6a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** you may not use this file except in compliance with the License. 7a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** You may obtain a copy of the License at 8a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** 9a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** http://www.apache.org/licenses/LICENSE-2.0 10a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** 11a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** Unless required by applicable law or agreed to in writing, software 12a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** distributed under the License is distributed on an "AS IS" BASIS, 13a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** See the License for the specific language governing permissions and 15a69729dc76b97c44387088d351480d5d0701517eJeff Tinker** limitations under the License. 16a69729dc76b97c44387088d351480d5d0701517eJeff Tinker*/ 17a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 18a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <stdint.h> 19a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <sys/types.h> 20a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 21a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <binder/Parcel.h> 22a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <binder/IMemory.h> 23a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <media/ICrypto.h> 24a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <media/IDrm.h> 25a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <media/IMediaDrmService.h> 26a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 27a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <utils/Errors.h> // for status_t 28a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <utils/String8.h> 29a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 30a69729dc76b97c44387088d351480d5d0701517eJeff Tinkernamespace android { 31a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 32a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerenum { 33a69729dc76b97c44387088d351480d5d0701517eJeff Tinker MAKE_CRYPTO = IBinder::FIRST_CALL_TRANSACTION, 34a69729dc76b97c44387088d351480d5d0701517eJeff Tinker MAKE_DRM, 35a69729dc76b97c44387088d351480d5d0701517eJeff Tinker}; 36a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 37a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerclass BpMediaDrmService: public BpInterface<IMediaDrmService> 38a69729dc76b97c44387088d351480d5d0701517eJeff Tinker{ 39a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerpublic: 40a69729dc76b97c44387088d351480d5d0701517eJeff Tinker BpMediaDrmService(const sp<IBinder>& impl) 41a69729dc76b97c44387088d351480d5d0701517eJeff Tinker : BpInterface<IMediaDrmService>(impl) 42a69729dc76b97c44387088d351480d5d0701517eJeff Tinker { 43a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 44a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 45a69729dc76b97c44387088d351480d5d0701517eJeff Tinker virtual sp<ICrypto> makeCrypto() { 46a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Parcel data, reply; 47a69729dc76b97c44387088d351480d5d0701517eJeff Tinker data.writeInterfaceToken(IMediaDrmService::getInterfaceDescriptor()); 48a69729dc76b97c44387088d351480d5d0701517eJeff Tinker remote()->transact(MAKE_CRYPTO, data, &reply); 49a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return interface_cast<ICrypto>(reply.readStrongBinder()); 50a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 51a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 52a69729dc76b97c44387088d351480d5d0701517eJeff Tinker virtual sp<IDrm> makeDrm() { 53a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Parcel data, reply; 54a69729dc76b97c44387088d351480d5d0701517eJeff Tinker data.writeInterfaceToken(IMediaDrmService::getInterfaceDescriptor()); 55a69729dc76b97c44387088d351480d5d0701517eJeff Tinker remote()->transact(MAKE_DRM, data, &reply); 56a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return interface_cast<IDrm>(reply.readStrongBinder()); 57a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 58a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 59a69729dc76b97c44387088d351480d5d0701517eJeff Tinker}; 60a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 61a69729dc76b97c44387088d351480d5d0701517eJeff TinkerIMPLEMENT_META_INTERFACE(MediaDrmService, "android.media.IMediaDrmService"); 62a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 63a69729dc76b97c44387088d351480d5d0701517eJeff Tinker// ---------------------------------------------------------------------- 64a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 65a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstatus_t BnMediaDrmService::onTransact( 66a69729dc76b97c44387088d351480d5d0701517eJeff Tinker uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 67a69729dc76b97c44387088d351480d5d0701517eJeff Tinker{ 68a69729dc76b97c44387088d351480d5d0701517eJeff Tinker switch (code) { 69a69729dc76b97c44387088d351480d5d0701517eJeff Tinker case MAKE_CRYPTO: { 70a69729dc76b97c44387088d351480d5d0701517eJeff Tinker CHECK_INTERFACE(IMediaDrmService, data, reply); 71a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<ICrypto> crypto = makeCrypto(); 72a69729dc76b97c44387088d351480d5d0701517eJeff Tinker reply->writeStrongBinder(IInterface::asBinder(crypto)); 73a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return NO_ERROR; 74a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } break; 75a69729dc76b97c44387088d351480d5d0701517eJeff Tinker case MAKE_DRM: { 76a69729dc76b97c44387088d351480d5d0701517eJeff Tinker CHECK_INTERFACE(IMediaDrmService, data, reply); 77a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<IDrm> drm = makeDrm(); 78a69729dc76b97c44387088d351480d5d0701517eJeff Tinker reply->writeStrongBinder(IInterface::asBinder(drm)); 79a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return NO_ERROR; 80a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } break; 81a69729dc76b97c44387088d351480d5d0701517eJeff Tinker default: 82a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return BBinder::onTransact(code, data, reply, flags); 83a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 84a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 85a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 86a69729dc76b97c44387088d351480d5d0701517eJeff Tinker// ---------------------------------------------------------------------------- 87a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 88a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} // namespace android 89