summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-03-30 09:57:05 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-03-30 09:57:05 -0700
commitfa5004571b65826f9245e49248fd8e83e8008d73 (patch)
treef90a3f74e30c61e8d7f47a276cda1513b0db5bb3
parent7eb36421a3d287a51bd6be02a30bafd91d90ea4b (diff)
parenta7b22907b3fe1a2d644e8ef023bf8d8fde16f99e (diff)
downloadomap3-fa5004571b65826f9245e49248fd8e83e8008d73.tar.gz
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 to OMX_State
Merge commit 'a7b22907b3fe1a2d644e8ef023bf8d8fde16f99e' into froyo-plus-aosp * commit 'a7b22907b3fe1a2d644e8ef023bf8d8fde16f99e': Fix a bug where the conditional wait is not correct for state transition from OMX_StateIdle to OMX_StateLoaded
-rw-r--r--omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Thread.c5
-rw-r--r--omx/video/src/openmax_il/video_encode/src/OMX_VideoEnc_Utils.c7
-rw-r--r--omx/video/src/openmax_il/video_encode/src/OMX_VideoEncoder.c11
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
}