IMetadataExtraction.c revision bcc5c7225e3b7a1dbf2e9e830987f69167acf06f
161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten/* 261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * 461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * you may not use this file except in compliance with the License. 661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * You may obtain a copy of the License at 761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * 861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * 1061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * Unless required by applicable law or agreed to in writing, software 1161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 1261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * See the License for the specific language governing permissions and 1461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * limitations under the License. 1561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten */ 1661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten/* MetadataExtraction implementation */ 1861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten#include "sles_allinclusive.h" 2061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 22d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IMetadataExtraction_GetItemCount(SLMetadataExtractionItf self, SLuint32 *pItemCount) 2361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 24ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 26bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten //IMetadataExtraction *thiz = (IMetadataExtraction *) self; 27ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pItemCount) { 28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 29ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 30ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pItemCount = 0; 31ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 32ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 33ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 34ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 3561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 3661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 37ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 3861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataExtraction_GetKeySize(SLMetadataExtractionItf self, 3961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLuint32 index, SLuint32 *pKeySize) 4061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 42ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 43bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten //IMetadataExtraction *thiz = (IMetadataExtraction *) self; 44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pKeySize) { 45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 47ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pKeySize = 0; 48ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 50ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 51ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 5261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 5361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 54ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 5561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataExtraction_GetKey(SLMetadataExtractionItf self, 5661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLuint32 index, SLuint32 keySize, SLMetadataInfo *pKey) 5761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 60bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten //IMetadataExtraction *thiz = (IMetadataExtraction *) self; 61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pKey) { 62ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 63ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SLMetadataInfo key; 65ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten key.size = 1; 66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten key.encoding = SL_CHARACTERENCODING_UTF8; 67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten memcpy((char *) key.langCountry, "en", 3); 68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten key.data[0] = 0; 69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pKey = key; 70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 7461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 7561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 76ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 7761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataExtraction_GetValueSize(SLMetadataExtractionItf self, 7861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLuint32 index, SLuint32 *pValueSize) 7961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 80ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 82bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten //IMetadataExtraction *thiz = (IMetadataExtraction *) self; 83ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pValueSize) { 84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 86ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pValueSize = 0; 87ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 88ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 89ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 90ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 9161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 9261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 93ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 9461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataExtraction_GetValue(SLMetadataExtractionItf self, 9561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLuint32 index, SLuint32 valueSize, SLMetadataInfo *pValue) 9661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 97ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 98ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 99bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten //IMetadataExtraction *thiz = (IMetadataExtraction *) self; 100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pValue) { 101ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 102ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SLMetadataInfo value; 104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten value.size = 1; 105ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten value.encoding = SL_CHARACTERENCODING_UTF8; 106ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten memcpy((char *) value.langCountry, "en", 3); 107ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten value.data[0] = 0; 108ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pValue = value;; 109ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 110ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 111ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 112ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 11361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 11461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 115ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 11661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataExtraction_AddKeyFilter(SLMetadataExtractionItf self, 11761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLuint32 keySize, const void *pKey, SLuint32 keyEncoding, 11861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten const SLchar *pValueLangCountry, SLuint32 valueEncoding, SLuint8 filterMask) 11961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 120ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 121ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 122ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pKey || NULL == pValueLangCountry || (filterMask & ~(SL_METADATA_FILTER_KEY | 123ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_METADATA_FILTER_KEY | SL_METADATA_FILTER_KEY))) { 124ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 125ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 126bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMetadataExtraction *thiz = (IMetadataExtraction *) self; 127bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 128bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKeySize = keySize; 129bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKey = pKey; 130bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKeyEncoding = keyEncoding; 131bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mValueLangCountry = pValueLangCountry; // should make a local copy 132bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mValueEncoding = valueEncoding; 133bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mFilterMask = filterMask; 134bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 135ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 136ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 137ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 138ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 13961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 14061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 141ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 14261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataExtraction_ClearKeyFilter(SLMetadataExtractionItf self) 14361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 144ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 145ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 146bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMetadataExtraction *thiz = (IMetadataExtraction *) self; 147bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKeyFilter = 0; 148ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 149ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 150ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 15161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 15261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 153ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 15461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const struct SLMetadataExtractionItf_ IMetadataExtraction_Itf = { 15561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_GetItemCount, 15661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_GetKeySize, 15761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_GetKey, 15861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_GetValueSize, 15961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_GetValue, 16061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_AddKeyFilter, 16161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IMetadataExtraction_ClearKeyFilter 16261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 16361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 16461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenvoid IMetadataExtraction_init(void *self) 16561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 166bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMetadataExtraction *thiz = (IMetadataExtraction *) self; 167bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mItf = &IMetadataExtraction_Itf; 168bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKeySize = 0; 169bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKey = NULL; 170bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKeyEncoding = 0 /*TBD*/; 171bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mValueLangCountry = 0 /*TBD*/; 172bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mValueEncoding = 0 /*TBD*/; 173bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mFilterMask = 0 /*TBD*/; 174bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mKeyFilter = 0; 17561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 176