1/*
2 * cmodule.h, component module interface class
3 *
4 * Copyright (c) 2009-2010 Wind River Systems, Inc.
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19#ifndef __CMODULE_H
20#define __CMODULE_H
21
22#include <module.h>
23
24/*
25 * WRS OMX-IL Component Module Symbol
26 */
27#define WRS_OMXIL_CMODULE_SYMBOL            WRS_OMXIL_CMODULE
28#define WRS_OMXIL_CMODULE_SYMBOL_STRING     "WRS_OMXIL_CMODULE"
29
30struct wrs_omxil_cmodule_ops_s {
31    OMX_ERRORTYPE (*instantiate)(OMX_PTR *);
32};
33
34struct wrs_omxil_cmodule_s {
35    const char *name;
36
37    const char **roles;
38    const int nr_roles;
39
40    struct wrs_omxil_cmodule_ops_s *ops;
41};
42
43class ComponentBase;
44
45class CModule {
46 public:
47    CModule(const OMX_STRING lname);
48    ~CModule();
49
50    /*
51     * library loading / unloading
52     */
53    OMX_ERRORTYPE Load(int flag);
54    OMX_U32 Unload(void);
55
56    /* end of library loading / unloading */
57
58    /*
59     * accessor
60     */
61    /* library name */
62    OMX_STRING GetLibraryName(void);
63
64    /* component name and roles */
65    OMX_STRING GetComponentName(void);
66    OMX_ERRORTYPE GetComponentRoles(OMX_U32 *nr_roles, OMX_U8 **roles);
67
68    bool QueryHavingThisRole(const OMX_STRING role);
69
70    /* end of accessor */
71
72    /* library symbol method and helpers */
73    OMX_ERRORTYPE QueryComponentNameAndRoles(void);
74    OMX_ERRORTYPE InstantiateComponent(ComponentBase **instance);
75
76    /* end of library symbol method and helpers */
77
78 private:
79    /*
80     * library symbol
81     */
82    struct wrs_omxil_cmodule_s *wrs_omxil_cmodule;
83
84    /* end of library symbol */
85
86    /* component name */
87    char cname[OMX_MAX_STRINGNAME_SIZE];
88
89    /* component roles */
90    OMX_U8 **roles;
91    OMX_U32 nr_roles;
92
93    /* library name */
94    char lname[OMX_MAX_STRINGNAME_SIZE];
95    /* utils::module */
96    struct module *module;
97};
98
99#endif /* __CMODULE_H */
100