1 /*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /* MetadataExtraction implementation */
18
19 #include "sles_allinclusive.h"
20
21
IMetadataExtraction_GetItemCount(SLMetadataExtractionItf self,SLuint32 * pItemCount)22 static SLresult IMetadataExtraction_GetItemCount(SLMetadataExtractionItf self, SLuint32 *pItemCount)
23 {
24 SL_ENTER_INTERFACE
25
26 if (NULL == pItemCount) {
27 result = SL_RESULT_PARAMETER_INVALID;
28 } else {
29 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
30 if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
31 #ifdef ANDROID
32 result = android_audioPlayer_metadata_getItemCount((CAudioPlayer *)thiz->mThis,
33 pItemCount);
34 #else
35 result = SL_RESULT_FEATURE_UNSUPPORTED;
36 #endif
37 } else {
38 result = SL_RESULT_PARAMETER_INVALID;
39 }
40 }
41
42 SL_LEAVE_INTERFACE
43 }
44
45
IMetadataExtraction_GetKeySize(SLMetadataExtractionItf self,SLuint32 index,SLuint32 * pKeySize)46 static SLresult IMetadataExtraction_GetKeySize(SLMetadataExtractionItf self,
47 SLuint32 index, SLuint32 *pKeySize)
48 {
49 SL_ENTER_INTERFACE
50
51 if (NULL == pKeySize) {
52 result = SL_RESULT_PARAMETER_INVALID;
53 } else {
54 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
55 if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
56 #ifdef ANDROID
57 result = android_audioPlayer_metadata_getKeySize((CAudioPlayer *)thiz->mThis,
58 index, pKeySize);
59 #else
60 result = SL_RESULT_FEATURE_UNSUPPORTED;
61 #endif
62 } else {
63 result = SL_RESULT_PARAMETER_INVALID;
64 }
65 }
66
67 SL_LEAVE_INTERFACE
68 }
69
70
IMetadataExtraction_GetKey(SLMetadataExtractionItf self,SLuint32 index,SLuint32 keySize,SLMetadataInfo * pKey)71 static SLresult IMetadataExtraction_GetKey(SLMetadataExtractionItf self,
72 SLuint32 index, SLuint32 keySize, SLMetadataInfo *pKey)
73 {
74 SL_ENTER_INTERFACE
75
76 if (NULL == pKey) {
77 result = SL_RESULT_PARAMETER_INVALID;
78 } else {
79 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
80 if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
81 #ifdef ANDROID
82 result = android_audioPlayer_metadata_getKey((CAudioPlayer *)thiz->mThis,
83 index, keySize, pKey);
84 #else
85 result = SL_RESULT_FEATURE_UNSUPPORTED;
86 #endif
87 } else {
88 result = SL_RESULT_PARAMETER_INVALID;
89 }
90 }
91
92 SL_LEAVE_INTERFACE
93 }
94
95
IMetadataExtraction_GetValueSize(SLMetadataExtractionItf self,SLuint32 index,SLuint32 * pValueSize)96 static SLresult IMetadataExtraction_GetValueSize(SLMetadataExtractionItf self,
97 SLuint32 index, SLuint32 *pValueSize)
98 {
99 SL_ENTER_INTERFACE
100
101 if (NULL == pValueSize) {
102 result = SL_RESULT_PARAMETER_INVALID;
103 } else {
104 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
105 if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
106 #ifdef ANDROID
107 result = android_audioPlayer_metadata_getValueSize((CAudioPlayer *)thiz->mThis,
108 index, pValueSize);
109 #else
110 result = SL_RESULT_FEATURE_UNSUPPORTED;
111 #endif
112 } else {
113 result = SL_RESULT_PARAMETER_INVALID;
114 }
115 }
116
117 SL_LEAVE_INTERFACE
118 }
119
120
IMetadataExtraction_GetValue(SLMetadataExtractionItf self,SLuint32 index,SLuint32 valueSize,SLMetadataInfo * pValue)121 static SLresult IMetadataExtraction_GetValue(SLMetadataExtractionItf self,
122 SLuint32 index, SLuint32 valueSize, SLMetadataInfo *pValue)
123 {
124 SL_ENTER_INTERFACE
125
126 if (NULL == pValue) {
127 result = SL_RESULT_PARAMETER_INVALID;
128 } else {
129 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
130 if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
131 #ifdef ANDROID
132 result = android_audioPlayer_metadata_getValue((CAudioPlayer *)thiz->mThis,
133 index, valueSize, pValue);
134 #else
135 result = SL_RESULT_FEATURE_UNSUPPORTED;
136 #endif
137 } else {
138 result = SL_RESULT_PARAMETER_INVALID;
139 }
140 }
141
142 SL_LEAVE_INTERFACE
143 }
144
145
IMetadataExtraction_AddKeyFilter(SLMetadataExtractionItf self,SLuint32 keySize,const void * pKey,SLuint32 keyEncoding,const SLchar * pValueLangCountry,SLuint32 valueEncoding,SLuint8 filterMask)146 static SLresult IMetadataExtraction_AddKeyFilter(SLMetadataExtractionItf self,
147 SLuint32 keySize, const void *pKey, SLuint32 keyEncoding,
148 const SLchar *pValueLangCountry, SLuint32 valueEncoding, SLuint8 filterMask)
149 {
150 SL_ENTER_INTERFACE
151
152 if (NULL == pKey || NULL == pValueLangCountry || (filterMask & ~(SL_METADATA_FILTER_KEY |
153 SL_METADATA_FILTER_LANG | SL_METADATA_FILTER_ENCODING))) {
154 result = SL_RESULT_PARAMETER_INVALID;
155 } else {
156 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
157 interface_lock_exclusive(thiz);
158 thiz->mKeySize = keySize;
159 thiz->mKey = pKey;
160 thiz->mKeyEncoding = keyEncoding;
161 thiz->mValueLangCountry = pValueLangCountry; // should make a local copy
162 thiz->mValueEncoding = valueEncoding;
163 thiz->mFilterMask = filterMask;
164 interface_unlock_exclusive(thiz);
165 result = SL_RESULT_SUCCESS;
166 }
167
168 SL_LEAVE_INTERFACE
169 }
170
171
IMetadataExtraction_ClearKeyFilter(SLMetadataExtractionItf self)172 static SLresult IMetadataExtraction_ClearKeyFilter(SLMetadataExtractionItf self)
173 {
174 SL_ENTER_INTERFACE
175
176 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
177 thiz->mKeyFilter = 0;
178 result = SL_RESULT_SUCCESS;
179
180 SL_LEAVE_INTERFACE
181 }
182
183
184 static const struct SLMetadataExtractionItf_ IMetadataExtraction_Itf = {
185 IMetadataExtraction_GetItemCount,
186 IMetadataExtraction_GetKeySize,
187 IMetadataExtraction_GetKey,
188 IMetadataExtraction_GetValueSize,
189 IMetadataExtraction_GetValue,
190 IMetadataExtraction_AddKeyFilter,
191 IMetadataExtraction_ClearKeyFilter
192 };
193
IMetadataExtraction_init(void * self)194 void IMetadataExtraction_init(void *self)
195 {
196 IMetadataExtraction *thiz = (IMetadataExtraction *) self;
197 thiz->mItf = &IMetadataExtraction_Itf;
198 thiz->mKeySize = 0;
199 thiz->mKey = NULL;
200 thiz->mKeyEncoding = 0 /*TBD*/;
201 thiz->mValueLangCountry = 0 /*TBD*/;
202 thiz->mValueEncoding = 0 /*TBD*/;
203 thiz->mFilterMask = 0 /*TBD*/;
204 thiz->mKeyFilter = 0;
205 }
206