summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-03-29 19:04:34 -0700
committerJames Dong <jdong@google.com>2010-03-30 09:39:57 -0700
commita7b22907b3fe1a2d644e8ef023bf8d8fde16f99e (patch)
treef90a3f74e30c61e8d7f47a276cda1513b0db5bb3
parent5e41d631147aa1fc9f4b52dc34941dde69f02a9a (diff)
downloadomap3-a7b22907b3fe1a2d644e8ef023bf8d8fde16f99e.tar.gz
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_StateIdle, we don't need to process OMX_FillThisBuffer() in the state of OMX_StateLoaded. bug - 2501987 Change-Id: I7506092b97b8fb93bcfb8cefaceaf6ca98e86e06
-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
}