IMetadataExtraction.c revision 7f5cc1afe49395fefaad9b2bbd728a45d1bfda6a
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
22static 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
42static 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
63static 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
84static 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
105static 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
126static 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
152static 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
164static 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
174void 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