Fix for
-5234840 corrupted frames in transition.
-Green frames in image transition.

	modified:   vss/mcs/src/M4MCS_API.c
	modified:   vss/src/M4VSS3GPP_EditVideo.c

Change-Id: I2632d47c44f00bbc81e2b3e19b225178ab456810
diff --git a/libvideoeditor/vss/mcs/src/M4MCS_API.c b/libvideoeditor/vss/mcs/src/M4MCS_API.c
index 77990aa..6eb60a0 100755
--- a/libvideoeditor/vss/mcs/src/M4MCS_API.c
+++ b/libvideoeditor/vss/mcs/src/M4MCS_API.c
@@ -8841,30 +8841,41 @@
     }
 
 
-    if( (pC->EncodingVideoFormat = M4ENCODER_kNULL)
+    if ((pC->EncodingVideoFormat = M4ENCODER_kNULL)
         && (pC->bLastDecodedFrameCTS == M4OSA_FALSE)
-        && (pC->uiBeginCutTime > 0) )
-    {
+        && (pC->uiBeginCutTime > 0)) {
 
         pC->bLastDecodedFrameCTS = M4OSA_TRUE;
         err = pC->m_pVideoDecoder->m_pFctGetOption(pC->pViDecCtxt,
             M4DECODER_kOptionID_AVCLastDecodedFrameCTS, &lastdecodedCTS);
 
-        if( M4NO_ERROR != err )
-        {
+        if (M4NO_ERROR != err) {
             M4OSA_TRACE1_1(
                 "M4MCS_intVideoNullEncoding: m_pVideoDecoder->m_pFctGetOption returns 0x%x!",
                 err);
             return err;
         }
+        /* Do not need video decoder any more, need to destroy it. Otherwise it
+         * will call reader function which will cause frame lost during triming,
+         * since the 3gp reader is shared between MCS and decoder.*/
+        if (M4OSA_NULL != pC->pViDecCtxt) {
+            err = pC->m_pVideoDecoder->m_pFctDestroy(pC->pViDecCtxt);
+            pC->pViDecCtxt = M4OSA_NULL;
+
+            if (M4NO_ERROR != err) {
+                M4OSA_TRACE1_1(
+                    "M4MCS_intVideoNullEncoding: decoder pFctDestroy returns 0x%x",
+                    err);
+                return err;
+            }
+        }
 
         err = pC->m_pReader->m_pFctJump(pC->pReaderContext,
             (M4_StreamHandler *)pC->pReaderVideoStream, &lastdecodedCTS);
 
-        if( M4NO_ERROR != err )
-        {
+        if (M4NO_ERROR != err) {
             M4OSA_TRACE1_1(
-                "M4MCS_intStepBeginVideoJump: m_pFctJump(V) returns 0x%x!",
+                "M4MCS_intVideoNullEncoding: m_pFctJump(V) returns 0x%x!",
                 err);
             return err;
         }
@@ -8875,19 +8886,17 @@
         err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext,
             (M4_StreamHandler *)pC->pReaderVideoStream, &lReaderVideoAU);
 
-        if( M4NO_ERROR != err )
-        {
+        if (M4NO_ERROR != err) {
             M4OSA_TRACE1_1(
-                "M4MCS_open(): m_pReader->m_pFctFillAuStruct(video) returns 0x%x",
-                err);
+                "M4MCS_intVideoNullEncoding:m_pReader->m_pFctFillAuStruct(video)\
+                returns 0x%x", err);
             return err;
         }
 
         err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext,
             (M4_StreamHandler *)pC->pReaderVideoStream, &lReaderVideoAU);
 
-        if( M4WAR_NO_MORE_AU == err )
-        {
+        if (M4WAR_NO_MORE_AU == err) {
             M4OSA_TRACE2_0(
                 "M4MCS_intVideoNullEncoding():\
                  m_pReaderDataIt->m_pFctGetNextAu(video) returns M4WAR_NO_MORE_AU");
@@ -8895,8 +8904,7 @@
             pC->VideoState = M4MCS_kStreamState_FINISHED;
             return err;
         }
-        else if( M4NO_ERROR != err )
-        {
+        else if (M4NO_ERROR != err) {
             M4OSA_TRACE1_1(
                 "M4MCS_intVideoNullEncoding():\
                  m_pReaderDataIt->m_pFctGetNextAu(video) returns 0x%x",
@@ -8919,16 +8927,14 @@
     /**
     * Initializes a new AU if needed */
 
-    if( pC->ReaderVideoAU1.m_structSize == 0 )
-    {
+    if (pC->ReaderVideoAU1.m_structSize == 0) {
         /**
         * Initializes an access Unit */
         err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext,
             (M4_StreamHandler *)pC->pReaderVideoStream,
             &pC->ReaderVideoAU1);
 
-        if( M4NO_ERROR != err )
-        {
+        if (M4NO_ERROR != err) {
             M4OSA_TRACE1_1(
                 "M4MCS_open(): m_pReader->m_pFctFillAuStruct(video) returns 0x%x",
                 err);
@@ -8939,8 +8945,7 @@
             (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ReaderVideoAU1.m_maxsize, M4MCS,
             (M4OSA_Char *)"Temporary video AU1 buffer");
 
-        if( pC->m_pDataVideoAddress1 == M4OSA_NULL )
-        {
+        if (pC->m_pDataVideoAddress1 == M4OSA_NULL) {
             M4OSA_TRACE1_0("M4MCS_intVideoNullEncoding(): allocation error");
             return M4ERR_ALLOC;
         }
diff --git a/libvideoeditor/vss/src/M4VSS3GPP_EditVideo.c b/libvideoeditor/vss/src/M4VSS3GPP_EditVideo.c
index 3aafbe6..1667155 100755
--- a/libvideoeditor/vss/src/M4VSS3GPP_EditVideo.c
+++ b/libvideoeditor/vss/src/M4VSS3GPP_EditVideo.c
@@ -3528,7 +3528,7 @@
                 err = pClipCtxt->ShellAPI.m_pVideoDecoder->m_pFctSetOption(
                     pClipCtxt->pViDecCtxt,
                     M4DECODER_kOptionID_YuvWithEffectNonContiguous,
-                    (M4OSA_DataOption)pPlaneOut);
+                    (M4OSA_DataOption)pC->yuv2);
             }
             if (M4NO_ERROR != err) {
                 M4OSA_TRACE1_1("M4VSS3GPP_intRenderFrameWithEffect: \