13473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi/* 23473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Copyright (C) 2010 The Android Open Source Project 33473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 43473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Licensed under the Apache License, Version 2.0 (the "License"); 53473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * you may not use this file except in compliance with the License. 63473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * You may obtain a copy of the License at 73473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 83473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * http://www.apache.org/licenses/LICENSE-2.0 93473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 103473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Unless required by applicable law or agreed to in writing, software 113473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * distributed under the License is distributed on an "AS IS" BASIS, 123473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * See the License for the specific language governing permissions and 143473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * limitations under the License. 153473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi */ 163473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 173473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi#ifndef __DRM_METADATA_H__ 183473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi#define __DRM_METADATA_H__ 193473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 203473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi#include "drm_framework_common.h" 213473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 223473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aiminamespace android { 233473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 243473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi/** 253473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * This is an utility class which contains the constraints information. 263473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 273473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * As a result of DrmManagerClient::getMetadata(const String8*) 283473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * an instance of DrmMetadata would be returned. 293473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi */ 303473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiclass DrmMetadata { 313473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimipublic: 323473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi /** 333473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Iterator for key 343473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi */ 353473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi class KeyIterator { 363473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi friend class DrmMetadata; 373473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi private: 383473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi KeyIterator(DrmMetadata* drmMetadata) : mDrmMetadata(drmMetadata), mIndex(0) {} 393473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 403473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi public: 413473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi KeyIterator(const KeyIterator& keyIterator); 423473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi KeyIterator& operator=(const KeyIterator& keyIterator); 433473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi virtual ~KeyIterator() {} 443473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 453473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi public: 463473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi bool hasNext(); 473473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi const String8& next(); 483473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 493473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi private: 503473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadata* mDrmMetadata; 513473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi unsigned int mIndex; 523473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi }; 533473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 543473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi /** 553473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Iterator for constraints 563473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi */ 573473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi class Iterator { 583473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi friend class DrmMetadata; 593473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi private: 603473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi Iterator(DrmMetadata* drmMetadata) : mDrmMetadata(drmMetadata), mIndex(0) {} 613473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 623473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi public: 633473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi Iterator(const Iterator& iterator); 643473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi Iterator& operator=(const Iterator& iterator); 653473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi virtual ~Iterator() {} 663473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 673473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi public: 683473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi bool hasNext(); 693473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi String8 next(); 703473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 713473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi private: 723473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadata* mDrmMetadata; 733473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi unsigned int mIndex; 743473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi }; 753473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 763473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimipublic: 773473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadata() {} 783473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi virtual ~DrmMetadata() { 793473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadata::KeyIterator keyIt = this->keyIterator(); 803473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 813473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi while (keyIt.hasNext()) { 823473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi String8 key = keyIt.next(); 833473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi const char* value = this->getAsByteArray(&key); 843473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi if (NULL != value) { 853473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi delete[] value; 863473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi value = NULL; 873473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 883473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 893473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mMetadataMap.clear(); 903473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 913473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 923473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimipublic: 933473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi int getCount(void) const; 943473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi status_t put(const String8* key, const char* value); 953473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi String8 get(const String8& key) const; 963473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi const char* getAsByteArray(const String8* key) const; 973473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi KeyIterator keyIterator(); 983473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi Iterator iterator(); 993473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1003473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiprivate: 1013473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi const char* getValue(const String8* key) const; 1023473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1033473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiprivate: 1043473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi typedef KeyedVector<String8, const char*> DrmMetadataMap; 1053473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadataMap mMetadataMap; 1063473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}; 1073473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1083473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}; 1093473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1103473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi#endif /* __DRM_METADATA_H__ */ 1113473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 112