DrmEngineBase.h revision a2cd44cb5067b4fe98794860690394254d3ac73c
1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger/* 2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Copyright (C) 2010 The Android Open Source Project 3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 4aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Licensed under the Apache License, Version 2.0 (the "License"); 5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * you may not use this file except in compliance with the License. 6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * You may obtain a copy of the License at 7aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * http://www.apache.org/licenses/LICENSE-2.0 9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Unless required by applicable law or agreed to in writing, software 11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * distributed under the License is distributed on an "AS IS" BASIS, 12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * See the License for the specific language governing permissions and 14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * limitations under the License. 15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 17aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef __DRM_ENGINE_BASE_H__ 18aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define __DRM_ENGINE_BASE_H__ 19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 20aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <drm/drm_framework_common.h> 21aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "IDrmEngine.h" 22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingernamespace android { 24aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 25aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger/** 26aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * This class is an interface for plug-in developers 27aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 285dfe556188df2a3b2bfe73c8bc3b3b9216171a93osdl.org!shemminger * Responsibility of this class is control the sequence of actual plug-in. 29aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * All each plug-in developer has to do is implement onXXX() type virtual interfaces. 3090f93024a0818dc691138d8401721e797004b042shemminger */ 3190f93024a0818dc691138d8401721e797004b042shemmingerclass DrmEngineBase : public IDrmEngine { 3290f93024a0818dc691138d8401721e797004b042shemmingerpublic: 33aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger DrmEngineBase(); 34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual ~DrmEngineBase(); 35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 364094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerpublic: 37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger DrmConstraints* getConstraints(int uniqueId, const String8* path, int action); 38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t initialize(int uniqueId); 40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 41aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t setOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener); 42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 43aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t terminate(int uniqueId); 44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger bool canHandle(int uniqueId, const String8& path); 46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo); 48aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 49aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t saveRights(int uniqueId, const DrmRights& drmRights, 505a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson const String8& rightsPath, const String8& contentPath); 515a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 525a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest); 535a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 545a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson String8 getOriginalMimeType(int uniqueId, const String8& path); 555a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 565a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 575a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 585a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson int checkRightsStatus(int uniqueId, const String8& path, int action); 595a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 605a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 615a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 625a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t setPlaybackStatus( 635a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position); 645a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 655a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson bool validateAction( 665a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson int uniqueId, const String8& path, int action, const ActionDescription& description); 675a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 685a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t removeRights(int uniqueId, const String8& path); 695a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 705a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t removeAllRights(int uniqueId); 715a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 725a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t openConvertSession(int uniqueId, int convertId); 735a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 745a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData); 755a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 765a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId); 775a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 785a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson DrmSupportInfo* getSupportInfo(int uniqueId); 795a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 805a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t openDecryptSession( 815a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length); 825a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson 835a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson status_t openDecryptSession( 845a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson int uniqueId, DecryptHandle* decryptHandle, const char* uri); 854094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger 86aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 87aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 88aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 89aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int decryptUnitId, const DrmBuffer* headerInfo); 90aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 91aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 92aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV); 93aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 94aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 95aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 96aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 97aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger void* buffer, ssize_t numBytes, off64_t offset); 98aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 9954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jonesprotected: 10054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones ///////////////////////////////////////////////////// 10154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones // Interface for plug-in developers // 10254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones // each plug-in has to implement following method // 10354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones ///////////////////////////////////////////////////// 10454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones /** 10554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Get constraint information associated with input content 10654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * 10754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] uniqueId Unique identifier for a session 10854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] path Path of the protected content 10954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] action Actions defined such as, 11054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Action::DEFAULT, Action::PLAY, etc 11154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @return DrmConstraints 11254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * key-value pairs of constraint are embedded in it 11354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @note 11454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * In case of error, return NULL 11554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones */ 11654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones virtual DrmConstraints* onGetConstraints( 11754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones int uniqueId, const String8* path, int action) = 0; 11854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones 11954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones /** 12054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Initialize plug-in 12154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * 12254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] uniqueId Unique identifier for a session 12354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @return status_t 12454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 12554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones */ 12654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones virtual status_t onInitialize(int uniqueId) = 0; 12754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones 12854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones /** 12954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Register a callback to be invoked when the caller required to 13054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * receive necessary information 13154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * 13254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] uniqueId Unique identifier for a session 13354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] infoListener Listener 13454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @return status_t 13554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 13654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones */ 13754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones virtual status_t onSetOnInfoListener( 13854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones int uniqueId, const IDrmEngine::OnInfoListener* infoListener) = 0; 13954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones 14054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones /** 14154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Terminate the plug-in 14254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * and release resource bound to plug-in 14354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * 14454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] uniqueId Unique identifier for a session 14554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @return status_t 14654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 14754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones */ 14854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones virtual status_t onTerminate(int uniqueId) = 0; 14954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones 15054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones /** 15154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Get whether the given content can be handled by this plugin or not 15254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * 15354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] uniqueId Unique identifier for a session 15454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @param[in] path Path the protected object 15554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * @return bool 15654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Returns true if this plugin can handle , false in case of not able to handle 15754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones */ 15854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones virtual bool onCanHandle(int uniqueId, const String8& path) = 0; 15954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones 16054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones /** 16154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * Executes given drm information based on its type 16254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones * 163c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] uniqueId Unique identifier for a session 164c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] drmInfo Information needs to be processed 165c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @return DrmInfoStatus 166c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * instance as a result of processing given input 167c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger */ 168c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger virtual DrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0; 169c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger 170c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger /** 171c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * Save DRM rights to specified rights path 172c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * and make association with content path 173c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * 174c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] uniqueId Unique identifier for a session 175c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] drmRights DrmRights to be saved 176c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] rightsPath File path where rights to be saved 1774094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * @param[in] contentPath File path where content was saved 178aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 179aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 180aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 181aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onSaveRights(int uniqueId, const DrmRights& drmRights, 182aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger const String8& rightspath, const String8& contentPath) = 0; 183aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 184aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 185aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Retrieves necessary information for registration, unregistration or rights 186aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * acquisition information. 187aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 188aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 189aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] drmInfoRequest Request information to retrieve drmInfo 190aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return DrmInfo 1914094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * instance as a result of processing given input 192aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 193aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual DrmInfo* onAcquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0; 194aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 195aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 196aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Retrieves the mime type embedded inside the original content 197aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 198aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 199aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] path Path of the protected content 200aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return String8 201aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns mime-type of the original content, such as "video/mpeg" 202aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 203aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual String8 onGetOriginalMimeType(int uniqueId, const String8& path) = 0; 204aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 2054094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger /** 206aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Retrieves the type of the protected object (content, rights, etc..) 207aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * using specified path or mimetype. At least one parameter should be non null 208aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * to retrieve DRM object type 209aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 210aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 211aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] path Path of the content or null. 212aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] mimeType Mime type of the content or null. 213aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return type of the DRM content, 214aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT 215aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 216aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual int onGetDrmObjectType( 217aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int uniqueId, const String8& path, const String8& mimeType) = 0; 218aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 2194094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger /** 220aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Check whether the given content has valid rights or not 221aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 222aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 223aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] path Path of the protected content 224aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] action Action to perform (Action::DEFAULT, Action::PLAY, etc) 225aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return the status of the rights for the protected content, 226aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc. 227aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 228aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual int onCheckRightsStatus(int uniqueId, const String8& path, int action) = 0; 229aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 230aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 231aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Consumes the rights for a content. 232aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * If the reserve parameter is true the rights is reserved until the same 2334094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * application calls this api again with the reserve parameter set to false. 234aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 235aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 236aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptHandle Handle for the decryption session 237aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] action Action to perform. (Action::DEFAULT, Action::PLAY, etc) 238aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] reserve True if the rights should be reserved. 239aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 240aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 241aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 242aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onConsumeRights(int uniqueId, DecryptHandle* decryptHandle, 243aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int action, bool reserve) = 0; 244aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 245aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 246aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Informs the DRM Engine about the playback actions performed on the DRM files. 2474094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * 248aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 2494094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * @param[in] decryptHandle Handle for the decryption session 250aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE) 251aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] position Position in the file (in milliseconds) where the start occurs. 252aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Only valid together with Playback::START. 253aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 254aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 255aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 256aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onSetPlaybackStatus( 257aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0; 258aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 259aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 260aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Validates whether an action on the DRM content is allowed or not. 261aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 262aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 263aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] path Path of the protected content 264aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] action Action to validate (Action::PLAY, Action::TRANSFER, etc) 265aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] description Detailed description of the action 266aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return true if the action is allowed. 267aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 268aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual bool onValidateAction(int uniqueId, const String8& path, 269aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int action, const ActionDescription& description) = 0; 270aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 271aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 272aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Removes the rights associated with the given protected content 273aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 274aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 275aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] path Path of the protected content 276aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 277aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 278aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 279aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onRemoveRights(int uniqueId, const String8& path) = 0; 280aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 281aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 282aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Removes all the rights information of each plug-in associated with 283aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * DRM framework. Will be used in master reset 284aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 285aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 286aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 287aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 288aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 289aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onRemoveAllRights(int uniqueId) = 0; 290aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 291aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 292aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * This API is for Forward Lock based DRM scheme. 293aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Each time the application tries to download a new DRM file 294aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * which needs to be converted, then the application has to 295aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * begin with calling this API. 296aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 297aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 298aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] convertId Handle for the convert session 299aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 300aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 301aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 302aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onOpenConvertSession(int uniqueId, int convertId) = 0; 303aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 304aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 305fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemminger * Accepts and converts the input data which is part of DRM file. 306aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * The resultant converted data and the status is returned in the DrmConvertedInfo 307aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * object. This method will be called each time there are new block 308aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * of data received by the application. 309aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 310aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 311aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] convertId Handle for the convert session 312aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] inputData Input Data which need to be converted 313aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return Return object contains the status of the data conversion, 314aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * the output converted data and offset. In this case the 315aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * application will ignore the offset information. 316aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 317aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual DrmConvertedStatus* onConvertData( 318aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int uniqueId, int convertId, const DrmBuffer* inputData) = 0; 319aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 320aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 321aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Informs the Drm Agent when there is no more data which need to be converted 322aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * or when an error occurs. Upon successful conversion of the complete data, 323aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * the agent will inform that where the header and body signature 324aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * should be added. This signature appending is needed to integrity 325aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * protect the converted file. 326aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 327fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemminger * @param[in] uniqueId Unique identifier for a session 328aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] convertId Handle for the convert session 329aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return Return object contains the status of the data conversion, 330aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * the header and body signature data. It also informs 331aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * the application on which offset these signature data 332aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * should be appended. 333aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 334aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual DrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId) = 0; 335aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 336aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 337aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns the information about the Drm Engine capabilities which includes 338aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * supported MimeTypes and file suffixes. 339aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 340aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 341aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return DrmSupportInfo 3425a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson * instance which holds the capabilities of a plug-in 3435a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson */ 344aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual DrmSupportInfo* onGetSupportInfo(int uniqueId) = 0; 345aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 346aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 347f082b64fb40b467bc1f9e5d245114aae4e256d5cnet[shemminger]!shemminger * Open the decrypt session to decrypt the given protected content 348aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 349aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 350aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptHandle Handle for the current decryption session 351aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] fd File descriptor of the protected content to be decrypted 352aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] offset Start position of the content 353aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] length The length of the protected content 354aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return 355aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 356aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 357c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger virtual status_t onOpenDecryptSession( 358aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length) = 0; 359aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 360aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 361aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Open the decrypt session to decrypt the given protected content 362aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 363aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 364aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptHandle Handle for the current decryption session 365aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uri Path of the protected content to be decrypted 366aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return 367aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 368aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 369aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onOpenDecryptSession( 370fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemminger int uniqueId, DecryptHandle* decryptHandle, const char* uri) = 0; 371aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 372aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 373aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Close the decrypt session for the given handle 374aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 375aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 376aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptHandle Handle for the decryption session 377aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 378aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 379aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 380aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0; 381aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 382aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 383c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * Initialize decryption for the given unit of the protected content 384aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 385aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 386aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptId Handle for the decryption session 387aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID 388aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] headerInfo Information for initializing decryption of this decrypUnit 389aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 390aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 391aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 392aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onInitializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 3934094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger int decryptUnitId, const DrmBuffer* headerInfo) = 0; 394aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 395aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 396aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Decrypt the protected content buffers for the given unit 397aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * This method will be called any number of times, based on number of 398aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * encrypted streams received from application. 399c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * 400c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] uniqueId Unique identifier for a session 401c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] decryptId Handle for the decryption session 402c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID 403c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[in] encBuffer Encrypted data block 404c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger * @param[out] decBuffer Decrypted data block 4054094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * @param[in] IV Optional buffer 406aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 407aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns the error code for this API 408aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 409aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 410aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * DRM_ERROR_DECRYPT for failure. 4114094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger */ 412aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 413aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0; 414aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 415aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 416aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Finalize decryption for the given unit of the protected content 4174094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * 418aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 419aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptHandle Handle for the decryption session 420aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID 421aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return status_t 422aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 4234094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger */ 424aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual status_t onFinalizeDecryptUnit( 425aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0; 426aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 427aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /** 428aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Reads the specified number of bytes from an open DRM file. 429aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 430aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[in] uniqueId Unique identifier for a session 4314094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger * @param[in] decryptHandle Handle for the decryption session 432aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @param[out] buffer Reference to the buffer that should receive the read data. 4339626dfd54c3cc4deec1c651a0bfee65b50feb78bStephen Hemminger * @param[in] numBytes Number of bytes to read. 4349626dfd54c3cc4deec1c651a0bfee65b50feb78bStephen Hemminger * @param[in] offset Offset with which to update the file position. 435aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * 436aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * @return Number of bytes read. Returns -1 for Failure. 437aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */ 438aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger virtual ssize_t onPread(int uniqueId, DecryptHandle* decryptHandle, 439aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger void* buffer, ssize_t numBytes, off64_t offset) = 0; 440aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}; 441aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 442aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}; 443aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 444aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif /* __DRM_ENGINE_BASE_H__ */ 445aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 446aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger