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/* DynamicSource implementation */
1861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
1961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten#include "sles_allinclusive.h"
2061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
22acd88797a1d3b8225bab888d29036e245f275be5Glenn Kastenstatic SLresult IDynamicSource_SetSource(SLDynamicSourceItf self, SLDataSource *pDataSource)
2361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
24ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pDataSource) {
27ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
29bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        IDynamicSource *thiz = (IDynamicSource *) self;
30acd88797a1d3b8225bab888d29036e245f275be5Glenn Kasten#if 0
31ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        DataLocatorFormat myDataSource;
32ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        SLresult result;
3394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten        result = checkDataSource("pDataSource", pDataSource, &myDataSource, DATALOCATOR_MASK_ALL,
3494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten                DATAFORMAT_MASK_ALL);
35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        // handle result here
36acd88797a1d3b8225bab888d29036e245f275be5Glenn Kasten#endif
37ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        // need to lock the object, as a change to source can impact most of object
38bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        IObject *thisObject = InterfaceToIObject(thiz);
39ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        object_lock_exclusive(thisObject);
40c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten        // a bit of a simplification to say the least! (see Khronos bug 6728)
41bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        thiz->mDataSource = pDataSource;
42ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        object_unlock_exclusive(thisObject);
43ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_FEATURE_UNSUPPORTED;
44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
4761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
4861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
5061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const struct SLDynamicSourceItf_ IDynamicSource_Itf = {
5161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten    IDynamicSource_SetSource
5261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten};
5361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten
5461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenvoid IDynamicSource_init(void *self)
5561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{
56bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    IDynamicSource *thiz = (IDynamicSource *) self;
57bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mItf = &IDynamicSource_Itf;
58a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    // mDataSource will be re-initialized later in the containing object constructor
59bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mDataSource = NULL;
6061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}
61