/* * 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 #include "include/SoftOMXComponent.h" #include 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_ErrorUndefined; } 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