1ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu/*
22f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * cmodule.h, component module interface class
330bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu *
42f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Copyright (c) 2009-2010 Wind River Systems, Inc.
52f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu *
62f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Licensed under the Apache License, Version 2.0 (the "License");
72f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * you may not use this file except in compliance with the License.
82f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * You may obtain a copy of the License at
92f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu *
102f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * http://www.apache.org/licenses/LICENSE-2.0
112f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu *
122f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Unless required by applicable law or agreed to in writing, software
132f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * distributed under the License is distributed on an "AS IS" BASIS,
142f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
152f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * See the License for the specific language governing permissions and
162f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * limitations under the License.
17ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu */
18ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
19ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu#ifndef __CMODULE_H
20ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu#define __CMODULE_H
21ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
22ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu#include <module.h>
23ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
24aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu/*
25aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu * WRS OMX-IL Component Module Symbol
26aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu */
27aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu#define WRS_OMXIL_CMODULE_SYMBOL            WRS_OMXIL_CMODULE
28aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu#define WRS_OMXIL_CMODULE_SYMBOL_STRING     "WRS_OMXIL_CMODULE"
29aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu
30aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryustruct wrs_omxil_cmodule_ops_s {
31aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    OMX_ERRORTYPE (*instantiate)(OMX_PTR *);
32aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu};
33ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
34aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryustruct wrs_omxil_cmodule_s {
35aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    const char *name;
36aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu
37aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    const char **roles;
38aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    const int nr_roles;
39aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu
40aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    struct wrs_omxil_cmodule_ops_s *ops;
41aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu};
42aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu
43aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryuclass ComponentBase;
445463849b74e78069ba8853df8be5e185e712a6c1Ho-Eun Ryu
45ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryuclass CModule {
46ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu public:
4793829fc5dd7d8b02ab8425f4f6cecf39e0636508Ho-Eun Ryu    CModule(const OMX_STRING lname);
48ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu    ~CModule();
49ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
50b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /*
51b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu     * library loading / unloading
52b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu     */
53aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    OMX_ERRORTYPE Load(int flag);
54e4cf7671304eade66d6f89200ccb7c448f12909cHo-Eun Ryu    OMX_U32 Unload(void);
55ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
56b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /* end of library loading / unloading */
57b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu
58b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /*
59b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu     * accessor
60b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu     */
61b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /* library name */
623f7ceee13aa17ae32d4263aed2ce67eb9a37c58bywan    OMX_STRING GetLibraryName(void);
6393829fc5dd7d8b02ab8425f4f6cecf39e0636508Ho-Eun Ryu
64dcca56c316c37a3b79d54fc28631607e672db691Ho-Eun Ryu    /* component name and roles */
653f7ceee13aa17ae32d4263aed2ce67eb9a37c58bywan    OMX_STRING GetComponentName(void);
66dcca56c316c37a3b79d54fc28631607e672db691Ho-Eun Ryu    OMX_ERRORTYPE GetComponentRoles(OMX_U32 *nr_roles, OMX_U8 **roles);
67dcca56c316c37a3b79d54fc28631607e672db691Ho-Eun Ryu
684d23422b4ee131b866bb3f3016bc436fb51f68c0Ho-Eun Ryu    bool QueryHavingThisRole(const OMX_STRING role);
694d23422b4ee131b866bb3f3016bc436fb51f68c0Ho-Eun Ryu
70b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /* end of accessor */
71b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu
72ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    /* library symbol method and helpers */
73aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    OMX_ERRORTYPE QueryComponentNameAndRoles(void);
748c1c19ee4a7c0f1f7cdf1b186e92118325080f5cHo-Eun Ryu    OMX_ERRORTYPE InstantiateComponent(ComponentBase **instance);
75ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu
76ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    /* end of library symbol method and helpers */
77ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu
78ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu private:
79b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /*
80b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu     * library symbol
81b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu     */
82aa8a53ba28b4e12dcdc08683e770d7b3fd68ff8dHo-Eun Ryu    struct wrs_omxil_cmodule_s *wrs_omxil_cmodule;
835463849b74e78069ba8853df8be5e185e712a6c1Ho-Eun Ryu
84b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /* end of library symbol */
85b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu
86ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    /* component name */
87ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    char cname[OMX_MAX_STRINGNAME_SIZE];
88ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu
89ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    /* component roles */
90ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    OMX_U8 **roles;
91ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu    OMX_U32 nr_roles;
92ebfafff3d5b90857bbbe1cc38e7e7914f5c24c6bHo-Eun Ryu
93b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /* library name */
9493829fc5dd7d8b02ab8425f4f6cecf39e0636508Ho-Eun Ryu    char lname[OMX_MAX_STRINGNAME_SIZE];
95b82acc5264df5ef0d8cd5265826baa9a90f436b3Ho-Eun Ryu    /* utils::module */
96ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu    struct module *module;
97ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu};
98ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu
99ad314a082b0ba22294ba369dde3f84f88010a612Ho-Eun Ryu#endif /* __CMODULE_H */
100