37 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private;
43 openmaxStandComp->
pComponentPrivate = calloc(1,
sizeof(omx_clocksrc_component_PrivateType));
50 omx_clocksrc_component_Private->ports = NULL;
61 if (omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts && !omx_clocksrc_component_Private->ports) {
63 if (!omx_clocksrc_component_Private->ports) {
66 for (i=0; i < omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts; i++) {
68 if (!omx_clocksrc_component_Private->ports[i]) {
80 omx_clocksrc_component_Private->sClockState.nStartTime = 0;
81 omx_clocksrc_component_Private->sClockState.nOffset = 0;
82 omx_clocksrc_component_Private->sClockState.nWaitMask = 0xFF;
85 omx_clocksrc_component_Private->sMinStartTime.nTimestamp = 0;
86 omx_clocksrc_component_Private->sMinStartTime.nPortIndex = 0;
89 omx_clocksrc_component_Private->sConfigScale.xScale = 1<<16;
95 if(!omx_clocksrc_component_Private->clockEventSem) {
96 omx_clocksrc_component_Private->clockEventSem = calloc(1,
sizeof(
tsem_t));
97 tsem_init(omx_clocksrc_component_Private->clockEventSem, 0);
100 if(!omx_clocksrc_component_Private->clockEventCompleteSem) {
101 omx_clocksrc_component_Private->clockEventCompleteSem = calloc(1,
sizeof(
tsem_t));
102 tsem_init(omx_clocksrc_component_Private->clockEventCompleteSem, 0);
122 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = openmaxStandComp->
pComponentPrivate;
128 if(omx_clocksrc_component_Private->clockEventSem) {
129 tsem_deinit(omx_clocksrc_component_Private->clockEventSem);
130 free(omx_clocksrc_component_Private->clockEventSem);
131 omx_clocksrc_component_Private->clockEventSem=NULL;
133 if(omx_clocksrc_component_Private->clockEventCompleteSem) {
134 tsem_deinit(omx_clocksrc_component_Private->clockEventCompleteSem);
135 free(omx_clocksrc_component_Private->clockEventCompleteSem);
136 omx_clocksrc_component_Private->clockEventCompleteSem=NULL;
140 if (omx_clocksrc_component_Private->ports) {
141 for (i=0; i < omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts; i++) {
142 if(omx_clocksrc_component_Private->ports[i])
143 omx_clocksrc_component_Private->ports[i]->PortDestructor(omx_clocksrc_component_Private->ports[i]);
145 free(omx_clocksrc_component_Private->ports);
146 omx_clocksrc_component_Private->ports=NULL;
155 OMX_PTR ComponentParameterStructure)
160 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = openmaxStandComp->
pComponentPrivate;
164 if (ComponentParameterStructure == NULL) {
169 switch(nParamIndex) {
193 strcpy( (
char*) pComponentRole->
cRole,
"");
204 OMX_PTR ComponentParameterStructure)
209 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = openmaxStandComp->
pComponentPrivate;
213 if (ComponentParameterStructure == NULL) {
219 switch(nParamIndex) {
239 DEBUG(
DEB_LEV_ERR,
"In %s Incorrect State=%x lineno=%d\n",__func__, omx_clocksrc_component_Private->state, __LINE__);
247 if (strcmp( (
char*) pComponentRole->
cRole,
"")) {
263 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = (omx_clocksrc_component_PrivateType*)omxComponent->
pComponentPrivate;
274 nMask = 0x1 << nParam;
276 omx_clocksrc_component_Private->sClockState.nWaitMask &= (~nMask);
278 (
int)omx_clocksrc_component_Private->sClockState.nWaitMask,(
int)(~nMask));
288 nMask = 0x1 << nParam;
290 omx_clocksrc_component_Private->sClockState.nWaitMask &= nMask;
292 (
int)omx_clocksrc_component_Private->sClockState.nWaitMask,(
int)nMask);
298 tsem_up(omx_clocksrc_component_Private->clockEventSem);
302 tsem_up(omx_clocksrc_component_Private->clockEventSem);
306 tsem_up(omx_clocksrc_component_Private->clockEventSem);
321 OMX_PTR pComponentConfigStructure) {
324 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = (omx_clocksrc_component_PrivateType*)omxComponent->
pComponentPrivate;
339 gettimeofday(&tv,&zv);
340 timestamp->nTimestamp = (tv.tv_sec)*1000+tv.tv_usec;
344 DEBUG(
DEB_LEV_SIMPLE_SEQ,
" TBD portindex to be returned is OMX_ALL, OMX_IndexConfigTimeCurrentMediaTime in %s \n",__func__);
364 OMX_PTR pComponentConfigStructure) {
367 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = (omx_clocksrc_component_PrivateType*)omxComponent->
pComponentPrivate;
379 OMX_TICKS walltime, mediatime, mediaTimediff, wallTimediff;
381 unsigned int sleeptime;
388 switch (clockstate->eState) {
397 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
401 pPort->sMediaTime.xScale = omx_clocksrc_component_Private->sConfigScale.xScale;
404 tsem_up(omx_clocksrc_component_Private->clockEventSem);
406 tsem_down(omx_clocksrc_component_Private->clockEventCompleteSem);
414 DEBUG(
DEB_LEV_SIMPLE_SEQ,
" in %s ...set to OMX_TIME_ClockStateWaitingForStartTime mask sent=%d\n",__func__,(
int)clockstate->nWaitMask);
422 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
426 pPort->sMediaTime.xScale = omx_clocksrc_component_Private->sConfigScale.xScale;
429 tsem_up(omx_clocksrc_component_Private->clockEventSem);
431 tsem_down(omx_clocksrc_component_Private->clockEventCompleteSem);
440 portIndex = sRefTimeStamp->nPortIndex;
441 if(portIndex > omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts) {
453 if(omx_clocksrc_component_Private->sClockState.nWaitMask) {
455 nMask = ~(0x1 << portIndex);
456 omx_clocksrc_component_Private->sClockState.nWaitMask = omx_clocksrc_component_Private->sClockState.nWaitMask & nMask;
457 if(omx_clocksrc_component_Private->sMinStartTime.nTimestamp >= pPort->sTimeStamp.nTimestamp){
458 omx_clocksrc_component_Private->sMinStartTime.nTimestamp = pPort->sTimeStamp.nTimestamp;
459 omx_clocksrc_component_Private->sMinStartTime.nPortIndex = pPort->sTimeStamp.nPortIndex;
462 if(!omx_clocksrc_component_Private->sClockState.nWaitMask &&
465 omx_clocksrc_component_Private->sClockState.nStartTime = omx_clocksrc_component_Private->sMinStartTime.nTimestamp;
466 omx_clocksrc_component_Private->MediaTimeBase = omx_clocksrc_component_Private->sMinStartTime.nTimestamp;
467 gettimeofday(&tv,&zv);
469 omx_clocksrc_component_Private->WallTimeBase = walltime;
470 DEBUG(
DEB_LEV_SIMPLE_SEQ,
"Mediatimebase=%llx walltimebase=%llx \n",omx_clocksrc_component_Private->MediaTimeBase,omx_clocksrc_component_Private->WallTimeBase);
473 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
477 pPort->sMediaTime.xScale = omx_clocksrc_component_Private->sConfigScale.xScale;
480 tsem_up(omx_clocksrc_component_Private->clockEventSem);
482 DEBUG(
DEB_LEV_SIMPLE_SEQ,
"Waiting for Clock Running Event for all ports in case OMX_IndexConfigTimeClientStartTime\n");
483 tsem_down(omx_clocksrc_component_Private->clockEventCompleteSem);
494 portIndex = sRefTimeStamp->nPortIndex;
495 if(portIndex > omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts) {
500 gettimeofday(&tv,&zv);
502 omx_clocksrc_component_Private->WallTimeBase = walltime;
503 omx_clocksrc_component_Private->MediaTimeBase = sRefTimeStamp->nTimestamp;
508 portIndex = sRefTimeStamp->nPortIndex;
509 if(portIndex > omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts) {
514 gettimeofday(&tv,&zv);
516 omx_clocksrc_component_Private->WallTimeBase = walltime;
517 omx_clocksrc_component_Private->MediaTimeBase = sRefTimeStamp->nTimestamp;
522 Scale = omx_clocksrc_component_Private->sConfigScale.xScale >> 16;
523 gettimeofday(&tv,&zv);
525 mediatime = omx_clocksrc_component_Private->MediaTimeBase + Scale*(walltime - omx_clocksrc_component_Private->WallTimeBase);
526 omx_clocksrc_component_Private->WallTimeBase = walltime;
527 omx_clocksrc_component_Private->MediaTimeBase = mediatime;
534 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
538 pPort->sMediaTime.xScale = omx_clocksrc_component_Private->sConfigScale.xScale;
539 pPort->sMediaTime.nMediaTimestamp = omx_clocksrc_component_Private->MediaTimeBase;
540 pPort->sMediaTime.nWallTimeAtMediaTime = omx_clocksrc_component_Private->WallTimeBase;
543 tsem_up(omx_clocksrc_component_Private->clockEventSem);
545 tsem_down(omx_clocksrc_component_Private->clockEventCompleteSem);
549 Scale = omx_clocksrc_component_Private->sConfigScale.xScale >> 16;
554 portIndex = sMediaTimeRequest->nPortIndex;
558 gettimeofday(&tv,&zv);
560 mediatime = omx_clocksrc_component_Private->MediaTimeBase + Scale*(walltime - omx_clocksrc_component_Private->WallTimeBase);
562 mediaTimediff = (sMediaTimeRequest->nMediaTimestamp - (sMediaTimeRequest->nOffset*Scale)) - mediatime;
564 (
int)portIndex,mediaTimediff,mediatime,sMediaTimeRequest->nMediaTimestamp,sMediaTimeRequest->nOffset,(
int)Scale);
565 if((mediaTimediff<0 && Scale>0) || (mediaTimediff>0 && Scale<0)) {
567 (
int)portIndex,omx_clocksrc_component_Private->MediaTimeBase,omx_clocksrc_component_Private->WallTimeBase,
568 mediatime,sMediaTimeRequest->nMediaTimestamp,walltime,sMediaTimeRequest->nOffset,(
int)Scale);
570 pPort->sMediaTime.nMediaTimestamp = sMediaTimeRequest->nMediaTimestamp;
571 pPort->sMediaTime.nOffset = 0xFFFFFFFF;
573 wallTimediff = mediaTimediff/Scale;
575 if(wallTimediff>thresh) {
576 sleeptime = (
unsigned int) (wallTimediff-thresh);
578 wallTimediff = thresh;
579 gettimeofday(&tv,&zv);
581 mediatime = omx_clocksrc_component_Private->MediaTimeBase + Scale*(walltime - omx_clocksrc_component_Private->WallTimeBase);
584 pPort->sMediaTime.nMediaTimestamp = sMediaTimeRequest->nMediaTimestamp;
585 pPort->sMediaTime.nWallTimeAtMediaTime = walltime + wallTimediff;
586 pPort->sMediaTime.nOffset = wallTimediff;
587 pPort->sMediaTime.xScale = Scale;
590 omx_clocksrc_component_Private->MediaTimeBase,omx_clocksrc_component_Private->WallTimeBase, mediatime,sMediaTimeRequest->nMediaTimestamp,walltime);
594 tsem_up(omx_clocksrc_component_Private->clockEventSem);
596 tsem_down(omx_clocksrc_component_Private->clockEventCompleteSem);
599 __func__,(
int)omx_clocksrc_component_Private->sClockState.eState,(
int)Scale,__LINE__);
614 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = openmaxStandComp->
pComponentPrivate;
631 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private = (omx_clocksrc_component_PrivateType*)omx_base_component_Private;
639 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
643 pOutputBuffer[i] = NULL;
645 outBufExchanged[i] = 0;
655 pthread_mutex_lock(&omx_clocksrc_component_Private->flush_mutex);
656 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
659 while(bPortsBeingFlushed) {
660 pthread_mutex_unlock(&omx_clocksrc_component_Private->flush_mutex);
661 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
664 outBufExchanged[i]--;
665 pOutputBuffer[1]=NULL;
671 tsem_up(omx_clocksrc_component_Private->flush_all_condition);
672 tsem_down(omx_clocksrc_component_Private->flush_condition);
673 pthread_mutex_lock(&omx_clocksrc_component_Private->flush_mutex);
676 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
680 pthread_mutex_unlock(&omx_clocksrc_component_Private->flush_mutex);
684 tsem_down(omx_clocksrc_component_Private->clockEventSem);
685 DEBUG(
DEB_LEV_SIMPLE_SEQ,
"In %s clock event occured semval=%d \n",__func__,omx_clocksrc_component_Private->clockEventSem->semval);
689 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
692 if(pOutputSem[i]->semval>0 && isOutputBufferNeeded[i]==
OMX_TRUE ) {
694 if(pOutputQueue[i]->nelem>0){
695 outBufExchanged[i]++;
697 pOutputBuffer[i] =
dequeue(pOutputQueue[i]);
698 if(pOutputBuffer[i] == NULL){
707 if(pOutputBuffer[i]->nFilledLen!=0) {
709 __func__,(
int)pOutputBuffer[i]->nFilledLen,__LINE__);
711 outBufExchanged[i]--;
712 pOutputBuffer[i]=NULL;
730 for(i=0;i<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;i++) {
735 if((isOutputBufferNeeded[i]==
OMX_TRUE && pOutputSem[i]->semval==0) &&
740 tsem_down(omx_clocksrc_component_Private->bMgmtSem);
750 if(pOutputSem[i]->semval>0 && isOutputBufferNeeded[i]==
OMX_TRUE ) {
752 if(pOutputQueue[i]->nelem>0){
753 outBufExchanged[i]++;
755 pOutputBuffer[i] =
dequeue(pOutputQueue[i]);
756 if(pOutputBuffer[i] == NULL){
765 pthread_mutex_lock(&omx_clocksrc_component_Private->flush_mutex);
767 for(j=0;j<omx_clocksrc_component_Private->sPortTypesParam[
OMX_PortDomainOther].nPorts;j++) {
770 pthread_mutex_unlock(&omx_clocksrc_component_Private->flush_mutex);
771 if(bPortsBeingFlushed) {
772 DEBUG(
DEB_LEV_ERR,
"In %s Ports are being flushed - breaking (line %d)\n",__func__,__LINE__);
778 if (omx_clocksrc_component_Private->BufferMgmtCallback) {
779 (*(omx_clocksrc_component_Private->BufferMgmtCallback))(openmaxStandComp, pOutputBuffer[i]);
786 if(pOutputBuffer[i]->nFilledLen!=0) {
788 outBufExchanged[i]--;
789 pOutputBuffer[i]=NULL;
797 tsem_up(omx_clocksrc_component_Private->clockEventCompleteSem);
808 omx_clocksrc_component_PrivateType* omx_clocksrc_component_Private;
815 pthread_mutex_lock(&omx_clocksrc_component_Private->flush_mutex);
818 if(omx_clocksrc_component_Private->bMgmtSem->semval==0) {
819 tsem_up(omx_clocksrc_component_Private->bMgmtSem);
821 tsem_up(omx_clocksrc_component_Private->clockEventSem);
822 tsem_up(omx_clocksrc_component_Private->clockEventCompleteSem);
826 tsem_signal(omx_clocksrc_component_Private->bStateSem);
830 pthread_mutex_unlock(&omx_clocksrc_component_Private->flush_mutex);
831 tsem_down(omx_clocksrc_component_Private->flush_all_condition);
833 tsem_reset(omx_clocksrc_component_Private->bMgmtSem);
834 tsem_reset(omx_clocksrc_component_Private->clockEventSem);
864 omx_clocksrc_component_Private->callbackData,
877 pthread_mutex_lock(&omx_clocksrc_component_Private->flush_mutex);
879 pthread_mutex_unlock(&omx_clocksrc_component_Private->flush_mutex);
881 tsem_up(omx_clocksrc_component_Private->flush_condition);
886 DEBUG(
DEB_LEV_PARAMS,
"In %s TFlag=%x Qelem=%d BSem=%d bMgmtsem=%d component=%s\n", __func__,
890 (
int)omx_clocksrc_component_Private->bMgmtSem->semval,
891 omx_clocksrc_component_Private->name);
@ OMX_ErrorInsufficientResources
@ OMX_ErrorIncorrectStateTransition
@ OMX_ErrorIncorrectStateOperation
@ OMX_IndexConfigTimeCurrentVideoReference
@ OMX_IndexConfigTimeClockState
@ OMX_IndexConfigTimeCurrentMediaTime
@ OMX_IndexConfigTimeClientStartTime
@ OMX_IndexConfigTimeActiveRefClock
@ OMX_IndexConfigTimeCurrentWallTime
@ OMX_IndexConfigTimeCurrentAudioReference
@ OMX_IndexParamStandardComponentRole
@ OMX_IndexConfigTimeScale
@ OMX_IndexParamOtherPortFormat
@ OMX_IndexParamOtherInit
@ OMX_IndexConfigTimeMediaTimeRequest
@ OMX_TIME_UpdateRequestFulfillment
@ OMX_TIME_UpdateScaleChanged
@ OMX_TIME_UpdateClockStateChanged
struct OMX_TIME_MEDIATIMETYPE OMX_TIME_MEDIATIMETYPE
@ OMX_TIME_ClockStateWaitingForStartTime
@ OMX_TIME_ClockStateStopped
@ OMX_TIME_ClockStateRunning
@ OMX_StateWaitForResources
OMX_ERRORTYPE base_clock_port_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, omx_base_PortType **openmaxStandPort, OMX_U32 nPortIndex, OMX_BOOL isInput)
the base constructor for the generic OpenMAX ST Clock port
OMX_ERRORTYPE omx_base_component_SendCommand(OMX_HANDLETYPE hComponent, OMX_COMMANDTYPE Cmd, OMX_U32 nParam, OMX_PTR pCmdData)
standard SendCommand function
OMX_ERRORTYPE omx_base_component_SetParameter(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nParamIndex, OMX_PTR ComponentParameterStructure)
Part of the standard OpenMAX function.
OMX_ERRORTYPE omx_base_component_ParameterSanityCheck(OMX_HANDLETYPE hComponent, OMX_U32 nPortIndex, OMX_PTR pStructure, size_t size)
void setHeader(OMX_PTR header, OMX_U32 size)
Simply fills the first two fields in any OMX structure with the size and the version.
OMX_ERRORTYPE omx_base_component_GetParameter(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nParamIndex, OMX_PTR ComponentParameterStructure)
Part of the standard OpenMAX function.
OMX_ERRORTYPE checkHeader(OMX_PTR header, OMX_U32 size)
Checks the header of a structure for consistency with size and spec version.
@ OMX_TransStatePauseToExecuting
@ OMX_TransStateIdleToLoaded
@ OMX_TransStateLoadedToIdle
#define PORT_IS_TUNNELED_N_BUFFER_SUPPLIER(pPort)
#define PORT_IS_BUFFER_SUPPLIER(pPort)
#define PORT_IS_TUNNELED(pPort)
#define PORT_IS_ENABLED(pPort)
#define PORT_IS_BEING_FLUSHED(pPort)
OMX_ERRORTYPE omx_base_source_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
OMX_ERRORTYPE omx_base_source_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
OMX_ERRORTYPE omx_clocksrc_component_GetParameter(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nParamIndex, OMX_PTR ComponentParameterStructure)
OMX_ERRORTYPE omx_clocksrc_component_SetParameter(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nParamIndex, OMX_PTR ComponentParameterStructure)
OMX_ERRORTYPE omx_clocksrc_component_GetConfig(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nIndex, OMX_PTR pComponentConfigStructure)
OMX_ERRORTYPE omx_clocksrc_component_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
void * omx_clocksrc_BufferMgmtFunction(void *param)
OMX_ERRORTYPE clocksrc_port_FlushProcessingBuffers(omx_base_PortType *openmaxStandPort)
Releases buffers under processing. This function must be implemented in the derived classes,...
OMX_ERRORTYPE omx_clocksrc_component_SetConfig(OMX_HANDLETYPE hComponent, OMX_INDEXTYPE nIndex, OMX_PTR pComponentConfigStructure)
OMX_ERRORTYPE omx_clocksrc_component_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
OMX_ERRORTYPE omx_clocksrc_component_SendCommand(OMX_HANDLETYPE hComponent, OMX_COMMANDTYPE Cmd, OMX_U32 nParam, OMX_PTR pCmdData)
void omx_clocksrc_component_BufferMgmtCallback(OMX_COMPONENTTYPE *openmaxStandComp, OMX_BUFFERHEADERTYPE *outputbuffer)
#define MAX_CLOCK_COMPONENTS
#define DEB_LEV_FUNCTION_NAME
#define DEB_LEV_SIMPLE_SEQ
#define DEBUG(n, fmt, args...)
OMX_ERRORTYPE RM_RegisterComponent(char *name, int max_components)
int queue(queue_t *queue, void *data)
void * dequeue(queue_t *queue)
OMX_ERRORTYPE(* GetConfig)(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_INDEXTYPE nIndex, OMX_INOUT OMX_PTR pComponentConfigStructure)
OMX_ERRORTYPE(* SetConfig)(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_INDEXTYPE nIndex, OMX_IN OMX_PTR pComponentConfigStructure)
OMX_ERRORTYPE(* SetParameter)(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_INDEXTYPE nIndex, OMX_IN OMX_PTR pComponentParameterStructure)
OMX_ERRORTYPE(* GetParameter)(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pComponentParameterStructure)
OMX_PTR pComponentPrivate
OMX_ERRORTYPE(* SendCommand)(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_COMMANDTYPE Cmd, OMX_IN OMX_U32 nParam1, OMX_IN OMX_PTR pCmdData)
OMX_TIME_UPDATETYPE eUpdateType
OMX_PARAM_PORTDEFINITIONTYPE sPortParam
OMX_ERRORTYPE(* BufferProcessedCallback)(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE *pBuffer)
OMX_U32 nNumAssignedBuffers
OMX_HANDLETYPE hTunneledComponent
OMX_COMPONENTTYPE * standCompContainer
OMX_ERRORTYPE(* ReturnBufferFunction)(omx_base_PortType *openmaxStandPort, OMX_BUFFERHEADERTYPE *pBuffer)
OMX_OTHER_PARAM_PORTFORMATTYPE sOtherParam
OMX_TIME_MEDIATIMETYPE sMediaTime
void tsem_deinit(tsem_t *tsem)
void tsem_signal(tsem_t *tsem)
void tsem_up(tsem_t *tsem)
int tsem_init(tsem_t *tsem, unsigned int val)
void tsem_down(tsem_t *tsem)
void tsem_reset(tsem_t *tsem)