omx_base_component.h

Go to the documentation of this file.
00001 
00030 #ifndef _OMX_BASE_COMPONENT_H_
00031 #define _OMX_BASE_COMPONENT_H_
00032 
00033 #include <pthread.h>
00034 
00035 #include "tsemaphore.h"
00036 #include "queue.h"
00037 #include "omx_classmagic.h"
00038 #include <omx_base_port.h>
00039 
00041 #define DEFAULT_IN_BUFFER_SIZE  4 * 1024
00042 
00043 #define DEFAULT_OUT_BUFFER_SIZE 32 * 1024 /*16 * 1024 */ // TODO - check this size is ok 
00044 
00045 #define DEFAULT_MIME_STRING_LENGTH 128
00046 
00047 #define NUM_DOMAINS 4
00048 
00049 /* Check if Component is deinitalizing*/
00050 #define IS_COMPONENT_DEINIT(component_Private, exit_condition)  \
00051                 pthread_mutex_lock(&component_Private->exit_mutex)      ,\
00052                 exit_condition = component_Private->bIsComponentDeinit ,\
00053                 pthread_mutex_unlock(&component_Private->exit_mutex) ,\
00054                 (exit_condition == OMX_TRUE) ? OMX_TRUE:OMX_FALSE \
00055 
00056 typedef struct OMX_VENDOR_EXTRADATATYPE  {
00057   OMX_U32 nPortIndex;
00058   OMX_U32 nDataSize;   // Size of the supporting data to follow
00059   OMX_U8  *pData;     // Supporting data hint  
00060 } OMX_VENDOR_EXTRADATATYPE;
00061 
00063 typedef enum OMX_INDEXVENDORTYPE {
00065   OMX_IndexVendorFileReadInputFilename = 0xFF000001,
00066   OMX_IndexVendorParser3gpInputFilename = 0xFF000002,
00067   OMX_IndexVendorVideoExtraData = 0xFF000003,
00068   OMX_IndexVendorAudioExtraData = 0xFF000004,
00069 } OMX_INDEXVENDORTYPE;
00070 
00072 typedef enum OMX_TRANS_STATETYPE {
00073     OMX_TransStateInvalid,
00074     OMX_TransStateLoadedToIdle,
00075     OMX_TransStateIdleToPause,
00076     OMX_TransStatePauseToExecuting,
00077     OMX_TransStateIdleToExecuting,
00078     OMX_TransStateExecutingToIdle,
00079     OMX_TransStateExecutingToPause,
00080     OMX_TransStatePauseToIdle,
00081     OMX_TransStateIdleToLoaded,       
00082     OMX_TransStateMax = 0X7FFFFFFF
00083 } OMX_TRANS_STATETYPE;
00084 
00088 typedef enum INTERNAL_MESSAGE_TYPE {
00089   SENDCOMMAND_MSG_TYPE = 1,
00090   ERROR_MSG_TYPE,
00091   WARNING_MSG_TYPE 
00092 } INTERNAL_MESSAGE_TYPE;
00093 
00099 typedef struct internalRequestMessageType {
00100   int messageType; 
00101   int messageParam; 
00102   OMX_PTR pCmdData; 
00103 } internalRequestMessageType;
00104 
00108 CLASS(omx_base_component_PrivateType)
00109 #define omx_base_component_PrivateType_FIELDS \
00110   OMX_COMPONENTTYPE *openmaxStandComp;  \
00111   omx_base_PortType **ports;  \
00112   OMX_PORT_PARAM_TYPE sPortTypesParam[NUM_DOMAINS];  \
00113   char uniqueID;  \
00114   char* name; \
00115   OMX_STATETYPE state;  \
00116   OMX_TRANS_STATETYPE transientState;  \
00121   OMX_CALLBACKTYPE* callbacks;  \
00123   OMX_PTR callbackData; \
00125   queue_t* messageQueue;\
00126   tsem_t* messageSem;\
00127   OMX_U32 nGroupPriority; \
00128   OMX_U32 nGroupID; \
00129   OMX_MARKTYPE *pMark; \
00130   pthread_mutex_t flush_mutex;   \
00131   pthread_cond_t flush_all_condition;   \
00132   pthread_cond_t flush_condition;   \
00133   tsem_t* bMgmtSem;\
00134   tsem_t* bStateSem;\
00135   int messageHandlerThreadID;  \
00136   pthread_t messageHandlerThread;  \
00137   int bufferMgmtThreadID;  \
00138   pthread_t bufferMgmtThread;  \
00139   void *loader;  \
00140   void* (*BufferMgmtFunction)(void* param);  \
00141   OMX_ERRORTYPE (*messageHandler)(OMX_COMPONENTTYPE*,internalRequestMessageType*); \
00142   OMX_ERRORTYPE (*DoStateSet)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32);  \
00143   OMX_ERRORTYPE (*destructor)(OMX_COMPONENTTYPE *openmaxStandComp); 
00144 ENDCLASS(omx_base_component_PrivateType)
00145 
00162 OMX_ERRORTYPE omx_base_component_Constructor(OMX_COMPONENTTYPE *openmaxStandComp,OMX_STRING cComponentName);
00163 
00171 OMX_ERRORTYPE omx_base_component_Destructor(OMX_COMPONENTTYPE *openmaxStandComp);
00172 
00183 OMX_ERRORTYPE omx_base_component_DoStateSet(
00184   OMX_COMPONENTTYPE *openmaxStandComp,
00185   OMX_U32 destinationState);
00186 
00198 OMX_ERRORTYPE checkHeader(OMX_PTR header, OMX_U32 size);
00199 
00207 void setHeader(OMX_PTR header, OMX_U32 size);
00208 
00213 OMX_ERRORTYPE omx_base_component_GetComponentVersion(OMX_IN  OMX_HANDLETYPE hComponent,
00214   OMX_OUT OMX_STRING pComponentName,
00215   OMX_OUT OMX_VERSIONTYPE* pComponentVersion,
00216   OMX_OUT OMX_VERSIONTYPE* pSpecVersion,
00217   OMX_OUT OMX_UUIDTYPE* pComponentUUID);
00218 
00231 OMX_ERRORTYPE omx_base_component_ComponentRoleEnum(
00232   OMX_IN OMX_HANDLETYPE hComponent,
00233   OMX_OUT OMX_U8 *cRole,
00234   OMX_IN OMX_U32 nIndex);
00235 
00241 OMX_ERRORTYPE omx_base_component_SetCallbacks(
00242   OMX_IN  OMX_HANDLETYPE hComponent,
00243   OMX_IN  OMX_CALLBACKTYPE* pCallbacks,
00244   OMX_IN  OMX_PTR pAppData);
00245 
00252 OMX_ERRORTYPE omx_base_component_GetParameter(
00253   OMX_IN  OMX_HANDLETYPE hComponent,
00254   OMX_IN  OMX_INDEXTYPE nParamIndex,
00255   OMX_INOUT OMX_PTR ComponentParameterStructure);
00256 
00265 OMX_ERRORTYPE omx_base_component_SetParameter(
00266   OMX_IN  OMX_HANDLETYPE hComponent,
00267   OMX_IN  OMX_INDEXTYPE nParamIndex,
00268   OMX_IN  OMX_PTR ComponentParameterStructure);
00269 
00277 OMX_ERRORTYPE omx_base_component_GetConfig(
00278   OMX_IN  OMX_HANDLETYPE hComponent,
00279   OMX_IN  OMX_INDEXTYPE nIndex,
00280   OMX_INOUT OMX_PTR pComponentConfigStructure);
00281 
00289 OMX_ERRORTYPE omx_base_component_SetConfig(
00290   OMX_IN  OMX_HANDLETYPE hComponent,
00291   OMX_IN  OMX_INDEXTYPE nIndex,
00292   OMX_IN  OMX_PTR pComponentConfigStructure);
00293 
00299 OMX_ERRORTYPE omx_base_component_GetExtensionIndex(
00300   OMX_IN  OMX_HANDLETYPE hComponent,
00301   OMX_IN  OMX_STRING cParameterName,
00302   OMX_OUT OMX_INDEXTYPE* pIndexType);
00303 
00308 OMX_ERRORTYPE omx_base_component_GetState(
00309   OMX_IN  OMX_HANDLETYPE hComponent,
00310   OMX_OUT OMX_STATETYPE* pState);
00311 
00317 OMX_ERRORTYPE omx_base_component_SendCommand(
00318   OMX_IN  OMX_HANDLETYPE hComponent,
00319   OMX_IN  OMX_COMMANDTYPE Cmd,
00320   OMX_IN  OMX_U32 nParam,
00321   OMX_IN  OMX_PTR pCmdData);
00322 
00331 OMX_ERRORTYPE omx_base_component_ComponentDeInit(
00332   OMX_IN  OMX_HANDLETYPE hComponent);
00333 
00340 void* compMessageHandlerFunction(void*);
00341 
00353 OMX_ERRORTYPE omx_base_component_MessageHandler(OMX_COMPONENTTYPE *openmaxStandComp,internalRequestMessageType* message);
00354 
00358 OMX_ERRORTYPE omx_base_component_ParameterSanityCheck(
00359             OMX_IN  OMX_HANDLETYPE hComponent,
00360             OMX_IN  OMX_U32 nPortIndex,
00361             OMX_IN  OMX_PTR pStructure,
00362             OMX_IN  size_t size);
00363 
00364 OMX_ERRORTYPE omx_base_component_AllocateBuffer(
00365             OMX_IN OMX_HANDLETYPE hComponent,
00366             OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer,
00367             OMX_IN OMX_U32 nPortIndex,
00368             OMX_IN OMX_PTR pAppPrivate,
00369             OMX_IN OMX_U32 nSizeBytes);
00370 
00371 OMX_ERRORTYPE omx_base_component_UseBuffer(
00372             OMX_IN OMX_HANDLETYPE hComponent,
00373             OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
00374             OMX_IN OMX_U32 nPortIndex,
00375             OMX_IN OMX_PTR pAppPrivate,
00376             OMX_IN OMX_U32 nSizeBytes,
00377             OMX_IN OMX_U8* pBuffer);
00378 
00379 OMX_ERRORTYPE omx_base_component_UseEGLImage (
00380         OMX_IN OMX_HANDLETYPE hComponent,
00381         OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
00382         OMX_IN OMX_U32 nPortIndex,
00383         OMX_IN OMX_PTR pAppPrivate,
00384         OMX_IN void* eglImage);
00385 
00386 OMX_ERRORTYPE omx_base_component_FreeBuffer(   
00387             OMX_IN  OMX_HANDLETYPE hComponent,
00388             OMX_IN  OMX_U32 nPortIndex,
00389             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
00390 
00391 OMX_ERRORTYPE omx_base_component_EmptyThisBuffer(
00392             OMX_IN  OMX_HANDLETYPE hComponent,
00393             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
00394 
00395 OMX_ERRORTYPE omx_base_component_FillThisBuffer(
00396             OMX_IN  OMX_HANDLETYPE hComponent,
00397             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
00398 
00399 OMX_ERRORTYPE omx_base_component_ComponentTunnelRequest(
00400             OMX_IN  OMX_HANDLETYPE hComp,
00401             OMX_IN  OMX_U32 nPort,
00402             OMX_IN  OMX_HANDLETYPE hTunneledComp,
00403             OMX_IN  OMX_U32 nTunneledPort,
00404             OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
00405  
00406 #endif

Generated for OpenMAX Bellagio rel. 0.9.0 by  doxygen 1.5.1
SourceForge.net Logo