18a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker/* 28a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * Copyright 2013, The Android Open Source Project 38a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * 48a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * Licensed under the Apache License, Version 2.0 (the "License"); 58a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * you may not use this file except in compliance with the License. 68a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * You may obtain a copy of the License at 78a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * 88a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * http://www.apache.org/licenses/LICENSE-2.0 98a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * 108a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * Unless required by applicable law or agreed to in writing, software 118a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * distributed under the License is distributed on an "AS IS" BASIS, 128a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * See the License for the specific language governing permissions and 148a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker * limitations under the License. 158a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker */ 168a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 178a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#ifndef _ANDROID_MEDIA_DRM_H_ 188a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#define _ANDROID_MEDIA_DRM_H_ 198a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 208a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#include "jni.h" 218a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 228a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#include <media/stagefright/foundation/ABase.h> 2354cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker#include <media/IDrm.h> 2454cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker#include <media/IDrmClient.h> 258a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#include <utils/Errors.h> 268a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#include <utils/RefBase.h> 278a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 288a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinkernamespace android { 298a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 308a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinkerstruct IDrm; 318a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 3254cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinkerclass DrmListener: virtual public RefBase 3354cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker{ 3454cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinkerpublic: 3554cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker virtual void notify(DrmPlugin::EventType eventType, int extra, 3654cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker const Parcel *obj) = 0; 3754cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker}; 3854cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker 3954cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinkerstruct JDrm : public BnDrmClient { 407cda491321b9bd2e8faf956824312ea6a30e6457Jeff Tinker static bool IsCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType); 418a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 428a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker JDrm(JNIEnv *env, jobject thiz, const uint8_t uuid[16]); 438a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 448a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker status_t initCheck() const; 458a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker sp<IDrm> getDrm() { return mDrm; } 468a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 4754cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker void notify(DrmPlugin::EventType, int extra, const Parcel *obj); 4854cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker status_t setListener(const sp<DrmListener>& listener); 4954cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker 50600071ca78bb3fa52b4b3e04112ed6664ffe0e30Jeff Tinker void disconnect(); 51600071ca78bb3fa52b4b3e04112ed6664ffe0e30Jeff Tinker 528a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinkerprotected: 538a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker virtual ~JDrm(); 548a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 558a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinkerprivate: 568a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker jweak mObject; 578a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker sp<IDrm> mDrm; 588a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 5954cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker sp<DrmListener> mListener; 6054cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker Mutex mNotifyLock; 6154cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker Mutex mLock; 6254cfbd6dc28334119c33b6a77779bfe244c71e69Jeff Tinker 638a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker static sp<IDrm> MakeDrm(); 648a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker static sp<IDrm> MakeDrm(const uint8_t uuid[16]); 658a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 668a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker DISALLOW_EVIL_CONSTRUCTORS(JDrm); 678a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker}; 688a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 698a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker} // namespace android 708a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker 718a0c80fdcc46faa8cb8c9f4dda06f4b63ec2f906Jeff Tinker#endif // _ANDROID_MEDIA_DRM_H_ 72