39 if (!omx_base_sink_Private) {
77 int inBufExchanged = 0;
79 omx_base_sink_Private->bellagioThreads->nThreadBufferMngtID = (
long int)syscall(__NR_gettid);
80 DEBUG(
DEB_LEV_SIMPLE_SEQ,
"In %s the thread ID is %i\n", __func__, (
int)omx_base_sink_Private->bellagioThreads->nThreadBufferMngtID);
87 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
89 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
100 tsem_up(omx_base_sink_Private->flush_all_condition);
101 tsem_down(omx_base_sink_Private->flush_condition);
102 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
104 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
107 if((pInputSem->semval==0 && isInputBufferNeeded==
OMX_TRUE ) &&
110 tsem_down(omx_base_sink_Private->bMgmtSem);
119 if(pInputSem->semval>0 && isInputBufferNeeded==
OMX_TRUE ) {
121 if(pInputQueue->nelem>0){
124 pInputBuffer =
dequeue(pInputQueue);
125 if(pInputBuffer == NULL){
141 pInputBuffer->nFlags,
143 pInputBuffer->nFlags=0;
155 pInputBuffer->pMarkData);
156 }
else if(pInputBuffer->hMarkTargetComponent!=NULL){
162 if ((omx_base_sink_Private->BufferMgmtCallback && pInputBuffer->nFilledLen > 0)
163 || (pInputBuffer->nFlags)){
164 (*(omx_base_sink_Private->BufferMgmtCallback))(openmaxStandComp, pInputBuffer);
168 pInputBuffer->nFilledLen = 0;
171 DEBUG(
DEB_LEV_ERR,
"In %s Received Buffer in non-Executing State(%s) TrState (%s)\n",
172 __func__,
stateName(omx_base_sink_Private->state),
176 pInputBuffer->nFilledLen = 0;
183 tsem_wait(omx_base_sink_Private->bStateSem);
187 if(pInputBuffer->nFilledLen==0) {
216 int i,outBufExchanged[2];
224 pInputBuffer[1]= pInputBuffer[0]=NULL;
225 isInputBufferNeeded[0]=isInputBufferNeeded[1]=
OMX_TRUE;
226 outBufExchanged[0]=outBufExchanged[1]=0;
233 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
236 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
238 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",
239 __func__,outBufExchanged[0],isInputBufferNeeded[0],outBufExchanged[1],isInputBufferNeeded[1],pInputSem[0]->semval,pInputSem[1]->semval);
243 outBufExchanged[1]--;
244 pInputBuffer[1]=NULL;
251 outBufExchanged[0]--;
252 pInputBuffer[0]=NULL;
257 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",
258 __func__,outBufExchanged[0],isInputBufferNeeded[0],outBufExchanged[1],isInputBufferNeeded[1],pInputSem[0]->semval,pInputSem[1]->semval);
260 tsem_up(omx_base_sink_Private->flush_all_condition);
261 tsem_down(omx_base_sink_Private->flush_condition);
262 pthread_mutex_lock(&omx_base_sink_Private->flush_mutex);
264 pthread_mutex_unlock(&omx_base_sink_Private->flush_mutex);
267 if((isInputBufferNeeded[0]==
OMX_TRUE && pInputSem[0]->semval==0) &&
271 tsem_down(omx_base_sink_Private->bMgmtSem);
278 if((isInputBufferNeeded[1]==
OMX_TRUE && pInputSem[1]->semval==0) &&
283 tsem_down(omx_base_sink_Private->bMgmtSem);
292 if(pInputSem[0]->semval>0 && isInputBufferNeeded[0]==
OMX_TRUE ) {
294 if(pInputQueue[0]->nelem>0){
295 outBufExchanged[0]++;
297 pInputBuffer[0] =
dequeue(pInputQueue[0]);
298 if(pInputBuffer[0] == NULL){
305 if(pInputSem[1]->semval>0 && isInputBufferNeeded[1]==
OMX_TRUE) {
308 if(pInputQueue[1]->nelem>0){
309 outBufExchanged[1]++;
311 pInputBuffer[1] =
dequeue(pInputQueue[1]);
312 if(pInputBuffer[1] == NULL){
313 DEBUG(
DEB_LEV_ERR,
"Had NULL Input buffer!! op is=%d,iq=%d\n",pInputSem[1]->semval,pInputQueue[1]->nelem);
329 if(omx_base_sink_Private->pMark.hMarkTargetComponent != NULL){
331 pInputBuffer[i]->
pMarkData = omx_base_sink_Private->pMark.pMarkData;
337 (*(omx_base_sink_Private->callbacks->EventHandler))
339 omx_base_sink_Private->callbackData,
344 }
else if(pInputBuffer[i]->hMarkTargetComponent!=NULL){
351 if (omx_base_sink_Private->BufferMgmtCallback && pInputBuffer[i]->
nFilledLen > 0) {
352 (*(omx_base_sink_Private->BufferMgmtCallback))(openmaxStandComp, pInputBuffer[i]);
358 DEBUG(
DEB_LEV_ERR,
"In %s Received Buffer in non-Executing State(%x)\n", __func__, (
int)omx_base_sink_Private->state);
367 DEBUG(
DEB_LEV_FULL_SEQ,
"Detected EOS flags in input buffer filled len=%d\n", (
int)pInputBuffer[i]->nFilledLen);
368 (*(omx_base_sink_Private->callbacks->EventHandler))
370 omx_base_sink_Private->callbackData,
384 outBufExchanged[i]--;
385 pInputBuffer[i]=NULL;
393 if(omx_base_sink_Private->pMark.hMarkTargetComponent != NULL){
394 omx_base_sink_Private->pMark.hMarkTargetComponent = NULL;
395 omx_base_sink_Private->pMark.pMarkData = NULL;