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