shithub: openh264

Download patch

ref: cce966fbbabef1dd538a76b66dfcda300af2ec43
parent: b66703133e92cde6b62e436be1ac8e022766d923
author: ruil2 <ruil2@cisco.com>
date: Wed Mar 18 09:44:03 EDT 2015

update bGapsInFrameNumValueAllowedFlag according to parameters setting

--- a/codec/encoder/core/inc/au_set.h
+++ b/codec/encoder/core/inc/au_set.h
@@ -106,7 +106,7 @@
 int32_t WelsInitSps (SWelsSPS* pSps, SSpatialLayerConfig* pLayerParam, SSpatialLayerInternal* pLayerParamInternal,
                      const uint32_t kuiIntraPeriod, const int32_t kiNumRefFrame,
                      const uint32_t kiSpsId, const bool kbEnableFrameCropping, bool bEnableRc,
-                     const int32_t kiDlayerCount);
+                     const int32_t kiDlayerCount,bool bSVCBaselayer);
 
 /*!
  * \brief	initialize subset pSps based on configurable parameters in svc
@@ -120,7 +120,8 @@
 int32_t WelsInitSubsetSps (SSubsetSps* pSubsetSps, SSpatialLayerConfig* pLayerParam,
                            SSpatialLayerInternal* pLayerParamInternal,
                            const uint32_t kuiIntraPeriod, const int32_t kiNumRefFrame,
-                           const uint32_t kiSpsId, const bool kbEnableFrameCropping, bool bEnableRc);
+                           const uint32_t kiSpsId, const bool kbEnableFrameCropping, bool bEnableRc,
+                           const int32_t kiDlayerCount);
 
 /*!
  * \brief	initialize pPps based on configurable parameters and pSps(subset pSps) in svc
@@ -160,6 +161,7 @@
 int32_t FindExistingSps (SWelsSvcCodingParam* pParam, const bool kbUseSubsetSps, const int32_t iDlayerIndex,
                          const int32_t iDlayerCount,  const int32_t iSpsNumInUse,
                          SWelsSPS* pSpsArray,
-                         SSubsetSps* pSubsetArray);
+                         SSubsetSps* pSubsetArray,
+                         bool bSVCBaselayer);
 }
 #endif//WELS_ACCESS_UNIT_PARSER_H__
--- a/codec/encoder/core/inc/parameter_sets.h
+++ b/codec/encoder/core/inc/parameter_sets.h
@@ -68,7 +68,7 @@
 //	uint8_t		uiBitDepthChroma;		//=8
 /* TO BE CONTINUE: POC type 1 */
 //	bool		bDeltaPicOrderAlwaysZeroFlag;
-//	bool		bGapsInFrameNumValueAllowedFlag;	//=true
+bool		bGapsInFrameNumValueAllowedFlag;
 
 //	bool		bFrameMbsOnlyFlag;
 //	bool		bMbaffFlag;	// MB Adapative Frame Field
--- a/codec/encoder/core/src/au_set.cpp
+++ b/codec/encoder/core/src/au_set.cpp
@@ -267,7 +267,7 @@
   BsWriteUE (pLocalBitStringAux, pSps->iLog2MaxPocLsb - 4);	// log2_max_pic_order_cnt_lsb_minus4
 
   BsWriteUE (pLocalBitStringAux, pSps->iNumRefFrames);		// max_num_ref_frames
-  BsWriteOneBit (pLocalBitStringAux, true/*pSps->bGapsInFrameNumValueAllowedFlag*/);	// bGapsInFrameNumValueAllowedFlag
+  BsWriteOneBit (pLocalBitStringAux, pSps->bGapsInFrameNumValueAllowedFlag); //gaps_in_frame_numvalue_allowed_flag
   BsWriteUE (pLocalBitStringAux, pSps->iMbWidth - 1);		// pic_width_in_mbs_minus1
   BsWriteUE (pLocalBitStringAux, pSps->iMbHeight - 1);		// pic_height_in_map_units_minus1
   BsWriteOneBit (pLocalBitStringAux, true/*pSps->bFrameMbsOnlyFlag*/);	// bFrameMbsOnlyFlag
