xref: /aosp_15_r20/frameworks/av/drm/common/DrmMetadata.cpp (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 #include <drm/DrmMetadata.h>
18*ec779b8eSAndroid Build Coastguard Worker 
19*ec779b8eSAndroid Build Coastguard Worker using namespace android;
20*ec779b8eSAndroid Build Coastguard Worker 
getCount(void) const21*ec779b8eSAndroid Build Coastguard Worker int DrmMetadata::getCount(void) const {
22*ec779b8eSAndroid Build Coastguard Worker 	return mMetadataMap.size();
23*ec779b8eSAndroid Build Coastguard Worker }
24*ec779b8eSAndroid Build Coastguard Worker 
put(const String8 * key,const char * value)25*ec779b8eSAndroid Build Coastguard Worker status_t DrmMetadata::put(const String8* key,
26*ec779b8eSAndroid Build Coastguard Worker                           const char* value) {
27*ec779b8eSAndroid Build Coastguard Worker     if((value != NULL) && (key != NULL)) {
28*ec779b8eSAndroid Build Coastguard Worker         int length = strlen(value);
29*ec779b8eSAndroid Build Coastguard Worker         char* charValue = new char[length + 1];
30*ec779b8eSAndroid Build Coastguard Worker 
31*ec779b8eSAndroid Build Coastguard Worker         memcpy(charValue, value, length);
32*ec779b8eSAndroid Build Coastguard Worker         charValue[length] = '\0';
33*ec779b8eSAndroid Build Coastguard Worker         mMetadataMap.add(*key, charValue);
34*ec779b8eSAndroid Build Coastguard Worker     }
35*ec779b8eSAndroid Build Coastguard Worker     return NO_ERROR;
36*ec779b8eSAndroid Build Coastguard Worker }
37*ec779b8eSAndroid Build Coastguard Worker 
get(const String8 & key) const38*ec779b8eSAndroid Build Coastguard Worker String8 DrmMetadata::get(const String8& key) const {
39*ec779b8eSAndroid Build Coastguard Worker     if (NULL != getValue(&key)) {
40*ec779b8eSAndroid Build Coastguard Worker         return String8(getValue(&key));
41*ec779b8eSAndroid Build Coastguard Worker     }
42*ec779b8eSAndroid Build Coastguard Worker     else {
43*ec779b8eSAndroid Build Coastguard Worker         return String8("");
44*ec779b8eSAndroid Build Coastguard Worker     }
45*ec779b8eSAndroid Build Coastguard Worker }
46*ec779b8eSAndroid Build Coastguard Worker 
getValue(const String8 * key) const47*ec779b8eSAndroid Build Coastguard Worker const char* DrmMetadata::getValue(const String8* key) const {
48*ec779b8eSAndroid Build Coastguard Worker     if(key != NULL) {
49*ec779b8eSAndroid Build Coastguard Worker         if (NAME_NOT_FOUND != mMetadataMap.indexOfKey(*key)) {
50*ec779b8eSAndroid Build Coastguard Worker             return mMetadataMap.valueFor(*key);
51*ec779b8eSAndroid Build Coastguard Worker         }
52*ec779b8eSAndroid Build Coastguard Worker         else {
53*ec779b8eSAndroid Build Coastguard Worker             return NULL;
54*ec779b8eSAndroid Build Coastguard Worker         }
55*ec779b8eSAndroid Build Coastguard Worker     } else {
56*ec779b8eSAndroid Build Coastguard Worker         return NULL;
57*ec779b8eSAndroid Build Coastguard Worker     }
58*ec779b8eSAndroid Build Coastguard Worker }
59*ec779b8eSAndroid Build Coastguard Worker 
getAsByteArray(const String8 * key) const60*ec779b8eSAndroid Build Coastguard Worker const char* DrmMetadata::getAsByteArray(const String8* key) const {
61*ec779b8eSAndroid Build Coastguard Worker     return getValue(key);
62*ec779b8eSAndroid Build Coastguard Worker }
63*ec779b8eSAndroid Build Coastguard Worker 
hasNext()64*ec779b8eSAndroid Build Coastguard Worker bool DrmMetadata::KeyIterator::hasNext() {
65*ec779b8eSAndroid Build Coastguard Worker     return mIndex < mDrmMetadata->mMetadataMap.size();
66*ec779b8eSAndroid Build Coastguard Worker }
67*ec779b8eSAndroid Build Coastguard Worker 
next()68*ec779b8eSAndroid Build Coastguard Worker const String8& DrmMetadata::KeyIterator::next() {
69*ec779b8eSAndroid Build Coastguard Worker     const String8& key = mDrmMetadata->mMetadataMap.keyAt(mIndex);
70*ec779b8eSAndroid Build Coastguard Worker     mIndex++;
71*ec779b8eSAndroid Build Coastguard Worker     return key;
72*ec779b8eSAndroid Build Coastguard Worker }
73*ec779b8eSAndroid Build Coastguard Worker 
keyIterator()74*ec779b8eSAndroid Build Coastguard Worker DrmMetadata::KeyIterator DrmMetadata::keyIterator() {
75*ec779b8eSAndroid Build Coastguard Worker     return KeyIterator(this);
76*ec779b8eSAndroid Build Coastguard Worker }
77*ec779b8eSAndroid Build Coastguard Worker 
KeyIterator(const DrmMetadata::KeyIterator & keyIterator)78*ec779b8eSAndroid Build Coastguard Worker DrmMetadata::KeyIterator::KeyIterator(const DrmMetadata::KeyIterator& keyIterator) :
79*ec779b8eSAndroid Build Coastguard Worker     mDrmMetadata(keyIterator.mDrmMetadata),
80*ec779b8eSAndroid Build Coastguard Worker     mIndex(keyIterator.mIndex) {
81*ec779b8eSAndroid Build Coastguard Worker     ALOGV("DrmMetadata::KeyIterator::KeyIterator");
82*ec779b8eSAndroid Build Coastguard Worker }
83*ec779b8eSAndroid Build Coastguard Worker 
operator =(const DrmMetadata::KeyIterator & keyIterator)84*ec779b8eSAndroid Build Coastguard Worker DrmMetadata::KeyIterator& DrmMetadata::KeyIterator::operator=(const DrmMetadata::KeyIterator& keyIterator) {
85*ec779b8eSAndroid Build Coastguard Worker     ALOGV("DrmMetadata::KeyIterator::operator=");
86*ec779b8eSAndroid Build Coastguard Worker     mDrmMetadata = keyIterator.mDrmMetadata;
87*ec779b8eSAndroid Build Coastguard Worker     mIndex = keyIterator.mIndex;
88*ec779b8eSAndroid Build Coastguard Worker     return *this;
89*ec779b8eSAndroid Build Coastguard Worker }
90*ec779b8eSAndroid Build Coastguard Worker 
91*ec779b8eSAndroid Build Coastguard Worker 
iterator()92*ec779b8eSAndroid Build Coastguard Worker DrmMetadata::Iterator DrmMetadata::iterator() {
93*ec779b8eSAndroid Build Coastguard Worker     return Iterator(this);
94*ec779b8eSAndroid Build Coastguard Worker }
95*ec779b8eSAndroid Build Coastguard Worker 
Iterator(const DrmMetadata::Iterator & iterator)96*ec779b8eSAndroid Build Coastguard Worker DrmMetadata::Iterator::Iterator(const DrmMetadata::Iterator& iterator) :
97*ec779b8eSAndroid Build Coastguard Worker     mDrmMetadata(iterator.mDrmMetadata),
98*ec779b8eSAndroid Build Coastguard Worker     mIndex(iterator.mIndex) {
99*ec779b8eSAndroid Build Coastguard Worker     ALOGV("DrmMetadata::Iterator::Iterator");
100*ec779b8eSAndroid Build Coastguard Worker }
101*ec779b8eSAndroid Build Coastguard Worker 
operator =(const DrmMetadata::Iterator & iterator)102*ec779b8eSAndroid Build Coastguard Worker DrmMetadata::Iterator& DrmMetadata::Iterator::operator=(const DrmMetadata::Iterator& iterator) {
103*ec779b8eSAndroid Build Coastguard Worker     ALOGV("DrmMetadata::Iterator::operator=");
104*ec779b8eSAndroid Build Coastguard Worker     mDrmMetadata = iterator.mDrmMetadata;
105*ec779b8eSAndroid Build Coastguard Worker     mIndex = iterator.mIndex;
106*ec779b8eSAndroid Build Coastguard Worker     return *this;
107*ec779b8eSAndroid Build Coastguard Worker }
108*ec779b8eSAndroid Build Coastguard Worker 
hasNext()109*ec779b8eSAndroid Build Coastguard Worker bool DrmMetadata::Iterator::hasNext() {
110*ec779b8eSAndroid Build Coastguard Worker     return mIndex < mDrmMetadata->mMetadataMap.size();
111*ec779b8eSAndroid Build Coastguard Worker }
112*ec779b8eSAndroid Build Coastguard Worker 
next()113*ec779b8eSAndroid Build Coastguard Worker String8 DrmMetadata::Iterator::next() {
114*ec779b8eSAndroid Build Coastguard Worker     String8 value = String8(mDrmMetadata->mMetadataMap.editValueAt(mIndex));
115*ec779b8eSAndroid Build Coastguard Worker     mIndex++;
116*ec779b8eSAndroid Build Coastguard Worker     return value;
117*ec779b8eSAndroid Build Coastguard Worker }
118