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/* MetadataTraversal implementation */
1861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
1961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten#include "sles_allinclusive.h"
2061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
22d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IMetadataTraversal_SetMode(SLMetadataTraversalItf self, SLuint32 mode)
2361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
24ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
260b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    switch (mode) {
270b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    case SL_METADATATRAVERSALMODE_ALL:
280b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    case SL_METADATATRAVERSALMODE_NODE:
29ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        {
30bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        IMetadataTraversal *thiz = (IMetadataTraversal *) self;
31bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_lock_poke(thiz);
32bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        thiz->mMode = mode;
33bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_unlock_poke(thiz);
34ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        }
360b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        break;
370b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    default:
38ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
39ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        break;
400b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    }
41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
42ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
4361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
4461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
46d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IMetadataTraversal_GetChildCount(SLMetadataTraversalItf self, SLuint32 *pCount)
4761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
48ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
50ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pCount) {
51ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
52ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
53bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        IMetadataTraversal *thiz = (IMetadataTraversal *) self;
54bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_lock_peek(thiz);
55bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        SLuint32 count = thiz->mCount;
56bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_unlock_peek(thiz);
57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        *pCount = count;
58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
6261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
6361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
6561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IMetadataTraversal_GetChildMIMETypeSize(
6661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    SLMetadataTraversalItf self, SLuint32 index, SLuint32 *pSize)
6761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pSize) {
71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
73bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        IMetadataTraversal *thiz = (IMetadataTraversal *) self;
74bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_lock_peek(thiz);
75bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        SLuint32 size = thiz->mSize;
76bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_unlock_peek(thiz);
77ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        *pSize = size;
78ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
79ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
80ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
8261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
8361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
85d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IMetadataTraversal_GetChildInfo(SLMetadataTraversalItf self, SLuint32 index,
86d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten    SLint32 *pNodeID, SLuint32 *pType, SLuint32 size, SLchar *pMimeType)
8761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
88ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
89ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
90bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    //IMetadataTraversal *thiz = (IMetadataTraversal *) self;
91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    result = SL_RESULT_FEATURE_UNSUPPORTED;
92ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
93ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
9461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
9561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
96ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
97d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IMetadataTraversal_SetActiveNode(SLMetadataTraversalItf self, SLuint32 index)
9861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
99ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
101979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten    if (SL_NODE_PARENT == index) {
1020b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        ;
103979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten    }
104bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    IMetadataTraversal *thiz = (IMetadataTraversal *) self;
105bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mIndex = index;
106ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    result = SL_RESULT_PARAMETER_INVALID;
107ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
108ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
10961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
11061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
111ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
11261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const struct SLMetadataTraversalItf_ IMetadataTraversal_Itf = {
11361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    IMetadataTraversal_SetMode,
11461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    IMetadataTraversal_GetChildCount,
11561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    IMetadataTraversal_GetChildMIMETypeSize,
11661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    IMetadataTraversal_GetChildInfo,
11761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    IMetadataTraversal_SetActiveNode
11861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten};
11961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
12061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenvoid IMetadataTraversal_init(void *self)
12161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
122bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    IMetadataTraversal *thiz = (IMetadataTraversal *) self;
123bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mItf = &IMetadataTraversal_Itf;
124bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mIndex = 0;
125bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mMode = SL_METADATATRAVERSALMODE_NODE;
126bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mCount = 0;
127bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mSize = 0;
12861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
129