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
424d1d84e8a05a35673d76db0eb4f7954015a24d18Edwin Wong    JDrm(JNIEnv *env, jobject thiz, const uint8_t uuid[16], const String8 &appPackageName);
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();
644d1d84e8a05a35673d76db0eb4f7954015a24d18Edwin Wong    static sp<IDrm> MakeDrm(const uint8_t uuid[16], const String8 &appPackageName);
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