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