127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/* 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License. 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License. 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#ifndef __DRM_FRAMEWORK_COMMON_H__ 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __DRM_FRAMEWORK_COMMON_H__ 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/Vector.h> 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/KeyedVector.h> 22b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang#include <utils/RefBase.h> 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/String8.h> 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/Errors.h> 2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 26705e7a376a4080162d58e6100529d9dbffa58bb8Chih-Hung Hsieh#define INVALID_VALUE (-1) 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android { 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Error code for DRM Frameowrk 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshienum { 347340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang // The following constant values should be in sync with 357340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang // media/stagefright/MediaErrors.h 367340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang ERROR_BASE = -2000, 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 387340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_UNKNOWN = ERROR_BASE, 397340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_NO_LICENSE = ERROR_BASE - 1, 407340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_LICENSE_EXPIRED = ERROR_BASE - 2, 417340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_SESSION_NOT_OPENED = ERROR_BASE - 3, 427340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED = ERROR_BASE - 4, 437340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_DECRYPT = ERROR_BASE - 5, 447340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang DRM_ERROR_CANNOT_HANDLE = ERROR_BASE - 6, 455c26937264d9748a3db2a554c188e517523aa31aGloria Wang DRM_ERROR_TAMPER_DETECTED = ERROR_BASE - 7, 46328745b130c1c59e53d68a9a3c71675d3932d34bJames Dong DRM_ERROR_NO_PERMISSION = ERROR_BASE - 8, 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DRM_NO_ERROR = NO_ERROR 4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 521da9aa606096e14985924e8433a087d04f68ea22Gloria Wang * copy control settings used in DecryptHandle::copyControlVector 531da9aa606096e14985924e8433a087d04f68ea22Gloria Wang */ 541da9aa606096e14985924e8433a087d04f68ea22Gloria Wangenum DrmCopyControl { 551da9aa606096e14985924e8433a087d04f68ea22Gloria Wang DRM_COPY_CONTROL_BASE = 1000, 561da9aa606096e14985924e8433a087d04f68ea22Gloria Wang // the key used to set the value for HDCP 571da9aa606096e14985924e8433a087d04f68ea22Gloria Wang // if the associated value is 1, then HDCP is required 581da9aa606096e14985924e8433a087d04f68ea22Gloria Wang // otherwise, HDCP is not required 591da9aa606096e14985924e8433a087d04f68ea22Gloria Wang DRM_COPY_CONTROL_HDCP = DRM_COPY_CONTROL_BASE 601da9aa606096e14985924e8433a087d04f68ea22Gloria Wang}; 611da9aa606096e14985924e8433a087d04f68ea22Gloria Wang 621da9aa606096e14985924e8433a087d04f68ea22Gloria Wang/** 6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines DRM Buffer 6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmBuffer { 6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi char* data; 6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int length; 6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmBuffer() : 7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi data(NULL), 7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi length(0) { 7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmBuffer(char* dataBytes, int dataLength) : 7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi data(dataBytes), 7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi length(dataLength) { 7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines detailed description of the action 8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass ActionDescription { 8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi ActionDescription(int _outputType, int _configuration) : 8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi outputType(_outputType), 8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi configuration(_configuration) { 9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int outputType; /* BLUETOOTH , HDMI*/ 9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int configuration; /* RESOLUTION_720_480 , RECORDABLE etc.*/ 9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines constants related to DRM types 9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmObjectType { 10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmObjectType(); 10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Field specifies the unknown type 10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int UNKNOWN = 0x00; 10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Field specifies the protected content type 11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int CONTENT = 0x01; 11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Field specifies the rights information 11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RIGHTS_OBJECT = 0x02; 11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Field specifies the trigger information 11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int TRIGGER_OBJECT = 0x03; 12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines constants related to play back 12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass Playback { 12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Playback(); 12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies playback start 13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int START = 0x00; 13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies playback stop 13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int STOP = 0x01; 13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies playback paused 14127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 14227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int PAUSE = 0x02; 14327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies playback resumed 14527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 14627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RESUME = 0x03; 14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 14827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines actions that can be performed on protected content 15127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass Action { 15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Action(); 15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the default action 15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int DEFAULT = 0x00; 16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the content can be played 16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int PLAY = 0x01; 16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the content can be set as ring tone 16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 16827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RINGTONE = 0x02; 16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 17027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the content can be transfered 17127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 17227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int TRANSFER = 0x03; 17327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 17427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the content can be set as output 17527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 17627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int OUTPUT = 0x04; 17727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 17827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that preview is allowed 17927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 18027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int PREVIEW = 0x05; 18127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 18227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the content can be executed 18327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 18427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int EXECUTE = 0x06; 18527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 18627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the content can displayed 18727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 18827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int DISPLAY = 0x07; 18927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 19027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 19127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 19227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines constants related to status of the rights 19327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 19427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass RightsStatus { 19527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 19627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi RightsStatus(); 19727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 19827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 19927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 20027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the rights are valid 20127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 20227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RIGHTS_VALID = 0x00; 20327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 20427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the rights are invalid 20527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 20627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RIGHTS_INVALID = 0x01; 20727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 20827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the rights are expired for the content 20927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 21027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RIGHTS_EXPIRED = 0x02; 21127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 21227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constant field signifies that the rights are not acquired for the content 21327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 21427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int RIGHTS_NOT_ACQUIRED = 0x03; 21527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 21627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 21727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 21827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines API set for decryption 21927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 22027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DecryptApiType { 22127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 22227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DecryptApiType(); 22327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 22427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 22527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 22627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Decrypt API set for non encrypted content 22727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 22827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int NON_ENCRYPTED = 0x00; 22927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 23027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Decrypt API set for ES based DRM 23127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 23227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int ELEMENTARY_STREAM_BASED = 0x01; 23327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 23427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * POSIX based Decrypt API set for container based DRM 23527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 23627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int CONTAINER_BASED = 0x02; 23727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 23827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 23927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 24027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines decryption information 24127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 24227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DecryptInfo { 24327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 24427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 24527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * size of memory to be allocated to get the decrypted content. 24627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 24727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int decryptBufferLength; 24827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 24927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * reserved for future purpose 25027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 25127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 25227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 25327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 25427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines decryption handle 25527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 256b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wangclass DecryptHandle : public RefBase { 25727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 25827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 25927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Decryption session Handle 26027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 26127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int decryptId; 26227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 26327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Mimetype of the content to be used to select the media extractor 26427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * For e.g., "video/mpeg" or "audio/mp3" 26527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 26627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi String8 mimeType; 26727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 26827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines which decryption pattern should be used to decrypt the given content 26927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * DrmFramework provides two different set of decryption APIs. 27027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1. Decrypt APIs for elementary stream based DRM 27127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * (file format is not encrypted but ES is encrypted) 27227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * e.g., Marlin DRM (MP4 file format), WM-DRM (asf file format) 27327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 2742272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi * DecryptApiType::ELEMENTARY_STREAM_BASED 27527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Decryption API set for ES based DRM 27627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * initializeDecryptUnit(), decrypt(), and finalizeDecryptUnit() 27727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 2. Decrypt APIs for container based DRM (file format itself is encrypted) 27827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * e.g., OMA DRM (dcf file format) 27927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 2802272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi * DecryptApiType::CONTAINER_BASED 28127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * POSIX based Decryption API set for container based DRM 28227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * pread() 28327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 28427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int decryptApiType; 28527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 28627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Defines the status of the rights like 28727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * RIGHTS_VALID, RIGHTS_INVALID, RIGHTS_EXPIRED or RIGHTS_NOT_ACQUIRED 28827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 28927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int status; 29027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 29127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Information required to decrypt content 29227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * e.g. size of memory to be allocated to get the decrypted content. 29327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 29427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DecryptInfo* decryptInfo; 2951da9aa606096e14985924e8433a087d04f68ea22Gloria Wang /** 2961da9aa606096e14985924e8433a087d04f68ea22Gloria Wang * Defines a vector for the copy control settings sent from the DRM plugin 2971da9aa606096e14985924e8433a087d04f68ea22Gloria Wang * to the player 2981da9aa606096e14985924e8433a087d04f68ea22Gloria Wang */ 2991da9aa606096e14985924e8433a087d04f68ea22Gloria Wang KeyedVector<DrmCopyControl, int> copyControlVector; 30027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3016b2a35bbec228ce012065260ba153ee894f17a4eGloria Wang /** 3026b2a35bbec228ce012065260ba153ee894f17a4eGloria Wang * Defines a vector for any extra data the DRM plugin wants to send 3036b2a35bbec228ce012065260ba153ee894f17a4eGloria Wang * to the native code 3046b2a35bbec228ce012065260ba153ee894f17a4eGloria Wang */ 3056b2a35bbec228ce012065260ba153ee894f17a4eGloria Wang KeyedVector<String8, String8> extendedData; 3066b2a35bbec228ce012065260ba153ee894f17a4eGloria Wang 30727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 30827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DecryptHandle(): 30927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi decryptId(INVALID_VALUE), 31027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mimeType(""), 31127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi decryptApiType(INVALID_VALUE), 312b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang status(INVALID_VALUE), 313b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang decryptInfo(NULL) { 31427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 31527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 31627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 317b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang ~DecryptHandle() { 318b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang delete decryptInfo; decryptInfo = NULL; 319b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang } 320b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang 32127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool operator<(const DecryptHandle& handle) const { 32227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return (decryptId < handle.decryptId); 32327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 32427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 32527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool operator==(const DecryptHandle& handle) const { 32627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return (decryptId == handle.decryptId); 32727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 32827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 32927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 33027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 33127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 33227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __DRM_FRAMEWORK_COMMON_H__ */ 33327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 334