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
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 @@
             }
 
             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 @@
                                      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 @@
     #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 @@
     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 @@
     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 @@
     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
     }