shithub: openh264

Download patch

ref: b750a3b97413d467d17c236c418de31db89ed260
parent: 0dcb7584b55e5b2afbfae427595f4a696047a081
parent: 15e225ab358753842bb2a39bad959a0daee78480
author: dongzha <[email protected]>
date: Fri Jun 20 05:58:53 EDT 2014

Merge pull request #985 from ruil2/encoder_check

input parameters validation 

--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -84,6 +84,26 @@
     WelsLog (pLogCtx, WELS_LOG_ERROR, "ParamValidation(),Invalid usage type = %d\n", pCfg->iUsageType);
     return ENC_RETURN_UNSUPPORTED_PARA;
   }
+  if (pCfg->iUsageType == SCREEN_CONTENT_REAL_TIME) {
+    if (pCfg->iSpatialLayerNum > 1) {
+      WelsLog (pLogCtx, WELS_LOG_ERROR, "ParamValidation(),Invalid the number of Spatial layer(%d)for screen content\n",
+               pCfg->iSpatialLayerNum);
+      return ENC_RETURN_UNSUPPORTED_PARA;
+    }
+  }
+  if (pCfg->iSpatialLayerNum > 1) {
+    int32_t iFinalWidth = pCfg->sSpatialLayers[pCfg->iSpatialLayerNum - 1].iVideoWidth;
+    int32_t iFinalHeight = pCfg->sSpatialLayers[pCfg->iSpatialLayerNum - 1].iVideoWidth;
+    for (i = 0; i < (pCfg->iSpatialLayerNum - 1); i++) {
+      SSpatialLayerConfig* fDlp = &pCfg->sSpatialLayers[i];
+      if ((fDlp->iVideoWidth > iFinalWidth) || (fDlp->iVideoHeight > iFinalHeight)) {
+        WelsLog (pLogCtx, WELS_LOG_ERROR,
+                 "ParamValidation,Invalid resolution layer(%d) resolution(%d x %d) shoudl be less than the highest spatial layer resolution(%d x %d)\n ",
+                 i, fDlp->iVideoWidth, fDlp->iVideoHeight, iFinalWidth, iFinalHeight);
+        return ENC_RETURN_UNSUPPORTED_PARA;
+      }
+    }
+  }
   for (i = 0; i < pCfg->iSpatialLayerNum; ++ i) {
     SSpatialLayerInternal* fDlp = &pCfg->sDependencyLayers[i];
     if (fDlp->fOutputFrameRate > fDlp->fInputFrameRate || (fDlp->fInputFrameRate >= -fEpsn
@@ -2941,9 +2961,9 @@
   //loop each layer to check if have skip frame when RC and frame skip enable
   if (RC_OFF_MODE != pCtx->pSvcParam->iRCMode && true == pCtx->pSvcParam->bEnableFrameSkip) {
     bool bSkipMustFlag = false;
-    for (int32_t i = 0; i< iSpatialNum; i++) {
-      pCtx->uiDependencyId = (uint8_t)(pSpatialIndexMap+i)->iDid;
-      pCtx->pFuncList->pfRc.pfWelsRcPicDelayJudge(pCtx);
+    for (int32_t i = 0; i < iSpatialNum; i++) {
+      pCtx->uiDependencyId = (uint8_t) (pSpatialIndexMap + i)->iDid;
+      pCtx->pFuncList->pfRc.pfWelsRcPicDelayJudge (pCtx);
       if (true == pCtx->pWelsSvcRc[pCtx->uiDependencyId].bSkipFlag) {
         bSkipMustFlag = true;
       }