blob: 35227a0e262f11233323114829039a7c11004251 [file] [log] [blame]
/*
* Copyright (C) 2009 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.
*/
#include "OMXComponentBase.h"
#include <stdlib.h>
#include <media/stagefright/MediaDebug.h>
namespace android {
OMXComponentBase::OMXComponentBase(
const OMX_CALLBACKTYPE *callbacks,
OMX_PTR appData)
: mCallbacks(callbacks),
mAppData(appData),
mComponentHandle(NULL) {
}
OMXComponentBase::~OMXComponentBase() {}
void OMXComponentBase::setComponentHandle(OMX_COMPONENTTYPE *handle) {
CHECK_EQ(mComponentHandle, NULL);
mComponentHandle = handle;
}
void OMXComponentBase::postEvent(
OMX_EVENTTYPE event, OMX_U32 param1, OMX_U32 param2) {
(*mCallbacks->EventHandler)(
mComponentHandle, mAppData, event, param1, param2, NULL);
}
void OMXComponentBase::postFillBufferDone(OMX_BUFFERHEADERTYPE *bufHdr) {
(*mCallbacks->FillBufferDone)(mComponentHandle, mAppData, bufHdr);
}
void OMXComponentBase::postEmptyBufferDone(OMX_BUFFERHEADERTYPE *bufHdr) {
(*mCallbacks->EmptyBufferDone)(mComponentHandle, mAppData, bufHdr);
}
static OMXComponentBase *getBase(OMX_HANDLETYPE hComponent) {
return (OMXComponentBase *)
((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate;
}
static OMX_ERRORTYPE SendCommandWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_COMMANDTYPE Cmd,
OMX_IN OMX_U32 nParam1,
OMX_IN OMX_PTR pCmdData) {
return getBase(hComponent)->sendCommand(Cmd, nParam1, pCmdData);
}
static OMX_ERRORTYPE GetParameterWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_INDEXTYPE nParamIndex,
OMX_INOUT OMX_PTR pComponentParameterStructure) {
return getBase(hComponent)->getParameter(
nParamIndex, pComponentParameterStructure);
}
static OMX_ERRORTYPE SetParameterWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_INDEXTYPE nIndex,
OMX_IN OMX_PTR pComponentParameterStructure) {
return getBase(hComponent)->getParameter(
nIndex, pComponentParameterStructure);
}
static OMX_ERRORTYPE GetConfigWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_INDEXTYPE nIndex,
OMX_INOUT OMX_PTR pComponentConfigStructure) {
return getBase(hComponent)->getConfig(nIndex, pComponentConfigStructure);
}
static OMX_ERRORTYPE SetConfigWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_INDEXTYPE nIndex,
OMX_IN OMX_PTR pComponentConfigStructure) {
return getBase(hComponent)->setConfig(nIndex, pComponentConfigStructure);
}
static OMX_ERRORTYPE GetExtensionIndexWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_STRING cParameterName,
OMX_OUT OMX_INDEXTYPE* pIndexType) {
return getBase(hComponent)->getExtensionIndex(cParameterName, pIndexType);
}
static OMX_ERRORTYPE GetStateWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_OUT OMX_STATETYPE* pState) {
return getBase(hComponent)->getState(pState);
}
static OMX_ERRORTYPE UseBufferWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
OMX_IN OMX_U32 nPortIndex,
OMX_IN OMX_PTR pAppPrivate,
OMX_IN OMX_U32 nSizeBytes,
OMX_IN OMX_U8* pBuffer) {
return getBase(hComponent)->useBuffer(
ppBufferHdr, nPortIndex, pAppPrivate, nSizeBytes, pBuffer);
}
static OMX_ERRORTYPE AllocateBufferWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer,
OMX_IN OMX_U32 nPortIndex,
OMX_IN OMX_PTR pAppPrivate,
OMX_IN OMX_U32 nSizeBytes) {
return getBase(hComponent)->allocateBuffer(
ppBuffer, nPortIndex, pAppPrivate, nSizeBytes);
}
static OMX_ERRORTYPE FreeBufferWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_U32 nPortIndex,
OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) {
return getBase(hComponent)->freeBuffer(nPortIndex, pBuffer);
}
static OMX_ERRORTYPE EmptyThisBufferWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) {
return getBase(hComponent)->emptyThisBuffer(pBuffer);
}
static OMX_ERRORTYPE FillThisBufferWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) {
return getBase(hComponent)->fillThisBuffer(pBuffer);
}
static OMX_ERRORTYPE ComponentDeInitWrapper(
OMX_IN OMX_HANDLETYPE hComponent) {
delete getBase(hComponent);
delete (OMX_COMPONENTTYPE *)hComponent;
return OMX_ErrorNone;
}
static OMX_ERRORTYPE ComponentRoleEnumWrapper(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_OUT OMX_U8 *cRole,
OMX_IN OMX_U32 nIndex) {
return getBase(hComponent)->enumerateRoles(cRole, nIndex);
}
// static
OMX_COMPONENTTYPE *OMXComponentBase::MakeComponent(OMXComponentBase *base) {
OMX_COMPONENTTYPE *result = new OMX_COMPONENTTYPE;
result->nSize = sizeof(OMX_COMPONENTTYPE);
result->nVersion.s.nVersionMajor = 1;
result->nVersion.s.nVersionMinor = 0;
result->nVersion.s.nRevision = 0;
result->nVersion.s.nStep = 0;
result->pComponentPrivate = base;
result->pApplicationPrivate = NULL;
result->GetComponentVersion = NULL;
result->SendCommand = SendCommandWrapper;
result->GetParameter = GetParameterWrapper;
result->SetParameter = SetParameterWrapper;
result->GetConfig = GetConfigWrapper;
result->SetConfig = SetConfigWrapper;
result->GetExtensionIndex = GetExtensionIndexWrapper;
result->GetState = GetStateWrapper;
result->ComponentTunnelRequest = NULL;
result->UseBuffer = UseBufferWrapper;
result->AllocateBuffer = AllocateBufferWrapper;
result->FreeBuffer = FreeBufferWrapper;
result->EmptyThisBuffer = EmptyThisBufferWrapper;
result->FillThisBuffer = FillThisBufferWrapper;
result->SetCallbacks = NULL;
result->ComponentDeInit = ComponentDeInitWrapper;
result->UseEGLImage = NULL;
result->ComponentRoleEnum = ComponentRoleEnumWrapper;
base->setComponentHandle(result);
return result;
}
} // namespace android