xref: /aosp_15_r20/frameworks/av/drm/common/include/DrmEngineBase.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
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 __DRM_ENGINE_BASE_H__
18*ec779b8eSAndroid Build Coastguard Worker #define __DRM_ENGINE_BASE_H__
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include <drm/drm_framework_common.h>
21*ec779b8eSAndroid Build Coastguard Worker #include "IDrmEngine.h"
22*ec779b8eSAndroid Build Coastguard Worker 
23*ec779b8eSAndroid Build Coastguard Worker namespace android {
24*ec779b8eSAndroid Build Coastguard Worker 
25*ec779b8eSAndroid Build Coastguard Worker /**
26*ec779b8eSAndroid Build Coastguard Worker  * This class is an interface for plug-in developers
27*ec779b8eSAndroid Build Coastguard Worker  *
28*ec779b8eSAndroid Build Coastguard Worker  * Responsibility of this class is control the sequence of actual plug-in.
29*ec779b8eSAndroid Build Coastguard Worker  * All each plug-in developer has to do is implement onXXX() type virtual interfaces.
30*ec779b8eSAndroid Build Coastguard Worker  */
31*ec779b8eSAndroid Build Coastguard Worker class DrmEngineBase : public IDrmEngine {
32*ec779b8eSAndroid Build Coastguard Worker public:
33*ec779b8eSAndroid Build Coastguard Worker     DrmEngineBase();
34*ec779b8eSAndroid Build Coastguard Worker     virtual ~DrmEngineBase();
35*ec779b8eSAndroid Build Coastguard Worker 
36*ec779b8eSAndroid Build Coastguard Worker public:
37*ec779b8eSAndroid Build Coastguard Worker     DrmConstraints* getConstraints(int uniqueId, const String8* path, int action);
38*ec779b8eSAndroid Build Coastguard Worker 
39*ec779b8eSAndroid Build Coastguard Worker     DrmMetadata* getMetadata(int uniqueId, const String8* path);
40*ec779b8eSAndroid Build Coastguard Worker 
41*ec779b8eSAndroid Build Coastguard Worker     status_t initialize(int uniqueId);
42*ec779b8eSAndroid Build Coastguard Worker 
43*ec779b8eSAndroid Build Coastguard Worker     status_t setOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener);
44*ec779b8eSAndroid Build Coastguard Worker 
45*ec779b8eSAndroid Build Coastguard Worker     status_t terminate(int uniqueId);
46*ec779b8eSAndroid Build Coastguard Worker 
47*ec779b8eSAndroid Build Coastguard Worker     bool canHandle(int uniqueId, const String8& path);
48*ec779b8eSAndroid Build Coastguard Worker 
49*ec779b8eSAndroid Build Coastguard Worker     DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
50*ec779b8eSAndroid Build Coastguard Worker 
51*ec779b8eSAndroid Build Coastguard Worker     status_t saveRights(int uniqueId, const DrmRights& drmRights,
52*ec779b8eSAndroid Build Coastguard Worker             const String8& rightsPath, const String8& contentPath);
53*ec779b8eSAndroid Build Coastguard Worker 
54*ec779b8eSAndroid Build Coastguard Worker     DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest);
55*ec779b8eSAndroid Build Coastguard Worker 
56*ec779b8eSAndroid Build Coastguard Worker     String8 getOriginalMimeType(int uniqueId, const String8& path, int fd);
57*ec779b8eSAndroid Build Coastguard Worker 
58*ec779b8eSAndroid Build Coastguard Worker     int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
59*ec779b8eSAndroid Build Coastguard Worker 
60*ec779b8eSAndroid Build Coastguard Worker     int checkRightsStatus(int uniqueId, const String8& path, int action);
61*ec779b8eSAndroid Build Coastguard Worker 
62*ec779b8eSAndroid Build Coastguard Worker     status_t consumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle, int action,
63*ec779b8eSAndroid Build Coastguard Worker             bool reserve);
64*ec779b8eSAndroid Build Coastguard Worker 
65*ec779b8eSAndroid Build Coastguard Worker     status_t setPlaybackStatus(
66*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
67*ec779b8eSAndroid Build Coastguard Worker 
68*ec779b8eSAndroid Build Coastguard Worker     bool validateAction(
69*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, const String8& path, int action, const ActionDescription& description);
70*ec779b8eSAndroid Build Coastguard Worker 
71*ec779b8eSAndroid Build Coastguard Worker     status_t removeRights(int uniqueId, const String8& path);
72*ec779b8eSAndroid Build Coastguard Worker 
73*ec779b8eSAndroid Build Coastguard Worker     status_t removeAllRights(int uniqueId);
74*ec779b8eSAndroid Build Coastguard Worker 
75*ec779b8eSAndroid Build Coastguard Worker     status_t openConvertSession(int uniqueId, int convertId);
76*ec779b8eSAndroid Build Coastguard Worker 
77*ec779b8eSAndroid Build Coastguard Worker     DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData);
78*ec779b8eSAndroid Build Coastguard Worker 
79*ec779b8eSAndroid Build Coastguard Worker     DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
80*ec779b8eSAndroid Build Coastguard Worker 
81*ec779b8eSAndroid Build Coastguard Worker     DrmSupportInfo* getSupportInfo(int uniqueId);
82*ec779b8eSAndroid Build Coastguard Worker 
83*ec779b8eSAndroid Build Coastguard Worker     status_t openDecryptSession(
84*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle,
85*ec779b8eSAndroid Build Coastguard Worker             int fd, off64_t offset, off64_t length, const char* mime);
86*ec779b8eSAndroid Build Coastguard Worker 
87*ec779b8eSAndroid Build Coastguard Worker     status_t openDecryptSession(
88*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle,
89*ec779b8eSAndroid Build Coastguard Worker             const char* uri, const char* mime);
90*ec779b8eSAndroid Build Coastguard Worker 
91*ec779b8eSAndroid Build Coastguard Worker     status_t openDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle,
92*ec779b8eSAndroid Build Coastguard Worker             const DrmBuffer& buf, const String8& mimeType);
93*ec779b8eSAndroid Build Coastguard Worker 
94*ec779b8eSAndroid Build Coastguard Worker     status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
95*ec779b8eSAndroid Build Coastguard Worker 
96*ec779b8eSAndroid Build Coastguard Worker     status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
97*ec779b8eSAndroid Build Coastguard Worker             int decryptUnitId, const DrmBuffer* headerInfo);
98*ec779b8eSAndroid Build Coastguard Worker 
99*ec779b8eSAndroid Build Coastguard Worker     status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
100*ec779b8eSAndroid Build Coastguard Worker             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
101*ec779b8eSAndroid Build Coastguard Worker 
102*ec779b8eSAndroid Build Coastguard Worker     status_t finalizeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
103*ec779b8eSAndroid Build Coastguard Worker             int decryptUnitId);
104*ec779b8eSAndroid Build Coastguard Worker 
105*ec779b8eSAndroid Build Coastguard Worker     ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
106*ec779b8eSAndroid Build Coastguard Worker             void* buffer, ssize_t numBytes, off64_t offset);
107*ec779b8eSAndroid Build Coastguard Worker 
108*ec779b8eSAndroid Build Coastguard Worker protected:
109*ec779b8eSAndroid Build Coastguard Worker     /////////////////////////////////////////////////////
110*ec779b8eSAndroid Build Coastguard Worker     // Interface for plug-in developers                //
111*ec779b8eSAndroid Build Coastguard Worker     // each plug-in has to implement following method  //
112*ec779b8eSAndroid Build Coastguard Worker     /////////////////////////////////////////////////////
113*ec779b8eSAndroid Build Coastguard Worker     /**
114*ec779b8eSAndroid Build Coastguard Worker      * Get constraint information associated with input content
115*ec779b8eSAndroid Build Coastguard Worker      *
116*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
117*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the protected content
118*ec779b8eSAndroid Build Coastguard Worker      * @param[in] action Actions defined such as,
119*ec779b8eSAndroid Build Coastguard Worker      *     Action::DEFAULT, Action::PLAY, etc
120*ec779b8eSAndroid Build Coastguard Worker      * @return DrmConstraints
121*ec779b8eSAndroid Build Coastguard Worker      *     key-value pairs of constraint are embedded in it
122*ec779b8eSAndroid Build Coastguard Worker      * @note
123*ec779b8eSAndroid Build Coastguard Worker      *     In case of error, return NULL
124*ec779b8eSAndroid Build Coastguard Worker      */
125*ec779b8eSAndroid Build Coastguard Worker     virtual DrmConstraints* onGetConstraints(
126*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, const String8* path, int action) = 0;
127*ec779b8eSAndroid Build Coastguard Worker 
128*ec779b8eSAndroid Build Coastguard Worker     /**
129*ec779b8eSAndroid Build Coastguard Worker      * Get metadata information associated with input content
130*ec779b8eSAndroid Build Coastguard Worker      *
131*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
132*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the protected content
133*ec779b8eSAndroid Build Coastguard Worker      * @return DrmMetadata
134*ec779b8eSAndroid Build Coastguard Worker      *         key-value pairs of metadata
135*ec779b8eSAndroid Build Coastguard Worker      * @note
136*ec779b8eSAndroid Build Coastguard Worker      *     In case of error, return NULL
137*ec779b8eSAndroid Build Coastguard Worker      */
138*ec779b8eSAndroid Build Coastguard Worker     virtual DrmMetadata* onGetMetadata(int uniqueId, const String8* path) = 0;
139*ec779b8eSAndroid Build Coastguard Worker 
140*ec779b8eSAndroid Build Coastguard Worker     /**
141*ec779b8eSAndroid Build Coastguard Worker      * Initialize plug-in
142*ec779b8eSAndroid Build Coastguard Worker      *
143*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
144*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
145*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
146*ec779b8eSAndroid Build Coastguard Worker      */
147*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onInitialize(int uniqueId) = 0;
148*ec779b8eSAndroid Build Coastguard Worker 
149*ec779b8eSAndroid Build Coastguard Worker     /**
150*ec779b8eSAndroid Build Coastguard Worker      * Register a callback to be invoked when the caller required to
151*ec779b8eSAndroid Build Coastguard Worker      * receive necessary information
152*ec779b8eSAndroid Build Coastguard Worker      *
153*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session. uniqueId is a random
154*ec779b8eSAndroid Build Coastguard Worker      *                     number generated in the DRM service. If the DrmManagerClient
155*ec779b8eSAndroid Build Coastguard Worker      *                     is created in native code, uniqueId will be a number ranged
156*ec779b8eSAndroid Build Coastguard Worker      *                     from 0x1000 to 0x1fff. If it comes from Java code, the uniqueId
157*ec779b8eSAndroid Build Coastguard Worker      *                     will be a number ranged from 0x00 to 0xfff. So bit 0x1000 in
158*ec779b8eSAndroid Build Coastguard Worker      *                     uniqueId could be used in DRM plugins to differentiate native
159*ec779b8eSAndroid Build Coastguard Worker      *                     OnInfoListener and Java OnInfoListener.
160*ec779b8eSAndroid Build Coastguard Worker      * @param[in] infoListener Listener
161*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
162*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
163*ec779b8eSAndroid Build Coastguard Worker      */
164*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onSetOnInfoListener(
165*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, const IDrmEngine::OnInfoListener* infoListener) = 0;
166*ec779b8eSAndroid Build Coastguard Worker 
167*ec779b8eSAndroid Build Coastguard Worker     /**
168*ec779b8eSAndroid Build Coastguard Worker      * Terminate the plug-in
169*ec779b8eSAndroid Build Coastguard Worker      * and release resource bound to plug-in
170*ec779b8eSAndroid Build Coastguard Worker      *
171*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
172*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
173*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
174*ec779b8eSAndroid Build Coastguard Worker      */
175*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onTerminate(int uniqueId) = 0;
176*ec779b8eSAndroid Build Coastguard Worker 
177*ec779b8eSAndroid Build Coastguard Worker     /**
178*ec779b8eSAndroid Build Coastguard Worker      * Get whether the given content can be handled by this plugin or not
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 the protected object
182*ec779b8eSAndroid Build Coastguard Worker      * @return bool
183*ec779b8eSAndroid Build Coastguard Worker      *     Returns true if this plugin can handle , false in case of not able to handle
184*ec779b8eSAndroid Build Coastguard Worker      */
185*ec779b8eSAndroid Build Coastguard Worker     virtual bool onCanHandle(int uniqueId, const String8& path) = 0;
186*ec779b8eSAndroid Build Coastguard Worker 
187*ec779b8eSAndroid Build Coastguard Worker     /**
188*ec779b8eSAndroid Build Coastguard Worker      * Executes given drm information based on its type
189*ec779b8eSAndroid Build Coastguard Worker      *
190*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
191*ec779b8eSAndroid Build Coastguard Worker      * @param[in] drmInfo Information needs to be processed
192*ec779b8eSAndroid Build Coastguard Worker      * @return DrmInfoStatus
193*ec779b8eSAndroid Build Coastguard Worker      *     instance as a result of processing given input
194*ec779b8eSAndroid Build Coastguard Worker      */
195*ec779b8eSAndroid Build Coastguard Worker     virtual DrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
196*ec779b8eSAndroid Build Coastguard Worker 
197*ec779b8eSAndroid Build Coastguard Worker     /**
198*ec779b8eSAndroid Build Coastguard Worker      * Save DRM rights to specified rights path
199*ec779b8eSAndroid Build Coastguard Worker      * and make association with content path
200*ec779b8eSAndroid Build Coastguard Worker      *
201*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
202*ec779b8eSAndroid Build Coastguard Worker      * @param[in] drmRights DrmRights to be saved
203*ec779b8eSAndroid Build Coastguard Worker      * @param[in] rightsPath File path where rights to be saved
204*ec779b8eSAndroid Build Coastguard Worker      * @param[in] contentPath File path where content was saved
205*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
206*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
207*ec779b8eSAndroid Build Coastguard Worker      */
208*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onSaveRights(int uniqueId, const DrmRights& drmRights,
209*ec779b8eSAndroid Build Coastguard Worker             const String8& rightspath, const String8& contentPath) = 0;
210*ec779b8eSAndroid Build Coastguard Worker 
211*ec779b8eSAndroid Build Coastguard Worker     /**
212*ec779b8eSAndroid Build Coastguard Worker      * Retrieves necessary information for registration, unregistration or rights
213*ec779b8eSAndroid Build Coastguard Worker      * acquisition information.
214*ec779b8eSAndroid Build Coastguard Worker      *
215*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
216*ec779b8eSAndroid Build Coastguard Worker      * @param[in] drmInfoRequest Request information to retrieve drmInfo
217*ec779b8eSAndroid Build Coastguard Worker      * @return DrmInfo
218*ec779b8eSAndroid Build Coastguard Worker      *     instance as a result of processing given input
219*ec779b8eSAndroid Build Coastguard Worker      */
220*ec779b8eSAndroid Build Coastguard Worker     virtual DrmInfo* onAcquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
221*ec779b8eSAndroid Build Coastguard Worker 
222*ec779b8eSAndroid Build Coastguard Worker     /**
223*ec779b8eSAndroid Build Coastguard Worker      * Retrieves the mime type embedded inside the original content
224*ec779b8eSAndroid Build Coastguard Worker      *
225*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
226*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the protected content
227*ec779b8eSAndroid Build Coastguard Worker      * @param[in] fd descriptor of the protected content as a file source
228*ec779b8eSAndroid Build Coastguard Worker      * @return String8
229*ec779b8eSAndroid Build Coastguard Worker      *     Returns mime-type of the original content, such as "video/mpeg"
230*ec779b8eSAndroid Build Coastguard Worker      */
231*ec779b8eSAndroid Build Coastguard Worker     virtual String8 onGetOriginalMimeType(int uniqueId, const String8& path, int fd) = 0;
232*ec779b8eSAndroid Build Coastguard Worker 
233*ec779b8eSAndroid Build Coastguard Worker     /**
234*ec779b8eSAndroid Build Coastguard Worker      * Retrieves the type of the protected object (content, rights, etc..)
235*ec779b8eSAndroid Build Coastguard Worker      * using specified path or mimetype. At least one parameter should be non null
236*ec779b8eSAndroid Build Coastguard Worker      * to retrieve DRM object type
237*ec779b8eSAndroid Build Coastguard Worker      *
238*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
239*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the content or null.
240*ec779b8eSAndroid Build Coastguard Worker      * @param[in] mimeType Mime type of the content or null.
241*ec779b8eSAndroid Build Coastguard Worker      * @return type of the DRM content,
242*ec779b8eSAndroid Build Coastguard Worker      *     such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT
243*ec779b8eSAndroid Build Coastguard Worker      */
244*ec779b8eSAndroid Build Coastguard Worker     virtual int onGetDrmObjectType(
245*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, const String8& path, const String8& mimeType) = 0;
246*ec779b8eSAndroid Build Coastguard Worker 
247*ec779b8eSAndroid Build Coastguard Worker     /**
248*ec779b8eSAndroid Build Coastguard Worker      * Check whether the given content has valid rights or not
249*ec779b8eSAndroid Build Coastguard Worker      *
250*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
251*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the protected content
252*ec779b8eSAndroid Build Coastguard Worker      * @param[in] action Action to perform (Action::DEFAULT, Action::PLAY, etc)
253*ec779b8eSAndroid Build Coastguard Worker      * @return the status of the rights for the protected content,
254*ec779b8eSAndroid Build Coastguard Worker      *     such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc.
255*ec779b8eSAndroid Build Coastguard Worker      */
256*ec779b8eSAndroid Build Coastguard Worker     virtual int onCheckRightsStatus(int uniqueId, const String8& path, int action) = 0;
257*ec779b8eSAndroid Build Coastguard Worker 
258*ec779b8eSAndroid Build Coastguard Worker     /**
259*ec779b8eSAndroid Build Coastguard Worker      * Consumes the rights for a content.
260*ec779b8eSAndroid Build Coastguard Worker      * If the reserve parameter is true the rights is reserved until the same
261*ec779b8eSAndroid Build Coastguard Worker      * application calls this api again with the reserve parameter set to false.
262*ec779b8eSAndroid Build Coastguard Worker      *
263*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
264*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the decryption session
265*ec779b8eSAndroid Build Coastguard Worker      * @param[in] action Action to perform. (Action::DEFAULT, Action::PLAY, etc)
266*ec779b8eSAndroid Build Coastguard Worker      * @param[in] reserve True if the rights should be reserved.
267*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
268*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
269*ec779b8eSAndroid Build Coastguard Worker      */
270*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onConsumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle,
271*ec779b8eSAndroid Build Coastguard Worker             int action, bool reserve) = 0;
272*ec779b8eSAndroid Build Coastguard Worker 
273*ec779b8eSAndroid Build Coastguard Worker     /**
274*ec779b8eSAndroid Build Coastguard Worker      * Informs the DRM Engine about the playback actions performed on the DRM files.
275*ec779b8eSAndroid Build Coastguard Worker      *
276*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
277*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the decryption session
278*ec779b8eSAndroid Build Coastguard Worker      * @param[in] playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE)
279*ec779b8eSAndroid Build Coastguard Worker      * @param[in] position Position in the file (in milliseconds) where the start occurs.
280*ec779b8eSAndroid Build Coastguard Worker      *     Only valid together with Playback::START.
281*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
282*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
283*ec779b8eSAndroid Build Coastguard Worker      */
284*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onSetPlaybackStatus(
285*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus,
286*ec779b8eSAndroid Build Coastguard Worker             int64_t position) = 0;
287*ec779b8eSAndroid Build Coastguard Worker 
288*ec779b8eSAndroid Build Coastguard Worker     /**
289*ec779b8eSAndroid Build Coastguard Worker      * Validates whether an action on the DRM content is allowed or not.
290*ec779b8eSAndroid Build Coastguard Worker      *
291*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
292*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the protected content
293*ec779b8eSAndroid Build Coastguard Worker      * @param[in] action Action to validate (Action::PLAY, Action::TRANSFER, etc)
294*ec779b8eSAndroid Build Coastguard Worker      * @param[in] description Detailed description of the action
295*ec779b8eSAndroid Build Coastguard Worker      * @return true if the action is allowed.
296*ec779b8eSAndroid Build Coastguard Worker      */
297*ec779b8eSAndroid Build Coastguard Worker     virtual bool onValidateAction(int uniqueId, const String8& path,
298*ec779b8eSAndroid Build Coastguard Worker             int action, const ActionDescription& description) = 0;
299*ec779b8eSAndroid Build Coastguard Worker 
300*ec779b8eSAndroid Build Coastguard Worker     /**
301*ec779b8eSAndroid Build Coastguard Worker      * Removes the rights associated with the given protected content
302*ec779b8eSAndroid Build Coastguard Worker      *
303*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
304*ec779b8eSAndroid Build Coastguard Worker      * @param[in] path Path of the protected content
305*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
306*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
307*ec779b8eSAndroid Build Coastguard Worker      */
308*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onRemoveRights(int uniqueId, const String8& path) = 0;
309*ec779b8eSAndroid Build Coastguard Worker 
310*ec779b8eSAndroid Build Coastguard Worker     /**
311*ec779b8eSAndroid Build Coastguard Worker      * Removes all the rights information of each plug-in associated with
312*ec779b8eSAndroid Build Coastguard Worker      * DRM framework.
313*ec779b8eSAndroid Build Coastguard Worker      *
314*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
315*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
316*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
317*ec779b8eSAndroid Build Coastguard Worker      */
318*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onRemoveAllRights(int uniqueId) = 0;
319*ec779b8eSAndroid Build Coastguard Worker 
320*ec779b8eSAndroid Build Coastguard Worker     /**
321*ec779b8eSAndroid Build Coastguard Worker      * This API is for Forward Lock based DRM scheme.
322*ec779b8eSAndroid Build Coastguard Worker      * Each time the application tries to download a new DRM file
323*ec779b8eSAndroid Build Coastguard Worker      * which needs to be converted, then the application has to
324*ec779b8eSAndroid Build Coastguard Worker      * begin with calling this API.
325*ec779b8eSAndroid Build Coastguard Worker      *
326*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
327*ec779b8eSAndroid Build Coastguard Worker      * @param[in] convertId Handle for the convert session
328*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
329*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
330*ec779b8eSAndroid Build Coastguard Worker      */
331*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onOpenConvertSession(int uniqueId, int convertId) = 0;
332*ec779b8eSAndroid Build Coastguard Worker 
333*ec779b8eSAndroid Build Coastguard Worker     /**
334*ec779b8eSAndroid Build Coastguard Worker      * Accepts and converts the input data which is part of DRM file.
335*ec779b8eSAndroid Build Coastguard Worker      * The resultant converted data and the status is returned in the DrmConvertedInfo
336*ec779b8eSAndroid Build Coastguard Worker      * object. This method will be called each time there are new block
337*ec779b8eSAndroid Build Coastguard Worker      * of data received by the application.
338*ec779b8eSAndroid Build Coastguard Worker      *
339*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
340*ec779b8eSAndroid Build Coastguard Worker      * @param[in] convertId Handle for the convert session
341*ec779b8eSAndroid Build Coastguard Worker      * @param[in] inputData Input Data which need to be converted
342*ec779b8eSAndroid Build Coastguard Worker      * @return Return object contains the status of the data conversion,
343*ec779b8eSAndroid Build Coastguard Worker      *     the output converted data and offset. In this case the
344*ec779b8eSAndroid Build Coastguard Worker      *     application will ignore the offset information.
345*ec779b8eSAndroid Build Coastguard Worker      */
346*ec779b8eSAndroid Build Coastguard Worker     virtual DrmConvertedStatus* onConvertData(
347*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
348*ec779b8eSAndroid Build Coastguard Worker 
349*ec779b8eSAndroid Build Coastguard Worker     /**
350*ec779b8eSAndroid Build Coastguard Worker      * Informs the Drm Agent when there is no more data which need to be converted
351*ec779b8eSAndroid Build Coastguard Worker      * or when an error occurs. Upon successful conversion of the complete data,
352*ec779b8eSAndroid Build Coastguard Worker      * the agent will inform that where the header and body signature
353*ec779b8eSAndroid Build Coastguard Worker      * should be added. This signature appending is needed to integrity
354*ec779b8eSAndroid Build Coastguard Worker      * protect the converted file.
355*ec779b8eSAndroid Build Coastguard Worker      *
356*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
357*ec779b8eSAndroid Build Coastguard Worker      * @param[in] convertId Handle for the convert session
358*ec779b8eSAndroid Build Coastguard Worker      * @return Return object contains the status of the data conversion,
359*ec779b8eSAndroid Build Coastguard Worker      *     the header and body signature data. It also informs
360*ec779b8eSAndroid Build Coastguard Worker      *     the application on which offset these signature data
361*ec779b8eSAndroid Build Coastguard Worker      *     should be appended.
362*ec779b8eSAndroid Build Coastguard Worker      */
363*ec779b8eSAndroid Build Coastguard Worker     virtual DrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId) = 0;
364*ec779b8eSAndroid Build Coastguard Worker 
365*ec779b8eSAndroid Build Coastguard Worker     /**
366*ec779b8eSAndroid Build Coastguard Worker      * Returns the information about the Drm Engine capabilities which includes
367*ec779b8eSAndroid Build Coastguard Worker      * supported MimeTypes and file suffixes.
368*ec779b8eSAndroid Build Coastguard Worker      *
369*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
370*ec779b8eSAndroid Build Coastguard Worker      * @return DrmSupportInfo
371*ec779b8eSAndroid Build Coastguard Worker      *     instance which holds the capabilities of a plug-in
372*ec779b8eSAndroid Build Coastguard Worker      */
373*ec779b8eSAndroid Build Coastguard Worker     virtual DrmSupportInfo* onGetSupportInfo(int uniqueId) = 0;
374*ec779b8eSAndroid Build Coastguard Worker 
375*ec779b8eSAndroid Build Coastguard Worker     /**
376*ec779b8eSAndroid Build Coastguard Worker      * Open the decrypt session to decrypt the given protected content
377*ec779b8eSAndroid Build Coastguard Worker      *
378*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
379*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the current decryption session
380*ec779b8eSAndroid Build Coastguard Worker      * @param[in] fd File descriptor of the protected content to be decrypted
381*ec779b8eSAndroid Build Coastguard Worker      * @param[in] offset Start position of the content
382*ec779b8eSAndroid Build Coastguard Worker      * @param[in] length The length of the protected content
383*ec779b8eSAndroid Build Coastguard Worker      * @return
384*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
385*ec779b8eSAndroid Build Coastguard Worker      */
386*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onOpenDecryptSession(
387*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle,
388*ec779b8eSAndroid Build Coastguard Worker             int fd, off64_t offset, off64_t length) = 0;
389*ec779b8eSAndroid Build Coastguard Worker 
390*ec779b8eSAndroid Build Coastguard Worker     /**
391*ec779b8eSAndroid Build Coastguard Worker      * Open the decrypt session to decrypt the given protected content
392*ec779b8eSAndroid Build Coastguard Worker      *
393*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
394*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the current decryption session
395*ec779b8eSAndroid Build Coastguard Worker      * @param[in] fd File descriptor of the protected content to be decrypted
396*ec779b8eSAndroid Build Coastguard Worker      * @param[in] offset Start position of the content
397*ec779b8eSAndroid Build Coastguard Worker      * @param[in] length The length of the protected content
398*ec779b8eSAndroid Build Coastguard Worker      * @param[in] mime Mime type of the protected content
399*ec779b8eSAndroid Build Coastguard Worker      *     drm plugin may do some optimization since the mime type is known.
400*ec779b8eSAndroid Build Coastguard Worker      * @return
401*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
402*ec779b8eSAndroid Build Coastguard Worker      */
onOpenDecryptSession(int,sp<DecryptHandle> &,int,off64_t,off64_t,const char *)403*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onOpenDecryptSession(
404*ec779b8eSAndroid Build Coastguard Worker             int /* uniqueId */, sp<DecryptHandle>& /* decryptHandle */,
405*ec779b8eSAndroid Build Coastguard Worker             int /* fd */, off64_t /* offset */, off64_t /* length */,
406*ec779b8eSAndroid Build Coastguard Worker             const char* /* mime */) {
407*ec779b8eSAndroid Build Coastguard Worker 
408*ec779b8eSAndroid Build Coastguard Worker         return DRM_ERROR_CANNOT_HANDLE;
409*ec779b8eSAndroid Build Coastguard Worker     }
410*ec779b8eSAndroid Build Coastguard Worker 
411*ec779b8eSAndroid Build Coastguard Worker     /**
412*ec779b8eSAndroid Build Coastguard Worker      * Open the decrypt session to decrypt the given protected content
413*ec779b8eSAndroid Build Coastguard Worker      *
414*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
415*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the current decryption session
416*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uri Path of the protected content to be decrypted
417*ec779b8eSAndroid Build Coastguard Worker      * @return
418*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
419*ec779b8eSAndroid Build Coastguard Worker      */
420*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onOpenDecryptSession(
421*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle,
422*ec779b8eSAndroid Build Coastguard Worker             const char* uri) = 0;
423*ec779b8eSAndroid Build Coastguard Worker 
424*ec779b8eSAndroid Build Coastguard Worker     /**
425*ec779b8eSAndroid Build Coastguard Worker      * Open the decrypt session to decrypt the given protected content
426*ec779b8eSAndroid Build Coastguard Worker      *
427*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
428*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the current decryption session
429*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uri Path of the protected content to be decrypted
430*ec779b8eSAndroid Build Coastguard Worker      * @param[in] mime Mime type of the protected content. The corresponding
431*ec779b8eSAndroid Build Coastguard Worker      *     drm plugin may do some optimization since the mime type is known.
432*ec779b8eSAndroid Build Coastguard Worker      * @return
433*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
434*ec779b8eSAndroid Build Coastguard Worker      */
onOpenDecryptSession(int,sp<DecryptHandle> &,const char *,const char *)435*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onOpenDecryptSession(
436*ec779b8eSAndroid Build Coastguard Worker             int /* uniqueId */, sp<DecryptHandle>& /* decryptHandle */,
437*ec779b8eSAndroid Build Coastguard Worker             const char* /* uri */, const char* /* mime */) {
438*ec779b8eSAndroid Build Coastguard Worker 
439*ec779b8eSAndroid Build Coastguard Worker         return DRM_ERROR_CANNOT_HANDLE;
440*ec779b8eSAndroid Build Coastguard Worker     }
441*ec779b8eSAndroid Build Coastguard Worker 
442*ec779b8eSAndroid Build Coastguard Worker     /**
443*ec779b8eSAndroid Build Coastguard Worker      * Open the decrypt session to decrypt the given protected content
444*ec779b8eSAndroid Build Coastguard Worker      *
445*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
446*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the current decryption session
447*ec779b8eSAndroid Build Coastguard Worker      * @param[in] buf Data to initiate decrypt session
448*ec779b8eSAndroid Build Coastguard Worker      * @param[in] mimeType Mime type of the protected content
449*ec779b8eSAndroid Build Coastguard Worker      * @return
450*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
451*ec779b8eSAndroid Build Coastguard Worker      */
onOpenDecryptSession(int,sp<DecryptHandle> &,const DrmBuffer &,const String8 &)452*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onOpenDecryptSession(int /* uniqueId */,
453*ec779b8eSAndroid Build Coastguard Worker             sp<DecryptHandle>& /* decryptHandle */,
454*ec779b8eSAndroid Build Coastguard Worker             const DrmBuffer& /* buf */,
455*ec779b8eSAndroid Build Coastguard Worker             const String8& /* mimeType */) {
456*ec779b8eSAndroid Build Coastguard Worker         return DRM_ERROR_CANNOT_HANDLE;
457*ec779b8eSAndroid Build Coastguard Worker     }
458*ec779b8eSAndroid Build Coastguard Worker 
459*ec779b8eSAndroid Build Coastguard Worker     /**
460*ec779b8eSAndroid Build Coastguard Worker      * Close the decrypt session for the given handle
461*ec779b8eSAndroid Build Coastguard Worker      *
462*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
463*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the decryption session
464*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
465*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
466*ec779b8eSAndroid Build Coastguard Worker      */
467*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) = 0;
468*ec779b8eSAndroid Build Coastguard Worker 
469*ec779b8eSAndroid Build Coastguard Worker     /**
470*ec779b8eSAndroid Build Coastguard Worker      * Initialize decryption for the given unit of the protected content
471*ec779b8eSAndroid Build Coastguard Worker      *
472*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
473*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptId Handle for the decryption session
474*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID
475*ec779b8eSAndroid Build Coastguard Worker      * @param[in] headerInfo Information for initializing decryption of this decrypUnit
476*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
477*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
478*ec779b8eSAndroid Build Coastguard Worker      */
479*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onInitializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
480*ec779b8eSAndroid Build Coastguard Worker             int decryptUnitId, const DrmBuffer* headerInfo) = 0;
481*ec779b8eSAndroid Build Coastguard Worker 
482*ec779b8eSAndroid Build Coastguard Worker     /**
483*ec779b8eSAndroid Build Coastguard Worker      * Decrypt the protected content buffers for the given unit
484*ec779b8eSAndroid Build Coastguard Worker      * This method will be called any number of times, based on number of
485*ec779b8eSAndroid Build Coastguard Worker      * encrypted streams received from application.
486*ec779b8eSAndroid Build Coastguard Worker      *
487*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
488*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptId Handle for the decryption session
489*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID
490*ec779b8eSAndroid Build Coastguard Worker      * @param[in] encBuffer Encrypted data block
491*ec779b8eSAndroid Build Coastguard Worker      * @param[out] decBuffer Decrypted data block
492*ec779b8eSAndroid Build Coastguard Worker      * @param[in] IV Optional buffer
493*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
494*ec779b8eSAndroid Build Coastguard Worker      *     Returns the error code for this API
495*ec779b8eSAndroid Build Coastguard Worker      *     DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED
496*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
497*ec779b8eSAndroid Build Coastguard Worker      *     DRM_ERROR_DECRYPT for failure.
498*ec779b8eSAndroid Build Coastguard Worker      */
499*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onDecrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
500*ec779b8eSAndroid Build Coastguard Worker             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
501*ec779b8eSAndroid Build Coastguard Worker 
502*ec779b8eSAndroid Build Coastguard Worker     /**
503*ec779b8eSAndroid Build Coastguard Worker      * Finalize decryption for the given unit of the protected content
504*ec779b8eSAndroid Build Coastguard Worker      *
505*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
506*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the decryption session
507*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID
508*ec779b8eSAndroid Build Coastguard Worker      * @return status_t
509*ec779b8eSAndroid Build Coastguard Worker      *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
510*ec779b8eSAndroid Build Coastguard Worker      */
511*ec779b8eSAndroid Build Coastguard Worker     virtual status_t onFinalizeDecryptUnit(
512*ec779b8eSAndroid Build Coastguard Worker             int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) = 0;
513*ec779b8eSAndroid Build Coastguard Worker 
514*ec779b8eSAndroid Build Coastguard Worker     /**
515*ec779b8eSAndroid Build Coastguard Worker      * Reads the specified number of bytes from an open DRM file.
516*ec779b8eSAndroid Build Coastguard Worker      *
517*ec779b8eSAndroid Build Coastguard Worker      * @param[in] uniqueId Unique identifier for a session
518*ec779b8eSAndroid Build Coastguard Worker      * @param[in] decryptHandle Handle for the decryption session
519*ec779b8eSAndroid Build Coastguard Worker      * @param[out] buffer Reference to the buffer that should receive the read data.
520*ec779b8eSAndroid Build Coastguard Worker      * @param[in] numBytes Number of bytes to read.
521*ec779b8eSAndroid Build Coastguard Worker      * @param[in] offset Offset with which to update the file position.
522*ec779b8eSAndroid Build Coastguard Worker      *
523*ec779b8eSAndroid Build Coastguard Worker      * @return Number of bytes read. Returns -1 for Failure.
524*ec779b8eSAndroid Build Coastguard Worker      */
525*ec779b8eSAndroid Build Coastguard Worker     virtual ssize_t onPread(int uniqueId, sp<DecryptHandle>& decryptHandle,
526*ec779b8eSAndroid Build Coastguard Worker             void* buffer, ssize_t numBytes, off64_t offset) = 0;
527*ec779b8eSAndroid Build Coastguard Worker };
528*ec779b8eSAndroid Build Coastguard Worker 
529*ec779b8eSAndroid Build Coastguard Worker };
530*ec779b8eSAndroid Build Coastguard Worker 
531*ec779b8eSAndroid Build Coastguard Worker #endif /* __DRM_ENGINE_BASE_H__ */
532*ec779b8eSAndroid Build Coastguard Worker 
533