18240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber/*
28240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * Copyright 2012, The Android Open Source Project
38240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber *
48240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
58240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * you may not use this file except in compliance with the License.
68240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * You may obtain a copy of the License at
78240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber *
88240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber *     http://www.apache.org/licenses/LICENSE-2.0
98240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber *
108240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * Unless required by applicable law or agreed to in writing, software
118240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
128240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * See the License for the specific language governing permissions and
148240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber * limitations under the License.
158240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber */
168240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
178240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#ifndef _ANDROID_MEDIA_CRYPTO_H_
188240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#define _ANDROID_MEDIA_CRYPTO_H_
198240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
208240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#include "jni.h"
218240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
228240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#include <media/stagefright/foundation/ABase.h>
238240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#include <utils/Errors.h>
248240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#include <utils/RefBase.h>
258240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
268240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Hubernamespace android {
278240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
288240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huberstruct ICrypto;
298240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
308240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huberstruct JCrypto : public RefBase {
318240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    static bool IsCryptoSchemeSupported(const uint8_t uuid[16]);
328240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
338240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    JCrypto(JNIEnv *env, jobject thiz,
348240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber            const uint8_t uuid[16], const void *initData, size_t initSize);
358240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
368240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    status_t initCheck() const;
378240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
388240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    bool requiresSecureDecoderComponent(const char *mime) const;
398240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
408240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    static sp<ICrypto> GetCrypto(JNIEnv *env, jobject obj);
418240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
428240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huberprotected:
438240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    virtual ~JCrypto();
448240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
458240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huberprivate:
468240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    jweak mObject;
478240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    sp<ICrypto> mCrypto;
488240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
498240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    static sp<ICrypto> MakeCrypto();
508240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
518240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    static sp<ICrypto> MakeCrypto(
528240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber            const uint8_t uuid[16], const void *initData, size_t initSize);
538240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
548240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(JCrypto);
558240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber};
568240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
578240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber}  // namespace android
588240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber
598240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber#endif  // _ANDROID_MEDIA_CRYPTO_H_
60