125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang/* 225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * Copyright (C) 2012 Intel Corporation. All rights reserved. 325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * 425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * Licensed under the Apache License, Version 2.0 (the "License"); 525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * you may not use this file except in compliance with the License. 625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * You may obtain a copy of the License at 725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * 825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * http://www.apache.org/licenses/LICENSE-2.0 925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * 1025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * Unless required by applicable law or agreed to in writing, software 1125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * distributed under the License is distributed on an "AS IS" BASIS, 1225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * See the License for the specific language governing permissions and 1425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * limitations under the License. 1525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * 1625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang */ 1725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 1825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 1925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#ifndef ISV_OMXCOMPONENT_H_ 2025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 2125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#define ISV_OMXCOMPONENT_H_ 2225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 2325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include <utils/Mutex.h> 2425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include <utils/Vector.h> 2525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include <utils/RefBase.h> 2625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include "isv_omxcore.h" 2725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include "isv_processor.h" 2825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include "isv_profile.h" 2925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include "isv_worker.h" 3025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#include "isv_bufmanager.h" 3125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 3225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#define ISV_COMPONENT_DEBUG 0 3325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 34d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#ifdef TARGET_VPP_USE_GEN 35d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#define MIN_INPUT_NUM (3) 36d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#define MIN_OUTPUT_NUM (3) 37d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#else 38d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#define MIN_INPUT_NUM (4) // forward reference frame number is 3 for merrifield/moorefield 3925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#define MIN_OUTPUT_NUM (10) // 2.5FRC need hold 2 + 3 + 2 + 3= 10 buffers, without FRC we set to 6 40d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#endif 41d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang#define MIN_ISV_BUFFER_NUM ((MIN_OUTPUT_NUM) + (MIN_INPUT_NUM)) 4225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#define UNDEQUEUED_NUM (4) // display system hold 4 buffers 4325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 4425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangusing namespace android; 4525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangclass ISVComponent; 4625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 4725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangclass ISVProcThreadObserver: public ISVProcessorObserver 4825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang{ 4925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangpublic: 50e5aad73d4992d6c8fbd9e9e3c9cc89abfc83b775Xigui Wang ISVProcThreadObserver(OMX_COMPONENTTYPE *pBaseComponent, OMX_COMPONENTTYPE *pComponent, OMX_CALLBACKTYPE *pCallBacks, sp<ISVBufferManager> bufferManager); 5125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang ~ISVProcThreadObserver(); 5225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 5325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang virtual OMX_ERRORTYPE releaseBuffer(PORT_INDEX index, OMX_BUFFERHEADERTYPE* pBuffer, bool flush); 54e5aad73d4992d6c8fbd9e9e3c9cc89abfc83b775Xigui Wang virtual OMX_ERRORTYPE reportOutputCrop(); 5525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangprivate: 5625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_COMPONENTTYPE *mBaseComponent; 5725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_COMPONENTTYPE *mComponent; 5825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_CALLBACKTYPE *mpCallBacks; 59e5aad73d4992d6c8fbd9e9e3c9cc89abfc83b775Xigui Wang sp<ISVBufferManager> mISVBufferManager; 6025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang}; 6125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 6225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangclass ISVComponent //: public RefBase 6325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang{ 6425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangpublic: 6525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang /* 6625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * construct & destruct 6725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang */ 6825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang ISVComponent(OMX_PTR); 6925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang ~ISVComponent(); 7025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 7125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // replace component callbacks 7225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_CALLBACKTYPE *getCallBacks(OMX_CALLBACKTYPE*); 7325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // pass down the real component&core 7425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang void setComponent(OMX_COMPONENTTYPE *pComp, ISVOMXCore *pCore){mComponent = pComp; mCore = pCore;return;} 7525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // free the real component 7625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE freeComponent(){return (*(mCore->mFreeHandle))(static_cast<OMX_HANDLETYPE>(mComponent));} 7725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // return ISV component handle 7825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_COMPONENTTYPE *getBaseComponent(){return &mBaseComponent;} 7925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 809042795f805dffc0be5b900df3e42fe32ae61349Yuanjun Huang OMX_HANDLETYPE getComponent(){return static_cast<OMX_HANDLETYPE>(mComponent);} 819042795f805dffc0be5b900df3e42fe32ae61349Yuanjun Huang 8225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static Vector<ISVComponent*> g_isv_components; 8325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangprivate: 8425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang /* 8525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang * component methods & helpers 8625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang */ 8725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 8825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE SendCommand( 8925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 9025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_COMMANDTYPE Cmd, 9125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nParam1, 9225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pCmdData); 9325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_SendCommand( 9425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_COMMANDTYPE Cmd, 9525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nParam1, 9625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pCmdData); 9725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 9825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE GetParameter( 9925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 10025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nParamIndex, 10125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_PTR pComponentParameterStructure); 10225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_GetParameter( 10325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nParamIndex, 10425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_PTR pComponentParameterStructure); 10525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 10625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE SetParameter( 10725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 10825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nIndex, 10925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pComponentParameterStructure); 11025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_SetParameter( 11125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nIndex, 11225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pComponentParameterStructure); 11325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 11425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE GetConfig( 11525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 11625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nIndex, 11725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_PTR pComponentConfigStructure); 11825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_GetConfig( 11925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nIndex, 12025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_PTR pComponentConfigStructure); 12125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 12225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE SetConfig( 12325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 12425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nIndex, 12525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pComponentConfigStructure); 12625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_SetConfig( 12725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_INDEXTYPE nIndex, 12825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pComponentConfigStructure); 12925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 13025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE GetExtensionIndex( 13125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 13225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_STRING cParameterName, 13325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_INDEXTYPE* pIndexType); 13425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_GetExtensionIndex( 13525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_STRING cParameterName, 13625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_INDEXTYPE* pIndexType); 13725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 13825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE GetState( 13925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 14025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_STATETYPE* pState); 14125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_GetState( 14225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_STATETYPE* pState); 14325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 14425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE UseBuffer( 14525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 14625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 14725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nPortIndex, 14825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppPrivate, 14925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nSizeBytes, 15025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U8* pBuffer); 15125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_UseBuffer( 15225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 15325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nPortIndex, 15425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppPrivate, 15525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nSizeBytes, 15625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U8* pBuffer); 15725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 15825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE AllocateBuffer( 15925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 16025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, 16125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nPortIndex, 16225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppPrivate, 16325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nSizeBytes); 16425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_AllocateBuffer( 16525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, 16625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nPortIndex, 16725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppPrivate, 16825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nSizeBytes); 16925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 17025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE FreeBuffer( 17125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 17225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nPortIndex, 17325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 17425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_FreeBuffer( 17525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nPortIndex, 17625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 17725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 17825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE EmptyThisBuffer( 17925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 18025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 18125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_EmptyThisBuffer( 18225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 18325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 18425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE FillThisBuffer( 18525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 18625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 18725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_FillThisBuffer( 18825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 18925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 19025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE SetCallbacks( 19125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 19225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_CALLBACKTYPE* pCallbacks, 19325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppData); 19425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_SetCallbacks( 19525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_CALLBACKTYPE* pCallbacks, 19625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppData); 19725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 19825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE ComponentRoleEnum( 19925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 20025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_U8 *cRole, 20125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nIndex); 20225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_ComponentRoleEnum( 20325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_U8 *cRole, 20425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nIndex); 20525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 20625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE FillBufferDone( 20725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_HANDLETYPE hComponent, 20825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_PTR pAppData, 20925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer); 21025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_FillBufferDone( 21125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_HANDLETYPE hComponent, 21225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_PTR pAppData, 21325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer); 21425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 21525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static OMX_ERRORTYPE EventHandler( 21625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 21725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppData, 21825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_EVENTTYPE eEvent, 21925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nData1, 22025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nData2, 22125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pEventData); 22225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_ERRORTYPE ISV_EventHandler( 22325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_HANDLETYPE hComponent, 22425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pAppData, 22525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_EVENTTYPE eEvent, 22625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nData1, 22725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_U32 nData2, 22825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IN OMX_PTR pEventData); 22925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang /* end of component methods & helpers */ 23025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 23125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang void SetTypeHeader(OMX_PTR type, OMX_U32 size); 23225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 23325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // init & deinit functions 23425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang status_t init(int32_t width, int32_t height); 23525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang void deinit(); 23625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 23725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang const static OMX_U8 OMX_SPEC_VERSION_MAJOR = 1; 23825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang const static OMX_U8 OMX_SPEC_VERSION_MINOR = 0; 23925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang const static OMX_U8 OMX_SPEC_VERSION_REVISION = 0; 24025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang const static OMX_U8 OMX_SPEC_VERSION_STEP = 0; 24125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 24225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang const static OMX_U32 OMX_SPEC_VERSION = 0 24325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang | (OMX_SPEC_VERSION_MAJOR << 0) 24425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang | (OMX_SPEC_VERSION_MINOR << 8) 24525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang | (OMX_SPEC_VERSION_REVISION << 16) 24625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang | (OMX_SPEC_VERSION_STEP << 24); 24725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 24825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang typedef enum OMX_ISVINDEXEXTTYPE { 24925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IndexISVStartUsed = OMX_IndexVendorStartUnused + 0x0000F000, 25025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_IndexExtSetISVMode, /**< reference: OMX_U32 */ 25125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang } OMX_ISVINDEXEXTTYPE; 25225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 25325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang typedef enum { 25425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang ISV_DISABLE = 0, 25525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang ISV_AUTO, 25625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang } ISV_MODE; 25725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 25825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wangprivate: 25925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_COMPONENTTYPE mBaseComponent; //returned by GetComponetHandle() 26025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_COMPONENTTYPE *mComponent; // passed from the real OMX core 26125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_CALLBACKTYPE *mpCallBacks; 26225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang ISVOMXCore *mCore; // owend by mComponent 26325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang OMX_CALLBACKTYPE *mpISVCallBacks; 26425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 26525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // buffer manager 26625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang sp<ISVBufferManager> mISVBufferManager; 26725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 26825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mThreadRunning; 26925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 27025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // vpp thread observer 27125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang sp<ISVProcThreadObserver> mProcThreadObserver; 27225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 27325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // vpp input buffer count + output buffer count 27425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang int32_t mNumISVBuffers; 27525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang int32_t mNumDecoderBuffers; 27625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang int32_t mNumDecoderBuffersBak; 27789be4f7c8a434378432d1a39850a3c9dea334e96Xigui Wang /* To speed up the start up output decoder buffer directly 27889be4f7c8a434378432d1a39850a3c9dea334e96Xigui Wang * for certain frames. ISV worker pipeline set up is hide by (in parallel with) 27989be4f7c8a434378432d1a39850a3c9dea334e96Xigui Wang * display these output frames. 28089be4f7c8a434378432d1a39850a3c9dea334e96Xigui Wang */ 28189be4f7c8a434378432d1a39850a3c9dea334e96Xigui Wang int32_t mOutputDecoderBufferNum; 28225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang uint32_t mWidth; 28325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang uint32_t mHeight; 28425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang uint32_t mUseAndroidNativeBufferIndex; 28525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang uint32_t mStoreMetaDataInBuffersIndex; 286d6acef05e41af96ff00f2c579e3f9c96cb1a0530Xigui Wang uint32_t mHackFormat; 28725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 28825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mUseAndroidNativeBuffer; 28925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mUseAndroidNativeBuffer2; 29025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 29125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mVPPEnabled; 29225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mVPPOn; 29325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mVPPFlushing; 294e5aad73d4992d6c8fbd9e9e3c9cc89abfc83b775Xigui Wang bool mOutputCropChanged; 29525b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mInitialized; 29625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#ifdef TARGET_VPP_USE_GEN 29725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // vpp thread 29825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang sp<ISVProcessor> mProcThread; 29925b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#else 30025b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static sp<ISVProcessor> mProcThread; 30125b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#endif 30225b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang // protect create mProcThread instance 30325b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang bool mOwnProcessor; 30425b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang static pthread_mutex_t ProcThreadInstanceLock; 30589be4f7c8a434378432d1a39850a3c9dea334e96Xigui Wang Mutex mDecoderBufLock; 30625b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang}; 30725b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang 30825b2a4f2f53ada7434b5c77d26a7e4f29aa85eddXigui Wang#endif // #define ISV_OMXCOMPONENT_H_ 309