@@ -464,7 +464,7 @@
 int32_t WelsInitSps (SWelsSPS* pSps, SSpatialLayerConfig* pLayerParam, SSpatialLayerInternal* pLayerParamInternal,
                      const uint32_t kuiIntraPeriod, const int32_t kiNumRefFrame,
                      const uint32_t kuiSpsId, const bool kbEnableFrameCropping, bool bEnableRc,
-                     const int32_t kiDlayerCount) {
+                     const int32_t kiDlayerCount, bool bSVCBaselayer) {
   memset (pSps, 0, sizeof (SWelsSPS));
   pSps->uiSpsId		= kuiSpsId;
   pSps->iMbWidth	= (pLayerParam->iVideoWidth + 15) >> 4;
@@ -483,7 +483,6 @@
   } else {
     pSps->bFrameCroppingFlag	= false;
   }
-
   pSps->uiProfileIdc	= pLayerParam->uiProfileIdc ? pLayerParam->uiProfileIdc : PRO_BASELINE;
   if (pLayerParam->uiProfileIdc == PRO_BASELINE) {
     pSps->bConstraintSet0Flag = true;
@@ -491,7 +490,7 @@
   if (pLayerParam->uiProfileIdc <= PRO_MAIN) {
     pSps->bConstraintSet1Flag = true;
   }
-  if (kiDlayerCount > 1) {
+  if ((kiDlayerCount > 1) && bSVCBaselayer) {
     pSps->bConstraintSet2Flag = true;
   }
 
@@ -508,6 +507,13 @@
     pLayerParam->uiLevelIdc = uiLevel;
   }
   pSps->iLevelIdc = g_kuiLevelMaps[pLayerParam->uiLevelIdc - 1];
+
+  //bGapsInFrameNumValueAllowedFlag is false when only spatial layer number and temporal layer number is 1, and ltr is 0.
+  if ((kiDlayerCount == 1) && (pSps->iNumRefFrames == 1))
+    pSps->bGapsInFrameNumValueAllowedFlag = false;
+  else
+    pSps->bGapsInFrameNumValueAllowedFlag = true;
+
   pSps->bVuiParamPresentFlag = true;
   return 0;
 }
@@ -516,13 +522,14 @@
 int32_t WelsInitSubsetSps (SSubsetSps* pSubsetSps, SSpatialLayerConfig* pLayerParam,
                            SSpatialLayerInternal* pLayerParamInternal,
                            const uint32_t kuiIntraPeriod, const int32_t kiNumRefFrame,
-                           const uint32_t kuiSpsId, const bool kbEnableFrameCropping, bool bEnableRc) {
+                           const uint32_t kuiSpsId, const bool kbEnableFrameCropping, bool bEnableRc,
+                           const int32_t kiDlayerCount) {
   SWelsSPS* pSps = &pSubsetSps->pSps;
 
   memset (pSubsetSps, 0, sizeof (SSubsetSps));
 
   WelsInitSps (pSps, pLayerParam, pLayerParamInternal, kuiIntraPeriod, kiNumRefFrame, kuiSpsId, kbEnableFrameCropping,
-               bEnableRc, 1);
+               bEnableRc, kiDlayerCount, false);
 
   pSps->uiProfileIdc	= (pLayerParam->uiProfileIdc >= PRO_SCALABLE_BASELINE) ? pLayerParam->uiProfileIdc :
                         PRO_SCALABLE_BASELINE;
--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -898,7 +898,7 @@
 
 static int32_t WelsGenerateNewSps (sWelsEncCtx* pCtx, const bool kbUseSubsetSps, const int32_t iDlayerIndex,
                                    const int32_t iDlayerCount, const int32_t kiSpsId,
-                                   SWelsSPS*& pSps, SSubsetSps*& pSubsetSps) {
+                                   SWelsSPS*& pSps, SSubsetSps*& pSubsetSps, bool bSVCBaselayer) {
   int32_t iRet = 0;
 
   if (!kbUseSubsetSps) {
@@ -914,11 +914,12 @@
   if (!kbUseSubsetSps) {
     iRet = WelsInitSps (pSps, pDlayerParam, &pParam->sDependencyLayers[iDlayerIndex], pParam->uiIntraPeriod,
                         pParam->iMaxNumRefFrame,
-                        kiSpsId, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE, iDlayerCount);
+                        kiSpsId, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE, iDlayerCount,
+                        bSVCBaselayer);
   } else {
     iRet = WelsInitSubsetSps (pSubsetSps, pDlayerParam, &pParam->sDependencyLayers[iDlayerIndex], pParam->uiIntraPeriod,
                               pParam->iMaxNumRefFrame,
-                              kiSpsId, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE);
+                              kiSpsId, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE, iDlayerCount);
   }
   return iRet;
 }
