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