29 #if defined(__linux__)
30 #include <asm/unistd.h>
45 if (!omx_base_filter_Private) {
90 tsem_t* pInputSem = pInPort->pBufferSem;
92 queue_t* pInputQueue = pInPort->pBufferQueue;
97 int inBufExchanged=0,outBufExchanged=0;
99 #
if defined(__linux__)
111 pthread_mutex_lock(&omx_base_filter_Private->
flush_mutex);
114 pthread_mutex_unlock(&omx_base_filter_Private->
flush_mutex);
116 DEBUG(
DEB_LEV_FULL_SEQ,
"In %s 1 signaling flush all cond iE=%d,iF=%d,oE=%d,oF=%d iSemVal=%d,oSemval=%d\n",
117 __func__,inBufExchanged,isInputBufferNeeded,outBufExchanged,isOutputBufferNeeded,pInputSem->semval,pOutputSem->semval);
128 pInPort->ReturnBufferFunction(pInPort,pInputBuffer);
135 DEBUG(
DEB_LEV_FULL_SEQ,
"In %s 2 signaling flush all cond iE=%d,iF=%d,oE=%d,oF=%d iSemVal=%d,oSemval=%d\n",
136 __func__,inBufExchanged,isInputBufferNeeded,outBufExchanged,isOutputBufferNeeded,pInputSem->semval,pOutputSem->semval);
140 pthread_mutex_lock(&omx_base_filter_Private->
flush_mutex);
142 pthread_mutex_unlock(&omx_base_filter_Private->
flush_mutex);
145 if((isInputBufferNeeded==
OMX_TRUE && pInputSem->semval==0) &&
156 if((isOutputBufferNeeded==
OMX_TRUE && pOutputSem->semval==0) &&
170 if(pInputSem->semval>0 && isInputBufferNeeded==
OMX_TRUE ) {
172 if(pInputQueue->nelem>0){
175 pInputBuffer =
dequeue(pInputQueue);
176 if(pInputBuffer == NULL){
183 if(pOutputSem->semval>0 && isOutputBufferNeeded==
OMX_TRUE) {
185 if(pOutputQueue->nelem>0){
188 pOutputBuffer =
dequeue(pOutputQueue);
189 if(pOutputBuffer == NULL){
190 DEBUG(
DEB_LEV_ERR,
"Had NULL output buffer!! op is=%d,iq=%d\n",pOutputSem->semval,pOutputQueue->nelem);
197 if(pInputBuffer->hMarkTargetComponent != NULL){
206 pInputBuffer->pMarkData);
210 omx_base_filter_Private->
pMark.
pMarkData = pInputBuffer->pMarkData;
212 pInputBuffer->hMarkTargetComponent = NULL;
220 pOutputBuffer->pMarkData = omx_base_filter_Private->
pMark.
pMarkData;
225 pOutputBuffer->nTimeStamp = pInputBuffer->nTimeStamp;
227 DEBUG(
DEB_LEV_FULL_SEQ,
"Detected START TIME flag in the input buffer filled len=%d\n", (
int)pInputBuffer->nFilledLen);
228 pOutputBuffer->nFlags = pInputBuffer->nFlags;
229 pInputBuffer->nFlags = 0;
234 (*(omx_base_filter_Private->
BufferMgmtCallback))(openmaxStandComp, pInputBuffer, pOutputBuffer);
237 pInputBuffer->nFilledLen = 0;
240 DEBUG(
DEB_LEV_ERR,
"In %s Received Buffer in non-Executing State(%x)\n", __func__, (
int)omx_base_filter_Private->
state);
242 pInputBuffer->nFilledLen = 0;
246 DEBUG(
DEB_LEV_FULL_SEQ,
"Detected EOS flags in input buffer filled len=%d\n", (
int)pInputBuffer->nFilledLen);
247 pOutputBuffer->nFlags=pInputBuffer->nFlags;
248 pInputBuffer->nFlags=0;
254 pOutputBuffer->nFlags,
278 if((isInputBufferNeeded ==
OMX_FALSE) && (pInputBuffer->nFilledLen==0)) {
279 pInPort->ReturnBufferFunction(pInPort,pInputBuffer);
@ OMX_ErrorInsufficientResources
#define OMX_BUFFERFLAG_EOS
#define OMX_BUFFERFLAG_STARTTIME
OMX_ERRORTYPE omx_base_component_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
The base constructor for the OpenMAX ST components.
OMX_ERRORTYPE omx_base_component_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
The base destructor for ST OpenMAX components.
@ OMX_TransStateLoadedToIdle
OMX_ERRORTYPE omx_base_filter_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
The base filter contructor for the OpenMAX ST components.
void * omx_base_filter_BufferMgmtFunction(void *param)
OMX_ERRORTYPE omx_base_filter_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
the base filter destructor for ST OpenMAX components
#define OMX_BASE_FILTER_INPUTPORT_INDEX
#define OMX_BASE_FILTER_OUTPUTPORT_INDEX
#define PORT_IS_BEING_FLUSHED(pPort)
#define DEB_LEV_FUNCTION_NAME
#define DEB_LEV_SIMPLE_SEQ
#define DEBUG(n, fmt, args...)
void * dequeue(queue_t *queue)
OMX_ERRORTYPE(* EventHandler)(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_PTR pAppData, OMX_IN OMX_EVENTTYPE eEvent, OMX_IN OMX_U32 nData1, OMX_IN OMX_U32 nData2, OMX_IN OMX_PTR pEventData)
OMX_PTR pComponentPrivate
OMX_HANDLETYPE hMarkTargetComponent
long int nThreadBufferMngtID
OMX_ERRORTYPE(* ReturnBufferFunction)(omx_base_PortType *openmaxStandPort, OMX_BUFFERHEADERTYPE *pBuffer)
omx_base_PortType ** ports
OMX_PARAM_BELLAGIOTHREADS_ID * bellagioThreads
void(* BufferMgmtCallback)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_BUFFERHEADERTYPE *inputbuffer, OMX_BUFFERHEADERTYPE *outputbuffer)
OMX_TRANS_STATETYPE transientState
OMX_CALLBACKTYPE * callbacks
pthread_mutex_t flush_mutex
void *(* BufferMgmtFunction)(void *param)
tsem_t * flush_all_condition
void tsem_up(tsem_t *tsem)
void tsem_down(tsem_t *tsem)
void tsem_wait(tsem_t *tsem)