blob: 2632cbd29e9206d665f04d4f3bdf49bfaa0f1fa7 [file] [log] [blame]
aimitakeshi27ed8ad2010-07-29 10:12:27 +09001/*
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>
Gloria Wangb5ce3612011-02-24 16:40:57 -080022#include <utils/RefBase.h>
aimitakeshi27ed8ad2010-07-29 10:12:27 +090023#include <utils/String8.h>
24#include <utils/Errors.h>
25
26#define INVALID_VALUE -1
27
28namespace android {
29
30/**
31 * Error code for DRM Frameowrk
32 */
33enum {
Gloria Wang73407432011-04-29 10:44:46 -070034 // The following constant values should be in sync with
35 // media/stagefright/MediaErrors.h
36 ERROR_BASE = -2000,
aimitakeshi27ed8ad2010-07-29 10:12:27 +090037
Gloria Wang73407432011-04-29 10:44:46 -070038 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,
Gloria Wang5c269372011-05-13 11:43:11 -070045 DRM_ERROR_TAMPER_DETECTED = ERROR_BASE - 7,
aimitakeshi27ed8ad2010-07-29 10:12:27 +090046
47 DRM_NO_ERROR = NO_ERROR
48};
49
50/**
Gloria Wang1da9aa62011-03-20 10:25:16 -070051 * copy control settings used in DecryptHandle::copyControlVector
52 */
53enum 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/**
aimitakeshi27ed8ad2010-07-29 10:12:27 +090062 * Defines DRM Buffer
63 */
64class DrmBuffer {
65public:
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 */
84class ActionDescription {
85public:
86 ActionDescription(int _outputType, int _configuration) :
87 outputType(_outputType),
88 configuration(_configuration) {
89 }
90
91public:
92 int outputType; /* BLUETOOTH , HDMI*/
93 int configuration; /* RESOLUTION_720_480 , RECORDABLE etc.*/
94};
95
96/**
97 * Defines constants related to DRM types
98 */
99class DrmObjectType {
100private:
101 DrmObjectType();
102
103public:
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 */
125class Playback {
126private:
127 Playback();
128
129public:
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 */
151class Action {
152private:
153 Action();
154
155public:
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 */
193class RightsStatus {
194private:
195 RightsStatus();
196
197public:
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 */
219class DecryptApiType {
220private:
221 DecryptApiType();
222
223public:
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;
Gloria Wang6dc55e72010-10-29 16:44:37 -0700236 /**
237 * Decrypt API for Widevine streams
238 */
239 static const int WV_BASED = 0x3;
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900240};
241
242/**
243 * Defines decryption information
244 */
245class DecryptInfo {
246public:
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 */
Gloria Wangb5ce3612011-02-24 16:40:57 -0800259class DecryptHandle : public RefBase {
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900260public:
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 *
Takeshi Aimi2272ee22010-09-20 23:40:41 +0900277 * DecryptApiType::ELEMENTARY_STREAM_BASED
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900278 * 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 *
Takeshi Aimi2272ee22010-09-20 23:40:41 +0900283 * DecryptApiType::CONTAINER_BASED
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900284 * 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;
Gloria Wang1da9aa62011-03-20 10:25:16 -0700298 /**
299 * Defines a vector for the copy control settings sent from the DRM plugin
300 * to the player
301 */
302 KeyedVector<DrmCopyControl, int> copyControlVector;
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900303
Gloria Wang6b2a35b2011-03-21 17:22:13 -0700304 /**
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
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900310public:
311 DecryptHandle():
312 decryptId(INVALID_VALUE),
313 mimeType(""),
314 decryptApiType(INVALID_VALUE),
Gloria Wangb5ce3612011-02-24 16:40:57 -0800315 status(INVALID_VALUE),
316 decryptInfo(NULL) {
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900317
318 }
319
Gloria Wangb5ce3612011-02-24 16:40:57 -0800320 ~DecryptHandle() {
321 delete decryptInfo; decryptInfo = NULL;
322 }
323
aimitakeshi27ed8ad2010-07-29 10:12:27 +0900324 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