diff --git a/libvideoeditor/lvpp/PreviewPlayer.cpp b/libvideoeditor/lvpp/PreviewPlayer.cpp
old mode 100755
new mode 100644
index 4738fdd..4d63a2f
--- a/libvideoeditor/lvpp/PreviewPlayer.cpp
+++ b/libvideoeditor/lvpp/PreviewPlayer.cpp
Binary files differ
diff --git a/libvideoeditor/lvpp/PreviewPlayer.h b/libvideoeditor/lvpp/PreviewPlayer.h
old mode 100755
new mode 100644
index ebbdec8..59448ad
--- a/libvideoeditor/lvpp/PreviewPlayer.h
+++ b/libvideoeditor/lvpp/PreviewPlayer.h
@@ -168,6 +168,7 @@
     M4OSA_UInt32 mAudioMixStoryBoardTS;
     M4OSA_UInt32 mCurrentMediaBeginCutTime;
     M4OSA_UInt32 mCurrentMediaVolumeValue;
+    M4OSA_UInt32 mCurrFramingEffectIndex;
 
     uint32_t mNumberEffects;
     uint32_t mPlayBeginTimeMsec;
@@ -179,6 +180,10 @@
     uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded
     sp<TimedEventQueue::Event> mProgressCbEvent;
     bool mProgressCbEventPending;
+    sp<TimedEventQueue::Event> mOverlayUpdateEvent;
+    bool mOverlayUpdateEventPending;
+    bool mOverlayUpdateEventPosted;
+
     MediaBuffer *mResizedVideoBuffer;
     bool mVideoResizedOrCropped;
     M4xVSS_MediaRendering mRenderingMode;
@@ -205,6 +210,9 @@
     void postProgressCallbackEvent_l();
     void onProgressCbEvent();
 
+    void postOverlayUpdateEvent_l();
+    void onUpdateOverlayEvent();
+
     status_t setDataSource_l_jpg();
 
     status_t prepare_l();
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;
diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.h b/libvideoeditor/lvpp/VideoEditorPreviewController.h
index 5828c5f..d2a5645 100755
--- a/libvideoeditor/lvpp/VideoEditorPreviewController.h
+++ b/libvideoeditor/lvpp/VideoEditorPreviewController.h
@@ -53,7 +53,8 @@
 
 
 // Callback mechanism from PreviewController to Jni  */
-typedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, M4OSA_UInt32 argc);
+typedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, void *argc);
+
 
 class VideoEditorPreviewController {
 
@@ -62,26 +63,27 @@
     virtual ~VideoEditorPreviewController();
 
     M4OSA_ERR loadEditSettings(M4VSS3GPP_EditSettings* pSettings,
-     M4xVSS_AudioMixingSettings* bgmSettings);
+        M4xVSS_AudioMixingSettings* bgmSettings);
 
     M4OSA_ERR setSurface(const sp<Surface> &surface);
 
     M4OSA_ERR startPreview(M4OSA_UInt32 fromMS, M4OSA_Int32 toMs,
-     M4OSA_UInt16 callBackAfterFrameCount, M4OSA_Bool loop) ;
+        M4OSA_UInt16 callBackAfterFrameCount, M4OSA_Bool loop) ;
 
     M4OSA_ERR stopPreview();
 
     M4OSA_ERR renderPreviewFrame(const sp<Surface> &surface,
-     VideoEditor_renderPreviewFrameStr* pFrameInfo);
+        VideoEditor_renderPreviewFrameStr* pFrameInfo,
+        VideoEditorCurretEditInfo *pCurrEditInfo);
 
     M4OSA_ERR clearSurface(const sp<Surface> &surface,
      VideoEditor_renderPreviewFrameStr* pFrameInfo);
 
     M4OSA_Void setJniCallback(void* cookie,
-     jni_progress_callback_fct callbackFct);
+        jni_progress_callback_fct callbackFct);
 
     M4OSA_ERR setPreviewFrameRenderingMode(M4xVSS_MediaRendering mode,
-     M4VIDEOEDITING_VideoFrameSize outputVideoSize);
+        M4VIDEOEDITING_VideoFrameSize outputVideoSize);
 
 private:
     sp<VideoEditorPlayer> mVePlayer[NBPLAYER_INSTANCES];
