1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #ifndef __IDRM_ENGINE_H__ 18*ec779b8eSAndroid Build Coastguard Worker #define __IDRM_ENGINE_H__ 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard Worker #include <drm/drm_framework_common.h> 21*ec779b8eSAndroid Build Coastguard Worker 22*ec779b8eSAndroid Build Coastguard Worker namespace android { 23*ec779b8eSAndroid Build Coastguard Worker 24*ec779b8eSAndroid Build Coastguard Worker class DrmConstraints; 25*ec779b8eSAndroid Build Coastguard Worker class DrmMetadata; 26*ec779b8eSAndroid Build Coastguard Worker class DrmRights; 27*ec779b8eSAndroid Build Coastguard Worker class DrmInfo; 28*ec779b8eSAndroid Build Coastguard Worker class DrmInfoStatus; 29*ec779b8eSAndroid Build Coastguard Worker class DrmConvertedStatus; 30*ec779b8eSAndroid Build Coastguard Worker class DrmInfoRequest; 31*ec779b8eSAndroid Build Coastguard Worker class DrmSupportInfo; 32*ec779b8eSAndroid Build Coastguard Worker class DrmInfoEvent; 33*ec779b8eSAndroid Build Coastguard Worker 34*ec779b8eSAndroid Build Coastguard Worker /** 35*ec779b8eSAndroid Build Coastguard Worker * This class is an interface for plug-in user 36*ec779b8eSAndroid Build Coastguard Worker * 37*ec779b8eSAndroid Build Coastguard Worker * Responsibility of this class is provide generic interface to DRM Engine Manager. 38*ec779b8eSAndroid Build Coastguard Worker * Each interface need to be as abstract as possible. 39*ec779b8eSAndroid Build Coastguard Worker */ 40*ec779b8eSAndroid Build Coastguard Worker class IDrmEngine { 41*ec779b8eSAndroid Build Coastguard Worker public: ~IDrmEngine()42*ec779b8eSAndroid Build Coastguard Worker virtual ~IDrmEngine() { 43*ec779b8eSAndroid Build Coastguard Worker } 44*ec779b8eSAndroid Build Coastguard Worker 45*ec779b8eSAndroid Build Coastguard Worker public: 46*ec779b8eSAndroid Build Coastguard Worker class OnInfoListener { 47*ec779b8eSAndroid Build Coastguard Worker 48*ec779b8eSAndroid Build Coastguard Worker public: 49*ec779b8eSAndroid Build Coastguard Worker virtual void onInfo(const DrmInfoEvent& event) = 0; 50*ec779b8eSAndroid Build Coastguard Worker ~OnInfoListener()51*ec779b8eSAndroid Build Coastguard Worker virtual ~OnInfoListener() { } 52*ec779b8eSAndroid Build Coastguard Worker }; 53*ec779b8eSAndroid Build Coastguard Worker 54*ec779b8eSAndroid Build Coastguard Worker public: 55*ec779b8eSAndroid Build Coastguard Worker 56*ec779b8eSAndroid Build Coastguard Worker ////////////////////////////////// 57*ec779b8eSAndroid Build Coastguard Worker // Implementation of IDrmEngine // 58*ec779b8eSAndroid Build Coastguard Worker ////////////////////////////////// 59*ec779b8eSAndroid Build Coastguard Worker 60*ec779b8eSAndroid Build Coastguard Worker /** 61*ec779b8eSAndroid Build Coastguard Worker * Initialize plug-in 62*ec779b8eSAndroid Build Coastguard Worker * 63*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 64*ec779b8eSAndroid Build Coastguard Worker * @return status_t 65*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 66*ec779b8eSAndroid Build Coastguard Worker */ 67*ec779b8eSAndroid Build Coastguard Worker virtual status_t initialize(int uniqueId) = 0; 68*ec779b8eSAndroid Build Coastguard Worker 69*ec779b8eSAndroid Build Coastguard Worker /** 70*ec779b8eSAndroid Build Coastguard Worker * Register a callback to be invoked when the caller required to 71*ec779b8eSAndroid Build Coastguard Worker * receive necessary information 72*ec779b8eSAndroid Build Coastguard Worker * 73*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 74*ec779b8eSAndroid Build Coastguard Worker * @param[in] infoListener Listener 75*ec779b8eSAndroid Build Coastguard Worker * @return status_t 76*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 77*ec779b8eSAndroid Build Coastguard Worker */ 78*ec779b8eSAndroid Build Coastguard Worker virtual status_t setOnInfoListener( 79*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const IDrmEngine::OnInfoListener* infoListener) = 0; 80*ec779b8eSAndroid Build Coastguard Worker 81*ec779b8eSAndroid Build Coastguard Worker /** 82*ec779b8eSAndroid Build Coastguard Worker * Terminate the plug-in 83*ec779b8eSAndroid Build Coastguard Worker * and release resource bound to plug-in 84*ec779b8eSAndroid Build Coastguard Worker * e.g.) release native resource 85*ec779b8eSAndroid Build Coastguard Worker * 86*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 87*ec779b8eSAndroid Build Coastguard Worker * @return status_t 88*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 89*ec779b8eSAndroid Build Coastguard Worker */ 90*ec779b8eSAndroid Build Coastguard Worker virtual status_t terminate(int uniqueId) = 0; 91*ec779b8eSAndroid Build Coastguard Worker 92*ec779b8eSAndroid Build Coastguard Worker /** 93*ec779b8eSAndroid Build Coastguard Worker * Get constraint information associated with input content 94*ec779b8eSAndroid Build Coastguard Worker * 95*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 96*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the protected content 97*ec779b8eSAndroid Build Coastguard Worker * @param[in] action Actions defined such as, 98*ec779b8eSAndroid Build Coastguard Worker * Action::DEFAULT, Action::PLAY, etc 99*ec779b8eSAndroid Build Coastguard Worker * @return DrmConstraints 100*ec779b8eSAndroid Build Coastguard Worker * key-value pairs of constraint are embedded in it 101*ec779b8eSAndroid Build Coastguard Worker * @note 102*ec779b8eSAndroid Build Coastguard Worker * In case of error, return NULL 103*ec779b8eSAndroid Build Coastguard Worker */ 104*ec779b8eSAndroid Build Coastguard Worker virtual DrmConstraints* getConstraints( 105*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8* path, int action) = 0; 106*ec779b8eSAndroid Build Coastguard Worker 107*ec779b8eSAndroid Build Coastguard Worker /** 108*ec779b8eSAndroid Build Coastguard Worker * Get metadata information associated with input content 109*ec779b8eSAndroid Build Coastguard Worker * 110*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 111*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the protected content 112*ec779b8eSAndroid Build Coastguard Worker * @return DrmMetadata 113*ec779b8eSAndroid Build Coastguard Worker * key-value pairs of metadata 114*ec779b8eSAndroid Build Coastguard Worker * @note 115*ec779b8eSAndroid Build Coastguard Worker * In case of error, return NULL 116*ec779b8eSAndroid Build Coastguard Worker */ 117*ec779b8eSAndroid Build Coastguard Worker virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0; 118*ec779b8eSAndroid Build Coastguard Worker 119*ec779b8eSAndroid Build Coastguard Worker /** 120*ec779b8eSAndroid Build Coastguard Worker * Get whether the given content can be handled by this plugin or not 121*ec779b8eSAndroid Build Coastguard Worker * 122*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 123*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path the protected object 124*ec779b8eSAndroid Build Coastguard Worker * @return bool 125*ec779b8eSAndroid Build Coastguard Worker * true if this plugin can handle , false in case of not able to handle 126*ec779b8eSAndroid Build Coastguard Worker */ 127*ec779b8eSAndroid Build Coastguard Worker virtual bool canHandle(int uniqueId, const String8& path) = 0; 128*ec779b8eSAndroid Build Coastguard Worker 129*ec779b8eSAndroid Build Coastguard Worker /** 130*ec779b8eSAndroid Build Coastguard Worker * Executes given drm information based on its type 131*ec779b8eSAndroid Build Coastguard Worker * 132*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 133*ec779b8eSAndroid Build Coastguard Worker * @param[in] drmInfo Information needs to be processed 134*ec779b8eSAndroid Build Coastguard Worker * @return DrmInfoStatus 135*ec779b8eSAndroid Build Coastguard Worker * instance as a result of processing given input 136*ec779b8eSAndroid Build Coastguard Worker */ 137*ec779b8eSAndroid Build Coastguard Worker virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0; 138*ec779b8eSAndroid Build Coastguard Worker 139*ec779b8eSAndroid Build Coastguard Worker /** 140*ec779b8eSAndroid Build Coastguard Worker * Retrieves necessary information for registration, unregistration or rights 141*ec779b8eSAndroid Build Coastguard Worker * acquisition information. 142*ec779b8eSAndroid Build Coastguard Worker * 143*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 144*ec779b8eSAndroid Build Coastguard Worker * @param[in] drmInfoRequest Request information to retrieve drmInfo 145*ec779b8eSAndroid Build Coastguard Worker * @return DrmInfo 146*ec779b8eSAndroid Build Coastguard Worker * instance as a result of processing given input 147*ec779b8eSAndroid Build Coastguard Worker */ 148*ec779b8eSAndroid Build Coastguard Worker virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest) = 0; 149*ec779b8eSAndroid Build Coastguard Worker 150*ec779b8eSAndroid Build Coastguard Worker /** 151*ec779b8eSAndroid Build Coastguard Worker * Save DRM rights to specified rights path 152*ec779b8eSAndroid Build Coastguard Worker * and make association with content path 153*ec779b8eSAndroid Build Coastguard Worker * 154*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 155*ec779b8eSAndroid Build Coastguard Worker * @param[in] drmRights DrmRights to be saved 156*ec779b8eSAndroid Build Coastguard Worker * @param[in] rightsPath File path where rights to be saved 157*ec779b8eSAndroid Build Coastguard Worker * @param[in] contentPath File path where content was saved 158*ec779b8eSAndroid Build Coastguard Worker * @return status_t 159*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 160*ec779b8eSAndroid Build Coastguard Worker */ 161*ec779b8eSAndroid Build Coastguard Worker virtual status_t saveRights(int uniqueId, const DrmRights& drmRights, 162*ec779b8eSAndroid Build Coastguard Worker const String8& rightsPath, const String8& contentPath) = 0; 163*ec779b8eSAndroid Build Coastguard Worker 164*ec779b8eSAndroid Build Coastguard Worker /** 165*ec779b8eSAndroid Build Coastguard Worker * Retrieves the mime type embedded inside the original content 166*ec779b8eSAndroid Build Coastguard Worker * 167*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 168*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the content or null. 169*ec779b8eSAndroid Build Coastguard Worker * @param[in] fd File descriptor of the protected content 170*ec779b8eSAndroid Build Coastguard Worker * @return String8 171*ec779b8eSAndroid Build Coastguard Worker * Returns mime-type of the original content, such as "video/mpeg" 172*ec779b8eSAndroid Build Coastguard Worker */ 173*ec779b8eSAndroid Build Coastguard Worker virtual String8 getOriginalMimeType(int uniqueId, const String8& path, int fd) = 0; 174*ec779b8eSAndroid Build Coastguard Worker 175*ec779b8eSAndroid Build Coastguard Worker /** 176*ec779b8eSAndroid Build Coastguard Worker * Retrieves the type of the protected object (content, rights, etc..) 177*ec779b8eSAndroid Build Coastguard Worker * using specified path or mimetype. At least one parameter should be non null 178*ec779b8eSAndroid Build Coastguard Worker * to retrieve DRM object type 179*ec779b8eSAndroid Build Coastguard Worker * 180*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 181*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the content or null. 182*ec779b8eSAndroid Build Coastguard Worker * @param[in] mimeType Mime type of the content or null. 183*ec779b8eSAndroid Build Coastguard Worker * @return type of the DRM content, 184*ec779b8eSAndroid Build Coastguard Worker * such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT 185*ec779b8eSAndroid Build Coastguard Worker */ 186*ec779b8eSAndroid Build Coastguard Worker virtual int getDrmObjectType( 187*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& path, const String8& mimeType) = 0; 188*ec779b8eSAndroid Build Coastguard Worker 189*ec779b8eSAndroid Build Coastguard Worker /** 190*ec779b8eSAndroid Build Coastguard Worker * Check whether the given content has valid rights or not 191*ec779b8eSAndroid Build Coastguard Worker * 192*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 193*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the protected content 194*ec779b8eSAndroid Build Coastguard Worker * @param[in] action Action to perform (Action::DEFAULT, Action::PLAY, etc) 195*ec779b8eSAndroid Build Coastguard Worker * @return the status of the rights for the protected content, 196*ec779b8eSAndroid Build Coastguard Worker * such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc. 197*ec779b8eSAndroid Build Coastguard Worker */ 198*ec779b8eSAndroid Build Coastguard Worker virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0; 199*ec779b8eSAndroid Build Coastguard Worker 200*ec779b8eSAndroid Build Coastguard Worker /** 201*ec779b8eSAndroid Build Coastguard Worker * Consumes the rights for a content. 202*ec779b8eSAndroid Build Coastguard Worker * If the reserve parameter is true the rights is reserved until the same 203*ec779b8eSAndroid Build Coastguard Worker * application calls this api again with the reserve parameter set to false. 204*ec779b8eSAndroid Build Coastguard Worker * 205*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 206*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 207*ec779b8eSAndroid Build Coastguard Worker * @param[in] action Action to perform. (Action::DEFAULT, Action::PLAY, etc) 208*ec779b8eSAndroid Build Coastguard Worker * @param[in] reserve True if the rights should be reserved. 209*ec779b8eSAndroid Build Coastguard Worker * @return status_t 210*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 211*ec779b8eSAndroid Build Coastguard Worker */ 212*ec779b8eSAndroid Build Coastguard Worker virtual status_t consumeRights( 213*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) = 0; 214*ec779b8eSAndroid Build Coastguard Worker 215*ec779b8eSAndroid Build Coastguard Worker /** 216*ec779b8eSAndroid Build Coastguard Worker * Informs the DRM Engine about the playback actions performed on the DRM files. 217*ec779b8eSAndroid Build Coastguard Worker * 218*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 219*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 220*ec779b8eSAndroid Build Coastguard Worker * @param[in] playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE) 221*ec779b8eSAndroid Build Coastguard Worker * @param[in] position Position in the file (in milliseconds) where the start occurs. 222*ec779b8eSAndroid Build Coastguard Worker * Only valid together with Playback::START. 223*ec779b8eSAndroid Build Coastguard Worker * @return status_t 224*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 225*ec779b8eSAndroid Build Coastguard Worker */ 226*ec779b8eSAndroid Build Coastguard Worker virtual status_t setPlaybackStatus(int uniqueId, sp<DecryptHandle>& decryptHandle, 227*ec779b8eSAndroid Build Coastguard Worker int playbackStatus, int64_t position) = 0; 228*ec779b8eSAndroid Build Coastguard Worker 229*ec779b8eSAndroid Build Coastguard Worker /** 230*ec779b8eSAndroid Build Coastguard Worker * Validates whether an action on the DRM content is allowed or not. 231*ec779b8eSAndroid Build Coastguard Worker * 232*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 233*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the protected content 234*ec779b8eSAndroid Build Coastguard Worker * @param[in] action Action to validate (Action::PLAY, Action::TRANSFER, etc) 235*ec779b8eSAndroid Build Coastguard Worker * @param[in] description Detailed description of the action 236*ec779b8eSAndroid Build Coastguard Worker * @return true if the action is allowed. 237*ec779b8eSAndroid Build Coastguard Worker */ 238*ec779b8eSAndroid Build Coastguard Worker virtual bool validateAction(int uniqueId, const String8& path, 239*ec779b8eSAndroid Build Coastguard Worker int action, const ActionDescription& description) = 0; 240*ec779b8eSAndroid Build Coastguard Worker 241*ec779b8eSAndroid Build Coastguard Worker /** 242*ec779b8eSAndroid Build Coastguard Worker * Removes the rights associated with the given protected content 243*ec779b8eSAndroid Build Coastguard Worker * 244*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 245*ec779b8eSAndroid Build Coastguard Worker * @param[in] path Path of the protected content 246*ec779b8eSAndroid Build Coastguard Worker * @return status_t 247*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 248*ec779b8eSAndroid Build Coastguard Worker */ 249*ec779b8eSAndroid Build Coastguard Worker virtual status_t removeRights(int uniqueId, const String8& path) = 0; 250*ec779b8eSAndroid Build Coastguard Worker 251*ec779b8eSAndroid Build Coastguard Worker /** 252*ec779b8eSAndroid Build Coastguard Worker * Removes all the rights information of each plug-in associated with 253*ec779b8eSAndroid Build Coastguard Worker * DRM framework. 254*ec779b8eSAndroid Build Coastguard Worker * 255*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 256*ec779b8eSAndroid Build Coastguard Worker * @return status_t 257*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 258*ec779b8eSAndroid Build Coastguard Worker */ 259*ec779b8eSAndroid Build Coastguard Worker virtual status_t removeAllRights(int uniqueId) = 0; 260*ec779b8eSAndroid Build Coastguard Worker 261*ec779b8eSAndroid Build Coastguard Worker /** 262*ec779b8eSAndroid Build Coastguard Worker * This API is for Forward Lock based DRM scheme. 263*ec779b8eSAndroid Build Coastguard Worker * Each time the application tries to download a new DRM file 264*ec779b8eSAndroid Build Coastguard Worker * which needs to be converted, then the application has to 265*ec779b8eSAndroid Build Coastguard Worker * begin with calling this API. 266*ec779b8eSAndroid Build Coastguard Worker * 267*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 268*ec779b8eSAndroid Build Coastguard Worker * @param[in] convertId Handle for the convert session 269*ec779b8eSAndroid Build Coastguard Worker * @return status_t 270*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 271*ec779b8eSAndroid Build Coastguard Worker */ 272*ec779b8eSAndroid Build Coastguard Worker virtual status_t openConvertSession(int uniqueId, int convertId) = 0; 273*ec779b8eSAndroid Build Coastguard Worker 274*ec779b8eSAndroid Build Coastguard Worker /** 275*ec779b8eSAndroid Build Coastguard Worker * Accepts and converts the input data which is part of DRM file. 276*ec779b8eSAndroid Build Coastguard Worker * The resultant converted data and the status is returned in the DrmConvertedInfo 277*ec779b8eSAndroid Build Coastguard Worker * object. This method will be called each time there are new block 278*ec779b8eSAndroid Build Coastguard Worker * of data received by the application. 279*ec779b8eSAndroid Build Coastguard Worker * 280*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 281*ec779b8eSAndroid Build Coastguard Worker * @param[in] convertId Handle for the convert session 282*ec779b8eSAndroid Build Coastguard Worker * @param[in] inputData Input Data which need to be converted 283*ec779b8eSAndroid Build Coastguard Worker * @return Return object contains the status of the data conversion, 284*ec779b8eSAndroid Build Coastguard Worker * the output converted data and offset. In this case the 285*ec779b8eSAndroid Build Coastguard Worker * application will ignore the offset information. 286*ec779b8eSAndroid Build Coastguard Worker */ 287*ec779b8eSAndroid Build Coastguard Worker virtual DrmConvertedStatus* convertData( 288*ec779b8eSAndroid Build Coastguard Worker int uniqueId, int convertId, const DrmBuffer* inputData) = 0; 289*ec779b8eSAndroid Build Coastguard Worker 290*ec779b8eSAndroid Build Coastguard Worker /** 291*ec779b8eSAndroid Build Coastguard Worker * Informs the Drm Agent when there is no more data which need to be converted 292*ec779b8eSAndroid Build Coastguard Worker * or when an error occurs. Upon successful conversion of the complete data, 293*ec779b8eSAndroid Build Coastguard Worker * the agent will inform that where the header and body signature 294*ec779b8eSAndroid Build Coastguard Worker * should be added. This signature appending is needed to integrity 295*ec779b8eSAndroid Build Coastguard Worker * protect the converted file. 296*ec779b8eSAndroid Build Coastguard Worker * 297*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 298*ec779b8eSAndroid Build Coastguard Worker * @param[in] convertId Handle for the convert session 299*ec779b8eSAndroid Build Coastguard Worker * @return Return object contains the status of the data conversion, 300*ec779b8eSAndroid Build Coastguard Worker * the header and body signature data. It also informs 301*ec779b8eSAndroid Build Coastguard Worker * the application on which offset these signature data 302*ec779b8eSAndroid Build Coastguard Worker * should be appended. 303*ec779b8eSAndroid Build Coastguard Worker */ 304*ec779b8eSAndroid Build Coastguard Worker virtual DrmConvertedStatus* closeConvertSession( int uniqueId, int convertId) = 0; 305*ec779b8eSAndroid Build Coastguard Worker 306*ec779b8eSAndroid Build Coastguard Worker /** 307*ec779b8eSAndroid Build Coastguard Worker * Returns the information about the Drm Engine capabilities which includes 308*ec779b8eSAndroid Build Coastguard Worker * supported MimeTypes and file suffixes. 309*ec779b8eSAndroid Build Coastguard Worker * 310*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 311*ec779b8eSAndroid Build Coastguard Worker * @return DrmSupportInfo 312*ec779b8eSAndroid Build Coastguard Worker * instance which holds the capabilities of a plug-in 313*ec779b8eSAndroid Build Coastguard Worker */ 314*ec779b8eSAndroid Build Coastguard Worker virtual DrmSupportInfo* getSupportInfo(int uniqueId) = 0; 315*ec779b8eSAndroid Build Coastguard Worker 316*ec779b8eSAndroid Build Coastguard Worker /** 317*ec779b8eSAndroid Build Coastguard Worker * Open the decrypt session to decrypt the given protected content 318*ec779b8eSAndroid Build Coastguard Worker * 319*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 320*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the current decryption session 321*ec779b8eSAndroid Build Coastguard Worker * @param[in] fd File descriptor of the protected content to be decrypted 322*ec779b8eSAndroid Build Coastguard Worker * @param[in] offset Start position of the content 323*ec779b8eSAndroid Build Coastguard Worker * @param[in] length The length of the protected content 324*ec779b8eSAndroid Build Coastguard Worker * @param[in] mime Mime type of the protected content if it is 325*ec779b8eSAndroid Build Coastguard Worker * not NULL or empty 326*ec779b8eSAndroid Build Coastguard Worker * @return 327*ec779b8eSAndroid Build Coastguard Worker * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 328*ec779b8eSAndroid Build Coastguard Worker */ 329*ec779b8eSAndroid Build Coastguard Worker virtual status_t openDecryptSession( 330*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle>& decryptHandle, 331*ec779b8eSAndroid Build Coastguard Worker int fd, off64_t offset, off64_t length, const char* mime) = 0; 332*ec779b8eSAndroid Build Coastguard Worker 333*ec779b8eSAndroid Build Coastguard Worker /** 334*ec779b8eSAndroid Build Coastguard Worker * Open the decrypt session to decrypt the given protected content 335*ec779b8eSAndroid Build Coastguard Worker * 336*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 337*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the current decryption session 338*ec779b8eSAndroid Build Coastguard Worker * @param[in] uri Path of the protected content to be decrypted 339*ec779b8eSAndroid Build Coastguard Worker * @param[in] mime Mime type of the protected content if it is 340*ec779b8eSAndroid Build Coastguard Worker * not NULL or empty 341*ec779b8eSAndroid Build Coastguard Worker * @return 342*ec779b8eSAndroid Build Coastguard Worker * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 343*ec779b8eSAndroid Build Coastguard Worker */ 344*ec779b8eSAndroid Build Coastguard Worker virtual status_t openDecryptSession( 345*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle>& decryptHandle, 346*ec779b8eSAndroid Build Coastguard Worker const char* uri, const char* mime) = 0; 347*ec779b8eSAndroid Build Coastguard Worker 348*ec779b8eSAndroid Build Coastguard Worker /** 349*ec779b8eSAndroid Build Coastguard Worker * Open the decrypt session to decrypt the given protected content 350*ec779b8eSAndroid Build Coastguard Worker * 351*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 352*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the current decryption session 353*ec779b8eSAndroid Build Coastguard Worker * @param[in] buf Data to initiate decrypt session 354*ec779b8eSAndroid Build Coastguard Worker * @param[in] mimeType Mime type of the protected content 355*ec779b8eSAndroid Build Coastguard Worker * @return 356*ec779b8eSAndroid Build Coastguard Worker * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 357*ec779b8eSAndroid Build Coastguard Worker */ 358*ec779b8eSAndroid Build Coastguard Worker virtual status_t openDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle, 359*ec779b8eSAndroid Build Coastguard Worker const DrmBuffer& buf, const String8& mimeType) = 0; 360*ec779b8eSAndroid Build Coastguard Worker 361*ec779b8eSAndroid Build Coastguard Worker /** 362*ec779b8eSAndroid Build Coastguard Worker * Close the decrypt session for the given handle 363*ec779b8eSAndroid Build Coastguard Worker * 364*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 365*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 366*ec779b8eSAndroid Build Coastguard Worker * @return status_t 367*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 368*ec779b8eSAndroid Build Coastguard Worker */ 369*ec779b8eSAndroid Build Coastguard Worker virtual status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) = 0; 370*ec779b8eSAndroid Build Coastguard Worker 371*ec779b8eSAndroid Build Coastguard Worker /** 372*ec779b8eSAndroid Build Coastguard Worker * Initialize decryption for the given unit of the protected content 373*ec779b8eSAndroid Build Coastguard Worker * 374*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 375*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 376*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptUnitId ID which specifies decryption unit, such as track ID 377*ec779b8eSAndroid Build Coastguard Worker * @param[in] headerInfo Information for initializing decryption of this decrypUnit 378*ec779b8eSAndroid Build Coastguard Worker * @return status_t 379*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 380*ec779b8eSAndroid Build Coastguard Worker */ 381*ec779b8eSAndroid Build Coastguard Worker virtual status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle, 382*ec779b8eSAndroid Build Coastguard Worker int decryptUnitId, const DrmBuffer* headerInfo) = 0; 383*ec779b8eSAndroid Build Coastguard Worker 384*ec779b8eSAndroid Build Coastguard Worker /** 385*ec779b8eSAndroid Build Coastguard Worker * Decrypt the protected content buffers for the given unit 386*ec779b8eSAndroid Build Coastguard Worker * This method will be called any number of times, based on number of 387*ec779b8eSAndroid Build Coastguard Worker * encrypted streams received from application. 388*ec779b8eSAndroid Build Coastguard Worker * 389*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 390*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 391*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptUnitId ID which specifies decryption unit, such as track ID 392*ec779b8eSAndroid Build Coastguard Worker * @param[in] encBuffer Encrypted data block 393*ec779b8eSAndroid Build Coastguard Worker * @param[out] decBuffer Decrypted data block 394*ec779b8eSAndroid Build Coastguard Worker * @param[in] IV Optional buffer 395*ec779b8eSAndroid Build Coastguard Worker * @return status_t 396*ec779b8eSAndroid Build Coastguard Worker * Returns the error code for this API 397*ec779b8eSAndroid Build Coastguard Worker * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 398*ec779b8eSAndroid Build Coastguard Worker * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 399*ec779b8eSAndroid Build Coastguard Worker * DRM_ERROR_DECRYPT for failure. 400*ec779b8eSAndroid Build Coastguard Worker */ 401*ec779b8eSAndroid Build Coastguard Worker virtual status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId, 402*ec779b8eSAndroid Build Coastguard Worker const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0; 403*ec779b8eSAndroid Build Coastguard Worker 404*ec779b8eSAndroid Build Coastguard Worker /** 405*ec779b8eSAndroid Build Coastguard Worker * Finalize decryption for the given unit of the protected content 406*ec779b8eSAndroid Build Coastguard Worker * 407*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 408*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 409*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptUnitId ID which specifies decryption unit, such as track ID 410*ec779b8eSAndroid Build Coastguard Worker * @return status_t 411*ec779b8eSAndroid Build Coastguard Worker * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 412*ec779b8eSAndroid Build Coastguard Worker */ 413*ec779b8eSAndroid Build Coastguard Worker virtual status_t finalizeDecryptUnit( 414*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) = 0; 415*ec779b8eSAndroid Build Coastguard Worker 416*ec779b8eSAndroid Build Coastguard Worker /** 417*ec779b8eSAndroid Build Coastguard Worker * Reads the specified number of bytes from an open DRM file. 418*ec779b8eSAndroid Build Coastguard Worker * 419*ec779b8eSAndroid Build Coastguard Worker * @param[in] uniqueId Unique identifier for a session 420*ec779b8eSAndroid Build Coastguard Worker * @param[in] decryptHandle Handle for the decryption session 421*ec779b8eSAndroid Build Coastguard Worker * @param[out] buffer Reference to the buffer that should receive the read data. 422*ec779b8eSAndroid Build Coastguard Worker * @param[in] numBytes Number of bytes to read. 423*ec779b8eSAndroid Build Coastguard Worker * @param[in] offset Offset with which to update the file position. 424*ec779b8eSAndroid Build Coastguard Worker * 425*ec779b8eSAndroid Build Coastguard Worker * @return Number of bytes read. Returns -1 for Failure. 426*ec779b8eSAndroid Build Coastguard Worker */ 427*ec779b8eSAndroid Build Coastguard Worker virtual ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle, 428*ec779b8eSAndroid Build Coastguard Worker void* buffer, ssize_t numBytes, off64_t offset) = 0; 429*ec779b8eSAndroid Build Coastguard Worker }; 430*ec779b8eSAndroid Build Coastguard Worker 431*ec779b8eSAndroid Build Coastguard Worker }; 432*ec779b8eSAndroid Build Coastguard Worker 433*ec779b8eSAndroid Build Coastguard Worker #endif /* __IDRM_ENGINE_H__ */ 434*ec779b8eSAndroid Build Coastguard Worker 435