Fix for ISSUE 3370836 - Overlay optmization.

Change-Id: I9c6657f6fdab0fa815201d8b26b8c90700663c12
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
index 52aa87e..b76eac6 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp
@@ -20,7 +20,7 @@
 #include "VideoEditorPreviewController.h"

 

 namespace android {

-

+ 

 #define PREVIEW_THREAD_STACK_SIZE                           (65536)

 

 VideoEditorPreviewController::VideoEditorPreviewController()

@@ -738,7 +738,9 @@
 }

 

 M4OSA_ERR VideoEditorPreviewController::renderPreviewFrame(

-    const sp<Surface> &surface, VideoEditor_renderPreviewFrameStr* pFrameInfo) {

+            const sp<Surface> &surface,

+            VideoEditor_renderPreviewFrameStr* pFrameInfo,

+            VideoEditorCurretEditInfo *pCurrEditInfo) {

 

     M4OSA_ERR err = M4NO_ERROR;

     M4OSA_UInt32 i = 0, iIncrementedDuration = 0, tnTimeMs=0, framesize =0;

@@ -749,7 +751,9 @@
 

     // Get the Isurface to be passed to renderer

     mISurface = surface->getISurface();

-

+    if (pCurrEditInfo != NULL) {

+        pCurrEditInfo->overlaySettingsIndex = -1;

+    }

     // Delete previous renderer instance

     if(mTarget != NULL) {

         delete mTarget;

@@ -796,6 +800,32 @@
             }

         }

 

+        //Provide the overlay Update indication when there is an overlay effect

+        if (mCurrentVideoEffect == VIDEO_EFFECT_FRAMING) {

+            int index;

+            mCurrentVideoEffect = VIDEO_EFFECT_NONE; //never apply framing here.

+

+            // Find the effect in effectSettings array

+            for (index = 0; index < mNumberEffects; index++) {

+                if(mEffectsSettings[index].VideoEffectType ==

+                    M4xVSS_kVideoEffectType_Framing) {

+

+                    if((mEffectsSettings[index].uiStartTime <= pFrameInfo->timeMs) &&

+                        ((mEffectsSettings[index].uiStartTime+

+                        mEffectsSettings[index].uiDuration) >= pFrameInfo->timeMs))

+                    {

+                        break;

+                    }

+                }

+            }

+            if ((index < mNumberEffects) && (pCurrEditInfo != NULL)) {

+                pCurrEditInfo->overlaySettingsIndex = index;

+                LOGV("Framing index = %d", index);

+            } else {

+                LOGV("No framing effects found");

+            }

+        }

+

         if(mCurrentVideoEffect != VIDEO_EFFECT_NONE) {

             err = applyVideoEffect((M4OSA_Void *)pFrameStr->pBuffer,

              OMX_COLOR_FormatYUV420Planar, pFrameStr->uiFrameWidth,

@@ -958,9 +988,10 @@
                 }

             }

             else {

+                M4OSA_UInt32 endArgs = 0;

                 if(pController->mJniCallback != NULL) {

                     pController->mJniCallback(

-                     pController->mJniCookie, MSG_TYPE_PREVIEW_END, 0);

+                     pController->mJniCookie, MSG_TYPE_PREVIEW_END, &endArgs);

                 }

                 pController->mPlayerState = VePlayerAutoStop;

 

@@ -1054,6 +1085,7 @@
             LOGV("MEDIA_PREPARED");

             break;

         case MEDIA_PLAYBACK_COMPLETE:

+        {

             LOGV("notify:MEDIA_PLAYBACK_COMPLETE");

             pController->mPlayerState = VePlayerIdle;

 

@@ -1069,31 +1101,40 @@
                  pController->mClipList[pController->mCurrentClipNumber]->uiEndCutTime

                   - pController->mClipList[pController->mCurrentClipNumber]->uiBeginCutTime;

             }

+

+            M4OSA_UInt32 playedDuration = clipDuration+pController->mCurrentPlayedDuration;

             pController->mJniCallback(

-             pController->mJniCookie, MSG_TYPE_PROGRESS_INDICATION,

-             (clipDuration+pController->mCurrentPlayedDuration));

+                 pController->mJniCookie, MSG_TYPE_PROGRESS_INDICATION,

+                 &playedDuration);

 

             M4OSA_semaphorePost(pController->mSemThreadWait);

             break;

-         case MEDIA_ERROR:

+        }

+        case MEDIA_ERROR:

+        {

+            int err_val = ext1;

           // Always log errors.

           // ext1: Media framework error code.

           // ext2: Implementation dependant error code.

             LOGE("MEDIA_ERROR; error (%d, %d)", ext1, ext2);

             if(pController->mJniCallback != NULL) {

                 pController->mJniCallback(pController->mJniCookie,

-                 MSG_TYPE_PLAYER_ERROR, ext1);

+                 MSG_TYPE_PLAYER_ERROR, &err_val);

             }

             break;

+        }

         case MEDIA_INFO:

+        {

+            int info_val = ext2;

             // ext1: Media framework error code.

             // ext2: Implementation dependant error code.

             //LOGW("MEDIA_INFO; info/warning (%d, %d)", ext1, ext2);

             if(pController->mJniCallback != NULL) {

                 pController->mJniCallback(pController->mJniCookie,

-                 MSG_TYPE_PROGRESS_INDICATION, ext2);

+                 MSG_TYPE_PROGRESS_INDICATION, &info_val);

             }

             break;

+        }

         case MEDIA_SEEK_COMPLETE:

             LOGV("MEDIA_SEEK_COMPLETE; Received seek complete");

             break;

@@ -1120,6 +1161,30 @@
                     pController->mCurrentClipNumber+1);

             }

             break;

+        case 0xBBBBBBBB:

+        {

+            LOGV("VIDEO PLAYBACK, Update Overlay");

+            int overlayIndex = ext2;

+            VideoEditorCurretEditInfo *pEditInfo =

+                    (VideoEditorCurretEditInfo*)M4OSA_malloc(sizeof(VideoEditorCurretEditInfo),

+                    M4VS, (M4OSA_Char*)"Current Edit info");

+            //ext1 = 1; start the overlay display

+            //     = 2; Clear the overlay.

+            pEditInfo->overlaySettingsIndex = ext2;

+            pEditInfo->clipIndex = pController->mCurrentClipNumber;

+            LOGV("pController->mCurrentClipNumber = %d",pController->mCurrentClipNumber);

+            if (pController->mJniCallback != NULL) {

+                if (ext1 == 1) {

+                    pController->mJniCallback(pController->mJniCookie,

+                        MSG_TYPE_OVERLAY_UPDATE, pEditInfo);

+                } else {

+                    pController->mJniCallback(pController->mJniCookie,

+                        MSG_TYPE_OVERLAY_CLEAR, pEditInfo);

+                }

+            }

+            M4OSA_free((M4OSA_MemAddr32)pEditInfo);

+            break;

+        }

         default:

             LOGV("unrecognized message: (%d, %d, %d)", msg, ext1, ext2);

             break;