OSDN Git Service

Fix for 5205420 compression domain trimming fallback mechanism
authorRajneesh Chowdury <rajneeshc@google.com>
Thu, 22 Sep 2011 20:00:36 +0000 (13:00 -0700)
committerRajneesh Chowdury <rajneeshc@google.com>
Fri, 23 Sep 2011 21:17:26 +0000 (14:17 -0700)
Transcode if clip's profile or level exceeds encoder's supported
profile or level.

Change-Id: Ib2f678828a58657b095ef6ef219fd0aa2bdccf91

libvideoeditor/vss/src/M4VSS3GPP_Edit.c
libvideoeditor/vss/src/M4xVSS_API.c

index d9330f5..708c6e5 100755 (executable)
@@ -1047,19 +1047,29 @@ M4OSA_ERR M4VSS3GPP_editOpen( M4VSS3GPP_EditContext pContext,
     }
 
     for (i=0; i<pC->uiClipNumber; i++) {
-        if ((pC->pClipList[i].ClipProperties.VideoStreamType !=
-              pC->xVSS.outputVideoFormat)||
-              (pC->pClipList[i].ClipProperties.uiVideoWidth !=
-               pC->ewc.uiVideoWidth) ||
-              (pC->pClipList[i].ClipProperties.uiVideoHeight !=
-               pC->ewc.uiVideoHeight) ||
-              (pC->pClipList[i].ClipProperties.VideoStreamType ==
-               M4VIDEOEDITING_kH264) ||
-              (pC->pClipList[i].ClipProperties.VideoStreamType ==
-               M4VIDEOEDITING_kMPEG4 &&
-               pC->pClipList[i].ClipProperties.uiVideoTimeScale !=
-                pC->ewc.uiVideoTimeScale)) {
-            pC->pClipList[i].bTranscodingRequired = M4OSA_TRUE;
+        if (pC->pClipList[i].bTranscodingRequired == M4OSA_FALSE) {
+            /** If not transcoded in Analysis phase, check
+             * if transcoding required now
+             */
+            if ((pC->pClipList[i].ClipProperties.VideoStreamType !=
+                  pC->xVSS.outputVideoFormat)||
+                  (pC->pClipList[i].ClipProperties.uiVideoWidth !=
+                   pC->ewc.uiVideoWidth) ||
+                  (pC->pClipList[i].ClipProperties.uiVideoHeight !=
+                   pC->ewc.uiVideoHeight) ||
+                  (pC->pClipList[i].ClipProperties.VideoStreamType ==
+                   M4VIDEOEDITING_kH264) ||
+                  (pC->pClipList[i].ClipProperties.VideoStreamType ==
+                   M4VIDEOEDITING_kMPEG4 &&
+                   pC->pClipList[i].ClipProperties.uiVideoTimeScale !=
+                    pC->ewc.uiVideoTimeScale)) {
+                pC->pClipList[i].bTranscodingRequired = M4OSA_TRUE;
+            }
+        } else {
+            /** If bTranscodingRequired is true, it means the clip has
+             * been transcoded in Analysis phase.
+             */
+            pC->pClipList[i].bTranscodingRequired = M4OSA_FALSE;
         }
     }
     /**
index 2ff1a88..de69cd1 100755 (executable)
@@ -49,6 +49,7 @@ Begin of xVSS API
 
 /* RC: to delete unecessary temp files on the fly */
 #include "M4VSS3GPP_InternalTypes.h"
+#include <utils/Log.h>
 
 /**
  ******************************************************************************
@@ -2430,6 +2431,19 @@ M4OSA_ERR M4xVSS_SendCommand( M4OSA_Context pContext,
                     audioIsDifferent = M4OSA_FALSE;
                 }
             }
+            /* Here check the clip video profile and level, if it exceeds
+             * the profile and level of export file, then the file need
+             * to be transcoded(do not do compress domain trim) */
+           if ((fileProperties.uiVideoProfile >
+                     xVSS_context->pSettings->xVSS.outputVideoProfile) ||
+                (fileProperties.uiVideoLevel >
+                     xVSS_context->pSettings->xVSS.outputVideoLevel)) {
+               /* Set bTranscodingRequired to TRUE to indicate the video will be
+                * transcoded in MCS. */
+               xVSS_context->pSettings->pClipList[i]->bTranscodingRequired =
+                   M4OSA_TRUE;
+               videoIsDifferent = M4OSA_TRUE;
+           }
 
             if( videoIsDifferent == M4OSA_TRUE || audioIsDifferent == M4OSA_TRUE)
             {
@@ -5799,13 +5813,12 @@ M4OSA_ERR M4xVSS_Step( M4OSA_Context pContext, M4OSA_UInt8 *pProgress )
                             return err;
                         }
                         int32_t index = xVSS_context->pMCScurrentParams->videoclipnumber;
-                        if(xVSS_context->pSettings->pClipList[index]->bTranscodingRequired
-                         == M4OSA_FALSE) {
-                            /*the cuts are done in the MCS, so we need to replace
-                               the beginCutTime and endCutTime to keep the entire video*/
-                            xVSS_context->pSettings->pClipList[index]->uiBeginCutTime = 0;
-                            xVSS_context->pSettings->pClipList[index]->uiEndCutTime = 0;
-                        }
+
+                        /* The cuts are done in the MCS, so we need to replace
+                           the beginCutTime and endCutTime to keep the entire video*/
+                        xVSS_context->pSettings->pClipList[index]->uiBeginCutTime = 0;
+                        xVSS_context->pSettings->pClipList[index]->uiEndCutTime = 0;
+
 
                         M4OSA_TRACE1_1("M4xVSS_Step: \
                             M4xVSS_internalStartTranscoding returned \