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