1c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount/*
2c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * Copyright (C) 2012 The Android Open Source Project
3c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *
4c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * you may not use this file except in compliance with the License.
6c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * You may obtain a copy of the License at
7c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *
8c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *
10c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * Unless required by applicable law or agreed to in writing, software
11c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * See the License for the specific language governing permissions and
14c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * limitations under the License.
15c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount */
16c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
17c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount#ifndef HDCP_H_
18c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
19c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount#define HDCP_H_
20c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
21c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount#include <media/IHDCP.h>
22c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount#include <utils/Mutex.h>
23c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
24c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountnamespace android {
25c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
26c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountstruct HDCP : public BnHDCP {
27c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    explicit HDCP(bool createEncryptionModule);
28c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual ~HDCP();
29c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
30c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual status_t setObserver(const sp<IHDCPObserver> &observer);
31c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual status_t initAsync(const char *host, unsigned port);
32c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual status_t shutdownAsync();
33c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual uint32_t getCaps();
34c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
35c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual status_t encrypt(
36c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            const void *inData, size_t size, uint32_t streamCTR,
37c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            uint64_t *outInputCTR, void *outData);
38c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
39c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual status_t encryptNative(
40c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            const sp<GraphicBuffer> &graphicBuffer,
41c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            size_t offset, size_t size, uint32_t streamCTR,
42c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            uint64_t *outInputCTR, void *outData);
43c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
44c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    virtual status_t decrypt(
45c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            const void *inData, size_t size,
46c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            uint32_t streamCTR, uint64_t outInputCTR, void *outData);
47c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
48c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountprivate:
49c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    Mutex mLock;
50c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
51c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    bool mIsEncryptionModule;
52c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
53c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    void *mLibHandle;
54c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    HDCPModule *mHDCPModule;
55c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    sp<IHDCPObserver> mObserver;
56c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
57c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    static void ObserveWrapper(void *me, int msg, int ext1, int ext2);
58c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    void observe(int msg, int ext1, int ext2);
59c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
60c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    DISALLOW_EVIL_CONSTRUCTORS(HDCP);
61c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount};
62c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
63c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount}  // namespace android
64c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
65c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount#endif  // HDCP_H_
66c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
67c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount