xref: /aosp_15_r20/frameworks/av/include/drm/DrmConstraints.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2010 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker #ifndef __DRM_CONSTRAINTS_H__
18*ec779b8eSAndroid Build Coastguard Worker #define __DRM_CONSTRAINTS_H__
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include "drm_framework_common.h"
21*ec779b8eSAndroid Build Coastguard Worker 
22*ec779b8eSAndroid Build Coastguard Worker namespace android {
23*ec779b8eSAndroid Build Coastguard Worker 
24*ec779b8eSAndroid Build Coastguard Worker /**
25*ec779b8eSAndroid Build Coastguard Worker  * This is an utility class which contains the constraints information.
26*ec779b8eSAndroid Build Coastguard Worker  *
27*ec779b8eSAndroid Build Coastguard Worker  * As a result of DrmManagerClient::getConstraints(const String8*, const int)
28*ec779b8eSAndroid Build Coastguard Worker  * an instance of DrmConstraints would be returned.
29*ec779b8eSAndroid Build Coastguard Worker  *
30*ec779b8eSAndroid Build Coastguard Worker  */
31*ec779b8eSAndroid Build Coastguard Worker class DrmConstraints {
32*ec779b8eSAndroid Build Coastguard Worker public:
33*ec779b8eSAndroid Build Coastguard Worker     /**
34*ec779b8eSAndroid Build Coastguard Worker      * The following variables are replica of android.drm.DrmStore.ConstraintsColumns
35*ec779b8eSAndroid Build Coastguard Worker      * Any changes should also be incorporated with Java Layer as well
36*ec779b8eSAndroid Build Coastguard Worker      */
37*ec779b8eSAndroid Build Coastguard Worker     /**
38*ec779b8eSAndroid Build Coastguard Worker      * The max repeat count
39*ec779b8eSAndroid Build Coastguard Worker      */
40*ec779b8eSAndroid Build Coastguard Worker     static const String8 MAX_REPEAT_COUNT;
41*ec779b8eSAndroid Build Coastguard Worker     /**
42*ec779b8eSAndroid Build Coastguard Worker      * The remaining repeat count
43*ec779b8eSAndroid Build Coastguard Worker      */
44*ec779b8eSAndroid Build Coastguard Worker     static const String8 REMAINING_REPEAT_COUNT;
45*ec779b8eSAndroid Build Coastguard Worker 
46*ec779b8eSAndroid Build Coastguard Worker     /**
47*ec779b8eSAndroid Build Coastguard Worker      * The time before which the protected file can not be played/viewed
48*ec779b8eSAndroid Build Coastguard Worker      */
49*ec779b8eSAndroid Build Coastguard Worker     static const String8 LICENSE_START_TIME;
50*ec779b8eSAndroid Build Coastguard Worker 
51*ec779b8eSAndroid Build Coastguard Worker     /**
52*ec779b8eSAndroid Build Coastguard Worker      * The time after which the protected file can not be played/viewed
53*ec779b8eSAndroid Build Coastguard Worker      */
54*ec779b8eSAndroid Build Coastguard Worker     static const String8 LICENSE_EXPIRY_TIME;
55*ec779b8eSAndroid Build Coastguard Worker 
56*ec779b8eSAndroid Build Coastguard Worker     /**
57*ec779b8eSAndroid Build Coastguard Worker      * The available time for license
58*ec779b8eSAndroid Build Coastguard Worker      */
59*ec779b8eSAndroid Build Coastguard Worker     static const String8 LICENSE_AVAILABLE_TIME;
60*ec779b8eSAndroid Build Coastguard Worker 
61*ec779b8eSAndroid Build Coastguard Worker     /**
62*ec779b8eSAndroid Build Coastguard Worker      * The data stream for extended metadata
63*ec779b8eSAndroid Build Coastguard Worker      */
64*ec779b8eSAndroid Build Coastguard Worker     static const String8 EXTENDED_METADATA;
65*ec779b8eSAndroid Build Coastguard Worker 
66*ec779b8eSAndroid Build Coastguard Worker public:
67*ec779b8eSAndroid Build Coastguard Worker     /**
68*ec779b8eSAndroid Build Coastguard Worker      * Iterator for key
69*ec779b8eSAndroid Build Coastguard Worker      */
70*ec779b8eSAndroid Build Coastguard Worker     class KeyIterator {
71*ec779b8eSAndroid Build Coastguard Worker         friend class DrmConstraints;
72*ec779b8eSAndroid Build Coastguard Worker     private:
KeyIterator(DrmConstraints * drmConstraints)73*ec779b8eSAndroid Build Coastguard Worker         explicit KeyIterator(DrmConstraints* drmConstraints)
74*ec779b8eSAndroid Build Coastguard Worker             : mDrmConstraints(drmConstraints), mIndex(0) {}
75*ec779b8eSAndroid Build Coastguard Worker 
76*ec779b8eSAndroid Build Coastguard Worker     public:
77*ec779b8eSAndroid Build Coastguard Worker         KeyIterator(const KeyIterator& keyIterator);
78*ec779b8eSAndroid Build Coastguard Worker         KeyIterator& operator=(const KeyIterator& keyIterator);
~KeyIterator()79*ec779b8eSAndroid Build Coastguard Worker         virtual ~KeyIterator() {}
80*ec779b8eSAndroid Build Coastguard Worker 
81*ec779b8eSAndroid Build Coastguard Worker     public:
82*ec779b8eSAndroid Build Coastguard Worker         bool hasNext();
83*ec779b8eSAndroid Build Coastguard Worker         const String8& next();
84*ec779b8eSAndroid Build Coastguard Worker 
85*ec779b8eSAndroid Build Coastguard Worker     private:
86*ec779b8eSAndroid Build Coastguard Worker         DrmConstraints* mDrmConstraints;
87*ec779b8eSAndroid Build Coastguard Worker         unsigned int mIndex;
88*ec779b8eSAndroid Build Coastguard Worker     };
89*ec779b8eSAndroid Build Coastguard Worker 
90*ec779b8eSAndroid Build Coastguard Worker     /**
91*ec779b8eSAndroid Build Coastguard Worker      * Iterator for constraints
92*ec779b8eSAndroid Build Coastguard Worker      */
93*ec779b8eSAndroid Build Coastguard Worker     class Iterator {
94*ec779b8eSAndroid Build Coastguard Worker         friend class DrmConstraints;
95*ec779b8eSAndroid Build Coastguard Worker     private:
Iterator(DrmConstraints * drmConstraints)96*ec779b8eSAndroid Build Coastguard Worker         explicit Iterator(DrmConstraints* drmConstraints)
97*ec779b8eSAndroid Build Coastguard Worker             : mDrmConstraints(drmConstraints), mIndex(0) {}
98*ec779b8eSAndroid Build Coastguard Worker 
99*ec779b8eSAndroid Build Coastguard Worker     public:
100*ec779b8eSAndroid Build Coastguard Worker         Iterator(const Iterator& iterator);
101*ec779b8eSAndroid Build Coastguard Worker         Iterator& operator=(const Iterator& iterator);
~Iterator()102*ec779b8eSAndroid Build Coastguard Worker         virtual ~Iterator() {}
103*ec779b8eSAndroid Build Coastguard Worker 
104*ec779b8eSAndroid Build Coastguard Worker     public:
105*ec779b8eSAndroid Build Coastguard Worker         bool hasNext();
106*ec779b8eSAndroid Build Coastguard Worker         String8 next();
107*ec779b8eSAndroid Build Coastguard Worker 
108*ec779b8eSAndroid Build Coastguard Worker     private:
109*ec779b8eSAndroid Build Coastguard Worker         DrmConstraints* mDrmConstraints;
110*ec779b8eSAndroid Build Coastguard Worker         unsigned int mIndex;
111*ec779b8eSAndroid Build Coastguard Worker     };
112*ec779b8eSAndroid Build Coastguard Worker 
113*ec779b8eSAndroid Build Coastguard Worker public:
DrmConstraints()114*ec779b8eSAndroid Build Coastguard Worker     DrmConstraints() {}
~DrmConstraints()115*ec779b8eSAndroid Build Coastguard Worker     virtual ~DrmConstraints() {
116*ec779b8eSAndroid Build Coastguard Worker         DrmConstraints::KeyIterator keyIt = this->keyIterator();
117*ec779b8eSAndroid Build Coastguard Worker 
118*ec779b8eSAndroid Build Coastguard Worker         while (keyIt.hasNext()) {
119*ec779b8eSAndroid Build Coastguard Worker             String8 key = keyIt.next();
120*ec779b8eSAndroid Build Coastguard Worker                 const char* value = this->getAsByteArray(&key);
121*ec779b8eSAndroid Build Coastguard Worker                 if (NULL != value) {
122*ec779b8eSAndroid Build Coastguard Worker                     delete[] value;
123*ec779b8eSAndroid Build Coastguard Worker                     value = NULL;
124*ec779b8eSAndroid Build Coastguard Worker                 }
125*ec779b8eSAndroid Build Coastguard Worker         }
126*ec779b8eSAndroid Build Coastguard Worker         mConstraintMap.clear();
127*ec779b8eSAndroid Build Coastguard Worker     }
128*ec779b8eSAndroid Build Coastguard Worker public:
129*ec779b8eSAndroid Build Coastguard Worker     /**
130*ec779b8eSAndroid Build Coastguard Worker      * Returns the number of constraints contained in this instance
131*ec779b8eSAndroid Build Coastguard Worker      *
132*ec779b8eSAndroid Build Coastguard Worker      * @return Number of constraints
133*ec779b8eSAndroid Build Coastguard Worker      */
134*ec779b8eSAndroid Build Coastguard Worker     int getCount(void) const;
135*ec779b8eSAndroid Build Coastguard Worker 
136*ec779b8eSAndroid Build Coastguard Worker     /**
137*ec779b8eSAndroid Build Coastguard Worker      * Adds constraint information as <key, value> pair to this instance
138*ec779b8eSAndroid Build Coastguard Worker      *
139*ec779b8eSAndroid Build Coastguard Worker      * @param[in] key Key to add
140*ec779b8eSAndroid Build Coastguard Worker      * @param[in] value Value to add
141*ec779b8eSAndroid Build Coastguard Worker      * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
142*ec779b8eSAndroid Build Coastguard Worker      */
143*ec779b8eSAndroid Build Coastguard Worker     status_t put(const String8* key, const char* value);
144*ec779b8eSAndroid Build Coastguard Worker 
145*ec779b8eSAndroid Build Coastguard Worker     /**
146*ec779b8eSAndroid Build Coastguard Worker      * Retrieves the value of given key
147*ec779b8eSAndroid Build Coastguard Worker      *
148*ec779b8eSAndroid Build Coastguard Worker      * @param key Key whose value to be retrieved
149*ec779b8eSAndroid Build Coastguard Worker      * @return The value
150*ec779b8eSAndroid Build Coastguard Worker      */
151*ec779b8eSAndroid Build Coastguard Worker     String8 get(const String8& key) const;
152*ec779b8eSAndroid Build Coastguard Worker 
153*ec779b8eSAndroid Build Coastguard Worker      /**
154*ec779b8eSAndroid Build Coastguard Worker      * Retrieves the value as byte array of given key
155*ec779b8eSAndroid Build Coastguard Worker      * @param key Key whose value to be retrieved as byte array
156*ec779b8eSAndroid Build Coastguard Worker      * @return The byte array value
157*ec779b8eSAndroid Build Coastguard Worker      */
158*ec779b8eSAndroid Build Coastguard Worker     const char* getAsByteArray(const String8* key) const;
159*ec779b8eSAndroid Build Coastguard Worker 
160*ec779b8eSAndroid Build Coastguard Worker     /**
161*ec779b8eSAndroid Build Coastguard Worker      * Returns KeyIterator object to walk through the keys associated with this instance
162*ec779b8eSAndroid Build Coastguard Worker      *
163*ec779b8eSAndroid Build Coastguard Worker      * @return KeyIterator object
164*ec779b8eSAndroid Build Coastguard Worker      */
165*ec779b8eSAndroid Build Coastguard Worker     KeyIterator keyIterator();
166*ec779b8eSAndroid Build Coastguard Worker 
167*ec779b8eSAndroid Build Coastguard Worker     /**
168*ec779b8eSAndroid Build Coastguard Worker      * Returns Iterator object to walk through the values associated with this instance
169*ec779b8eSAndroid Build Coastguard Worker      *
170*ec779b8eSAndroid Build Coastguard Worker      * @return Iterator object
171*ec779b8eSAndroid Build Coastguard Worker      */
172*ec779b8eSAndroid Build Coastguard Worker     Iterator iterator();
173*ec779b8eSAndroid Build Coastguard Worker private:
174*ec779b8eSAndroid Build Coastguard Worker     const char* getValue(const String8* key) const;
175*ec779b8eSAndroid Build Coastguard Worker private:
176*ec779b8eSAndroid Build Coastguard Worker     typedef KeyedVector<String8, const char*> DrmConstraintsMap;
177*ec779b8eSAndroid Build Coastguard Worker     DrmConstraintsMap mConstraintMap;
178*ec779b8eSAndroid Build Coastguard Worker };
179*ec779b8eSAndroid Build Coastguard Worker 
180*ec779b8eSAndroid Build Coastguard Worker };
181*ec779b8eSAndroid Build Coastguard Worker 
182*ec779b8eSAndroid Build Coastguard Worker #endif /* __DRM_CONSTRAINTS_H__ */
183*ec779b8eSAndroid Build Coastguard Worker 
184