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//#define LOG_NDEBUG 0
18bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#define LOG_TAG "SoftOMXComponent"
19bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <utils/Log.h>
20bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
21bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include "include/SoftOMXComponent.h"
22bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
23bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <media/stagefright/foundation/ADebug.h>
24bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
25bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubernamespace android {
26bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
27bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberSoftOMXComponent::SoftOMXComponent(
28bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        const char *name,
29bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        const OMX_CALLBACKTYPE *callbacks,
30bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR appData,
31bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_COMPONENTTYPE **component)
32bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    : mName(name),
33bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber      mCallbacks(callbacks),
34bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber      mComponent(new OMX_COMPONENTTYPE),
35bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber      mLibHandle(NULL) {
36bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->nSize = sizeof(*mComponent);
37bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->nVersion.s.nVersionMajor = 1;
38bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->nVersion.s.nVersionMinor = 0;
39bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->nVersion.s.nRevision = 0;
40bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->nVersion.s.nStep = 0;
41bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->pComponentPrivate = this;
42bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->pApplicationPrivate = appData;
43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->GetComponentVersion = NULL;
45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->SendCommand = SendCommandWrapper;
46bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->GetParameter = GetParameterWrapper;
47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->SetParameter = SetParameterWrapper;
48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->GetConfig = GetConfigWrapper;
49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->SetConfig = SetConfigWrapper;
50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->GetExtensionIndex = GetExtensionIndexWrapper;
51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->GetState = GetStateWrapper;
52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->ComponentTunnelRequest = NULL;
53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->UseBuffer = UseBufferWrapper;
54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->AllocateBuffer = AllocateBufferWrapper;
55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->FreeBuffer = FreeBufferWrapper;
56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->EmptyThisBuffer = EmptyThisBufferWrapper;
57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->FillThisBuffer = FillThisBufferWrapper;
58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->SetCallbacks = NULL;
59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->ComponentDeInit = NULL;
60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->UseEGLImage = NULL;
61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent->ComponentRoleEnum = NULL;
62bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
63bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    *component = mComponent;
64bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
65bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
66bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberSoftOMXComponent::~SoftOMXComponent() {
67bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    delete mComponent;
68bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mComponent = NULL;
69bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
70bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
71bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubervoid SoftOMXComponent::setLibHandle(void *libHandle) {
72bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    CHECK(libHandle != NULL);
73bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    mLibHandle = libHandle;
74bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
75bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
76bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubervoid *SoftOMXComponent::libHandle() const {
77bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return mLibHandle;
78bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
79bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
80bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::initCheck() const {
81bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorNone;
82bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
83bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
84bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberconst char *SoftOMXComponent::name() const {
85bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return mName.c_str();
86bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
87bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
88bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubervoid SoftOMXComponent::notify(
89bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_EVENTTYPE event,
90bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 data1, OMX_U32 data2, OMX_PTR data) {
91bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    (*mCallbacks->EventHandler)(
92bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            mComponent,
93bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            mComponent->pApplicationPrivate,
94bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            event,
95bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            data1,
96bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            data2,
97bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            data);
98bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
99bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
100bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubervoid SoftOMXComponent::notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header) {
101bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    (*mCallbacks->EmptyBufferDone)(
102bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            mComponent, mComponent->pApplicationPrivate, header);
103bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
104bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
105bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubervoid SoftOMXComponent::notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header) {
106bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    (*mCallbacks->FillBufferDone)(
107bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            mComponent, mComponent->pApplicationPrivate, header);
108bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
109bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
110bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
111bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::SendCommandWrapper(
112bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
113bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_COMMANDTYPE cmd,
114bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 param,
115bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR data) {
116bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
117bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
118bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
119bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
120bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->sendCommand(cmd, param, data);
121bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
122bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
123bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
124bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::GetParameterWrapper(
125bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
126bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index,
127bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR params) {
128bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
129bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
130bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
131bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
132bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->getParameter(index, params);
133bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
134bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
135bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
136bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::SetParameterWrapper(
137bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
138bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index,
139bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR params) {
140bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
141bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
142bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
143bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
144bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->setParameter(index, params);
145bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
146bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
147bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
148bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::GetConfigWrapper(
149bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
150bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index,
151bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR params) {
152bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
153bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
154bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
155bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
156bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->getConfig(index, params);
157bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
158bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
159bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
160bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::SetConfigWrapper(
161bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
162bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index,
163bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR params) {
164bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
165bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
166bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
167bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
168bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->setConfig(index, params);
169bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
170bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
171bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
172bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::GetExtensionIndexWrapper(
173bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
174bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_STRING name,
175bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE *index) {
176bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
177bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
178bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
179bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
180bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->getExtensionIndex(name, index);
181bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
182bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
183bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
184bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::UseBufferWrapper(
185bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
186bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE **buffer,
187bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 portIndex,
188bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR appPrivate,
189bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 size,
190bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U8 *ptr) {
191bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
192bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
193bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
194bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
195bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->useBuffer(buffer, portIndex, appPrivate, size, ptr);
196bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
197bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
198bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
199bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::AllocateBufferWrapper(
200bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
201bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE **buffer,
202bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 portIndex,
203bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR appPrivate,
204bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 size) {
205bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
206bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
207bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
208bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
209bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->allocateBuffer(buffer, portIndex, appPrivate, size);
210bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
211bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
212bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
213bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::FreeBufferWrapper(
214bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
215bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 portIndex,
216bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE *buffer) {
217bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
218bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
219bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
220bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
221bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->freeBuffer(portIndex, buffer);
222bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
223bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
224bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
225bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::EmptyThisBufferWrapper(
226bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
227bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE *buffer) {
228bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
229bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
230bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
231bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
232bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->emptyThisBuffer(buffer);
233bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
234bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
235bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
236bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::FillThisBufferWrapper(
237bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
238bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE *buffer) {
239bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
240bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
241bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
242bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
243bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->fillThisBuffer(buffer);
244bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
245bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
246bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber// static
247bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::GetStateWrapper(
248bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_HANDLETYPE component,
249bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_STATETYPE *state) {
250bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftOMXComponent *me =
251bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        (SoftOMXComponent *)
252bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            ((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
253bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
254bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return me->getState(state);
255bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
256bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
257bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber////////////////////////////////////////////////////////////////////////////////
258bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
259bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::sendCommand(
260bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_COMMANDTYPE cmd, OMX_U32 param, OMX_PTR data) {
261bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
262bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
263bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
264bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::getParameter(
265bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index, OMX_PTR params) {
266bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
267bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
268bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
269bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::setParameter(
270bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index, const OMX_PTR params) {
271bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
272bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
273bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
274bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::getConfig(
275bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index, OMX_PTR params) {
276bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
277bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
278bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
279bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::setConfig(
280bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_INDEXTYPE index, const OMX_PTR params) {
281bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
282bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
283bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
284bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::getExtensionIndex(
285bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        const char *name, OMX_INDEXTYPE *index) {
286bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
287bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
288bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
289bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::useBuffer(
290bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE **buffer,
291bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 portIndex,
292bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR appPrivate,
293bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 size,
294bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U8 *ptr) {
295bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
296bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
297bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
298bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::allocateBuffer(
299bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE **buffer,
300bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 portIndex,
301bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_PTR appPrivate,
302bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 size) {
303bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
304bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
305bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
306bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::freeBuffer(
307bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_U32 portIndex,
308bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE *buffer) {
309bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
310bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
311bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
312bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::emptyThisBuffer(
313bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE *buffer) {
314bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
315bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
316bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
317bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::fillThisBuffer(
318bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        OMX_BUFFERHEADERTYPE *buffer) {
319bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
320bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
321bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
322bbba88cb1bdc34705d1477208990a06904c022e7Andreas HuberOMX_ERRORTYPE SoftOMXComponent::getState(OMX_STATETYPE *state) {
323bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    return OMX_ErrorUndefined;
324bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}
325bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
326bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}  // namespace android
327