Fix Issue no 3374842. Preview Optimization while switching between two clips.

Change-Id: Iefb55107965b3978f83794fe727405206afdde72
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
index 0b7c3ef..6e7eceb 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
@@ -27,6 +27,7 @@
     : mCurrentPlayer(0),

       mThreadContext(NULL),

       mPlayerState(VePlayerIdle),

+      mPrepareReqest(M4OSA_FALSE),

       mClipList(NULL),

       mNumberClipsInStoryBoard(0),

       mNumberClipsToPreview(0),

@@ -479,6 +480,7 @@
     }

 

     mPlayerState = VePlayerIdle;

+    mPrepareReqest = M4OSA_FALSE;

 

     if(fromMS == 0) {

         mCurrentClipNumber = -1;

@@ -662,6 +664,7 @@
     mClipList[mNumberClipsToPreview-1]->uiEndCutTime = mLastPreviewClipEndTime;

 

     mPlayerState = VePlayerIdle;

+    mPrepareReqest = M4OSA_FALSE;

 

     mCurrentPlayedDuration = 0;

     mCurrentClipDuration = 0;

@@ -1053,12 +1056,15 @@
 

         pController->mPlayerState = VePlayerBusy;

 

-    }

-    else if(pController->mPlayerState == VePlayerAutoStop) {

+    } else if(pController->mPlayerState == VePlayerAutoStop) {

         LOGV("Preview completed..auto stop the player");

-    }

-    else {

-        if(!pController->bStopThreadInProgress) {

+    } else if ((pController->mPlayerState == VePlayerBusy) && (pController->mPrepareReqest)) {

+        // Prepare the player here

+        pController->mPrepareReqest = M4OSA_FALSE;

+        preparePlayer((void*)pController, pController->mCurrentPlayer,

+            pController->mCurrentClipNumber+1);

+    } else {

+        if (!pController->bStopThreadInProgress) {

             LOGV("threadProc: state busy...wait for sem");

             err = M4OSA_semaphoreWait(pController->mSemThreadWait,

              M4OSA_WAIT_FOREVER);

@@ -1147,7 +1153,7 @@
             break;

         case 0xAAAAAAAA:

             LOGV("VIDEO PLAYBACK ALMOST over, prepare next player");

-

+            pController->mPrepareReqest = M4OSA_TRUE;

             // Select next player and prepare it

             // If there is a clip after this one

             if ((pController->mCurrentClipNumber+1) <

@@ -1158,8 +1164,7 @@
                     pController->mCurrentPlayer = 0;

                 }

                 // Prepare the first clip to be played

-                preparePlayer((void*)pController, pController->mCurrentPlayer,

-                    pController->mCurrentClipNumber+1);

+                M4OSA_semaphorePost(pController->mSemThreadWait);

             }

             break;

         case 0xBBBBBBBB:

diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.h b/libvideoeditor/lvpp/VideoEditorPreviewController.h
index d2a5645..2a2a665 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.h
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.h
@@ -93,6 +93,7 @@
     mutable Mutex mLock;

     M4OSA_Context mThreadContext;

     VePlayerState mPlayerState;

+    M4OSA_Bool    mPrepareReqest;

     M4VSS3GPP_ClipSettings **mClipList; //Pointer to an array of clip settings

     M4OSA_UInt32 mNumberClipsInStoryBoard;

     M4OSA_UInt32 mNumberClipsToPreview;