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