blob: ee269e1229a5f393f8ecf2ccfcfeeb4f31e534c1 [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//#define LOG_NDEBUG 0
#define LOG_TAG "SoftOMXComponent"
#include <utils/Log.h>
#include <media/stagefright/omx/SoftOMXComponent.h>
#include <media/stagefright/foundation/ADebug.h>
namespace android {
SoftOMXComponent::SoftOMXComponent(
const char *name,
const OMX_CALLBACKTYPE *callbacks,
OMX_PTR appData,
OMX_COMPONENTTYPE **component)
: mName(name),
mCallbacks(callbacks),
mComponent(new OMX_COMPONENTTYPE),
mLibHandle(NULL) {
mComponent->nSize = sizeof(*mComponent);
mComponent->nVersion.s.nVersionMajor = 1;
mComponent->nVersion.s.nVersionMinor = 0;
mComponent->nVersion.s.nRevision = 0;
mComponent->nVersion.s.nStep = 0;
mComponent->pComponentPrivate = this;
mComponent->pApplicationPrivate = appData;
mComponent->GetComponentVersion = NULL;
mComponent->SendCommand = SendCommandWrapper;
mComponent->GetParameter = GetParameterWrapper;
mComponent->SetParameter = SetParameterWrapper;
mComponent->GetConfig = GetConfigWrapper;
mComponent->SetConfig = SetConfigWrapper;
mComponent->GetExtensionIndex = GetExtensionIndexWrapper;
mComponent->GetState = GetStateWrapper;
mComponent->ComponentTunnelRequest = NULL;
mComponent->UseBuffer = UseBufferWrapper;
mComponent->AllocateBuffer = AllocateBufferWrapper;
mComponent->FreeBuffer = FreeBufferWrapper;
mComponent->EmptyThisBuffer = EmptyThisBufferWrapper;
mComponent->FillThisBuffer = FillThisBufferWrapper;
mComponent->SetCallbacks = NULL;
mComponent->ComponentDeInit = NULL;
mComponent->UseEGLImage = NULL;
mComponent->ComponentRoleEnum = NULL;
*component = mComponent;
}
SoftOMXComponent::~SoftOMXComponent() {
delete mComponent;
mComponent = NULL;
}
void SoftOMXComponent::setLibHandle(void *libHandle) {
CHECK(libHandle != NULL);
mLibHandle = libHandle;
}
void *SoftOMXComponent::libHandle() const {
return mLibHandle;
}
OMX_ERRORTYPE SoftOMXComponent::initCheck() const {
return OMX_ErrorNone;
}
const char *SoftOMXComponent::name() const {
return mName.c_str();
}
void SoftOMXComponent::notify(
OMX_EVENTTYPE event,
OMX_U32 data1, OMX_U32 data2, OMX_PTR data) {
(*mCallbacks->EventHandler)(
mComponent,
mComponent->pApplicationPrivate,
event,
data1,
data2,
data);
}
void SoftOMXComponent::notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header) {
(*mCallbacks->EmptyBufferDone)(
mComponent, mComponent->pApplicationPrivate, header);
}
void SoftOMXComponent::notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header) {
(*mCallbacks->FillBufferDone)(
mComponent, mComponent->pApplicationPrivate, header);
}
// static
OMX_ERRORTYPE SoftOMXComponent::SendCommandWrapper(
OMX_HANDLETYPE component,
OMX_COMMANDTYPE cmd,
OMX_U32 param,
OMX_PTR data) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->sendCommand(cmd, param, data);
}
// static
OMX_ERRORTYPE SoftOMXComponent::GetParameterWrapper(
OMX_HANDLETYPE component,
OMX_INDEXTYPE index,
OMX_PTR params) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->getParameter(index, params);
}
// static
OMX_ERRORTYPE SoftOMXComponent::SetParameterWrapper(
OMX_HANDLETYPE component,
OMX_INDEXTYPE index,
OMX_PTR params) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->setParameter(index, params);
}
// static
OMX_ERRORTYPE SoftOMXComponent::GetConfigWrapper(
OMX_HANDLETYPE component,
OMX_INDEXTYPE index,
OMX_PTR params) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->getConfig(index, params);
}
// static
OMX_ERRORTYPE SoftOMXComponent::SetConfigWrapper(
OMX_HANDLETYPE component,
OMX_INDEXTYPE index,
OMX_PTR params) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->setConfig(index, params);
}
// static
OMX_ERRORTYPE SoftOMXComponent::GetExtensionIndexWrapper(
OMX_HANDLETYPE component,
OMX_STRING name,
OMX_INDEXTYPE *index) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->getExtensionIndex(name, index);
}
// static
OMX_ERRORTYPE SoftOMXComponent::UseBufferWrapper(
OMX_HANDLETYPE component,
OMX_BUFFERHEADERTYPE **buffer,
OMX_U32 portIndex,
OMX_PTR appPrivate,
OMX_U32 size,
OMX_U8 *ptr) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->useBuffer(buffer, portIndex, appPrivate, size, ptr);
}
// static
OMX_ERRORTYPE SoftOMXComponent::AllocateBufferWrapper(
OMX_HANDLETYPE component,
OMX_BUFFERHEADERTYPE **buffer,
OMX_U32 portIndex,
OMX_PTR appPrivate,
OMX_U32 size) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->allocateBuffer(buffer, portIndex, appPrivate, size);
}
// static
OMX_ERRORTYPE SoftOMXComponent::FreeBufferWrapper(
OMX_HANDLETYPE component,
OMX_U32 portIndex,
OMX_BUFFERHEADERTYPE *buffer) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->freeBuffer(portIndex, buffer);
}
// static
OMX_ERRORTYPE SoftOMXComponent::EmptyThisBufferWrapper(
OMX_HANDLETYPE component,
OMX_BUFFERHEADERTYPE *buffer) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->emptyThisBuffer(buffer);
}
// static
OMX_ERRORTYPE SoftOMXComponent::FillThisBufferWrapper(
OMX_HANDLETYPE component,
OMX_BUFFERHEADERTYPE *buffer) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->fillThisBuffer(buffer);
}
// static
OMX_ERRORTYPE SoftOMXComponent::GetStateWrapper(
OMX_HANDLETYPE component,
OMX_STATETYPE *state) {
SoftOMXComponent *me =
(SoftOMXComponent *)
((OMX_COMPONENTTYPE *)component)->pComponentPrivate;
return me->getState(state);
}
////////////////////////////////////////////////////////////////////////////////
OMX_ERRORTYPE SoftOMXComponent::sendCommand(
OMX_COMMANDTYPE /* cmd */, OMX_U32 /* param */, OMX_PTR /* data */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::getParameter(
OMX_INDEXTYPE /* index */, OMX_PTR /* params */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::setParameter(
OMX_INDEXTYPE /* index */, const OMX_PTR /* params */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::getConfig(
OMX_INDEXTYPE /* index */, OMX_PTR /* params */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::setConfig(
OMX_INDEXTYPE /* index */, const OMX_PTR /* params */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::getExtensionIndex(
const char * /* name */, OMX_INDEXTYPE * /* index */) {
return OMX_ErrorUnsupportedIndex;
}
OMX_ERRORTYPE SoftOMXComponent::useBuffer(
OMX_BUFFERHEADERTYPE ** /* buffer */,
OMX_U32 /* portIndex */,
OMX_PTR /* appPrivate */,
OMX_U32 /* size */,
OMX_U8 * /* ptr */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::allocateBuffer(
OMX_BUFFERHEADERTYPE ** /* buffer */,
OMX_U32 /* portIndex */,
OMX_PTR /* appPrivate */,
OMX_U32 /* size */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::freeBuffer(
OMX_U32 /* portIndex */,
OMX_BUFFERHEADERTYPE * /* buffer */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::emptyThisBuffer(
OMX_BUFFERHEADERTYPE * /* buffer */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::fillThisBuffer(
OMX_BUFFERHEADERTYPE * /* buffer */) {
return OMX_ErrorUndefined;
}
OMX_ERRORTYPE SoftOMXComponent::getState(OMX_STATETYPE * /* state */) {
return OMX_ErrorUndefined;
}
} // namespace android