@@ -978,7 +979,7 @@
 int32_t FindExistingSps (SWelsSvcCodingParam* pParam, const bool kbUseSubsetSps, const int32_t iDlayerIndex,
                          const int32_t iDlayerCount, const int32_t iSpsNumInUse,
                          SWelsSPS* pSpsArray,
-                         SSubsetSps* pSubsetArray) {
+                         SSubsetSps* pSubsetArray, bool bSVCBaseLayer) {
   SSpatialLayerConfig* pDlayerParam	= &pParam->sSpatialLayers[iDlayerIndex];
 
   assert (iSpsNumInUse <= MAX_SPS_COUNT);
@@ -986,7 +987,8 @@
     SWelsSPS sTmpSps;
     WelsInitSps (&sTmpSps, pDlayerParam, &pParam->sDependencyLayers[iDlayerIndex], pParam->uiIntraPeriod,
                  pParam->iMaxNumRefFrame,
-                 0, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE, iDlayerCount);
+                 0, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE, iDlayerCount,
+                 bSVCBaseLayer);
     for (int32_t iId = 0; iId < iSpsNumInUse; iId++) {
       if (CheckMatchedSps (&sTmpSps, &pSpsArray[iId])) {
         return iId;
@@ -996,7 +998,7 @@
     SSubsetSps sTmpSubsetSps;
     WelsInitSubsetSps (&sTmpSubsetSps, pDlayerParam, &pParam->sDependencyLayers[iDlayerIndex], pParam->uiIntraPeriod,
                        pParam->iMaxNumRefFrame,
-                       0, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE);
+                       0, pParam->bEnableFrameCroppingFlag, pParam->iRCMode != RC_OFF_MODE, iDlayerCount);
 
     for (int32_t iId = 0; iId < iSpsNumInUse; iId++) {
       if (CheckMatchedSubsetSps (&sTmpSubsetSps, &pSubsetArray[iId])) {
@@ -1258,12 +1260,13 @@
     SDqIdc* pDqIdc		= & (*ppCtx)->pDqIdcMap[iDlayerIndex];
     const bool bUseSubsetSps			= (!pParam->bSimulcastAVC) && (iDlayerIndex > BASE_DEPENDENCY_ID);
     SSpatialLayerConfig* pDlayerParam	= &pParam->sSpatialLayers[iDlayerIndex];
-
+    bool bSvcBaselayer = (!pParam->bSimulcastAVC) && (iDlayerCount > BASE_DEPENDENCY_ID)
+                         && (iDlayerIndex == BASE_DEPENDENCY_ID);
     pDqIdc->uiSpatialId	= iDlayerIndex;
 
     if (! (SPS_LISTING & pParam->eSpsPpsIdStrategy)) {
       WelsGenerateNewSps (*ppCtx, bUseSubsetSps, iDlayerIndex,
-                          iDlayerCount, iSpsId, pSps, pSubsetSps);
+                          iDlayerCount, iSpsId, pSps, pSubsetSps, bSvcBaselayer);
     } else {
       //SPS_LISTING_AND_PPS_INCREASING == pParam->eSpsPpsIdStrategy
       //check if the current param can fit in an existing SPS
@@ -1270,7 +1273,7 @@
       const int32_t kiFoundSpsId = FindExistingSps ((*ppCtx)->pSvcParam, bUseSubsetSps, iDlayerIndex, iDlayerCount,
                                    bUseSubsetSps ? ((*ppCtx)->sPSOVector.uiInUseSubsetSpsNum) : ((*ppCtx)->sPSOVector.uiInUseSpsNum),
                                    (*ppCtx)->pSpsArray,
-                                   (*ppCtx)->pSubsetArray);
+                                   (*ppCtx)->pSubsetArray, bSvcBaselayer);
 
 
       if (INVALID_ID != kiFoundSpsId) {
@@ -1309,7 +1312,7 @@
         }
 
         WelsGenerateNewSps (*ppCtx, bUseSubsetSps, iDlayerIndex,
-                            iDlayerCount, iSpsId, pSps, pSubsetSps);
+                            iDlayerCount, iSpsId, pSps, pSubsetSps, bSvcBaselayer);
       }
     }
 
