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