• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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             result = android_audioPlayer_metadata_getItemCount((CAudioPlayer *)thiz->mThis,
32                     pItemCount);
33         } else {
34             result = SL_RESULT_PARAMETER_INVALID;
35         }
36     }
37 
38     SL_LEAVE_INTERFACE
39 }
40 
41 
IMetadataExtraction_GetKeySize(SLMetadataExtractionItf self,SLuint32 index,SLuint32 * pKeySize)42 static SLresult IMetadataExtraction_GetKeySize(SLMetadataExtractionItf self,
43     SLuint32 index, SLuint32 *pKeySize)
44 {
45     SL_ENTER_INTERFACE
46 
47     if (NULL == pKeySize) {
48         result = SL_RESULT_PARAMETER_INVALID;
49     } else {
50         IMetadataExtraction *thiz = (IMetadataExtraction *) self;
51         if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
52             result = android_audioPlayer_metadata_getKeySize((CAudioPlayer *)thiz->mThis,
53                     index, pKeySize);
54         } else {
55             result = SL_RESULT_PARAMETER_INVALID;
56         }
57     }
58 
59     SL_LEAVE_INTERFACE
60 }
61 
62 
IMetadataExtraction_GetKey(SLMetadataExtractionItf self,SLuint32 index,SLuint32 keySize,SLMetadataInfo * pKey)63 static SLresult IMetadataExtraction_GetKey(SLMetadataExtractionItf self,
64     SLuint32 index, SLuint32 keySize, SLMetadataInfo *pKey)
65 {
66     SL_ENTER_INTERFACE
67 
68     if (NULL == pKey) {
69         result = SL_RESULT_PARAMETER_INVALID;
70     } else {
71         IMetadataExtraction *thiz = (IMetadataExtraction *) self;
72         if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
73             result = android_audioPlayer_metadata_getKey((CAudioPlayer *)thiz->mThis,
74                     index, keySize, pKey);
75         } else {
76             result = SL_RESULT_PARAMETER_INVALID;
77         }
78     }
79 
80     SL_LEAVE_INTERFACE
81 }
82 
83 
IMetadataExtraction_GetValueSize(SLMetadataExtractionItf self,SLuint32 index,SLuint32 * pValueSize)84 static SLresult IMetadataExtraction_GetValueSize(SLMetadataExtractionItf self,
85     SLuint32 index, SLuint32 *pValueSize)
86 {
87     SL_ENTER_INTERFACE
88 
89     if (NULL == pValueSize) {
90         result = SL_RESULT_PARAMETER_INVALID;
91     } else {
92         IMetadataExtraction *thiz = (IMetadataExtraction *) self;
93         if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
94             result = android_audioPlayer_metadata_getValueSize((CAudioPlayer *)thiz->mThis,
95                     index, pValueSize);
96         } else {
97             result = SL_RESULT_PARAMETER_INVALID;
98         }
99     }
100 
101     SL_LEAVE_INTERFACE
102 }
103 
104 
IMetadataExtraction_GetValue(SLMetadataExtractionItf self,SLuint32 index,SLuint32 valueSize,SLMetadataInfo * pValue)105 static SLresult IMetadataExtraction_GetValue(SLMetadataExtractionItf self,
106     SLuint32 index, SLuint32 valueSize, SLMetadataInfo *pValue)
107 {
108     SL_ENTER_INTERFACE
109 
110     if (NULL == pValue) {
111         result = SL_RESULT_PARAMETER_INVALID;
112     } else {
113         IMetadataExtraction *thiz = (IMetadataExtraction *) self;
114         if (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(thiz)) {
115             result = android_audioPlayer_metadata_getValue((CAudioPlayer *)thiz->mThis,
116                     index, valueSize, pValue);
117         } else {
118             result = SL_RESULT_PARAMETER_INVALID;
119         }
120     }
121 
122     SL_LEAVE_INTERFACE
123 }
124 
125 
IMetadataExtraction_AddKeyFilter(SLMetadataExtractionItf self,SLuint32 keySize,const void * pKey,SLuint32 keyEncoding,const SLchar * pValueLangCountry,SLuint32 valueEncoding,SLuint8 filterMask)126 static SLresult IMetadataExtraction_AddKeyFilter(SLMetadataExtractionItf self,
127     SLuint32 keySize, const void *pKey, SLuint32 keyEncoding,
128     const SLchar *pValueLangCountry, SLuint32 valueEncoding, SLuint8 filterMask)
129 {
130     SL_ENTER_INTERFACE
131 
132     if (NULL == pKey || NULL == pValueLangCountry || (filterMask & ~(SL_METADATA_FILTER_KEY |
133         SL_METADATA_FILTER_KEY | SL_METADATA_FILTER_KEY))) {
134         result = SL_RESULT_PARAMETER_INVALID;
135     } else {
136         IMetadataExtraction *thiz = (IMetadataExtraction *) self;
137         interface_lock_exclusive(thiz);
138         thiz->mKeySize = keySize;
139         thiz->mKey = pKey;
140         thiz->mKeyEncoding = keyEncoding;
141         thiz->mValueLangCountry = pValueLangCountry; // should make a local copy
142         thiz->mValueEncoding = valueEncoding;
143         thiz->mFilterMask = filterMask;
144         interface_unlock_exclusive(thiz);
145         result = SL_RESULT_SUCCESS;
146     }
147 
148     SL_LEAVE_INTERFACE
149 }
150 
151 
IMetadataExtraction_ClearKeyFilter(SLMetadataExtractionItf self)152 static SLresult IMetadataExtraction_ClearKeyFilter(SLMetadataExtractionItf self)
153 {
154     SL_ENTER_INTERFACE
155 
156     IMetadataExtraction *thiz = (IMetadataExtraction *) self;
157     thiz->mKeyFilter = 0;
158     result = SL_RESULT_SUCCESS;
159 
160     SL_LEAVE_INTERFACE
161 }
162 
163 
164 static const struct SLMetadataExtractionItf_ IMetadataExtraction_Itf = {
165     IMetadataExtraction_GetItemCount,
166     IMetadataExtraction_GetKeySize,
167     IMetadataExtraction_GetKey,
168     IMetadataExtraction_GetValueSize,
169     IMetadataExtraction_GetValue,
170     IMetadataExtraction_AddKeyFilter,
171     IMetadataExtraction_ClearKeyFilter
172 };
173 
IMetadataExtraction_init(void * self)174 void IMetadataExtraction_init(void *self)
175 {
176     IMetadataExtraction *thiz = (IMetadataExtraction *) self;
177     thiz->mItf = &IMetadataExtraction_Itf;
178     thiz->mKeySize = 0;
179     thiz->mKey = NULL;
180     thiz->mKeyEncoding = 0 /*TBD*/;
181     thiz->mValueLangCountry = 0 /*TBD*/;
182     thiz->mValueEncoding = 0 /*TBD*/;
183     thiz->mFilterMask = 0 /*TBD*/;
184     thiz->mKeyFilter = 0;
185 }
186