--- a/test/api/decode_encode_test.cpp
+++ b/test/api/decode_encode_test.cpp
@@ -91,7 +91,7 @@
   BufferedData buf_;
 };
 
-void DecEncFileParamToParamExt (DecodeEncodeFileParam * pDecEncFileParam, SEncParamExt* pEnxParamExt) {
+void DecEncFileParamToParamExt (DecodeEncodeFileParam* pDecEncFileParam, SEncParamExt* pEnxParamExt) {
   ASSERT_TRUE (NULL != pDecEncFileParam && NULL != pEnxParamExt);
 
   pEnxParamExt->iPicWidth      = pDecEncFileParam->width;
@@ -107,7 +107,7 @@
   pEnxParamExt->iEntropyCodingModeFlag    = 0;
 
   for (int i = 0; i < pEnxParamExt->iSpatialLayerNum; i++) {
-     pEnxParamExt->sSpatialLayers[i].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
+    pEnxParamExt->sSpatialLayers[i].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
   }
 
 }
@@ -114,7 +114,7 @@
 TEST_P (DecodeEncodeTest, CompareOutput) {
   DecodeEncodeFileParam p = GetParam();
   SEncParamExt  EnxParamExt;
-  DecEncFileParamToParamExt(&p,&EnxParamExt);
+  DecEncFileParamToParamExt (&p, &EnxParamExt);
 
 #if defined(ANDROID_NDK)
   std::string filename = std::string ("/sdcard/") + p.fileName;
@@ -130,8 +130,8 @@
   }
 }
 static const DecodeEncodeFileParam kFileParamArray[] = {
-  {"res/test_vd_1d.264", "26318fb8f0a9dfb27851d4d95f1743d94673f085", 320, 192, 12.0f},
-  {"res/test_vd_rc.264", "39c0b66d769c6050fd87114c7d9e9217ed594e00", 320, 192, 12.0f},
+  {"res/test_vd_1d.264", "9d4d682679a0746edda2824687f00ba6db91a2a8", 320, 192, 12.0f},
+  {"res/test_vd_rc.264", "23dab419a16c6e894518ca93444666e9336aef63", 320, 192, 12.0f},
 };
 
 
--- a/test/api/encoder_test.cpp
+++ b/test/api/encoder_test.cpp
@@ -56,7 +56,7 @@
   pEnxParamExt->iEntropyCodingModeFlag   = pEncFileParam->bCabac ? 1 : 0;
 
   for (int i = 0; i < pEnxParamExt->iSpatialLayerNum; i++) {
-     pEnxParamExt->sSpatialLayers[i].sSliceCfg.uiSliceMode = pEncFileParam->eSliceMode;
+    pEnxParamExt->sSpatialLayers[i].sSliceCfg.uiSliceMode = pEncFileParam->eSliceMode;
   }
 
 }
@@ -90,7 +90,7 @@
   std::string filename = std::string ("/sdcard/") + p.pkcFileName;
   EncodeFile (p.pkcFileName, &EnxParamExt, this);
 #else
-    EncodeFile (p.pkcFileName, &EnxParamExt, this);
+  EncodeFile (p.pkcFileName, &EnxParamExt, this);
 #endif
   //will remove this after screen content algorithms are ready,
   //because the bitstream output will vary when the different algorithms are added.
