OpenMAXBellagio  0.9.3
omx_base_component.h
Go to the documentation of this file.
1 
26 #ifndef _OMX_BASE_COMPONENT_H_
27 #define _OMX_BASE_COMPONENT_H_
28 
29 #include <stdlib.h>
30 #include <pthread.h>
31 #include <stdio.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <errno.h>
35 #if defined(__linux__)
36 #include <asm/unistd.h>
37 #endif
38 
39 #ifdef ANDROID_COMPILATION
40 #include <oscl_base_macros.h>
41 #else
42 #define OSCL_IMPORT_REF
43 #define OSCL_EXPORT_REF
44 #endif
45 #include "omxcore.h"
46 #include "OMXComponentRMExt.h"
47 #include "tsemaphore.h"
48 #include "queue.h"
49 #include "omx_classmagic.h"
50 #include "omx_base_port.h"
51 #include "extension_struct.h"
53 
54 
56 #define DEFAULT_IN_BUFFER_SIZE 4 * 1024
57 
58 #define DEFAULT_OUT_BUFFER_SIZE 32 * 1024 /*16 * 1024 */ // TODO - check this size is ok
59 
60 #define DEFAULT_MIME_STRING_LENGTH 128
61 
62 #define NUM_DOMAINS 4
63 
64 #define OMX_BUFFERFLAG_KEY_FRAME 0x11000000
65 
66 typedef struct OMX_VENDOR_EXTRADATATYPE {
68  OMX_U32 nDataSize; // Size of the supporting data to follow
69  OMX_U8 *pData; // Supporting data hint
71 
74  OMX_TUNNELSETUPTYPE nTunnelSetup; // Tunnel setup flags
76 
78 typedef enum OMX_INDEXVENDORTYPE {
82  OMX_IndexVendorCompPropTunnelFlags, /* Will use OMX_TUNNELSETUPTYPE structure*/
86 
88 typedef enum OMX_TRANS_STATETYPE {
98  OMX_TransStateMax = 0X7FFFFFFF
100 
104 typedef enum INTERNAL_MESSAGE_TYPE {
109 
120 
125 #define omx_base_component_PrivateType_FIELDS \
126  OMX_COMPONENTTYPE *openmaxStandComp; \
127  omx_base_PortType **ports; \
128  OMX_PORT_PARAM_TYPE sPortTypesParam[NUM_DOMAINS]; \
129  char uniqueID; \
130  char* name; \
131  OMX_STATETYPE state; \
132  OMX_TRANS_STATETYPE transientState; \
137  OMX_CALLBACKTYPE* callbacks; \
139  OMX_PTR callbackData; \
141  queue_t* messageQueue;\
142  tsem_t* messageSem;\
143  OMX_U32 nGroupPriority; \
144  OMX_U32 nGroupID; \
145  OMX_PARAM_BELLAGIOTHREADS_ID* bellagioThreads;\
146  OMX_BOOL bIsEOSReached; \
147  OMX_MARKTYPE pMark; \
148  pthread_mutex_t flush_mutex; \
149  tsem_t* flush_all_condition; \
150  tsem_t* flush_condition; \
151  tsem_t* bMgmtSem;\
152  tsem_t* bStateSem;\
153  pthread_t messageHandlerThread; \
154  int bufferMgmtThreadID; \
155  pthread_t bufferMgmtThread; \
156  void *loader; \
157  void* (*BufferMgmtFunction)(void* param); \
158  OMX_ERRORTYPE (*messageHandler)(OMX_COMPONENTTYPE*,internalRequestMessageType*); \
159  OMX_ERRORTYPE (*DoStateSet)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32); \
160  OMX_ERRORTYPE (*destructor)(OMX_COMPONENTTYPE *openmaxStandComp); \
161  OMX_ERRORTYPE (*getQualityLevel)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32* pQualityLevel); \
162  OMX_ERRORTYPE (*setQualityLevel)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32 nQualityLevel); \
163  OMX_U32 nqualitylevels; \
164  multiResourceDescriptor** multiResourceLevel; \
165  int currentQualityLevel;
166 ENDCLASS(omx_base_component_PrivateType)
167 
169 
187 
196 
199 
211  OMX_COMPONENTTYPE *openmaxStandComp,
212  OMX_U32 destinationState);
213 
226 
234 void setHeader(OMX_PTR header, OMX_U32 size);
235 
241  OMX_HANDLETYPE hComponent,
242  OMX_STRING pComponentName,
243  OMX_VERSIONTYPE* pComponentVersion,
244  OMX_VERSIONTYPE* pSpecVersion,
245  OMX_UUIDTYPE* pComponentUUID);
246 
260  OMX_HANDLETYPE hComponent,
261  OMX_U8 *cRole,
262  OMX_U32 nIndex);
263 
270  OMX_HANDLETYPE hComponent,
271  OMX_CALLBACKTYPE* pCallbacks,
272  OMX_PTR pAppData);
273 
281  OMX_HANDLETYPE hComponent,
282  OMX_INDEXTYPE nParamIndex,
283  OMX_PTR ComponentParameterStructure);
284 
294  OMX_HANDLETYPE hComponent,
295  OMX_INDEXTYPE nParamIndex,
296  OMX_PTR ComponentParameterStructure);
297 
306  OMX_HANDLETYPE hComponent,
307  OMX_INDEXTYPE nIndex,
308  OMX_PTR pComponentConfigStructure);
309 
318  OMX_HANDLETYPE hComponent,
319  OMX_INDEXTYPE nIndex,
320  OMX_PTR pComponentConfigStructure);
321 
328  OMX_HANDLETYPE hComponent,
329  OMX_STRING cParameterName,
330  OMX_INDEXTYPE* pIndexType);
331 
337  OMX_HANDLETYPE hComponent,
338  OMX_STATETYPE* pState);
339 
346  OMX_HANDLETYPE hComponent,
347  OMX_COMMANDTYPE Cmd,
348  OMX_U32 nParam,
349  OMX_PTR pCmdData);
350 
360  OMX_HANDLETYPE hComponent);
361 
368 void* compMessageHandlerFunction(void*);
369 
382 
387  OMX_HANDLETYPE hComponent,
388  OMX_U32 nPortIndex,
389  OMX_PTR pStructure,
390  size_t size);
391 
393  OMX_HANDLETYPE hComponent,
394  OMX_BUFFERHEADERTYPE** ppBuffer,
395  OMX_U32 nPortIndex,
396  OMX_PTR pAppPrivate,
397  OMX_U32 nSizeBytes);
398 
400  OMX_HANDLETYPE hComponent,
401  OMX_BUFFERHEADERTYPE** ppBufferHdr,
402  OMX_U32 nPortIndex,
403  OMX_PTR pAppPrivate,
404  OMX_U32 nSizeBytes,
405  OMX_U8* pBuffer);
406 
408  OMX_HANDLETYPE hComponent,
409  OMX_BUFFERHEADERTYPE** ppBufferHdr,
410  OMX_U32 nPortIndex,
411  OMX_PTR pAppPrivate,
412  void* eglImage);
413 
415  OMX_HANDLETYPE hComponent,
416  OMX_U32 nPortIndex,
417  OMX_BUFFERHEADERTYPE* pBuffer);
418 
420  OMX_HANDLETYPE hComponent,
421  OMX_BUFFERHEADERTYPE* pBuffer);
422 
424  OMX_HANDLETYPE hComponent,
425  OMX_BUFFERHEADERTYPE* pBuffer);
426 
428  OMX_HANDLETYPE hComp,
429  OMX_U32 nPort,
430  OMX_HANDLETYPE hTunneledComp,
431  OMX_U32 nTunneledPort,
432  OMX_TUNNELSETUPTYPE* pTunnelSetup);
433 
434 #endif
OMX_VENDOR_PROP_TUNNELSETUPTYPE::nPortIndex
OMX_U32 nPortIndex
Definition: omx_base_component.h:73
omx_reference_resource_manager.h
CLASS
#define CLASS(a)
Definition: omx_classmagic.h:48
OMX_TransStateIdleToLoaded
Definition: omx_base_component.h:97
OMX_VENDOR_EXTRADATATYPE::pData
OMX_U8 * pData
Definition: omx_base_component.h:69
OMX_IndexParameterThreadsID
Definition: omx_base_component.h:83
omx_base_component_UseEGLImage
OMX_ERRORTYPE omx_base_component_UseEGLImage(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE **ppBufferHdr, OMX_U32 nPortIndex, OMX_PTR pAppPrivate, void *eglImage)
Definition: omx_base_component.c:1831
OSCL_IMPORT_REF
#define OSCL_IMPORT_REF
Definition: omx_base_component.h:42
omx_base_component_PrivateType
Definition: omx_base_component.h:124
OMX_ERRORTYPE
OMX_ERRORTYPE
Definition: OMX_Core.h:126
internalRequestMessageType
struct internalRequestMessageType internalRequestMessageType
The container of an internal message.
omx_base_component_FreeBuffer
OMX_ERRORTYPE omx_base_component_FreeBuffer(OMX_HANDLETYPE hComponent, OMX_U32 nPortIndex, OMX_BUFFERHEADERTYPE *pBuffer)
Definition: omx_base_component.c:1840
WARNING_MSG_TYPE
Definition: omx_base_component.h:107
OMX_TransStateMax
Definition: omx_base_component.h:98
OMX_TransStatePauseToIdle
Definition: omx_base_component.h:96
OMX_U32
unsigned long OMX_U32
Definition: OMX_Types.h:145
checkHeader
OMX_ERRORTYPE checkHeader(OMX_PTR header, OMX_U32 size)
Checks the header of a structure for consistency with size and spec version.
Definition: omx_base_component.c:720
omx_base_component_SetConfig
OMX_ERRORTYPE omx_base_component_SetConfig(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nIndex, OMX_PTR pComponentConfigStructure)
base SetConfig function
Definition: omx_base_component.c:1242
OMX_TRANS_STATETYPE
OMX_TRANS_STATETYPE
Definition: omx_base_component.h:88
OMX_TransStatePauseToExecuting
Definition: omx_base_component.h:92
base_constructor_remove_garbage_collected
void base_constructor_remove_garbage_collected(omx_base_component_PrivateType *omx_base_component_Private)
Definition: omx_base_component.c:44
OMX_TransStateLoadedToIdle
Definition: omx_base_component.h:90
OMXComponentRMExt.h
Extended OMXIL component interface for quality-of-service.
OMX_CALLBACKTYPE
Definition: OMX_Core.h:497
omx_base_component_EmptyThisBuffer
OMX_ERRORTYPE omx_base_component_EmptyThisBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE *pBuffer)
Definition: omx_base_component.c:1867
OMX_HANDLETYPE
void * OMX_HANDLETYPE
Definition: OMX_Types.h:295
OMX_IndexVendorCompPropTunnelFlags
Definition: omx_base_component.h:82
omx_base_component_GetState
OMX_ERRORTYPE omx_base_component_GetState(OMX_HANDLETYPE hComponent, OMX_STATETYPE *pState)
Definition: omx_base_component.c:1273
omxcore.h
omx_base_component_GetParameter
OMX_ERRORTYPE omx_base_component_GetParameter(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nParamIndex, OMX_PTR ComponentParameterStructure)
Part of the standard OpenMAX function.
Definition: omx_base_component.c:896
OMX_VENDOR_PROP_TUNNELSETUPTYPE
Definition: omx_base_component.h:72
OMX_IndexVendorOutputFilename
Definition: omx_base_component.h:81
extension_struct.h
OMX_INDEXVENDORTYPE
OMX_INDEXVENDORTYPE
Definition: omx_base_component.h:78
setHeader
void setHeader(OMX_PTR header, OMX_U32 size)
Simply fills the first two fields in any OMX structure with the size and the version.
Definition: omx_base_component.c:746
internalRequestMessageType::messageParam
int messageParam
Definition: omx_base_component.h:117
omx_base_component_ComponentDeInit
OMX_ERRORTYPE omx_base_component_ComponentDeInit(OMX_HANDLETYPE hComponent)
This standard functionality is called when the component is destroyed in the FreeHandle standard call...
Definition: omx_base_component.c:346
OMX_VENDOR_EXTRADATATYPE
struct OMX_VENDOR_EXTRADATATYPE OMX_VENDOR_EXTRADATATYPE
tsemaphore.h
omx_classmagic.h
OMX_VENDOR_EXTRADATATYPE::nPortIndex
OMX_U32 nPortIndex
Definition: omx_base_component.h:67
ERROR_MSG_TYPE
Definition: omx_base_component.h:106
OMX_TransStateExecutingToPause
Definition: omx_base_component.h:95
OMX_VERSIONTYPE
Definition: OMX_Types.h:328
omx_base_port.h
internalRequestMessageType
The container of an internal message.
Definition: omx_base_component.h:115
SENDCOMMAND_MSG_TYPE
Definition: omx_base_component.h:105
OMX_PTR
void * OMX_PTR
Definition: OMX_Types.h:199
internalRequestMessageType::pCmdData
OMX_PTR pCmdData
Definition: omx_base_component.h:118
OMX_TUNNELSETUPTYPE
Definition: OMX_Core.h:635
omx_base_component_SetCallbacks
OMX_ERRORTYPE omx_base_component_SetCallbacks(OMX_HANDLETYPE hComponent, OMX_CALLBACKTYPE *pCallbacks, OMX_PTR pAppData)
standard OpenMAX function
Definition: omx_base_component.c:857
OMX_TransStateInvalid
Definition: omx_base_component.h:89
omx_base_component_ParameterSanityCheck
OMX_ERRORTYPE omx_base_component_ParameterSanityCheck(OMX_HANDLETYPE hComponent, OMX_U32 nPortIndex, OMX_PTR pStructure, size_t size)
Definition: omx_base_component.c:759
internalRequestMessageType::messageType
int messageType
Definition: omx_base_component.h:116
omx_base_component_MessageHandler
OMX_ERRORTYPE omx_base_component_MessageHandler(OMX_COMPONENTTYPE *openmaxStandComp, internalRequestMessageType *message)
Definition: omx_base_component.c:1490
OMX_COMPONENTTYPE
Definition: OMX_Component.h:307
queue.h
OMX_IndexVendorInputFilename
Definition: omx_base_component.h:80
omx_base_component_UseBuffer
OMX_ERRORTYPE omx_base_component_UseBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE **ppBufferHdr, OMX_U32 nPortIndex, OMX_PTR pAppPrivate, OMX_U32 nSizeBytes, OMX_U8 *pBuffer)
Definition: omx_base_component.c:1802
compMessageHandlerFunction
void * compMessageHandlerFunction(void *)
Component's message handler thread function.
Definition: omx_base_component.c:1438
OMX_TransStateIdleToExecuting
Definition: omx_base_component.h:93
OMX_TransStateIdleToPause
Definition: omx_base_component.h:91
omx_base_component_ComponentRoleEnum
OMX_ERRORTYPE omx_base_component_ComponentRoleEnum(OMX_HANDLETYPE hComponent, OMX_U8 *cRole, OMX_U32 nIndex)
Enumerates all the role of the component.
Definition: omx_base_component.c:844
OMX_VENDOR_PROP_TUNNELSETUPTYPE::nTunnelSetup
OMX_TUNNELSETUPTYPE nTunnelSetup
Definition: omx_base_component.h:74
omx_base_component_FillThisBuffer
OMX_ERRORTYPE omx_base_component_FillThisBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE *pBuffer)
Definition: omx_base_component.c:1897
OMX_INDEXTYPE
OMX_INDEXTYPE
Definition: OMX_Index.h:60
omx_base_component_Destructor
OMX_ERRORTYPE omx_base_component_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
the base destructor for ST OpenMAX components
Definition: omx_base_component.c:271
OMX_STATETYPE
OMX_STATETYPE
Definition: OMX_Core.h:92
omx_base_component_ComponentTunnelRequest
OMX_ERRORTYPE omx_base_component_ComponentTunnelRequest(OMX_HANDLETYPE hComp, OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp, OMX_U32 nTunneledPort, OMX_TUNNELSETUPTYPE *pTunnelSetup)
Definition: omx_base_component.c:1928
omx_base_component_SendCommand
OMX_ERRORTYPE omx_base_component_SendCommand(OMX_HANDLETYPE hComponent, OMX_COMMANDTYPE Cmd, OMX_U32 nParam, OMX_PTR pCmdData)
standard SendCommand function
Definition: omx_base_component.c:1289
OMX_STRING
char * OMX_STRING
Definition: OMX_Types.h:206
omx_base_component_AllocateBuffer
OMX_ERRORTYPE omx_base_component_AllocateBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE **ppBuffer, OMX_U32 nPortIndex, OMX_PTR pAppPrivate, OMX_U32 nSizeBytes)
Definition: omx_base_component.c:1773
OMX_UUIDTYPE
unsigned char OMX_UUIDTYPE[128]
Definition: OMX_Types.h:219
omx_base_component_GetComponentVersion
OMX_ERRORTYPE omx_base_component_GetComponentVersion(OMX_HANDLETYPE hComponent, OMX_STRING pComponentName, OMX_VERSIONTYPE *pComponentVersion, OMX_VERSIONTYPE *pSpecVersion, OMX_UUIDTYPE *pComponentUUID)
standard openmax function
Definition: omx_base_component.c:801
omx_base_component_GetConfig
OMX_ERRORTYPE omx_base_component_GetConfig(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nIndex, OMX_PTR pComponentConfigStructure)
base GetConfig function
Definition: omx_base_component.c:1228
INTERNAL_MESSAGE_TYPE
INTERNAL_MESSAGE_TYPE
Enumerates all the possible types of messages handled internally by the component.
Definition: omx_base_component.h:104
omx_base_component_DoStateSet
OMX_ERRORTYPE omx_base_component_DoStateSet(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32 destinationState)
Definition: omx_base_component.c:370
OMX_BUFFERHEADERTYPE
Definition: OMX_Core.h:398
omx_base_getQualityLevel
OMX_ERRORTYPE omx_base_getQualityLevel(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32 *pQualityLevel)
Definition: omx_base_component.c:1957
OMX_U8
unsigned char OMX_U8
Definition: OMX_Types.h:133
omx_base_component_Constructor
OMX_ERRORTYPE omx_base_component_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
The base constructor for the OpenMAX ST components.
Definition: omx_base_component.c:95
OMX_COMMANDTYPE
OMX_COMMANDTYPE
Definition: OMX_Core.h:49
OMX_VENDOR_EXTRADATATYPE
Definition: omx_base_component.h:66
OMX_IndexVendorStartUnused
Definition: OMX_Index.h:243
OMX_TransStateExecutingToIdle
Definition: omx_base_component.h:94
OMX_VIDEO_CodingTheora
Definition: omx_base_component.h:84
omx_base_component_SetParameter
OMX_ERRORTYPE omx_base_component_SetParameter(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nParamIndex, OMX_PTR ComponentParameterStructure)
part of the standard openmax function
Definition: omx_base_component.c:1026
omx_base_setQualityLevel
OMX_ERRORTYPE omx_base_setQualityLevel(OMX_COMPONENTTYPE *openmaxStandComp, OMX_U32 nQualityLevel)
Definition: omx_base_component.c:1964
OMX_VENDOR_EXTRADATATYPE::nDataSize
OMX_U32 nDataSize
Definition: omx_base_component.h:68
omx_base_component_GetExtensionIndex
OMX_ERRORTYPE omx_base_component_GetExtensionIndex(OMX_HANDLETYPE hComponent, OMX_STRING cParameterName, OMX_INDEXTYPE *pIndexType)
base function not implemented
Definition: omx_base_component.c:1254
OMX_VENDOR_PROP_TUNNELSETUPTYPE
struct OMX_VENDOR_PROP_TUNNELSETUPTYPE OMX_VENDOR_PROP_TUNNELSETUPTYPE

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