39 if (!omx_base_sink_Private) {
77 int inBufExchanged = 0;
80 omx_base_sink_Private->bellagioThreads->nThreadBufferMngtID = (
long int)syscall(__NR_gettid);
81 DEBUG(
DEB_LEV_SIMPLE_SEQ,
"In %s the thread ID is %i\n", __func__, (
int)omx_base_sink_Private->bellagioThreads->nThreadBufferMngtID);
89 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
91 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
102 tsem_up(omx_base_sink_Private->flush_all_condition);
103 tsem_down(omx_base_sink_Private->flush_condition);
104 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
106 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
109 if((pInputSem->semval==0 && isInputBufferNeeded==
OMX_TRUE ) &&
112 tsem_down(omx_base_sink_Private->bMgmtSem);
121 if(pInputSem->semval>0 && isInputBufferNeeded==
OMX_TRUE ) {
123 if(pInputQueue->nelem>0){
126 pInputBuffer =
dequeue(pInputQueue);
127 if(pInputBuffer == NULL){
143 pInputBuffer->nFlags,
145 pInputBuffer->nFlags=0;
157 pInputBuffer->pMarkData);
158 }
else if(pInputBuffer->hMarkTargetComponent!=NULL){
164 if ((omx_base_sink_Private->BufferMgmtCallback && pInputBuffer->nFilledLen > 0)
165 || (pInputBuffer->nFlags)){
166 (*(omx_base_sink_Private->BufferMgmtCallback))(openmaxStandComp, pInputBuffer);
170 pInputBuffer->nFilledLen = 0;
173 DEBUG(
DEB_LEV_ERR,
"In %s Received Buffer in non-Executing State(%s) TrState (%s)\n",
174 __func__,
stateName(omx_base_sink_Private->state),
178 pInputBuffer->nFilledLen = 0;
185 tsem_wait(omx_base_sink_Private->bStateSem);
189 if(pInputBuffer->nFilledLen==0) {
218 int i,outBufExchanged[2];
226 pInputBuffer[1]= pInputBuffer[0]=NULL;
227 isInputBufferNeeded[0]=isInputBufferNeeded[1]=
OMX_TRUE;
228 outBufExchanged[0]=outBufExchanged[1]=0;
235 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
238 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
240 DEBUG(
DEB_LEV_FULL_SEQ,
"In %s 1 signalling flush all cond iE=%d,iF=%d,oE=%d,oF=%d iSemVal=%d,oSemval=%d\n",
241 __func__,outBufExchanged[0],isInputBufferNeeded[0],outBufExchanged[1],isInputBufferNeeded[1],pInputSem[0]->semval,pInputSem[1]->semval);
245 outBufExchanged[1]--;
246 pInputBuffer[1]=NULL;
253 outBufExchanged[0]--;
254 pInputBuffer[0]=NULL;
259 DEBUG(
DEB_LEV_FULL_SEQ,
"In %s 2 signalling flush all cond iE=%d,iF=%d,oE=%d,oF=%d iSemVal=%d,oSemval=%d\n",
260 __func__,outBufExchanged[0],isInputBufferNeeded[0],outBufExchanged[1],isInputBufferNeeded[1],pInputSem[0]->semval,pInputSem[1]->semval);
262 tsem_up(omx_base_sink_Private->flush_all_condition);
263 tsem_down(omx_base_sink_Private->flush_condition);
264 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
266 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
269 if((isInputBufferNeeded[0]==
OMX_TRUE && pInputSem[0]->semval==0) &&
273 tsem_down(omx_base_sink_Private->bMgmtSem);
280 if((isInputBufferNeeded[1]==
OMX_TRUE && pInputSem[1]->semval==0) &&
285 tsem_down(omx_base_sink_Private->bMgmtSem);
294 if(pInputSem[0]->semval>0 && isInputBufferNeeded[0]==
OMX_TRUE ) {
296 if(pInputQueue[0]->nelem>0){
297 outBufExchanged[0]++;
299 pInputBuffer[0] =
dequeue(pInputQueue[0]);
300 if(pInputBuffer[0] == NULL){
307 if(pInputSem[1]->semval>0 && isInputBufferNeeded[1]==
OMX_TRUE) {
310 if(pInputQueue[1]->nelem>0){
311 outBufExchanged[1]++;
313 pInputBuffer[1] =
dequeue(pInputQueue[1]);
314 if(pInputBuffer[1] == NULL){
315 DEBUG(
DEB_LEV_ERR,
"Had NULL Input buffer!! op is=%d,iq=%d\n",pInputSem[1]->semval,pInputQueue[1]->nelem);
331 if(omx_base_sink_Private->pMark.hMarkTargetComponent != NULL){
333 pInputBuffer[i]->
pMarkData = omx_base_sink_Private->pMark.pMarkData;
339 (*(omx_base_sink_Private->callbacks->EventHandler))
341 omx_base_sink_Private->callbackData,
346 }
else if(pInputBuffer[i]->hMarkTargetComponent!=NULL){
353 if (omx_base_sink_Private->BufferMgmtCallback && pInputBuffer[i]->
nFilledLen > 0) {
354 (*(omx_base_sink_Private->BufferMgmtCallback))(openmaxStandComp, pInputBuffer[i]);
360 DEBUG(
DEB_LEV_ERR,
"In %s Received Buffer in non-Executing State(%x)\n", __func__, (
int)omx_base_sink_Private->state);
369 DEBUG(
DEB_LEV_FULL_SEQ,
"Detected EOS flags in input buffer filled len=%d\n", (
int)pInputBuffer[i]->nFilledLen);
370 (*(omx_base_sink_Private->callbacks->EventHandler))
372 omx_base_sink_Private->callbackData,
386 outBufExchanged[i]--;
387 pInputBuffer[i]=NULL;
395 if(omx_base_sink_Private->pMark.hMarkTargetComponent != NULL){
396 omx_base_sink_Private->pMark.hMarkTargetComponent = NULL;
397 omx_base_sink_Private->pMark.pMarkData = NULL;
@ OMX_ErrorInsufficientResources
#define OMX_BUFFERFLAG_EOS
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_TransStateExecutingToIdle
@ OMX_TransStatePauseToIdle
@ OMX_TransStateLoadedToIdle
#define PORT_IS_BEING_FLUSHED(pPort)
OMX_ERRORTYPE omx_base_sink_Destructor(OMX_COMPONENTTYPE *openmaxStandComp)
void * omx_base_sink_BufferMgmtFunction(void *param)
OMX_ERRORTYPE omx_base_sink_Constructor(OMX_COMPONENTTYPE *openmaxStandComp, OMX_STRING cComponentName)
void * omx_base_sink_twoport_BufferMgmtFunction(void *param)
#define OMX_BASE_SINK_INPUTPORT_INDEX
#define OMX_BASE_SINK_INPUTPORT_INDEX_1
#define DEB_LEV_FUNCTION_NAME
#define DEB_LEV_SIMPLE_SEQ
#define DEBUG(n, fmt, args...)
void * dequeue(queue_t *queue)
OMX_HANDLETYPE hMarkTargetComponent
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_ERRORTYPE(* ReturnBufferFunction)(omx_base_PortType *openmaxStandPort, OMX_BUFFERHEADERTYPE *pBuffer)
OMX_CALLBACKTYPE * callbacks
OMX_TRANS_STATETYPE transientState
OMX_PORT_PARAM_TYPE sPortTypesParam[4]
void *(* BufferMgmtFunction)(void *param)
void tsem_up(tsem_t *tsem)
void tsem_down(tsem_t *tsem)
void tsem_wait(tsem_t *tsem)
char * transientStateName(int state)
char * stateName(OMX_STATETYPE state)