|
OpenMAXBellagio 0.9.3
|
00001 00026 #ifndef _OMX_BASE_COMPONENT_H_ 00027 #define _OMX_BASE_COMPONENT_H_ 00028 00029 #include <stdlib.h> 00030 #include <pthread.h> 00031 #include <stdio.h> 00032 #include <string.h> 00033 #include <unistd.h> 00034 #include <errno.h> 00035 #include <asm/unistd.h> 00036 00037 #ifdef ANDROID_COMPILATION 00038 #include <oscl_base_macros.h> 00039 #else 00040 #define OSCL_IMPORT_REF 00041 #define OSCL_EXPORT_REF 00042 #endif 00043 #include "omxcore.h" 00044 #include "OMXComponentRMExt.h" 00045 #include "tsemaphore.h" 00046 #include "queue.h" 00047 #include "omx_classmagic.h" 00048 #include "omx_base_port.h" 00049 #include "extension_struct.h" 00050 #include "omx_reference_resource_manager.h" 00051 00052 00054 #define DEFAULT_IN_BUFFER_SIZE 4 * 1024 00055 00056 #define DEFAULT_OUT_BUFFER_SIZE 32 * 1024 /*16 * 1024 */ // TODO - check this size is ok 00057 00058 #define DEFAULT_MIME_STRING_LENGTH 128 00059 00060 #define NUM_DOMAINS 4 00061 00062 #define OMX_BUFFERFLAG_KEY_FRAME 0x11000000 00063 00064 typedef struct OMX_VENDOR_EXTRADATATYPE { 00065 OMX_U32 nPortIndex; 00066 OMX_U32 nDataSize; // Size of the supporting data to follow 00067 OMX_U8 *pData; // Supporting data hint 00068 } OMX_VENDOR_EXTRADATATYPE; 00069 00070 typedef struct OMX_VENDOR_PROP_TUNNELSETUPTYPE { 00071 OMX_U32 nPortIndex; 00072 OMX_TUNNELSETUPTYPE nTunnelSetup; // Tunnel setup flags 00073 } OMX_VENDOR_PROP_TUNNELSETUPTYPE; 00074 00076 typedef enum OMX_INDEXVENDORTYPE { 00078 OMX_IndexVendorInputFilename = OMX_IndexVendorStartUnused+1, 00079 OMX_IndexVendorOutputFilename, 00080 OMX_IndexVendorCompPropTunnelFlags, /* Will use OMX_TUNNELSETUPTYPE structure*/ 00081 OMX_IndexParameterThreadsID, 00082 OMX_VIDEO_CodingTheora 00083 } OMX_INDEXVENDORTYPE; 00084 00086 typedef enum OMX_TRANS_STATETYPE { 00087 OMX_TransStateInvalid, 00088 OMX_TransStateLoadedToIdle, 00089 OMX_TransStateIdleToPause, 00090 OMX_TransStatePauseToExecuting, 00091 OMX_TransStateIdleToExecuting, 00092 OMX_TransStateExecutingToIdle, 00093 OMX_TransStateExecutingToPause, 00094 OMX_TransStatePauseToIdle, 00095 OMX_TransStateIdleToLoaded, 00096 OMX_TransStateMax = 0X7FFFFFFF 00097 } OMX_TRANS_STATETYPE; 00098 00102 typedef enum INTERNAL_MESSAGE_TYPE { 00103 SENDCOMMAND_MSG_TYPE = 1, 00104 ERROR_MSG_TYPE, 00105 WARNING_MSG_TYPE 00106 } INTERNAL_MESSAGE_TYPE; 00107 00113 typedef struct internalRequestMessageType { 00114 int messageType; 00115 int messageParam; 00116 OMX_PTR pCmdData; 00117 } internalRequestMessageType; 00118 00122 CLASS(omx_base_component_PrivateType) 00123 #define omx_base_component_PrivateType_FIELDS \ 00124 OMX_COMPONENTTYPE *openmaxStandComp; \ 00125 omx_base_PortType **ports; \ 00126 OMX_PORT_PARAM_TYPE sPortTypesParam[NUM_DOMAINS]; \ 00127 char uniqueID; \ 00128 char* name; \ 00129 OMX_STATETYPE state; \ 00130 OMX_TRANS_STATETYPE transientState; \ 00135 OMX_CALLBACKTYPE* callbacks; \ 00137 OMX_PTR callbackData; \ 00139 queue_t* messageQueue;\ 00140 tsem_t* messageSem;\ 00141 OMX_U32 nGroupPriority; \ 00142 OMX_U32 nGroupID; \ 00143 OMX_PARAM_BELLAGIOTHREADS_ID* bellagioThreads;\ 00144 OMX_BOOL bIsEOSReached; \ 00145 OMX_MARKTYPE pMark; \ 00146 pthread_mutex_t flush_mutex; \ 00147 tsem_t* flush_all_condition; \ 00148 tsem_t* flush_condition; \ 00149 tsem_t* bMgmtSem;\ 00150 tsem_t* bStateSem;\ 00151 pthread_t messageHandlerThread; \ 00152 int bufferMgmtThreadID; \ 00153 pthread_t bufferMgmtThread; \ 00154 void *loader; \ 00155 void* (*BufferMgmtFunction)(void* param); \ 00156 OMX_ERRORTYPE (*messageHandler)(OMX_COMPONENTTYPE*,internalRequestMessageType*); \ 00157 OMX_ERRORTYPE (*DoStateSet)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32); \ 00158 OMX_ERRORTYPE (*destructor)(OMX_COMPONENTTYPE *openmaxStandComp); \ 00159 OMX_ERRORTYPE (*getQualityLevel)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32* pQualityLevel); \ 00160 OMX_ERRORTYPE (*setQualityLevel)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32 nQualityLevel); \ 00161 OMX_U32 nqualitylevels; \ 00162 multiResourceDescriptor** multiResourceLevel; \ 00163 int currentQualityLevel; 00164 ENDCLASS(omx_base_component_PrivateType) 00165 00166 void base_constructor_remove_garbage_collected(omx_base_component_PrivateType* omx_base_component_Private); 00167 00184 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_Constructor(OMX_COMPONENTTYPE *openmaxStandComp,OMX_STRING cComponentName); 00185 00193 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_Destructor(OMX_COMPONENTTYPE *openmaxStandComp); 00194 00195 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_getQualityLevel(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32* pQualityLevel); 00196 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_setQualityLevel(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32 nQualityLevel); 00197 00208 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_DoStateSet( 00209 OMX_COMPONENTTYPE *openmaxStandComp, 00210 OMX_U32 destinationState); 00211 00223 OSCL_IMPORT_REF OMX_ERRORTYPE checkHeader(OMX_PTR header, OMX_U32 size); 00224 00232 void setHeader(OMX_PTR header, OMX_U32 size); 00233 00238 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_GetComponentVersion( 00239 OMX_HANDLETYPE hComponent, 00240 OMX_STRING pComponentName, 00241 OMX_VERSIONTYPE* pComponentVersion, 00242 OMX_VERSIONTYPE* pSpecVersion, 00243 OMX_UUIDTYPE* pComponentUUID); 00244 00257 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_ComponentRoleEnum( 00258 OMX_HANDLETYPE hComponent, 00259 OMX_U8 *cRole, 00260 OMX_U32 nIndex); 00261 00267 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_SetCallbacks( 00268 OMX_HANDLETYPE hComponent, 00269 OMX_CALLBACKTYPE* pCallbacks, 00270 OMX_PTR pAppData); 00271 00278 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_GetParameter( 00279 OMX_HANDLETYPE hComponent, 00280 OMX_INDEXTYPE nParamIndex, 00281 OMX_PTR ComponentParameterStructure); 00282 00291 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_SetParameter( 00292 OMX_HANDLETYPE hComponent, 00293 OMX_INDEXTYPE nParamIndex, 00294 OMX_PTR ComponentParameterStructure); 00295 00303 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_GetConfig( 00304 OMX_HANDLETYPE hComponent, 00305 OMX_INDEXTYPE nIndex, 00306 OMX_PTR pComponentConfigStructure); 00307 00315 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_SetConfig( 00316 OMX_HANDLETYPE hComponent, 00317 OMX_INDEXTYPE nIndex, 00318 OMX_PTR pComponentConfigStructure); 00319 00325 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_GetExtensionIndex( 00326 OMX_HANDLETYPE hComponent, 00327 OMX_STRING cParameterName, 00328 OMX_INDEXTYPE* pIndexType); 00329 00334 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_GetState( 00335 OMX_HANDLETYPE hComponent, 00336 OMX_STATETYPE* pState); 00337 00343 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_SendCommand( 00344 OMX_HANDLETYPE hComponent, 00345 OMX_COMMANDTYPE Cmd, 00346 OMX_U32 nParam, 00347 OMX_PTR pCmdData); 00348 00357 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_ComponentDeInit( 00358 OMX_HANDLETYPE hComponent); 00359 00366 void* compMessageHandlerFunction(void*); 00367 00379 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_MessageHandler(OMX_COMPONENTTYPE *openmaxStandComp,internalRequestMessageType* message); 00380 00384 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_ParameterSanityCheck( 00385 OMX_HANDLETYPE hComponent, 00386 OMX_U32 nPortIndex, 00387 OMX_PTR pStructure, 00388 size_t size); 00389 00390 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_AllocateBuffer( 00391 OMX_HANDLETYPE hComponent, 00392 OMX_BUFFERHEADERTYPE** ppBuffer, 00393 OMX_U32 nPortIndex, 00394 OMX_PTR pAppPrivate, 00395 OMX_U32 nSizeBytes); 00396 00397 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_UseBuffer( 00398 OMX_HANDLETYPE hComponent, 00399 OMX_BUFFERHEADERTYPE** ppBufferHdr, 00400 OMX_U32 nPortIndex, 00401 OMX_PTR pAppPrivate, 00402 OMX_U32 nSizeBytes, 00403 OMX_U8* pBuffer); 00404 00405 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_UseEGLImage ( 00406 OMX_HANDLETYPE hComponent, 00407 OMX_BUFFERHEADERTYPE** ppBufferHdr, 00408 OMX_U32 nPortIndex, 00409 OMX_PTR pAppPrivate, 00410 void* eglImage); 00411 00412 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_FreeBuffer( 00413 OMX_HANDLETYPE hComponent, 00414 OMX_U32 nPortIndex, 00415 OMX_BUFFERHEADERTYPE* pBuffer); 00416 00417 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_EmptyThisBuffer( 00418 OMX_HANDLETYPE hComponent, 00419 OMX_BUFFERHEADERTYPE* pBuffer); 00420 00421 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_FillThisBuffer( 00422 OMX_HANDLETYPE hComponent, 00423 OMX_BUFFERHEADERTYPE* pBuffer); 00424 00425 OSCL_IMPORT_REF OMX_ERRORTYPE omx_base_component_ComponentTunnelRequest( 00426 OMX_HANDLETYPE hComp, 00427 OMX_U32 nPort, 00428 OMX_HANDLETYPE hTunneledComp, 00429 OMX_U32 nTunneledPort, 00430 OMX_TUNNELSETUPTYPE* pTunnelSetup); 00431 00432 #endif