1bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber/*
2bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Copyright (C) 2011 The Android Open Source Project
3bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
4bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * you may not use this file except in compliance with the License.
6bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * You may obtain a copy of the License at
7bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
8bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
10bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Unless required by applicable law or agreed to in writing, software
11bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * See the License for the specific language governing permissions and
14bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * limitations under the License.
15bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber */
16bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
17bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#ifndef SOFT_OMX_COMPONENT_H_
18bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
19bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#define SOFT_OMX_COMPONENT_H_
20bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
21bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <media/stagefright/foundation/ABase.h>
22bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <media/stagefright/foundation/AString.h>
23bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <utils/RefBase.h>
24bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
25bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <OMX_Component.h>
26bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
27bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubernamespace android {
28bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
29bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct SoftOMXComponent : public RefBase {
30bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent(
31bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            const char *name,
32bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            const OMX_CALLBACKTYPE *callbacks,
33bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appData,
34bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMPONENTTYPE **component);
35bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
36bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE initCheck() const;
37bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
38bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void setLibHandle(void *libHandle);
39bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void *libHandle() const;
40bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
415a65e30064dc8dffa4f3d868f1c46038972c40c5Andreas Huber    virtual void prepareForDestruction() {}
425a65e30064dc8dffa4f3d868f1c46038972c40c5Andreas Huber
43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprotected:
44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual ~SoftOMXComponent();
45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
46bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    const char *name() const;
47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void notify(
49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_EVENTTYPE event,
50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 data1, OMX_U32 data2, OMX_PTR data);
51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header);
53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header);
54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE sendCommand(
56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMMANDTYPE cmd, OMX_U32 param, OMX_PTR data);
57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getParameter(
59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE setParameter(
62bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
63bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
64bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getConfig(
65bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
66bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
67bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE setConfig(
68bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
69bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
70bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getExtensionIndex(
71bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            const char *name, OMX_INDEXTYPE *index);
72bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
73bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE useBuffer(
74bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
75bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
76bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
77bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size,
78bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U8 *ptr);
79bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
80bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE allocateBuffer(
81bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
82bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
83bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
84bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size);
85bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
86bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE freeBuffer(
87bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
88bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
89bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
90bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE emptyThisBuffer(
91bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
92bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
93bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE fillThisBuffer(
94bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
95bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
96bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getState(OMX_STATETYPE *state);
97bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
98bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprivate:
99bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    AString mName;
100bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    const OMX_CALLBACKTYPE *mCallbacks;
101bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    OMX_COMPONENTTYPE *mComponent;
102bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
103bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void *mLibHandle;
104bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
105bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE SendCommandWrapper(
106bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
107bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMMANDTYPE cmd,
108bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 param,
109bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR data);
110bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
111bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetParameterWrapper(
112bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
113bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
114bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
115bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
116bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE SetParameterWrapper(
117bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
118bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
119bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
120bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
121bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetConfigWrapper(
122bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
123bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
124bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
125bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
126bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE SetConfigWrapper(
127bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
128bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
129bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
130bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
131bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetExtensionIndexWrapper(
132bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
133bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_STRING name,
134bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE *index);
135bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
136bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE UseBufferWrapper(
137bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
138bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
139bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
140bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
141bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size,
142bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U8 *ptr);
143bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
144bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE AllocateBufferWrapper(
145bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
146bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
147bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
148bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
149bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size);
150bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
151bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE FreeBufferWrapper(
152bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
153bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
154bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
155bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
156bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE EmptyThisBufferWrapper(
157bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
158bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
159bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
160bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE FillThisBufferWrapper(
161bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
162bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
163bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
164bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetStateWrapper(
165bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
166bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_STATETYPE *state);
167bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
168bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftOMXComponent);
169bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber};
170bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
171bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}  // namespace android
172bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
173bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#endif  // SOFT_OMX_COMPONENT_H_
174