1b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber/*
2b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * Copyright (C) 2009 The Android Open Source Project
3b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber *
4b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * you may not use this file except in compliance with the License.
6b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * You may obtain a copy of the License at
7b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber *
8b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber *
10b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * Unless required by applicable law or agreed to in writing, software
11b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * See the License for the specific language governing permissions and
14b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber * limitations under the License.
15b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber */
16b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
17b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#ifndef OMX_MASTER_H_
18b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
19b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#define OMX_MASTER_H_
20b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
21b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#include <media/stagefright/OMXPluginBase.h>
22b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
23b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#include <utils/threads.h>
24b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#include <utils/KeyedVector.h>
25b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#include <utils/List.h>
26b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#include <utils/String8.h>
27b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
28b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Hubernamespace android {
29b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
30b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huberstruct OMXMaster : public OMXPluginBase {
31b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    OMXMaster();
32b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    virtual ~OMXMaster();
33b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
34b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    virtual OMX_ERRORTYPE makeComponentInstance(
35b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            const char *name,
36b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            const OMX_CALLBACKTYPE *callbacks,
37b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            OMX_PTR appData,
38b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            OMX_COMPONENTTYPE **component);
39b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
40fef6435a0692f3c9b6055903dfb7699e90e19d46Andreas Huber    virtual OMX_ERRORTYPE destroyComponentInstance(
41fef6435a0692f3c9b6055903dfb7699e90e19d46Andreas Huber            OMX_COMPONENTTYPE *component);
42fef6435a0692f3c9b6055903dfb7699e90e19d46Andreas Huber
43b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    virtual OMX_ERRORTYPE enumerateComponents(
44b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            OMX_STRING name,
45b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            size_t size,
46b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber            OMX_U32 index);
47b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
48c7e91eee2e79e3e4c8f84fd6b8a753215955d4e8Andreas Huber    virtual OMX_ERRORTYPE getRolesOfComponent(
49c7e91eee2e79e3e4c8f84fd6b8a753215955d4e8Andreas Huber            const char *name,
50c7e91eee2e79e3e4c8f84fd6b8a753215955d4e8Andreas Huber            Vector<String8> *roles);
51c7e91eee2e79e3e4c8f84fd6b8a753215955d4e8Andreas Huber
52b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huberprivate:
53b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    Mutex mLock;
54b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    List<OMXPluginBase *> mPlugins;
55b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    KeyedVector<String8, OMXPluginBase *> mPluginByComponentName;
56fef6435a0692f3c9b6055903dfb7699e90e19d46Andreas Huber    KeyedVector<OMX_COMPONENTTYPE *, OMXPluginBase *> mPluginByInstance;
57fef6435a0692f3c9b6055903dfb7699e90e19d46Andreas Huber
58b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    void *mVendorLibHandle;
59b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
60b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    void addVendorPlugin();
614b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void addPlugin(const char *libname);
62b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    void addPlugin(OMXPluginBase *plugin);
63b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    void clearPlugins();
64b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
65b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    OMXMaster(const OMXMaster &);
66b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber    OMXMaster &operator=(const OMXMaster &);
67b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber};
68b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
69b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber}  // namespace android
70b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber
71b0caf946b7ae9be519c0cede935ea2ecb44f9bd0Andreas Huber#endif  // OMX_MASTER_H_
72