SoftOMXComponent.h revision bbba88cb1bdc34705d1477208990a06904c022e7
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
41bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprotected:
42bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual ~SoftOMXComponent();
43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    const char *name() const;
45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
46bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void notify(
47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_EVENTTYPE event,
48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 data1, OMX_U32 data2, OMX_PTR data);
49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header);
51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header);
52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE sendCommand(
54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMMANDTYPE cmd, OMX_U32 param, OMX_PTR data);
55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getParameter(
57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE setParameter(
60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
62bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getConfig(
63bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
64bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
65bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE setConfig(
66bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
67bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
68bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getExtensionIndex(
69bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            const char *name, OMX_INDEXTYPE *index);
70bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
71bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE useBuffer(
72bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
73bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
74bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
75bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size,
76bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U8 *ptr);
77bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
78bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE allocateBuffer(
79bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
80bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
81bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
82bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size);
83bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
84bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE freeBuffer(
85bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
86bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
87bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
88bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE emptyThisBuffer(
89bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
90bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
91bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE fillThisBuffer(
92bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
93bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
94bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual OMX_ERRORTYPE getState(OMX_STATETYPE *state);
95bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
96bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprivate:
97bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    AString mName;
98bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    const OMX_CALLBACKTYPE *mCallbacks;
99bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    OMX_COMPONENTTYPE *mComponent;
100bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
101bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    void *mLibHandle;
102bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
103bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE SendCommandWrapper(
104bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
105bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMMANDTYPE cmd,
106bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 param,
107bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR data);
108bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
109bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetParameterWrapper(
110bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
111bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
112bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
113bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
114bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE SetParameterWrapper(
115bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
116bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
117bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
118bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
119bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetConfigWrapper(
120bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
121bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
122bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
123bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
124bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE SetConfigWrapper(
125bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
126bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE index,
127bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR params);
128bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
129bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetExtensionIndexWrapper(
130bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
131bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_STRING name,
132bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_INDEXTYPE *index);
133bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
134bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE UseBufferWrapper(
135bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
136bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
137bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
138bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
139bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size,
140bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U8 *ptr);
141bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
142bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE AllocateBufferWrapper(
143bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
144bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE **buffer,
145bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
146bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appPrivate,
147bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 size);
148bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
149bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE FreeBufferWrapper(
150bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
151bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_U32 portIndex,
152bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
153bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
154bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE EmptyThisBufferWrapper(
155bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
156bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
157bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
158bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE FillThisBufferWrapper(
159bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
160bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_BUFFERHEADERTYPE *buffer);
161bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
162bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    static OMX_ERRORTYPE GetStateWrapper(
163bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_HANDLETYPE component,
164bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_STATETYPE *state);
165bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
166bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftOMXComponent);
167bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber};
168bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
169bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}  // namespace android
170bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
171bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#endif  // SOFT_OMX_COMPONENT_H_
172