summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-05-05 11:07:14 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-05-05 11:07:14 -0700
commit7be879d634792c3a515b77b3d819e2e4f970524e (patch)
tree596a4dc8c5d265635a77dcc4bf0420f2c25140cb
parent3a2df6624ff07e3e2fe9868f58bdda48cac7aa03 (diff)
parent44577d1f0e8d8ea13fe130fc8987035428ee021c (diff)
downloadomap3-7be879d634792c3a515b77b3d819e2e4f970524e.tar.gz
am 44577d1f: Fix a bunch of AAC encoder issues - Fixed a timeout issue when the close is sent but the component thread does not exit - Fixed a race condition waiting for stop to complete - Don\'t return error from OMX_GetState()
-rw-r--r--omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_CompThread.c5
-rw-r--r--omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_Utils.c31
-rw-r--r--omx/audio/src/openmax_il/aac_enc/src/OMX_AacEncoder.c3
3 files changed, 18 insertions, 21 deletions
diff --git a/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_CompThread.c b/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_CompThread.c
index 885a9dd..655fd25 100644
--- a/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_CompThread.c
+++ b/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_CompThread.c
@@ -231,10 +231,11 @@ void* AACENC_ComponentThread (void* pThreadData)
pComponentPrivate->bPreempted = 0;
}
- pComponentPrivate->bLoadedCommandPending = OMX_FALSE;
+ pComponentPrivate->bLoadedCommandPending = OMX_FALSE;
+ goto EXIT;
}
- }
+ }
}
EXIT:
diff --git a/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_Utils.c b/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_Utils.c
index e4d7b8d..85f79c7 100644
--- a/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_Utils.c
+++ b/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEnc_Utils.c
@@ -951,18 +951,16 @@ OMX_U32 AACENCHandleCommand(AACENC_COMPONENT_PRIVATE *pComponentPrivate)
pComponentPrivate->bIsStopping = 1;
- if (pComponentPrivate->codecStop_waitingsignal == 0){
- pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
- }
eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
MMCodecControlStop,(void *)pArgs);
- if (pComponentPrivate->codecStop_waitingsignal == 0){
- pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex);
- pComponentPrivate->codecStop_waitingsignal = 0;
- pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
- }
-
+ pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
+ while (pComponentPrivate->codecStop_waitingsignal == 0){
+ pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex);
+ }
+ pComponentPrivate->codecStop_waitingsignal = 0;
+ pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
+
if(eError != OMX_ErrorNone)
{
OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Stop..\n",__LINE__);
@@ -1467,18 +1465,15 @@ OMX_U32 AACENCHandleCommand(AACENC_COMPONENT_PRIVATE *pComponentPrivate)
pComponentPrivate->bNoIdleOnStop = OMX_TRUE;
OMX_PRINT2(pComponentPrivate->dbg, "AACENC: About to stop socket node line %d\n",__LINE__);
- pComponentPrivate->bIsStopping = 1;
- if (pComponentPrivate->codecStop_waitingsignal == 0){
- pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
- }
+ pComponentPrivate->bIsStopping = 1;
eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
MMCodecControlStop,(void *)pArgs);
-
- if (pComponentPrivate->codecStop_waitingsignal == 0){
+ pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
+ while (pComponentPrivate->codecStop_waitingsignal == 0){
pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex);
- pComponentPrivate->codecStop_waitingsignal = 0;
- pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
}
+ pComponentPrivate->codecStop_waitingsignal = 0;
+ pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
}
}
}
@@ -2625,7 +2620,7 @@ pHandle = pComponentPrivate_CC->pHandle;
pthread_mutex_lock(&pComponentPrivate_CC->codecStop_mutex);
if(pComponentPrivate_CC->codecStop_waitingsignal == 0){
- pComponentPrivate_CC->codecStop_waitingsignal = 1;
+ pComponentPrivate_CC->codecStop_waitingsignal = 1;
pthread_cond_signal(&pComponentPrivate_CC->codecStop_threshold);
OMX_PRINT2(pComponentPrivate_CC->dbg, "stop ack. received. stop waiting for sending disable command completed\n");
}
diff --git a/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEncoder.c b/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEncoder.c
index ca41930..845c565 100644
--- a/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEncoder.c
+++ b/omx/audio/src/openmax_il/aac_enc/src/OMX_AacEncoder.c
@@ -1458,7 +1458,8 @@ static OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComponent, OMX_STATETYPE* pState)
else if(ret == ETIMEDOUT) {
/* Unlock mutex in case of timeout */
pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest);
- return OMX_ErrorTimeout;
+ *pState = OMX_StateInvalid;
+ return OMX_ErrorNone;
}
}
}