@@ -103,23 +103,23 @@
 static const EncodeFileParam kFileParamArray[] = {
   {
     "res/CiscoVT2people_320x192_12fps.yuv",
-    "996a3bab4d2f6142f408c24b151e03135bd58681", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, false, 1, false, false, false
+    "e36b6169dcb5bbb90e64291250ec65995d62c846", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, false, 1, false, false, false
   },
   {
     "res/CiscoVT2people_160x96_6fps.yuv",
-    "4df94f5187c5aded3f940e29e5821297262e4862", CAMERA_VIDEO_REAL_TIME, 160, 96, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
+    "04c73f202a29befd57ee49d242688f3e6ddfecbc", CAMERA_VIDEO_REAL_TIME, 160, 96, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
   },
   {
     "res/Static_152_100.yuv",
-    "e0c620d732e5b0af53fbbe9c6b83bd79681af89a", CAMERA_VIDEO_REAL_TIME, 152, 100, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
+    "c959ae52c5469bfc37bb31870c6a7259a1bb1917", CAMERA_VIDEO_REAL_TIME, 152, 100, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
   },
   {
     "res/CiscoVT2people_320x192_12fps.yuv",
-    "ab8fded9d2a5513cd635118a5ea93cacf24ab82f", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_ROWMB_SLICE, false, 1, false, false, false // One slice per MB row
+    "f03ca6a679cd12c90542e351eabfce0d902ffad2", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_ROWMB_SLICE, false, 1, false, false, false // One slice per MB row
   },
   {
     "res/CiscoVT2people_320x192_12fps.yuv",
-    "c0372e3a02da479eba5552230f56ff6730870d17", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, true, 1, false, false, false
+    "c7f37486e00c1f18715c7aaf10444f03111418cf", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, true, 1, false, false, false
   },
   {
     "res/CiscoVT2people_320x192_12fps.yuv",
@@ -127,7 +127,7 @@
   },
   {
     "res/Cisco_Absolute_Power_1280x720_30fps.yuv",
-    "ace9511444c022b860abe09ea3ec5884079351aa", CAMERA_VIDEO_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1, false, false, false
+    "6cc7d08b2a80fc2836396808f919f9b5d4ee1d97", CAMERA_VIDEO_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1, false, false, false
   },
   {
     "res/Cisco_Absolute_Power_1280x720_30fps.yuv",
@@ -136,19 +136,19 @@
   // the following values may be adjusted for times since we start tuning the strategy
   {
     "res/CiscoVT2people_320x192_12fps.yuv",
-    "f1639ba3e71f45b975e39322d61ff2efe3c50c0d", SCREEN_CONTENT_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, false, 1, false, false, false
+    "9b8ba682313ed9cd0512563859e050942a3e776e", SCREEN_CONTENT_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, false, 1, false, false, false
   },
   {
     "res/CiscoVT2people_160x96_6fps.yuv",
-    "fad7e2a9fc012ab356748092650dc40ed2253251", SCREEN_CONTENT_REAL_TIME, 160, 96, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
+    "2706c61e9459196b4161f4bbb9444a08308ae8c5", SCREEN_CONTENT_REAL_TIME, 160, 96, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
   },
   {
     "res/Static_152_100.yuv",
-    "4869652f5ed64b840295d03d7be352e8c0504afc", SCREEN_CONTENT_REAL_TIME, 152, 100, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
+    "d8457a47946e91b01310d8de9afa21ac00df8edb", SCREEN_CONTENT_REAL_TIME, 152, 100, 6.0f, SM_SINGLE_SLICE, false, 1, false, false, false
   },
   {
     "res/Cisco_Absolute_Power_1280x720_30fps.yuv",
-    "9303a2e142475c8f8637129ebfed0089a8c8f4a2", SCREEN_CONTENT_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1, false, false, false
+    "116663b5a00f000ab40e95b6202563e3cb4ce488", SCREEN_CONTENT_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1, false, false, false
   },
   //for different strategy
   {
@@ -157,11 +157,11 @@
   },
   {
     "res/CiscoVT2people_320x192_12fps.yuv",
-    "dd281aa3857dc69246d5ac4942ccd7baa8cd80e9", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, false, 1, false, false, true //turn on cabac
+    "7aaab6ef2dc5f95c3a2869979eba59553936e36f", CAMERA_VIDEO_REAL_TIME, 320, 192, 12.0f, SM_SINGLE_SLICE, false, 1, false, false, true //turn on cabac
   },
   {
     "res/Cisco_Absolute_Power_1280x720_30fps.yuv",
-    "15850f7047a65d15a682e3c7ffc88c4bdaea6d15", CAMERA_VIDEO_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1, false, false, true
+    "bb8ee13f829fa593b77760afdeb1215d0a577ee1", CAMERA_VIDEO_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1, false, false, true
   },
 };
 
--- a/test/encoder/EncUT_ParameterSetStrategy.cpp
+++ b/test/encoder/EncUT_ParameterSetStrategy.cpp
@@ -73,11 +73,11 @@
   pDlayerParam	= & (sParam1.sSpatialLayers[iDlayerIndex]);
   iRet = WelsInitSps (m_pSpsArrayPointer, pDlayerParam, &sParam1.sDependencyLayers[iDlayerIndex], sParam1.uiIntraPeriod,
                       sParam1.iMaxNumRefFrame,
-                      iCurSpsId, sParam1.bEnableFrameCroppingFlag, sParam1.iRCMode != RC_OFF_MODE, iDlayerCount);
+                      iCurSpsId, sParam1.bEnableFrameCroppingFlag, sParam1.iRCMode != RC_OFF_MODE, iDlayerCount, false);
 
   // try finding #0
   iFoundId = FindExistingSps (&sParam1, bUseSubsetSps, iDlayerIndex, iDlayerCount, iCurSpsInUse,
-                              m_pSpsArray, m_pSubsetArray);
+                              m_pSpsArray, m_pSubsetArray, false);
   EXPECT_EQ (iFoundId, iCurSpsId);
 
   // try not finding
