#include <OMX_Types.h>
#include <OMX_Component.h>
#include <OMX_Core.h>
#include <OMX_Audio.h>
#include <pthread.h>
#include <omx_base_source.h>
#include <string.h>
#include <sys/time.h>
Go to the source code of this file.
Copyright (C) 2008 STMicroelectronics Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Definition in file omx_clocksrc_component.h.
#define MAX_CLOCK_PORTS 8 |
Maximum number of clock ports
Definition at line 44 of file omx_clocksrc_component.h.
Referenced by omx_clocksrc_BufferMgmtFunction().
#define omx_clocksrc_component_PrivateType_FIELDS |
Value:
omx_base_source_PrivateType_FIELDS \ OMX_TIME_CONFIG_CLOCKSTATETYPE sClockState; \ OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE sRefClock; \ tsem_t* startTimeSem; \ tsem_t* clockEventSem; \ tsem_t* clockEventCompleteSem; \ OMX_TICKS WallTimeBase; \ OMX_TICKS MediaTimeBase; \ OMX_TIME_UPDATETYPE eUpdateType; \ OMX_TIME_CONFIG_TIMESTAMPTYPE sMinStartTime; \ OMX_TIME_CONFIG_SCALETYPE sConfigScale;
sClockState | This structure holds the state of the clock | |
startTimeSem | the semaphore that coordinates the arrival of start times from all clients | |
clockEventSem | the semaphore that coordinates clock event received from the client | |
clockEventCompleteSem | the semaphore that coordinates clock event sent to the client | |
WallTimeBase | the wall time at which the clock was started | |
MediaTimeBase | the Media time at which the clock was started | |
eUpdateType | indicates the type of update received from the clock src component | |
sMinStartTime | keeps the minimum starttime of the clients | |
sConfigScale | Representing the current media time scale factor |
Definition at line 60 of file omx_clocksrc_component.h.
OMX_ERRORTYPE clocksrc_port_FlushProcessingBuffers | ( | omx_base_PortType * | openmaxStandPort | ) |
Releases buffers under processing. This function must be implemented in the derived classes, for the specific processing.
Definition at line 800 of file omx_clocksrc_component.c.
References omx_base_PortType::bIsPortFlushed, omx_base_PortType::BufferProcessedCallback, DEB_LEV_FULL_SEQ, DEB_LEV_FUNCTION_NAME, DEB_LEV_PARAMS, DEBUG, dequeue(), OMX_PARAM_PORTDEFINITIONTYPE::eDir, omx_base_PortType::hTunneledComponent, queue_t::nelem, omx_base_PortType::nNumAssignedBuffers, OMX_PARAM_PORTDEFINITIONTYPE::nPortIndex, omx_base_PortType::nTunnelFlags, OMX_DirInput, OMX_ErrorNone, OMX_FALSE, OMX_StatePause, OMX_TRUE, omx_base_PortType::pBufferQueue, omx_base_PortType::pBufferSem, OMX_COMPONENTTYPE::pComponentPrivate, PORT_IS_BUFFER_SUPPLIER, PORT_IS_TUNNELED, PORT_IS_TUNNELED_N_BUFFER_SUPPLIER, queue(), tsem_t::semval, omx_base_PortType::sPortParam, omx_base_PortType::standCompContainer, tsem_down(), tsem_reset(), tsem_signal(), and tsem_up().
Referenced by omx_clocksrc_component_Constructor().
void* omx_clocksrc_BufferMgmtFunction | ( | void * | param | ) |
This is the central function for buffer processing of a two port source component. It is executed in a separate thread, is synchronized with semaphores at each port, those are released each time a new buffer is available on the given port.
Definition at line 629 of file omx_clocksrc_component.c.
References DEB_LEV_ERR, DEB_LEV_FULL_SEQ, DEB_LEV_FUNCTION_NAME, DEB_LEV_SIMPLE_SEQ, DEBUG, dequeue(), OMX_TIME_MEDIATIMETYPE::eUpdateType, MAX_CLOCK_PORTS, OMX_BUFFERHEADERTYPE::nFilledLen, OMX_FALSE, OMX_PortDomainOther, OMX_StateExecuting, OMX_StateIdle, OMX_StateInvalid, OMX_StateLoaded, OMX_StatePause, OMX_TIME_UpdateClockStateChanged, OMX_TIME_UpdateRequestFulfillment, OMX_TIME_UpdateScaleChanged, OMX_TransStateIdleToLoaded, OMX_TransStateInvalid, OMX_TransStateLoadedToIdle, OMX_TransStateMax, OMX_TransStatePauseToExecuting, OMX_TRUE, omx_base_clock_PortType::pBufferQueue, omx_base_clock_PortType::pBufferSem, OMX_COMPONENTTYPE::pComponentPrivate, PORT_IS_BEING_FLUSHED, PORT_IS_ENABLED, PORT_IS_TUNNELED, omx_base_clock_PortType::ReturnBufferFunction, omx_base_clock_PortType::sMediaTime, tsem_down(), and tsem_up().
Referenced by omx_clocksrc_component_Constructor().
void omx_clocksrc_component_BufferMgmtCallback | ( | OMX_COMPONENTTYPE * | openmaxStandComp, | |
OMX_BUFFERHEADERTYPE * | outputbuffer | |||
) |
This function plays the input buffer. When fully consumed it returns.
Definition at line 614 of file omx_clocksrc_component.c.
References OMX_TIME_MEDIATIMETYPE::eUpdateType, OMX_BUFFERHEADERTYPE::nFilledLen, OMX_BUFFERHEADERTYPE::nOutputPortIndex, OMX_TIME_UpdateMax, OMX_BUFFERHEADERTYPE::pBuffer, OMX_COMPONENTTYPE::pComponentPrivate, and omx_base_clock_PortType::sMediaTime.
Referenced by omx_clocksrc_component_Constructor().
OMX_ERRORTYPE omx_clocksrc_component_Constructor | ( | OMX_COMPONENTTYPE * | openmaxStandComp, | |
OMX_STRING | cComponentName | |||
) |
The Constructor
Allocate Ports and call port constructor.
Definition at line 48 of file omx_clocksrc_component.c.
References base_clock_port_Constructor(), clocksrc_port_FlushProcessingBuffers(), fd, OMX_COMPONENTTYPE::GetConfig, OMX_COMPONENTTYPE::GetParameter, MAX_COMPONENT_CLOCKSRC, omx_base_source_Constructor(), omx_clocksrc_BufferMgmtFunction(), omx_clocksrc_component_BufferMgmtCallback(), omx_clocksrc_component_Destructor(), omx_clocksrc_component_GetConfig(), omx_clocksrc_component_GetParameter(), omx_clocksrc_component_SendCommand(), omx_clocksrc_component_SetConfig(), omx_clocksrc_component_SetParameter(), OMX_ErrorInsufficientResources, OMX_ErrorNone, OMX_FALSE, OMX_PortDomainOther, OMX_TIME_ClockStateStopped, OMX_TIME_RefClockNone, OMX_TIME_UpdateMax, OMX_COMPONENTTYPE::pComponentPrivate, OMX_COMPONENTTYPE::SendCommand, OMX_COMPONENTTYPE::SetConfig, setHeader(), OMX_COMPONENTTYPE::SetParameter, and tsem_init().
Referenced by omx_component_library_Setup().
OMX_ERRORTYPE omx_clocksrc_component_Destructor | ( | OMX_COMPONENTTYPE * | openmaxStandComp | ) |
The Destructor
Definition at line 141 of file omx_clocksrc_component.c.
References fd, omx_base_source_Destructor(), OMX_PortDomainOther, OMX_TIME_ClockStateMax, OMX_COMPONENTTYPE::pComponentPrivate, and tsem_deinit().
Referenced by omx_clocksrc_component_Constructor().
OMX_ERRORTYPE omx_clocksrc_component_GetConfig | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_INDEXTYPE | nIndex, | |||
OMX_INOUT OMX_PTR | pComponentConfigStructure | |||
) |
Definition at line 318 of file omx_clocksrc_component.c.
References DEB_LEV_SIMPLE_SEQ, DEBUG, OMX_ErrorBadParameter, OMX_ErrorNone, OMX_IndexConfigTimeActiveRefClock, OMX_IndexConfigTimeClockState, OMX_IndexConfigTimeCurrentMediaTime, OMX_IndexConfigTimeCurrentWallTime, OMX_IndexConfigTimeScale, and OMX_COMPONENTTYPE::pComponentPrivate.
Referenced by omx_clocksrc_component_Constructor().
OMX_ERRORTYPE omx_clocksrc_component_GetParameter | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_INDEXTYPE | nParamIndex, | |||
OMX_INOUT OMX_PTR | ComponentParameterStructure | |||
) |
Definition at line 178 of file omx_clocksrc_component.c.
References checkHeader(), DEB_LEV_SIMPLE_SEQ, DEBUG, err, OMX_OTHER_PARAM_PORTFORMATTYPE::nPortIndex, omx_base_component_GetParameter(), OMX_ErrorBadParameter, OMX_ErrorBadPortIndex, OMX_ErrorNone, OMX_IndexParamOtherInit, OMX_IndexParamOtherPortFormat, OMX_PortDomainOther, OMX_COMPONENTTYPE::pComponentPrivate, and omx_base_clock_PortType::sOtherParam.
Referenced by omx_clocksrc_component_Constructor().
OMX_ERRORTYPE omx_clocksrc_component_SendCommand | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_COMMANDTYPE | Cmd, | |||
OMX_IN OMX_U32 | nParam, | |||
OMX_IN OMX_PTR | pCmdData | |||
) |
Definition at line 257 of file omx_clocksrc_component.c.
References DEB_LEV_SIMPLE_SEQ, DEBUG, OMX_ALL, omx_base_component_SendCommand(), OMX_CommandPortDisable, OMX_CommandPortEnable, OMX_CommandStateSet, OMX_ErrorBadPortIndex, OMX_PortDomainOther, OMX_StateExecuting, OMX_StateIdle, OMX_StateInvalid, OMX_StateLoaded, OMX_StatePause, OMX_TransStateIdleToLoaded, OMX_TransStateInvalid, OMX_TransStatePauseToExecuting, OMX_COMPONENTTYPE::pComponentPrivate, and tsem_up().
Referenced by omx_clocksrc_component_Constructor().
OMX_ERRORTYPE omx_clocksrc_component_SetConfig | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_INDEXTYPE | nIndex, | |||
OMX_IN OMX_PTR | pComponentConfigStructure | |||
) |
????
Definition at line 361 of file omx_clocksrc_component.c.
References DEB_ALL_MESS, DEB_LEV_FUNCTION_NAME, DEB_LEV_SIMPLE_SEQ, DEBUG, fd, OMX_ErrorBadParameter, OMX_ErrorBadPortIndex, OMX_ErrorIncorrectStateTransition, OMX_ErrorNone, OMX_ErrorSameState, OMX_IndexConfigTimeActiveRefClock, OMX_IndexConfigTimeClientStartTime, OMX_IndexConfigTimeClockState, OMX_IndexConfigTimeCurrentAudioReference, OMX_IndexConfigTimeCurrentVideoReference, OMX_IndexConfigTimeMediaTimeRequest, OMX_IndexConfigTimeScale, OMX_PortDomainOther, OMX_TIME_ClockStateRunning, OMX_TIME_ClockStateStopped, OMX_TIME_ClockStateWaitingForStartTime, OMX_TIME_UpdateClockStateChanged, OMX_TIME_UpdateRequestFulfillment, OMX_TIME_UpdateScaleChanged, OMX_COMPONENTTYPE::pComponentPrivate, PORT_IS_ENABLED, tsem_down(), and tsem_up().
Referenced by omx_clocksrc_component_Constructor().
OMX_ERRORTYPE omx_clocksrc_component_SetParameter | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_INDEXTYPE | nParamIndex, | |||
OMX_IN OMX_PTR | ComponentParameterStructure | |||
) |