diff options
author | James Dong <jdong@google.com> | 2010-03-30 10:07:33 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-03-30 10:07:33 -0700 |
commit | 91c98e0f133327a6af7b08db2b6c7dd619fc40f1 (patch) | |
tree | f90a3f74e30c61e8d7f47a276cda1513b0db5bb3 | |
parent | f9e4eb44a873e80760a53931b1d4ee1dbe737d32 (diff) | |
parent | fa5004571b65826f9245e49248fd8e83e8008d73 (diff) | |
download | omap3-91c98e0f133327a6af7b08db2b6c7dd619fc40f1.tar.gz |
am fa500457: am a7b22907: Fix a bug where the conditional wait is not correct for state transition from OMX_StateIdle to OMX_StateLoaded In addition, since we have already returned all buffers to the client after completing the state transition from OMX_StateExecuting
3 files changed, 12 insertions, 11 deletions
diff --git a/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Thread.c b/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Thread.c index 3ca0858..d2689c0 100644 --- a/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Thread.c +++ b/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Thread.c @@ -308,8 +308,9 @@ void* OMX_VIDENC_Thread (void* pThreadData) } if (FD_ISSET(pComponentPrivate->nFree_oPipe[0], &rfds) && - (pComponentPrivate->eState != OMX_StatePause && - pComponentPrivate->eState != OMX_StateIdle)) + (pComponentPrivate->eState!= OMX_StatePause && + pComponentPrivate->eState != OMX_StateIdle && + pComponentPrivate->eState != OMX_StateLoaded)) { OMX_PRBUFFER1(pComponentPrivate->dbg, "Enters OMX_VIDENC_Process_FreeOutBuf\n"); eError = OMX_VIDENC_Process_FreeOutBuf(pComponentPrivate); diff --git a/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Utils.c b/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Utils.c index f5c379e..5f0aa76 100644 --- a/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Utils.c +++ b/omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Utils.c @@ -2099,14 +2099,12 @@ OMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSetLoaded (VIDENC_COMPONENT_PRIVATE* NULL); break; case OMX_StateIdle: - OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning from Idle to Loaded\n"); + OMX_PRSTATE2(pComponentPrivate->dbg, "Transitioning from Idle to Loaded\n"); pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; #ifdef __PERF_INSTRUMENTATION__ PERF_Boundary(pComponentPrivate->pPERFcomp, PERF_BoundaryStart | PERF_BoundaryCleanup); #endif - if ( pPortDefIn->bEnabled == OMX_TRUE || pPortDefOut->bEnabled == OMX_TRUE ) - { pthread_mutex_lock(&pComponentPrivate->videoe_mutex_app); while ( (pPortDefIn->bPopulated) || (pPortDefOut->bPopulated)) { @@ -2115,9 +2113,8 @@ OMX_ERRORTYPE OMX_VIDENC_HandleCommandStateSetLoaded (VIDENC_COMPONENT_PRIVATE* #else OMX_WaitForEvent(&(pComponentPrivate->InIdle_event)); #endif - } - pthread_mutex_unlock(&pComponentPrivate->videoe_mutex_app); } + pthread_mutex_unlock(&pComponentPrivate->videoe_mutex_app); #ifdef RESOURCE_MANAGER_ENABLED /* Resource Manager Proxy Calls */ if (pPortDefOut->format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) diff --git a/omx/video/src/openmax_il/video_encode/src/OMX_VideoEncoder.c b/omx/video/src/openmax_il/video_encode/src/OMX_VideoEncoder.c index d0867cb..e68c28f 100644 --- a/omx/video/src/openmax_il/video_encode/src/OMX_VideoEncoder.c +++ b/omx/video/src/openmax_il/video_encode/src/OMX_VideoEncoder.c @@ -3444,12 +3444,13 @@ OMX_ERRORTYPE UseBuffer(OMX_IN OMX_HANDLETYPE hComponent, pCompPort->nBufferCnt++; if(pCompPort->nBufferCnt == pPortDef->nBufferCountActual) { - pPortDef->bPopulated = OMX_TRUE; #ifndef UNDER_CE pthread_mutex_lock(&pComponentPrivate->videoe_mutex_app); + pPortDef->bPopulated = OMX_TRUE; pthread_cond_signal(&pComponentPrivate->populate_cond); pthread_mutex_unlock(&pComponentPrivate->videoe_mutex_app); #else + pPortDef->bPopulated = OMX_TRUE; OMX_SignalEvent(&(pComponentPrivate->InLoaded_event)); #endif } @@ -3602,14 +3603,15 @@ OMX_ERRORTYPE FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent, pCompPort->nBufferCnt--; if (pCompPort->nBufferCnt == 0) { - pPortDef->bPopulated = OMX_FALSE; #ifndef UNDER_CE pthread_mutex_lock(&pComponentPrivate->videoe_mutex_app); + pPortDef->bPopulated = OMX_FALSE; pthread_cond_signal(&pComponentPrivate->unpopulate_cond); pthread_mutex_unlock(&pComponentPrivate->videoe_mutex_app); #else - OMX_SignalEvent(&(pComponentPrivate->InIdle_event)); + pPortDef->bPopulated = OMX_FALSE; + OMX_SignalEvent(&(pComponentPrivate->InIdle_event)); #endif } @@ -3779,12 +3781,13 @@ OMX_ERRORTYPE AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent, pCompPort->nBufferCnt++; if(pCompPort->nBufferCnt == pPortDef->nBufferCountActual) { - pPortDef->bPopulated = OMX_TRUE; #ifndef UNDER_CE pthread_mutex_lock(&pComponentPrivate->videoe_mutex_app); + pPortDef->bPopulated = OMX_TRUE; pthread_cond_signal(&pComponentPrivate->populate_cond); pthread_mutex_unlock(&pComponentPrivate->videoe_mutex_app); #else + pPortDef->bPopulated = OMX_TRUE; OMX_SignalEvent(&(pComponentPrivate->InLoaded_event)); #endif } |