| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __DRM_FRAMEWORK_COMMON_H__ |
| #define __DRM_FRAMEWORK_COMMON_H__ |
| |
| #include <utils/Vector.h> |
| #include <utils/KeyedVector.h> |
| #include <utils/RefBase.h> |
| #include <utils/String8.h> |
| #include <utils/Errors.h> |
| |
| #define INVALID_VALUE -1 |
| |
| namespace android { |
| |
| /** |
| * Error code for DRM Frameowrk |
| */ |
| enum { |
| // The following constant values should be in sync with |
| // media/stagefright/MediaErrors.h |
| ERROR_BASE = -2000, |
| |
| DRM_ERROR_UNKNOWN = ERROR_BASE, |
| DRM_ERROR_NO_LICENSE = ERROR_BASE - 1, |
| DRM_ERROR_LICENSE_EXPIRED = ERROR_BASE - 2, |
| DRM_ERROR_SESSION_NOT_OPENED = ERROR_BASE - 3, |
| DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED = ERROR_BASE - 4, |
| DRM_ERROR_DECRYPT = ERROR_BASE - 5, |
| DRM_ERROR_CANNOT_HANDLE = ERROR_BASE - 6, |
| DRM_ERROR_TAMPER_DETECTED = ERROR_BASE - 7, |
| DRM_ERROR_NO_PERMISSION = ERROR_BASE - 8, |
| |
| DRM_NO_ERROR = NO_ERROR |
| }; |
| |
| /** |
| * copy control settings used in DecryptHandle::copyControlVector |
| */ |
| enum DrmCopyControl { |
| DRM_COPY_CONTROL_BASE = 1000, |
| // the key used to set the value for HDCP |
| // if the associated value is 1, then HDCP is required |
| // otherwise, HDCP is not required |
| DRM_COPY_CONTROL_HDCP = DRM_COPY_CONTROL_BASE |
| }; |
| |
| /** |
| * Defines DRM Buffer |
| */ |
| class DrmBuffer { |
| public: |
| char* data; |
| int length; |
| |
| DrmBuffer() : |
| data(NULL), |
| length(0) { |
| } |
| |
| DrmBuffer(char* dataBytes, int dataLength) : |
| data(dataBytes), |
| length(dataLength) { |
| } |
| |
| }; |
| |
| /** |
| * Defines detailed description of the action |
| */ |
| class ActionDescription { |
| public: |
| ActionDescription(int _outputType, int _configuration) : |
| outputType(_outputType), |
| configuration(_configuration) { |
| } |
| |
| public: |
| int outputType; /* BLUETOOTH , HDMI*/ |
| int configuration; /* RESOLUTION_720_480 , RECORDABLE etc.*/ |
| }; |
| |
| /** |
| * Defines constants related to DRM types |
| */ |
| class DrmObjectType { |
| private: |
| DrmObjectType(); |
| |
| public: |
| /** |
| * Field specifies the unknown type |
| */ |
| static const int UNKNOWN = 0x00; |
| /** |
| * Field specifies the protected content type |
| */ |
| static const int CONTENT = 0x01; |
| /** |
| * Field specifies the rights information |
| */ |
| static const int RIGHTS_OBJECT = 0x02; |
| /** |
| * Field specifies the trigger information |
| */ |
| static const int TRIGGER_OBJECT = 0x03; |
| }; |
| |
| /** |
| * Defines constants related to play back |
| */ |
| class Playback { |
| private: |
| Playback(); |
| |
| public: |
| /** |
| * Constant field signifies playback start |
| */ |
| static const int START = 0x00; |
| /** |
| * Constant field signifies playback stop |
| */ |
| static const int STOP = 0x01; |
| /** |
| * Constant field signifies playback paused |
| */ |
| static const int PAUSE = 0x02; |
| /** |
| * Constant field signifies playback resumed |
| */ |
| static const int RESUME = 0x03; |
| }; |
| |
| /** |
| * Defines actions that can be performed on protected content |
| */ |
| class Action { |
| private: |
| Action(); |
| |
| public: |
| /** |
| * Constant field signifies that the default action |
| */ |
| static const int DEFAULT = 0x00; |
| /** |
| * Constant field signifies that the content can be played |
| */ |
| static const int PLAY = 0x01; |
| /** |
| * Constant field signifies that the content can be set as ring tone |
| */ |
| static const int RINGTONE = 0x02; |
| /** |
| * Constant field signifies that the content can be transfered |
| */ |
| static const int TRANSFER = 0x03; |
| /** |
| * Constant field signifies that the content can be set as output |
| */ |
| static const int OUTPUT = 0x04; |
| /** |
| * Constant field signifies that preview is allowed |
| */ |
| static const int PREVIEW = 0x05; |
| /** |
| * Constant field signifies that the content can be executed |
| */ |
| static const int EXECUTE = 0x06; |
| /** |
| * Constant field signifies that the content can displayed |
| */ |
| static const int DISPLAY = 0x07; |
| }; |
| |
| /** |
| * Defines constants related to status of the rights |
| */ |
| class RightsStatus { |
| private: |
| RightsStatus(); |
| |
| public: |
| /** |
| * Constant field signifies that the rights are valid |
| */ |
| static const int RIGHTS_VALID = 0x00; |
| /** |
| * Constant field signifies that the rights are invalid |
| */ |
| static const int RIGHTS_INVALID = 0x01; |
| /** |
| * Constant field signifies that the rights are expired for the content |
| */ |
| static const int RIGHTS_EXPIRED = 0x02; |
| /** |
| * Constant field signifies that the rights are not acquired for the content |
| */ |
| static const int RIGHTS_NOT_ACQUIRED = 0x03; |
| }; |
| |
| /** |
| * Defines API set for decryption |
| */ |
| class DecryptApiType { |
| private: |
| DecryptApiType(); |
| |
| public: |
| /** |
| * Decrypt API set for non encrypted content |
| */ |
| static const int NON_ENCRYPTED = 0x00; |
| /** |
| * Decrypt API set for ES based DRM |
| */ |
| static const int ELEMENTARY_STREAM_BASED = 0x01; |
| /** |
| * POSIX based Decrypt API set for container based DRM |
| */ |
| static const int CONTAINER_BASED = 0x02; |
| /** |
| * Decrypt API for Widevine streams |
| */ |
| static const int WV_BASED = 0x3; |
| }; |
| |
| /** |
| * Defines decryption information |
| */ |
| class DecryptInfo { |
| public: |
| /** |
| * size of memory to be allocated to get the decrypted content. |
| */ |
| int decryptBufferLength; |
| /** |
| * reserved for future purpose |
| */ |
| }; |
| |
| /** |
| * Defines decryption handle |
| */ |
| class DecryptHandle : public RefBase { |
| public: |
| /** |
| * Decryption session Handle |
| */ |
| int decryptId; |
| /** |
| * Mimetype of the content to be used to select the media extractor |
| * For e.g., "video/mpeg" or "audio/mp3" |
| */ |
| String8 mimeType; |
| /** |
| * Defines which decryption pattern should be used to decrypt the given content |
| * DrmFramework provides two different set of decryption APIs. |
| * 1. Decrypt APIs for elementary stream based DRM |
| * (file format is not encrypted but ES is encrypted) |
| * e.g., Marlin DRM (MP4 file format), WM-DRM (asf file format) |
| * |
| * DecryptApiType::ELEMENTARY_STREAM_BASED |
| * Decryption API set for ES based DRM |
| * initializeDecryptUnit(), decrypt(), and finalizeDecryptUnit() |
| * 2. Decrypt APIs for container based DRM (file format itself is encrypted) |
| * e.g., OMA DRM (dcf file format) |
| * |
| * DecryptApiType::CONTAINER_BASED |
| * POSIX based Decryption API set for container based DRM |
| * pread() |
| */ |
| int decryptApiType; |
| /** |
| * Defines the status of the rights like |
| * RIGHTS_VALID, RIGHTS_INVALID, RIGHTS_EXPIRED or RIGHTS_NOT_ACQUIRED |
| */ |
| int status; |
| /** |
| * Information required to decrypt content |
| * e.g. size of memory to be allocated to get the decrypted content. |
| */ |
| DecryptInfo* decryptInfo; |
| /** |
| * Defines a vector for the copy control settings sent from the DRM plugin |
| * to the player |
| */ |
| KeyedVector<DrmCopyControl, int> copyControlVector; |
| |
| /** |
| * Defines a vector for any extra data the DRM plugin wants to send |
| * to the native code |
| */ |
| KeyedVector<String8, String8> extendedData; |
| |
| public: |
| DecryptHandle(): |
| decryptId(INVALID_VALUE), |
| mimeType(""), |
| decryptApiType(INVALID_VALUE), |
| status(INVALID_VALUE), |
| decryptInfo(NULL) { |
| |
| } |
| |
| ~DecryptHandle() { |
| delete decryptInfo; decryptInfo = NULL; |
| } |
| |
| bool operator<(const DecryptHandle& handle) const { |
| return (decryptId < handle.decryptId); |
| } |
| |
| bool operator==(const DecryptHandle& handle) const { |
| return (decryptId == handle.decryptId); |
| } |
| }; |
| |
| }; |
| |
| #endif /* __DRM_FRAMEWORK_COMMON_H__ */ |
| |