127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/* 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License. 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License. 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#ifndef __DRM_PASSTHRU_PLUGIN_H__ 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __DRM_PASSTHRU_PLUGIN_H__ 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <DrmEngineBase.h> 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android { 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmPassthruPlugIn : public DrmEngineBase { 2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmPassthruPlugIn(); 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi virtual ~DrmPassthruPlugIn(); 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprotected: 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmConstraints* onGetConstraints(int uniqueId, const String8* path, int action); 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 333473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadata* onGetMetadata(int uniqueId, const String8* path); 343473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t onInitialize(int uniqueId); 3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t onSetOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener); 3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t onTerminate(int uniqueId); 4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool onCanHandle(int uniqueId, const String8& path); 4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo); 4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 452272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onSaveRights(int uniqueId, const DrmRights& drmRights, 4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const String8& rightsPath, const String8& contentPath); 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfo* onAcquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest); 4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 50bf5b3b29e31b293313788d7464cfb258ac0da803James Dong String8 onGetOriginalMimeType(int uniqueId, const String8& path, int fd); 5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int onGetDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int onCheckRightsStatus(int uniqueId, const String8& path, int action); 5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 562272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onConsumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 582272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onSetPlaybackStatus( 59a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position); 6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool onValidateAction( 6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int uniqueId, const String8& path, int action, const ActionDescription& description); 6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 642272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onRemoveRights(int uniqueId, const String8& path); 6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 662272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onRemoveAllRights(int uniqueId); 6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 682272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onOpenConvertSession(int uniqueId, int convertId); 6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmConvertedStatus* onConvertData(int uniqueId, int convertId, const DrmBuffer* inputData); 7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId); 7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmSupportInfo* onGetSupportInfo(int uniqueId); 7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t onOpenDecryptSession( 77a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length); 7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 79e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi status_t onOpenDecryptSession( 80e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi int uniqueId, DecryptHandle* decryptHandle, const char* uri); 81e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi 822272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 842272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onInitializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int decryptUnitId, const DrmBuffer* headerInfo); 8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 872272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 882272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV); 8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 902272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t onFinalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi ssize_t onPread(int uniqueId, DecryptHandle* decryptHandle, 93a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang void* buffer, ssize_t numBytes, off64_t offset); 9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DecryptHandle* openDecryptSessionImpl(); 9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __DRM_PASSTHRU_PLUGIN_H__ */ 10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 103