|
1 /* |
|
2 * Copyright (C) 2010 The Android Open Source Project |
|
3 * |
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 * you may not use this file except in compliance with the License. |
|
6 * You may obtain a copy of the License at |
|
7 * |
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 * |
|
10 * Unless required by applicable law or agreed to in writing, software |
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 * See the License for the specific language governing permissions and |
|
14 * limitations under the License. |
|
15 */ |
|
16 |
|
17 #ifndef __DRM_FRAMEWORK_COMMON_H__ |
|
18 #define __DRM_FRAMEWORK_COMMON_H__ |
|
19 |
|
20 #include <utils/Vector.h> |
|
21 #include <utils/KeyedVector.h> |
|
22 #include <utils/RefBase.h> |
|
23 #include <utils/String8.h> |
|
24 #include <utils/Errors.h> |
|
25 |
|
26 #define INVALID_VALUE -1 |
|
27 |
|
28 namespace android { |
|
29 |
|
30 /** |
|
31 * Error code for DRM Frameowrk |
|
32 */ |
|
33 enum { |
|
34 // The following constant values should be in sync with |
|
35 // media/stagefright/MediaErrors.h |
|
36 ERROR_BASE = -2000, |
|
37 |
|
38 DRM_ERROR_UNKNOWN = ERROR_BASE, |
|
39 DRM_ERROR_NO_LICENSE = ERROR_BASE - 1, |
|
40 DRM_ERROR_LICENSE_EXPIRED = ERROR_BASE - 2, |
|
41 DRM_ERROR_SESSION_NOT_OPENED = ERROR_BASE - 3, |
|
42 DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED = ERROR_BASE - 4, |
|
43 DRM_ERROR_DECRYPT = ERROR_BASE - 5, |
|
44 DRM_ERROR_CANNOT_HANDLE = ERROR_BASE - 6, |
|
45 DRM_ERROR_TAMPER_DETECTED = ERROR_BASE - 7, |
|
46 |
|
47 DRM_NO_ERROR = NO_ERROR |
|
48 }; |
|
49 |
|
50 /** |
|
51 * copy control settings used in DecryptHandle::copyControlVector |
|
52 */ |
|
53 enum DrmCopyControl { |
|
54 DRM_COPY_CONTROL_BASE = 1000, |
|
55 // the key used to set the value for HDCP |
|
56 // if the associated value is 1, then HDCP is required |
|
57 // otherwise, HDCP is not required |
|
58 DRM_COPY_CONTROL_HDCP = DRM_COPY_CONTROL_BASE |
|
59 }; |
|
60 |
|
61 /** |
|
62 * Defines DRM Buffer |
|
63 */ |
|
64 class DrmBuffer { |
|
65 public: |
|
66 char* data; |
|
67 int length; |
|
68 |
|
69 DrmBuffer() : |
|
70 data(NULL), |
|
71 length(0) { |
|
72 } |
|
73 |
|
74 DrmBuffer(char* dataBytes, int dataLength) : |
|
75 data(dataBytes), |
|
76 length(dataLength) { |
|
77 } |
|
78 |
|
79 }; |
|
80 |
|
81 /** |
|
82 * Defines detailed description of the action |
|
83 */ |
|
84 class ActionDescription { |
|
85 public: |
|
86 ActionDescription(int _outputType, int _configuration) : |
|
87 outputType(_outputType), |
|
88 configuration(_configuration) { |
|
89 } |
|
90 |
|
91 public: |
|
92 int outputType; /* BLUETOOTH , HDMI*/ |
|
93 int configuration; /* RESOLUTION_720_480 , RECORDABLE etc.*/ |
|
94 }; |
|
95 |
|
96 /** |
|
97 * Defines constants related to DRM types |
|
98 */ |
|
99 class DrmObjectType { |
|
100 private: |
|
101 DrmObjectType(); |
|
102 |
|
103 public: |
|
104 /** |
|
105 * Field specifies the unknown type |
|
106 */ |
|
107 static const int UNKNOWN = 0x00; |
|
108 /** |
|
109 * Field specifies the protected content type |
|
110 */ |
|
111 static const int CONTENT = 0x01; |
|
112 /** |
|
113 * Field specifies the rights information |
|
114 */ |
|
115 static const int RIGHTS_OBJECT = 0x02; |
|
116 /** |
|
117 * Field specifies the trigger information |
|
118 */ |
|
119 static const int TRIGGER_OBJECT = 0x03; |
|
120 }; |
|
121 |
|
122 /** |
|
123 * Defines constants related to play back |
|
124 */ |
|
125 class Playback { |
|
126 private: |
|
127 Playback(); |
|
128 |
|
129 public: |
|
130 /** |
|
131 * Constant field signifies playback start |
|
132 */ |
|
133 static const int START = 0x00; |
|
134 /** |
|
135 * Constant field signifies playback stop |
|
136 */ |
|
137 static const int STOP = 0x01; |
|
138 /** |
|
139 * Constant field signifies playback paused |
|
140 */ |
|
141 static const int PAUSE = 0x02; |
|
142 /** |
|
143 * Constant field signifies playback resumed |
|
144 */ |
|
145 static const int RESUME = 0x03; |
|
146 }; |
|
147 |
|
148 /** |
|
149 * Defines actions that can be performed on protected content |
|
150 */ |
|
151 class Action { |
|
152 private: |
|
153 Action(); |
|
154 |
|
155 public: |
|
156 /** |
|
157 * Constant field signifies that the default action |
|
158 */ |
|
159 static const int DEFAULT = 0x00; |
|
160 /** |
|
161 * Constant field signifies that the content can be played |
|
162 */ |
|
163 static const int PLAY = 0x01; |
|
164 /** |
|
165 * Constant field signifies that the content can be set as ring tone |
|
166 */ |
|
167 static const int RINGTONE = 0x02; |
|
168 /** |
|
169 * Constant field signifies that the content can be transfered |
|
170 */ |
|
171 static const int TRANSFER = 0x03; |
|
172 /** |
|
173 * Constant field signifies that the content can be set as output |
|
174 */ |
|
175 static const int OUTPUT = 0x04; |
|
176 /** |
|
177 * Constant field signifies that preview is allowed |
|
178 */ |
|
179 static const int PREVIEW = 0x05; |
|
180 /** |
|
181 * Constant field signifies that the content can be executed |
|
182 */ |
|
183 static const int EXECUTE = 0x06; |
|
184 /** |
|
185 * Constant field signifies that the content can displayed |
|
186 */ |
|
187 static const int DISPLAY = 0x07; |
|
188 }; |
|
189 |
|
190 /** |
|
191 * Defines constants related to status of the rights |
|
192 */ |
|
193 class RightsStatus { |
|
194 private: |
|
195 RightsStatus(); |
|
196 |
|
197 public: |
|
198 /** |
|
199 * Constant field signifies that the rights are valid |
|
200 */ |
|
201 static const int RIGHTS_VALID = 0x00; |
|
202 /** |
|
203 * Constant field signifies that the rights are invalid |
|
204 */ |
|
205 static const int RIGHTS_INVALID = 0x01; |
|
206 /** |
|
207 * Constant field signifies that the rights are expired for the content |
|
208 */ |
|
209 static const int RIGHTS_EXPIRED = 0x02; |
|
210 /** |
|
211 * Constant field signifies that the rights are not acquired for the content |
|
212 */ |
|
213 static const int RIGHTS_NOT_ACQUIRED = 0x03; |
|
214 }; |
|
215 |
|
216 /** |
|
217 * Defines API set for decryption |
|
218 */ |
|
219 class DecryptApiType { |
|
220 private: |
|
221 DecryptApiType(); |
|
222 |
|
223 public: |
|
224 /** |
|
225 * Decrypt API set for non encrypted content |
|
226 */ |
|
227 static const int NON_ENCRYPTED = 0x00; |
|
228 /** |
|
229 * Decrypt API set for ES based DRM |
|
230 */ |
|
231 static const int ELEMENTARY_STREAM_BASED = 0x01; |
|
232 /** |
|
233 * POSIX based Decrypt API set for container based DRM |
|
234 */ |
|
235 static const int CONTAINER_BASED = 0x02; |
|
236 /** |
|
237 * Decrypt API for Widevine streams |
|
238 */ |
|
239 static const int WV_BASED = 0x3; |
|
240 }; |
|
241 |
|
242 /** |
|
243 * Defines decryption information |
|
244 */ |
|
245 class DecryptInfo { |
|
246 public: |
|
247 /** |
|
248 * size of memory to be allocated to get the decrypted content. |
|
249 */ |
|
250 int decryptBufferLength; |
|
251 /** |
|
252 * reserved for future purpose |
|
253 */ |
|
254 }; |
|
255 |
|
256 /** |
|
257 * Defines decryption handle |
|
258 */ |
|
259 class DecryptHandle : public RefBase { |
|
260 public: |
|
261 /** |
|
262 * Decryption session Handle |
|
263 */ |
|
264 int decryptId; |
|
265 /** |
|
266 * Mimetype of the content to be used to select the media extractor |
|
267 * For e.g., "video/mpeg" or "audio/mp3" |
|
268 */ |
|
269 String8 mimeType; |
|
270 /** |
|
271 * Defines which decryption pattern should be used to decrypt the given content |
|
272 * DrmFramework provides two different set of decryption APIs. |
|
273 * 1. Decrypt APIs for elementary stream based DRM |
|
274 * (file format is not encrypted but ES is encrypted) |
|
275 * e.g., Marlin DRM (MP4 file format), WM-DRM (asf file format) |
|
276 * |
|
277 * DecryptApiType::ELEMENTARY_STREAM_BASED |
|
278 * Decryption API set for ES based DRM |
|
279 * initializeDecryptUnit(), decrypt(), and finalizeDecryptUnit() |
|
280 * 2. Decrypt APIs for container based DRM (file format itself is encrypted) |
|
281 * e.g., OMA DRM (dcf file format) |
|
282 * |
|
283 * DecryptApiType::CONTAINER_BASED |
|
284 * POSIX based Decryption API set for container based DRM |
|
285 * pread() |
|
286 */ |
|
287 int decryptApiType; |
|
288 /** |
|
289 * Defines the status of the rights like |
|
290 * RIGHTS_VALID, RIGHTS_INVALID, RIGHTS_EXPIRED or RIGHTS_NOT_ACQUIRED |
|
291 */ |
|
292 int status; |
|
293 /** |
|
294 * Information required to decrypt content |
|
295 * e.g. size of memory to be allocated to get the decrypted content. |
|
296 */ |
|
297 DecryptInfo* decryptInfo; |
|
298 /** |
|
299 * Defines a vector for the copy control settings sent from the DRM plugin |
|
300 * to the player |
|
301 */ |
|
302 KeyedVector<DrmCopyControl, int> copyControlVector; |
|
303 |
|
304 /** |
|
305 * Defines a vector for any extra data the DRM plugin wants to send |
|
306 * to the native code |
|
307 */ |
|
308 KeyedVector<String8, String8> extendedData; |
|
309 |
|
310 public: |
|
311 DecryptHandle(): |
|
312 decryptId(INVALID_VALUE), |
|
313 mimeType(""), |
|
314 decryptApiType(INVALID_VALUE), |
|
315 status(INVALID_VALUE), |
|
316 decryptInfo(NULL) { |
|
317 |
|
318 } |
|
319 |
|
320 ~DecryptHandle() { |
|
321 delete decryptInfo; decryptInfo = NULL; |
|
322 } |
|
323 |
|
324 bool operator<(const DecryptHandle& handle) const { |
|
325 return (decryptId < handle.decryptId); |
|
326 } |
|
327 |
|
328 bool operator==(const DecryptHandle& handle) const { |
|
329 return (decryptId == handle.decryptId); |
|
330 } |
|
331 }; |
|
332 |
|
333 }; |
|
334 |
|
335 #endif /* __DRM_FRAMEWORK_COMMON_H__ */ |
|
336 |