xref: /aosp_15_r20/frameworks/av/include/drm/DrmMetadata.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_METADATA_H__
18*ec779b8eSAndroid Build Coastguard Worker #define __DRM_METADATA_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::getMetadata(const String8*)
28*ec779b8eSAndroid Build Coastguard Worker  * an instance of DrmMetadata would be returned.
29*ec779b8eSAndroid Build Coastguard Worker  */
30*ec779b8eSAndroid Build Coastguard Worker class DrmMetadata {
31*ec779b8eSAndroid Build Coastguard Worker public:
32*ec779b8eSAndroid Build Coastguard Worker     /**
33*ec779b8eSAndroid Build Coastguard Worker      * Iterator for key
34*ec779b8eSAndroid Build Coastguard Worker      */
35*ec779b8eSAndroid Build Coastguard Worker     class KeyIterator {
36*ec779b8eSAndroid Build Coastguard Worker         friend class DrmMetadata;
37*ec779b8eSAndroid Build Coastguard Worker     private:
KeyIterator(DrmMetadata * drmMetadata)38*ec779b8eSAndroid Build Coastguard Worker         explicit KeyIterator(DrmMetadata* drmMetadata) : mDrmMetadata(drmMetadata), mIndex(0) {}
39*ec779b8eSAndroid Build Coastguard Worker 
40*ec779b8eSAndroid Build Coastguard Worker     public:
41*ec779b8eSAndroid Build Coastguard Worker         KeyIterator(const KeyIterator& keyIterator);
42*ec779b8eSAndroid Build Coastguard Worker         KeyIterator& operator=(const KeyIterator& keyIterator);
~KeyIterator()43*ec779b8eSAndroid Build Coastguard Worker         virtual ~KeyIterator() {}
44*ec779b8eSAndroid Build Coastguard Worker 
45*ec779b8eSAndroid Build Coastguard Worker     public:
46*ec779b8eSAndroid Build Coastguard Worker         bool hasNext();
47*ec779b8eSAndroid Build Coastguard Worker         const String8& next();
48*ec779b8eSAndroid Build Coastguard Worker 
49*ec779b8eSAndroid Build Coastguard Worker     private:
50*ec779b8eSAndroid Build Coastguard Worker         DrmMetadata* mDrmMetadata;
51*ec779b8eSAndroid Build Coastguard Worker         unsigned int mIndex;
52*ec779b8eSAndroid Build Coastguard Worker     };
53*ec779b8eSAndroid Build Coastguard Worker 
54*ec779b8eSAndroid Build Coastguard Worker     /**
55*ec779b8eSAndroid Build Coastguard Worker      * Iterator for constraints
56*ec779b8eSAndroid Build Coastguard Worker      */
57*ec779b8eSAndroid Build Coastguard Worker     class Iterator {
58*ec779b8eSAndroid Build Coastguard Worker         friend class DrmMetadata;
59*ec779b8eSAndroid Build Coastguard Worker     private:
Iterator(DrmMetadata * drmMetadata)60*ec779b8eSAndroid Build Coastguard Worker         explicit Iterator(DrmMetadata* drmMetadata) : mDrmMetadata(drmMetadata), mIndex(0) {}
61*ec779b8eSAndroid Build Coastguard Worker 
62*ec779b8eSAndroid Build Coastguard Worker     public:
63*ec779b8eSAndroid Build Coastguard Worker         Iterator(const Iterator& iterator);
64*ec779b8eSAndroid Build Coastguard Worker         Iterator& operator=(const Iterator& iterator);
~Iterator()65*ec779b8eSAndroid Build Coastguard Worker         virtual ~Iterator() {}
66*ec779b8eSAndroid Build Coastguard Worker 
67*ec779b8eSAndroid Build Coastguard Worker     public:
68*ec779b8eSAndroid Build Coastguard Worker         bool hasNext();
69*ec779b8eSAndroid Build Coastguard Worker         String8 next();
70*ec779b8eSAndroid Build Coastguard Worker 
71*ec779b8eSAndroid Build Coastguard Worker     private:
72*ec779b8eSAndroid Build Coastguard Worker         DrmMetadata* mDrmMetadata;
73*ec779b8eSAndroid Build Coastguard Worker         unsigned int mIndex;
74*ec779b8eSAndroid Build Coastguard Worker     };
75*ec779b8eSAndroid Build Coastguard Worker 
76*ec779b8eSAndroid Build Coastguard Worker public:
DrmMetadata()77*ec779b8eSAndroid Build Coastguard Worker     DrmMetadata() {}
~DrmMetadata()78*ec779b8eSAndroid Build Coastguard Worker     virtual ~DrmMetadata() {
79*ec779b8eSAndroid Build Coastguard Worker         DrmMetadata::KeyIterator keyIt = this->keyIterator();
80*ec779b8eSAndroid Build Coastguard Worker 
81*ec779b8eSAndroid Build Coastguard Worker         while (keyIt.hasNext()) {
82*ec779b8eSAndroid Build Coastguard Worker             String8 key = keyIt.next();
83*ec779b8eSAndroid Build Coastguard Worker             const char* value = this->getAsByteArray(&key);
84*ec779b8eSAndroid Build Coastguard Worker             if (NULL != value) {
85*ec779b8eSAndroid Build Coastguard Worker                 delete[] value;
86*ec779b8eSAndroid Build Coastguard Worker                 value = NULL;
87*ec779b8eSAndroid Build Coastguard Worker             }
88*ec779b8eSAndroid Build Coastguard Worker         }
89*ec779b8eSAndroid Build Coastguard Worker         mMetadataMap.clear();
90*ec779b8eSAndroid Build Coastguard Worker     }
91*ec779b8eSAndroid Build Coastguard Worker 
92*ec779b8eSAndroid Build Coastguard Worker public:
93*ec779b8eSAndroid Build Coastguard Worker     int getCount(void) const;
94*ec779b8eSAndroid Build Coastguard Worker     status_t put(const String8* key, const char* value);
95*ec779b8eSAndroid Build Coastguard Worker     String8 get(const String8& key) const;
96*ec779b8eSAndroid Build Coastguard Worker     const char* getAsByteArray(const String8* key) const;
97*ec779b8eSAndroid Build Coastguard Worker     KeyIterator keyIterator();
98*ec779b8eSAndroid Build Coastguard Worker     Iterator iterator();
99*ec779b8eSAndroid Build Coastguard Worker 
100*ec779b8eSAndroid Build Coastguard Worker private:
101*ec779b8eSAndroid Build Coastguard Worker     const char* getValue(const String8* key) const;
102*ec779b8eSAndroid Build Coastguard Worker 
103*ec779b8eSAndroid Build Coastguard Worker private:
104*ec779b8eSAndroid Build Coastguard Worker     typedef KeyedVector<String8, const char*> DrmMetadataMap;
105*ec779b8eSAndroid Build Coastguard Worker     DrmMetadataMap mMetadataMap;
106*ec779b8eSAndroid Build Coastguard Worker };
107*ec779b8eSAndroid Build Coastguard Worker 
108*ec779b8eSAndroid Build Coastguard Worker };
109*ec779b8eSAndroid Build Coastguard Worker 
110*ec779b8eSAndroid Build Coastguard Worker #endif /* __DRM_METADATA_H__ */
111*ec779b8eSAndroid Build Coastguard Worker 
112