1d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang/*
2d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * Copyright 2017, The Android Open Source Project
3d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang *
4d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * you may not use this file except in compliance with the License.
6d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * You may obtain a copy of the License at
7d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang *
8d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang *     http://www.apache.org/licenses/LICENSE-2.0
9d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang *
10d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * Unless required by applicable law or agreed to in writing, software
11d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * See the License for the specific language governing permissions and
14d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang * limitations under the License.
15d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang */
16d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
17d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#ifndef _ANDROID_MEDIA_DESCRAMBLER_H_
18d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#define _ANDROID_MEDIA_DESCRAMBLER_H_
19d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
20d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#include "jni.h"
21d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
22dadee0c33e6cb659978ce4fa6aa21f7c384fc43cChong Zhang#include <binder/Status.h>
23d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#include <media/cas/DescramblerAPI.h>
24d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#include <media/stagefright/foundation/ABase.h>
25d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#include <utils/Mutex.h>
26d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#include <utils/RefBase.h>
27d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
28d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangnamespace android {
29d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangclass IMemory;
30d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangclass MemoryDealer;
31d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangnamespace media {
32d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangclass IDescrambler;
33d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang};
34d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangusing namespace media;
35dadee0c33e6cb659978ce4fa6aa21f7c384fc43cChong Zhangusing binder::Status;
36d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
37d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangstruct JDescrambler : public RefBase {
38d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    JDescrambler(JNIEnv *env, jobject descramberBinderObj);
39d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
40dadee0c33e6cb659978ce4fa6aa21f7c384fc43cChong Zhang    Status descramble(
41d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            jbyte key,
42d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            size_t numSubSamples,
43d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            ssize_t totalLength,
44d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            DescramblerPlugin::SubSample *subSamples,
45d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            const void *srcPtr,
46d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            jint srcOffset,
47d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang            void *dstPtr,
48dadee0c33e6cb659978ce4fa6aa21f7c384fc43cChong Zhang            jint dstOffset,
49dadee0c33e6cb659978ce4fa6aa21f7c384fc43cChong Zhang            ssize_t *result);
50d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
51d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangprotected:
52d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    virtual ~JDescrambler();
53d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
54d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhangprivate:
55d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    sp<IDescrambler> mDescrambler;
56d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    sp<IMemory> mMem;
57d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    sp<MemoryDealer> mDealer;
58d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    Mutex mSharedMemLock;
59d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
60d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    void ensureBufferCapacity(size_t neededSize);
61d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
62d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang    DISALLOW_EVIL_CONSTRUCTORS(JDescrambler);
63d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang};
64d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
65d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang}  // namespace android
66d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang
67d5927ae8833780395f8fc5070d0a0a4f8f668292Chong Zhang#endif  // _ANDROID_MEDIA_DESCRAMBLER_H_
68