@@ -84,7 +84,7 @@
   SWelsSvcCodingParam sParam2 = sParam1;
   sParam2.iMaxNumRefFrame ++;
   iFoundId = FindExistingSps (&sParam2, bUseSubsetSps, iDlayerIndex, iDlayerCount, iCurSpsInUse,
-                              m_pSpsArray, m_pSubsetArray);
+                              m_pSpsArray, m_pSubsetArray, false);
   EXPECT_EQ (iFoundId, INVALID_ID);
 
   // add new sps
@@ -93,17 +93,17 @@
   pDlayerParam	= & (sParam2.sSpatialLayers[iDlayerIndex]);
   iRet = WelsInitSps (m_pSpsArrayPointer, pDlayerParam, &sParam2.sDependencyLayers[iDlayerIndex], sParam2.uiIntraPeriod,
                       sParam2.iMaxNumRefFrame,
-                      iCurSpsId, sParam2.bEnableFrameCroppingFlag, sParam2.iRCMode != RC_OFF_MODE, iDlayerCount);
+                      iCurSpsId, sParam2.bEnableFrameCroppingFlag, sParam2.iRCMode != RC_OFF_MODE, iDlayerCount, false);
   iCurSpsInUse = 2;
 
   // try finding #1
   iFoundId = FindExistingSps (&sParam2, bUseSubsetSps, iDlayerIndex, iDlayerCount, iCurSpsInUse,
-                              m_pSpsArray, m_pSubsetArray);
+                              m_pSpsArray, m_pSubsetArray, false);
   EXPECT_EQ (iFoundId, iCurSpsId);
 
   // try finding #0
   iFoundId = FindExistingSps (&sParam1, bUseSubsetSps, iDlayerIndex, iDlayerCount, iCurSpsInUse,
-                              m_pSpsArray, m_pSubsetArray);
+                              m_pSpsArray, m_pSubsetArray, false);
   EXPECT_EQ (iFoundId, 0);
 
   // try not finding
@@ -115,7 +115,7 @@
   }
 
   iFoundId = FindExistingSps (&sParam2, bUseSubsetSps, iDlayerIndex, iDlayerCount, iCurSpsInUse,
-                              m_pSpsArray, m_pSubsetArray);
+                              m_pSpsArray, m_pSubsetArray, false);
   EXPECT_EQ (iFoundId, INVALID_ID);
   (void) iRet; // Not using iRet at the moment
 }