29 #include <asm/unistd.h>
43 if (!omx_base_filter_Private) {
88 tsem_t* pInputSem = pInPort->pBufferSem;
90 queue_t* pInputQueue = pInPort->pBufferQueue;
95 int inBufExchanged=0,outBufExchanged=0;
107 pthread_mutex_lock(&omx_base_filter_Private->
flush_mutex);
110 pthread_mutex_unlock(&omx_base_filter_Private->
flush_mutex);
112 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",
113 __func__,inBufExchanged,isInputBufferNeeded,outBufExchanged,isOutputBufferNeeded,pInputSem->semval,pOutputSem->semval);
124 pInPort->ReturnBufferFunction(pInPort,pInputBuffer);
131 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",
132 __func__,inBufExchanged,isInputBufferNeeded,outBufExchanged,isOutputBufferNeeded,pInputSem->semval,pOutputSem->semval);
136 pthread_mutex_lock(&omx_base_filter_Private->
flush_mutex);
138 pthread_mutex_unlock(&omx_base_filter_Private->
flush_mutex);
141 if((isInputBufferNeeded==
OMX_TRUE && pInputSem->semval==0) &&
152 if((isOutputBufferNeeded==
OMX_TRUE && pOutputSem->semval==0) &&
166 if(pInputSem->semval>0 && isInputBufferNeeded==
OMX_TRUE ) {
168 if(pInputQueue->nelem>0){
171 pInputBuffer =
dequeue(pInputQueue);
172 if(pInputBuffer == NULL){
179 if(pOutputSem->semval>0 && isOutputBufferNeeded==
OMX_TRUE) {
181 if(pOutputQueue->nelem>0){
184 pOutputBuffer =
dequeue(pOutputQueue);
185 if(pOutputBuffer == NULL){
186 DEBUG(
DEB_LEV_ERR,
"Had NULL output buffer!! op is=%d,iq=%d\n",pOutputSem->semval,pOutputQueue->nelem);
193 if(pInputBuffer->hMarkTargetComponent != NULL){
202 pInputBuffer->pMarkData);
206 omx_base_filter_Private->
pMark.
pMarkData = pInputBuffer->pMarkData;
208 pInputBuffer->hMarkTargetComponent = NULL;
216 pOutputBuffer->pMarkData = omx_base_filter_Private->
pMark.
pMarkData;
221 pOutputBuffer->nTimeStamp = pInputBuffer->nTimeStamp;
223 DEBUG(
DEB_LEV_FULL_SEQ,
"Detected START TIME flag in the input buffer filled len=%d\n", (
int)pInputBuffer->nFilledLen);
224 pOutputBuffer->nFlags = pInputBuffer->nFlags;
225 pInputBuffer->nFlags = 0;
230 (*(omx_base_filter_Private->
BufferMgmtCallback))(openmaxStandComp, pInputBuffer, pOutputBuffer);
233 pInputBuffer->nFilledLen = 0;
236 DEBUG(
DEB_LEV_ERR,
"In %s Received Buffer in non-Executing State(%x)\n", __func__, (
int)omx_base_filter_Private->
state);
238 pInputBuffer->nFilledLen = 0;
242 DEBUG(
DEB_LEV_FULL_SEQ,
"Detected EOS flags in input buffer filled len=%d\n", (
int)pInputBuffer->nFilledLen);
243 pOutputBuffer->nFlags=pInputBuffer->nFlags;
244 pInputBuffer->nFlags=0;
250 pOutputBuffer->nFlags,
274 if((isInputBufferNeeded ==
OMX_FALSE) && (pInputBuffer->nFilledLen==0)) {
275 pInPort->ReturnBufferFunction(pInPort,pInputBuffer);
OMX_CALLBACKTYPE * callbacks
void tsem_wait(tsem_t *tsem)
void * omx_base_filter_BufferMgmtFunction(void *param)
void *(* BufferMgmtFunction)(void *param)
OMX_ERRORTYPE omx_base_component_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
The base constructor for the OpenMAX ST components.
#define DEB_LEV_SIMPLE_SEQ
#define PORT_IS_BEING_FLUSHED(pPort)
#define DEBUG(n, fmt, args...)
OMX_HANDLETYPE hMarkTargetComponent
#define OMX_BASE_FILTER_OUTPUTPORT_INDEX
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)
void(* BufferMgmtCallback)(OMX_COMPONENTTYPE *openmaxStandComp, OMX_BUFFERHEADERTYPE *inputbuffer, OMX_BUFFERHEADERTYPE *outputbuffer)
OMX_TRANS_STATETYPE transientState
OMX_ERRORTYPE omx_base_filter_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
the base filter destructor for ST OpenMAX components
omx_base_PortType ** ports
void tsem_up(tsem_t *tsem)
void tsem_down(tsem_t *tsem)
OMX_PARAM_BELLAGIOTHREADS_ID * bellagioThreads
#define OMX_BUFFERFLAG_EOS
OMX_ERRORTYPE omx_base_component_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
The base destructor for ST OpenMAX components.
#define OMX_BUFFERFLAG_STARTTIME
long int nThreadBufferMngtID
OMX_ERRORTYPE omx_base_filter_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
The base filter contructor for the OpenMAX ST components.
OMX_PTR pComponentPrivate
#define DEB_LEV_FUNCTION_NAME
OMX_ERRORTYPE(* ReturnBufferFunction)(omx_base_PortType *openmaxStandPort, OMX_BUFFERHEADERTYPE *pBuffer)
#define OMX_BASE_FILTER_INPUTPORT_INDEX
void * dequeue(queue_t *queue)
tsem_t * flush_all_condition
pthread_mutex_t flush_mutex