Showing the changes to test/api/encode_decode_api_test.cpp (1 of 16 files). Show all
Unified · Split
| @@ -88,26 +88,25 @@ class EncodeDecodeTestBase : public ::testing::TestWithParam<EncodeDecodeFilePar · 87 unmodified lines | |||
| 88 | BaseDecoderTest::TearDown(); | 88 | BaseDecoderTest::TearDown(); |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | virtual void prepareParam (int iLayers, int iSlices, int width, int height, float framerate) { | 91 | virtual void prepareParam (int iLayers, int iSlices, int width, int height, float framerate, SEncParamExt* pParam) { |
| 92 | memset (¶m_, 0, sizeof (SEncParamExt)); | 92 | memset (pParam, 0, sizeof (SEncParamExt)); |
| 93 | param_.iUsageType = CAMERA_VIDEO_REAL_TIME; | 93 | pParam->iUsageType = CAMERA_VIDEO_REAL_TIME; |
| 94 | param_.iPicWidth = width; | 94 | pParam->iPicWidth = width; |
| 95 | param_.iPicHeight = height; | 95 | pParam->iPicHeight = height; |
| 96 | param_.fMaxFrameRate = framerate; | 96 | pParam->fMaxFrameRate = framerate; |
| 97 | param_.iRCMode = RC_OFF_MODE; //rc off | 97 | pParam->iRCMode = RC_OFF_MODE; //rc off |
| 98 | param_.iMultipleThreadIdc = 1; //single thread | 98 | pParam->iMultipleThreadIdc = 1; //single thread |
| 99 | param_.iSpatialLayerNum = iLayers; | 99 | pParam->iSpatialLayerNum = iLayers; |
| 100 | param_.iNumRefFrame = AUTO_REF_PIC_COUNT; | 100 | pParam->iNumRefFrame = AUTO_REF_PIC_COUNT; |
| 101 | for (int i = 0; i < iLayers; i++) { | 101 | for (int i = 0; i < iLayers; i++) { |
| 102 | param_.sSpatialLayers[i].iVideoWidth = width >> (iLayers - i - 1); | 102 | pParam->sSpatialLayers[i].iVideoWidth = width >> (iLayers - i - 1); |
| 103 | param_.sSpatialLayers[i].iVideoHeight = height >> (iLayers - i - 1); | 103 | pParam->sSpatialLayers[i].iVideoHeight = height >> (iLayers - i - 1); |
| 104 | param_.sSpatialLayers[i].fFrameRate = framerate; | 104 | pParam->sSpatialLayers[i].fFrameRate = framerate; |
| 105 | param_.sSpatialLayers[i].sSliceCfg.uiSliceMode = SM_FIXEDSLCNUM_SLICE; | 105 | pParam->sSpatialLayers[i].sSliceCfg.uiSliceMode = SM_FIXEDSLCNUM_SLICE; |
| 106 | param_.sSpatialLayers[i].sSliceCfg.sSliceArgument.uiSliceNum = iSlices; | 106 | pParam->sSpatialLayers[i].sSliceCfg.sSliceArgument.uiSliceNum = iSlices; |
| 107 | } | 107 | } |
| 108 | |||
| 109 | |||
| 110 | } | 108 | } |
| 109 | |||
| 111 | virtual void prepareEncDecParam (const EncodeDecodeFileParamBase EncDecFileParam) { | 110 | virtual void prepareEncDecParam (const EncodeDecodeFileParamBase EncDecFileParam) { |
| 112 | //for encoder | 111 | //for encoder |
| 113 | //I420: 1(Y) + 1/4(U) + 1/4(V) | 112 | //I420: 1(Y) + 1/4(U) + 1/4(V) |
| @@ -147,6 +146,15 @@ class EncodeDecodeTestBase : public ::testing::TestWithParam<EncodeDecodeFilePar · 33 unmodified lines | |||
| 147 | len = layerInfo.pNalLengthInByte[iSliceNum]; | 146 | len = layerInfo.pNalLengthInByte[iSliceNum]; |
| 148 | } | 147 | } |
| 149 | 148 | ||
| 149 | |||
| 150 | virtual int GetRandWidth() { | ||
| 151 | return (WELS_CLIP3 ((((rand() % MAX_WIDTH) >> 1) + 1) << 1, 2, MAX_WIDTH)); | ||
| 152 | } | ||
| 153 | |||
| 154 | virtual int GetRandHeight() { | ||
| 155 | return (WELS_CLIP3 ((((rand() % MAX_HEIGHT) >> 1) + 1) << 1, 2, MAX_HEIGHT)); | ||
| 156 | } | ||
| 157 | |||
| 150 | protected: | 158 | protected: |
| 151 | SEncParamExt param_; | 159 | SEncParamExt param_; |
| 152 | BufferedData buf_; | 160 | BufferedData buf_; |
| @@ -171,8 +179,8 @@ class EncodeDecodeTestAPI : public EncodeDecodeTestBase { · 18 unmodified lines | |||
| 171 | EncodeDecodeTestBase::TearDown(); | 179 | EncodeDecodeTestBase::TearDown(); |
| 172 | } | 180 | } |
| 173 | 181 | ||
| 174 | void prepareParam (int iLayers, int iSlices, int width, int height, float framerate) { | 182 | void prepareParam (int iLayers, int iSlices, int width, int height, float framerate, SEncParamExt* pParam) { |
| 175 | EncodeDecodeTestBase::prepareParam (iLayers, iSlices, width, height, framerate); | 183 | EncodeDecodeTestBase::prepareParam (iLayers, iSlices, width, height, framerate, pParam); |
| 176 | } | 184 | } |
| 177 | 185 | ||
| 178 | void InitialEncDec (int iWidth, int iHeight); | 186 | void InitialEncDec (int iWidth, int iHeight); |
| @@ -192,6 +200,24 @@ class EncodeDecodeTestAPI : public EncodeDecodeTestBase { · 13 unmodified lines | |||
| 192 | else if (1 == iCheckTypeIndex) | 200 | else if (1 == iCheckTypeIndex) |
| 193 | ASSERT_TRUE (rv == cmResultSuccess || rv == cmUnkonwReason); | 201 | ASSERT_TRUE (rv == cmResultSuccess || rv == cmUnkonwReason); |
| 194 | } | 202 | } |
| 203 | |||
| 204 | void EncDecOneFrame (const int iWidth, const int iHeight, const int iFrame, FILE* pfEnc) { | ||
| 205 | int iLen = 0, rv; | ||
| 206 | InitialEncDec (iWidth, iHeight); | ||
| 207 | EncodeOneFrame (iFrame); | ||
| 208 | |||
| 209 | //extract target layer data | ||
| 210 | encToDecData (info, iLen); | ||
| 211 | //call decoder | ||
| 212 | unsigned char* pData[3] = { NULL }; | ||
| 213 | memset (&dstBufInfo_, 0, sizeof (SBufferInfo)); | ||
| 214 | rv = decoder_->DecodeFrame2 (info.sLayerInfo[0].pBsBuf, iLen, pData, &dstBufInfo_); | ||
| 215 | EXPECT_TRUE (rv == cmResultSuccess) << " rv = " << rv << " iFrameIdx = " << iFrame; | ||
| 216 | |||
| 217 | if (NULL != pfEnc) { | ||
| 218 | fwrite (info.sLayerInfo[0].pBsBuf, iLen, 1, pfEnc); | ||
| 219 | } | ||
| 220 | } | ||
| 195 | }; | 221 | }; |
| 196 | 222 | ||
| 197 | void EncodeDecodeTestAPI::InitialEncDec (int iWidth, int iHeight) { | 223 | void EncodeDecodeTestAPI::InitialEncDec (int iWidth, int iHeight) { |
| @@ -234,7 +260,7 @@ void EncodeDecodeTestAPI::RandomParamExtCombination() { · 36 unmodified lines | |||
| 234 | param_.iNumRefFrame = AUTO_REF_PIC_COUNT; | 260 | param_.iNumRefFrame = AUTO_REF_PIC_COUNT; |
| 235 | param_.iMultipleThreadIdc = rand(); | 261 | param_.iMultipleThreadIdc = rand(); |
| 236 | 262 | ||
| 237 | param_.bEnableSpsPpsIdAddition = (rand() % 2 == 0) ? false : true; | 263 | param_.iSpsPpsIdStrategy = rand() % 3; |
| 238 | param_.bPrefixNalAddingCtrl = (rand() % 2 == 0) ? false : true; | 264 | param_.bPrefixNalAddingCtrl = (rand() % 2 == 0) ? false : true; |
| 239 | param_.bEnableSSEI = (rand() % 2 == 0) ? false : true; | 265 | param_.bEnableSSEI = (rand() % 2 == 0) ? false : true; |
| 240 | param_.iPaddingFlag = rand() % 2; | 266 | param_.iPaddingFlag = rand() % 2; |
| @@ -462,7 +488,7 @@ static const EncodeDecodeFileParamBase kFileParamArray[] = { · 221 unmodified lines | |||
| 462 | 488 | ||
| 463 | TEST_P (EncodeDecodeTestAPI, DecoderVclNal) { | 489 | TEST_P (EncodeDecodeTestAPI, DecoderVclNal) { |
| 464 | EncodeDecodeFileParamBase p = GetParam(); | 490 | EncodeDecodeFileParamBase p = GetParam(); |
| 465 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 491 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 466 | encoder_->Uninitialize(); | 492 | encoder_->Uninitialize(); |
| 467 | int rv = encoder_->InitializeExt (¶m_); | 493 | int rv = encoder_->InitializeExt (¶m_); |
| 468 | ASSERT_TRUE (rv == cmResultSuccess); | 494 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -498,7 +524,7 @@ TEST_P (EncodeDecodeTestAPI, DecoderVclNal) { · 29 unmodified lines | |||
| 498 | 524 | ||
| 499 | TEST_P (EncodeDecodeTestAPI, GetOptionFramenum) { | 525 | TEST_P (EncodeDecodeTestAPI, GetOptionFramenum) { |
| 500 | EncodeDecodeFileParamBase p = GetParam(); | 526 | EncodeDecodeFileParamBase p = GetParam(); |
| 501 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 527 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 502 | encoder_->Uninitialize(); | 528 | encoder_->Uninitialize(); |
| 503 | int rv = encoder_->InitializeExt (¶m_); | 529 | int rv = encoder_->InitializeExt (¶m_); |
| 504 | ASSERT_TRUE (rv == cmResultSuccess); | 530 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -535,7 +561,7 @@ TEST_P (EncodeDecodeTestAPI, GetOptionFramenum) { · 30 unmodified lines | |||
| 535 | 561 | ||
| 536 | TEST_P (EncodeDecodeTestAPI, GetOptionIDR) { | 562 | TEST_P (EncodeDecodeTestAPI, GetOptionIDR) { |
| 537 | EncodeDecodeFileParamBase p = GetParam(); | 563 | EncodeDecodeFileParamBase p = GetParam(); |
| 538 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 564 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 539 | encoder_->Uninitialize(); | 565 | encoder_->Uninitialize(); |
| 540 | int rv = encoder_->InitializeExt (¶m_); | 566 | int rv = encoder_->InitializeExt (¶m_); |
| 541 | ASSERT_TRUE (rv == cmResultSuccess); | 567 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -554,7 +580,8 @@ TEST_P (EncodeDecodeTestAPI, GetOptionIDR) { · 12 unmodified lines | |||
| 554 | int32_t iSpsPpsIdAddition = 0; | 580 | int32_t iSpsPpsIdAddition = 0; |
| 555 | int iIdx = 0; | 581 | int iIdx = 0; |
| 556 | while (iIdx <= p.numframes) { | 582 | while (iIdx <= p.numframes) { |
| 557 | iSpsPpsIdAddition = rand() % 2; | 583 | iSpsPpsIdAddition = rand() % |
| 584 | 2; //the current strategy supports more than 2 modes, but the switch between the modes>2 is not allowed | ||
| 558 | iIDRPeriod = (rand() % 150) + 1; | 585 | iIDRPeriod = (rand() % 150) + 1; |
| 559 | encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod); | 586 | encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod); |
| 560 | encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iSpsPpsIdAddition); | 587 | encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iSpsPpsIdAddition); |
| @@ -776,7 +803,7 @@ int SimulateNALLoss (const unsigned char* pSrc, int& iSrcLen, std::vector<SLost · 215 unmodified lines | |||
| 776 | 803 | ||
| 777 | TEST_P (EncodeDecodeTestAPI, GetOptionLTR_ALLIDR) { | 804 | TEST_P (EncodeDecodeTestAPI, GetOptionLTR_ALLIDR) { |
| 778 | EncodeDecodeFileParamBase p = GetParam(); | 805 | EncodeDecodeFileParamBase p = GetParam(); |
| 779 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 806 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 780 | encoder_->Uninitialize(); | 807 | encoder_->Uninitialize(); |
| 781 | int rv = encoder_->InitializeExt (¶m_); | 808 | int rv = encoder_->InitializeExt (¶m_); |
| 782 | ASSERT_TRUE (rv == cmResultSuccess); | 809 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -809,7 +836,7 @@ TEST_P (EncodeDecodeTestAPI, GetOptionLTR_ALLLTR) { · 26 unmodified lines | |||
| 809 | SLTRMarkingFeedback m_LTR_Marking_Feedback; | 836 | SLTRMarkingFeedback m_LTR_Marking_Feedback; |
| 810 | SLTRRecoverRequest m_LTR_Recover_Request; | 837 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 811 | EncodeDecodeFileParamBase p = GetParam(); | 838 | EncodeDecodeFileParamBase p = GetParam(); |
| 812 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 839 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 813 | encoder_->Uninitialize(); | 840 | encoder_->Uninitialize(); |
| 814 | int rv = encoder_->InitializeExt (¶m_); | 841 | int rv = encoder_->InitializeExt (¶m_); |
| 815 | ASSERT_TRUE (rv == cmResultSuccess); | 842 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -868,7 +895,7 @@ TEST_P (EncodeDecodeTestAPI, GetOptionLTR_Engine) { · 52 unmodified lines | |||
| 868 | SLTRRecoverRequest m_LTR_Recover_Request; | 895 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 869 | m_LTR_Recover_Request.uiIDRPicId = 0; | 896 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 870 | EncodeDecodeFileParamBase p = GetParam(); | 897 | EncodeDecodeFileParamBase p = GetParam(); |
| 871 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 898 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 872 | encoder_->Uninitialize(); | 899 | encoder_->Uninitialize(); |
| 873 | int rv = encoder_->InitializeExt (¶m_); | 900 | int rv = encoder_->InitializeExt (¶m_); |
| 874 | ASSERT_TRUE (rv == cmResultSuccess); | 901 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -918,7 +945,7 @@ TEST_P (EncodeDecodeTestAPI, SetOptionECFlag_ERROR_CON_DISABLE) { · 43 unmodified lines | |||
| 918 | SLTRRecoverRequest m_LTR_Recover_Request; | 945 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 919 | m_LTR_Recover_Request.uiIDRPicId = 0; | 946 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 920 | EncodeDecodeFileParamBase p = GetParam(); | 947 | EncodeDecodeFileParamBase p = GetParam(); |
| 921 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 948 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 922 | param_.bEnableLongTermReference = true; | 949 | param_.bEnableLongTermReference = true; |
| 923 | param_.iLTRRefNum = 1; | 950 | param_.iLTRRefNum = 1; |
| 924 | encoder_->Uninitialize(); | 951 | encoder_->Uninitialize(); |
| @@ -985,7 +1012,7 @@ TEST_P (EncodeDecodeTestAPI, SetOptionECFlag_ERROR_CON_SLICE_COPY) { · 60 unmodified lines | |||
| 985 | SLTRRecoverRequest m_LTR_Recover_Request; | 1012 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 986 | m_LTR_Recover_Request.uiIDRPicId = 0; | 1013 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 987 | EncodeDecodeFileParamBase p = GetParam(); | 1014 | EncodeDecodeFileParamBase p = GetParam(); |
| 988 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1015 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 989 | encoder_->Uninitialize(); | 1016 | encoder_->Uninitialize(); |
| 990 | int rv = encoder_->InitializeExt (¶m_); | 1017 | int rv = encoder_->InitializeExt (¶m_); |
| 991 | ASSERT_TRUE (rv == cmResultSuccess); | 1018 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -1036,7 +1063,7 @@ TEST_P (EncodeDecodeTestAPI, SetOptionECFlag_ERROR_CON_SLICE_COPY) { · 44 unmodified lines | |||
| 1036 | 1063 | ||
| 1037 | TEST_P (EncodeDecodeTestAPI, InOutTimeStamp) { | 1064 | TEST_P (EncodeDecodeTestAPI, InOutTimeStamp) { |
| 1038 | EncodeDecodeFileParamBase p = GetParam(); | 1065 | EncodeDecodeFileParamBase p = GetParam(); |
| 1039 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1066 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1040 | encoder_->Uninitialize(); | 1067 | encoder_->Uninitialize(); |
| 1041 | int rv = encoder_->InitializeExt (¶m_); | 1068 | int rv = encoder_->InitializeExt (¶m_); |
| 1042 | ASSERT_TRUE (rv == cmResultSuccess); | 1069 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -1086,7 +1113,7 @@ TEST_P (EncodeDecodeTestAPI, GetOptionTid_AVC_NOPREFIX) { · 43 unmodified lines | |||
| 1086 | SLTRRecoverRequest m_LTR_Recover_Request; | 1113 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 1087 | m_LTR_Recover_Request.uiIDRPicId = 0; | 1114 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 1088 | EncodeDecodeFileParamBase p = GetParam(); | 1115 | EncodeDecodeFileParamBase p = GetParam(); |
| 1089 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1116 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1090 | param_.bPrefixNalAddingCtrl = false; | 1117 | param_.bPrefixNalAddingCtrl = false; |
| 1091 | param_.iTemporalLayerNum = (rand() % 4) + 1; | 1118 | param_.iTemporalLayerNum = (rand() % 4) + 1; |
| 1092 | encoder_->Uninitialize(); | 1119 | encoder_->Uninitialize(); |
| @@ -1155,7 +1182,7 @@ TEST_P (EncodeDecodeTestAPI, GetOptionTid_AVC_WITH_PREFIX_NOLOSS) { · 62 unmodified lines | |||
| 1155 | SLTRRecoverRequest m_LTR_Recover_Request; | 1182 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 1156 | m_LTR_Recover_Request.uiIDRPicId = 0; | 1183 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 1157 | EncodeDecodeFileParamBase p = GetParam(); | 1184 | EncodeDecodeFileParamBase p = GetParam(); |
| 1158 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1185 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1159 | param_.bPrefixNalAddingCtrl = true; | 1186 | param_.bPrefixNalAddingCtrl = true; |
| 1160 | param_.iTemporalLayerNum = (rand() % 4) + 1; | 1187 | param_.iTemporalLayerNum = (rand() % 4) + 1; |
| 1161 | param_.iSpatialLayerNum = 1; | 1188 | param_.iSpatialLayerNum = 1; |
| @@ -1210,7 +1237,7 @@ TEST_P (EncodeDecodeTestAPI, GetOptionTid_SVC_L1_NOLOSS) { · 48 unmodified lines | |||
| 1210 | SLTRRecoverRequest m_LTR_Recover_Request; | 1237 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 1211 | m_LTR_Recover_Request.uiIDRPicId = 0; | 1238 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 1212 | EncodeDecodeFileParamBase p = GetParam(); | 1239 | EncodeDecodeFileParamBase p = GetParam(); |
| 1213 | prepareParam (2, p.slicenum, p.width, p.height, p.frameRate); | 1240 | prepareParam (2, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1214 | param_.iTemporalLayerNum = (rand() % 4) + 1; | 1241 | param_.iTemporalLayerNum = (rand() % 4) + 1; |
| 1215 | param_.iSpatialLayerNum = 2; | 1242 | param_.iSpatialLayerNum = 2; |
| 1216 | encoder_->Uninitialize(); | 1243 | encoder_->Uninitialize(); |
| @@ -1266,7 +1293,7 @@ TEST_P (EncodeDecodeTestAPI, SetOption_Trace) { · 49 unmodified lines | |||
| 1266 | SLTRRecoverRequest m_LTR_Recover_Request; | 1293 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 1267 | m_LTR_Recover_Request.uiIDRPicId = 0; | 1294 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 1268 | EncodeDecodeFileParamBase p = GetParam(); | 1295 | EncodeDecodeFileParamBase p = GetParam(); |
| 1269 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1296 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1270 | param_.iSpatialLayerNum = 1; | 1297 | param_.iSpatialLayerNum = 1; |
| 1271 | 1298 | ||
| 1272 | int rv = encoder_->InitializeExt (¶m_); | 1299 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -1330,7 +1357,7 @@ TEST_P (EncodeDecodeTestAPI, SetOption_Trace_NULL) { · 57 unmodified lines | |||
| 1330 | SLTRRecoverRequest m_LTR_Recover_Request; | 1357 | SLTRRecoverRequest m_LTR_Recover_Request; |
| 1331 | m_LTR_Recover_Request.uiIDRPicId = 0; | 1358 | m_LTR_Recover_Request.uiIDRPicId = 0; |
| 1332 | EncodeDecodeFileParamBase p = GetParam(); | 1359 | EncodeDecodeFileParamBase p = GetParam(); |
| 1333 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1360 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1334 | param_.iSpatialLayerNum = 1; | 1361 | param_.iSpatialLayerNum = 1; |
| 1335 | int rv = encoder_->InitializeExt (¶m_); | 1362 | int rv = encoder_->InitializeExt (¶m_); |
| 1336 | ASSERT_TRUE (rv == cmResultSuccess); | 1363 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -1393,7 +1420,7 @@ TEST_P (EncodeDecodeTestAPI, SetOptionECIDC_GeneralSliceChange) { · 56 unmodified lines | |||
| 1393 | uint32_t uiEcIdc; | 1420 | uint32_t uiEcIdc; |
| 1394 | uint32_t uiGet; | 1421 | uint32_t uiGet; |
| 1395 | EncodeDecodeFileParamBase p = GetParam(); | 1422 | EncodeDecodeFileParamBase p = GetParam(); |
| 1396 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1423 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1397 | param_.iSpatialLayerNum = 1; | 1424 | param_.iSpatialLayerNum = 1; |
| 1398 | encoder_->Uninitialize(); | 1425 | encoder_->Uninitialize(); |
| 1399 | int rv = encoder_->InitializeExt (¶m_); | 1426 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -1473,7 +1500,7 @@ TEST_F (EncodeDecodeTestAPI, SetOptionECIDC_SpecificFrameChange) { · 73 unmodified lines | |||
| 1473 | uint32_t uiEcIdc; | 1500 | uint32_t uiEcIdc; |
| 1474 | uint32_t uiGet; | 1501 | uint32_t uiGet; |
| 1475 | EncodeDecodeFileParamBase p = kFileParamArray[0]; | 1502 | EncodeDecodeFileParamBase p = kFileParamArray[0]; |
| 1476 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate); | 1503 | prepareParam (1, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1477 | param_.iSpatialLayerNum = 1; | 1504 | param_.iSpatialLayerNum = 1; |
| 1478 | encoder_->Uninitialize(); | 1505 | encoder_->Uninitialize(); |
| 1479 | int rv = encoder_->InitializeExt (¶m_); | 1506 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -1612,7 +1639,7 @@ TEST_F (EncodeDecodeTestAPI, SetOptionECIDC_SpecificSliceChange_IDRLoss) { · 132 unmodified lines | |||
| 1612 | uint32_t uiEcIdc = 2; //default set as SLICE_COPY | 1639 | uint32_t uiEcIdc = 2; //default set as SLICE_COPY |
| 1613 | uint32_t uiGet; | 1640 | uint32_t uiGet; |
| 1614 | EncodeDecodeFileParamBase p = kFileParamArray[0]; | 1641 | EncodeDecodeFileParamBase p = kFileParamArray[0]; |
| 1615 | prepareParam (1, 2, p.width, p.height, p.frameRate); | 1642 | prepareParam (1, 2, p.width, p.height, p.frameRate, ¶m_); |
| 1616 | param_.iSpatialLayerNum = 1; | 1643 | param_.iSpatialLayerNum = 1; |
| 1617 | encoder_->Uninitialize(); | 1644 | encoder_->Uninitialize(); |
| 1618 | int rv = encoder_->InitializeExt (¶m_); | 1645 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -1745,7 +1772,7 @@ TEST_F (EncodeDecodeTestAPI, SetOptionECIDC_SpecificSliceChange_IDRNoLoss) { · 126 unmodified lines | |||
| 1745 | uint32_t uiEcIdc; | 1772 | uint32_t uiEcIdc; |
| 1746 | uint32_t uiGet; | 1773 | uint32_t uiGet; |
| 1747 | EncodeDecodeFileParamBase p = kFileParamArray[0]; | 1774 | EncodeDecodeFileParamBase p = kFileParamArray[0]; |
| 1748 | prepareParam (1, 2, p.width, p.height, p.frameRate); | 1775 | prepareParam (1, 2, p.width, p.height, p.frameRate, ¶m_); |
| 1749 | param_.iSpatialLayerNum = 1; | 1776 | param_.iSpatialLayerNum = 1; |
| 1750 | encoder_->Uninitialize(); | 1777 | encoder_->Uninitialize(); |
| 1751 | int rv = encoder_->InitializeExt (¶m_); | 1778 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -1914,7 +1941,7 @@ TEST_F (EncodeDecodeTestAPI, Engine_SVC_Switch_I) { · 162 unmodified lines | |||
| 1914 | EncodeDecodeFileParamBase p = kSVCSwitch[0]; | 1941 | EncodeDecodeFileParamBase p = kSVCSwitch[0]; |
| 1915 | p.width = p.width << 2; | 1942 | p.width = p.width << 2; |
| 1916 | p.height = p.height << 2; | 1943 | p.height = p.height << 2; |
| 1917 | prepareParam (4, p.slicenum, p.width, p.height, p.frameRate); | 1944 | prepareParam (4, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1918 | param_.iTemporalLayerNum = (rand() % 4) + 1; | 1945 | param_.iTemporalLayerNum = (rand() % 4) + 1; |
| 1919 | param_.iSpatialLayerNum = 4; | 1946 | param_.iSpatialLayerNum = 4; |
| 1920 | encoder_->Uninitialize(); | 1947 | encoder_->Uninitialize(); |
| @@ -1979,7 +2006,7 @@ TEST_F (EncodeDecodeTestAPI, Engine_SVC_Switch_P) { · 58 unmodified lines | |||
| 1979 | int iLastDid = 0; | 2006 | int iLastDid = 0; |
| 1980 | p.width = p.width << 2; | 2007 | p.width = p.width << 2; |
| 1981 | p.height = p.height << 2; | 2008 | p.height = p.height << 2; |
| 1982 | prepareParam (4, p.slicenum, p.width, p.height, p.frameRate); | 2009 | prepareParam (4, p.slicenum, p.width, p.height, p.frameRate, ¶m_); |
| 1983 | param_.iTemporalLayerNum = (rand() % 4) + 1; | 2010 | param_.iTemporalLayerNum = (rand() % 4) + 1; |
| 1984 | param_.iSpatialLayerNum = 4; | 2011 | param_.iSpatialLayerNum = 4; |
| 1985 | encoder_->Uninitialize(); | 2012 | encoder_->Uninitialize(); |
| @@ -2065,7 +2092,7 @@ TEST_F (EncodeDecodeTestAPI, SetOptionEncParamExt) { · 79 unmodified lines | |||
| 2065 | int iEncFrameNum = WelsClip3 ((rand() % ENCODE_FRAME_NUM) + 1, 1, ENCODE_FRAME_NUM); | 2092 | int iEncFrameNum = WelsClip3 ((rand() % ENCODE_FRAME_NUM) + 1, 1, ENCODE_FRAME_NUM); |
| 2066 | int iSliceNum = 1; | 2093 | int iSliceNum = 1; |
| 2067 | encoder_->GetDefaultParams (¶m_); | 2094 | encoder_->GetDefaultParams (¶m_); |
| 2068 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate); | 2095 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, ¶m_); |
| 2069 | 2096 | ||
| 2070 | int rv = encoder_->InitializeExt (¶m_); | 2097 | int rv = encoder_->InitializeExt (¶m_); |
| 2071 | ASSERT_TRUE (rv == cmResultSuccess); | 2098 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -2128,8 +2155,8 @@ class DecodeCrashTestAPI : public EncodeDecodeTestBase { · 56 unmodified lines | |||
| 2128 | ASSERT_TRUE (ucBuf_ == NULL); | 2155 | ASSERT_TRUE (ucBuf_ == NULL); |
| 2129 | } | 2156 | } |
| 2130 | 2157 | ||
| 2131 | void prepareParam (int iLayerNum, int iSliceNum, int width, int height, float framerate) { | 2158 | void prepareParam (int iLayerNum, int iSliceNum, int width, int height, float framerate, SEncParamExt* pParam) { |
| 2132 | EncodeDecodeTestBase::prepareParam (iLayerNum, iSliceNum, width, height, framerate); | 2159 | EncodeDecodeTestBase::prepareParam (iLayerNum, iSliceNum, width, height, framerate, pParam); |
| 2133 | } | 2160 | } |
| 2134 | 2161 | ||
| 2135 | void prepareEncDecParam (const EncodeDecodeFileParamBase EncDecFileParam); | 2162 | void prepareEncDecParam (const EncodeDecodeFileParamBase EncDecFileParam); |
| @@ -2203,11 +2230,11 @@ TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { · 67 unmodified lines | |||
| 2203 | int iSeed = rand() % 3; //3 indicates the length of kParamArray[] used in the following | 2230 | int iSeed = rand() % 3; //3 indicates the length of kParamArray[] used in the following |
| 2204 | EncodeDecodeParamBase p = kParamArray[iSeed]; | 2231 | EncodeDecodeParamBase p = kParamArray[iSeed]; |
| 2205 | //Initialize Encoder | 2232 | //Initialize Encoder |
| 2206 | prepareParam (1, 1, p.width, p.height, p.frameRate); | 2233 | prepareParam (1, 1, p.width, p.height, p.frameRate, ¶m_); |
| 2207 | param_.iRCMode = RC_BITRATE_MODE; | 2234 | param_.iRCMode = RC_BITRATE_MODE; |
| 2208 | param_.iTargetBitrate = p.iTarBitrate; | 2235 | param_.iTargetBitrate = p.iTarBitrate; |
| 2209 | param_.uiIntraPeriod = 0; | 2236 | param_.uiIntraPeriod = 0; |
| 2210 | param_.bEnableSpsPpsIdAddition = true; | 2237 | param_.iSpsPpsIdStrategy = INCREASING_ID; |
| 2211 | param_.bEnableBackgroundDetection = true; | 2238 | param_.bEnableBackgroundDetection = true; |
| 2212 | param_.bEnableSceneChangeDetect = true; | 2239 | param_.bEnableSceneChangeDetect = true; |
| 2213 | param_.bPrefixNalAddingCtrl = true; | 2240 | param_.bPrefixNalAddingCtrl = true; |
| @@ -2398,7 +2425,7 @@ TEST_F (DecodeParseAPI, ParseOnly_General) { · 184 unmodified lines | |||
| 2398 | p.height = iHeight_; | 2425 | p.height = iHeight_; |
| 2399 | p.frameRate = kiFrameRate; | 2426 | p.frameRate = kiFrameRate; |
| 2400 | p.numframes = kiFrameNum; | 2427 | p.numframes = kiFrameNum; |
| 2401 | prepareParam (kiTotalLayer, kiSliceNum, p.width, p.height, p.frameRate); | 2428 | prepareParam (kiTotalLayer, kiSliceNum, p.width, p.height, p.frameRate, ¶m_); |
| 2402 | param_.iSpatialLayerNum = kiTotalLayer; | 2429 | param_.iSpatialLayerNum = kiTotalLayer; |
| 2403 | encoder_->Uninitialize(); | 2430 | encoder_->Uninitialize(); |
| 2404 | int rv = encoder_->InitializeExt (¶m_); | 2431 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -2475,7 +2502,7 @@ TEST_F (DecodeParseAPI, ParseOnly_SpecSliceLoss) { · 70 unmodified lines | |||
| 2475 | p.height = iHeight_; | 2502 | p.height = iHeight_; |
| 2476 | p.frameRate = kiFrameRate; | 2503 | p.frameRate = kiFrameRate; |
| 2477 | p.numframes = 5; | 2504 | p.numframes = 5; |
| 2478 | prepareParam (iLayerNum, iSliceNum, p.width, p.height, p.frameRate); | 2505 | prepareParam (iLayerNum, iSliceNum, p.width, p.height, p.frameRate, ¶m_); |
| 2479 | param_.iSpatialLayerNum = iLayerNum; | 2506 | param_.iSpatialLayerNum = iLayerNum; |
| 2480 | encoder_->Uninitialize(); | 2507 | encoder_->Uninitialize(); |
| 2481 | int rv = encoder_->InitializeExt (¶m_); | 2508 | int rv = encoder_->InitializeExt (¶m_); |
| @@ -2525,3 +2552,434 @@ TEST_F (DecodeParseAPI, ParseOnly_SpecSliceLoss) { · 43 unmodified lines | |||
| 2525 | } //while | 2552 | } //while |
| 2526 | } | 2553 | } |
| 2527 | 2554 | ||
| 2555 | //#define DEBUG_FILE_SAVE2 | ||
| 2556 | TEST_F (EncodeDecodeTestAPI, ParameterSetStrategy_SPS_LISTING_AND_PPS_INCREASING1) { | ||
| 2557 | |||
| 2558 | int iWidth = GetRandWidth(); | ||
| 2559 | int iHeight = GetRandHeight(); | ||
| 2560 | float fFrameRate = rand() + 0.5f; | ||
| 2561 | int iEncFrameNum = 0; | ||
| 2562 | int iSpatialLayerNum = 1; | ||
| 2563 | int iSliceNum = 1; | ||
| 2564 | |||
| 2565 | // prepare params | ||
| 2566 | SEncParamExt sParam1; | ||
| 2567 | SEncParamExt sParam2; | ||
| 2568 | SEncParamExt sParam3; | ||
| 2569 | encoder_->GetDefaultParams (&sParam1); | ||
| 2570 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, &sParam1); | ||
| 2571 | sParam1.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2572 | //prepare param2 | ||
| 2573 | memcpy (&sParam2, &sParam1, sizeof (SEncParamExt)); | ||
| 2574 | while (sParam2.iPicWidth == sParam1.iPicWidth) { | ||
| 2575 | sParam2.iPicWidth = GetRandWidth(); | ||
| 2576 | } | ||
| 2577 | prepareParam (iSpatialLayerNum, iSliceNum, sParam2.iPicWidth, sParam2.iPicHeight, fFrameRate, &sParam2); | ||
| 2578 | sParam2.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2579 | //prepare param3 | ||
| 2580 | memcpy (&sParam3, &sParam1, sizeof (SEncParamExt)); | ||
| 2581 | while (sParam3.iPicHeight == sParam1.iPicHeight) { | ||
| 2582 | sParam3.iPicHeight = GetRandHeight(); | ||
| 2583 | } | ||
| 2584 | prepareParam (iSpatialLayerNum, iSliceNum, sParam3.iPicWidth, sParam3.iPicHeight, fFrameRate, &sParam3); | ||
| 2585 | sParam3.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2586 | |||
| 2587 | //prepare output if needed | ||
| 2588 | FILE* fEnc = NULL; | ||
| 2589 | #ifdef DEBUG_FILE_SAVE2 | ||
| 2590 | fEnc = fopen ("enc2.264", "wb"); | ||
| 2591 | #endif | ||
| 2592 | |||
| 2593 | // Test part#1 | ||
| 2594 | // step#1: pParam1 | ||
| 2595 | //int TraceLevel = WELS_LOG_INFO; | ||
| 2596 | //encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &TraceLevel); | ||
| 2597 | int rv = encoder_->InitializeExt (&sParam1); | ||
| 2598 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2599 | sParam1.iPicHeight; | ||
| 2600 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2601 | |||
| 2602 | // new IDR | ||
| 2603 | rv = encoder_->ForceIntraFrame (true); | ||
| 2604 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2605 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2606 | |||
| 2607 | // step#2: pParam2 | ||
| 2608 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2609 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption: rv = " << rv << " at " << sParam2.iPicWidth << "x" << | ||
| 2610 | sParam2.iPicHeight; | ||
| 2611 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2612 | |||
| 2613 | // new IDR | ||
| 2614 | rv = encoder_->ForceIntraFrame (true); | ||
| 2615 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2616 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2617 | |||
| 2618 | // step#3: back to pParam1 | ||
| 2619 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam1); | ||
| 2620 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2621 | sParam1.iPicHeight; | ||
| 2622 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2623 | |||
| 2624 | // step#4: back to pParam2 | ||
| 2625 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2626 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv << sParam2.iPicWidth << sParam2.iPicHeight; | ||
| 2627 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2628 | |||
| 2629 | #ifdef DEBUG_FILE_SAVE2 | ||
| 2630 | fclose (fEnc); | ||
| 2631 | #endif | ||
| 2632 | rv = encoder_->Uninitialize(); | ||
| 2633 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2634 | |||
| 2635 | // Test part#2 | ||
| 2636 | // step#1: pParam1 | ||
| 2637 | rv = encoder_->InitializeExt (&sParam1); | ||
| 2638 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt Failed: rv = " << rv; | ||
| 2639 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2640 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv; | ||
| 2641 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam3); | ||
| 2642 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam3: rv = " << rv; | ||
| 2643 | |||
| 2644 | #ifdef DEBUG_FILE_SAVE2 | ||
| 2645 | fEnc = fopen ("enc3.264", "wb"); | ||
| 2646 | #endif | ||
| 2647 | iEncFrameNum = 0; | ||
| 2648 | EncDecOneFrame (sParam3.iPicWidth, sParam3.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2649 | |||
| 2650 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2651 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv; | ||
| 2652 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2653 | |||
| 2654 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam1); | ||
| 2655 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv; | ||
| 2656 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2657 | |||
| 2658 | #ifdef DEBUG_FILE_SAVE2 | ||
| 2659 | fclose (fEnc); | ||
| 2660 | #endif | ||
| 2661 | rv = encoder_->Uninitialize(); | ||
| 2662 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2663 | } | ||
| 2664 | |||
| 2665 | #define DEBUG_FILE_SAVE5 | ||
| 2666 | TEST_F (EncodeDecodeTestAPI, ParameterSetStrategy_SPS_LISTING_AND_PPS_INCREASING2) { | ||
| 2667 | //usage 3: 2 Params with different num_ref, encode IDR0, P1, IDR2; | ||
| 2668 | //the bs will show two SPS and different PPS | ||
| 2669 | |||
| 2670 | int iWidth = GetRandWidth(); | ||
| 2671 | int iHeight = GetRandHeight(); | ||
| 2672 | float fFrameRate = rand() + 0.5f; | ||
| 2673 | int iEncFrameNum = 0; | ||
| 2674 | int iSpatialLayerNum = 1; | ||
| 2675 | int iSliceNum = 1; | ||
| 2676 | |||
| 2677 | // prepare params | ||
| 2678 | SEncParamExt sParam1; | ||
| 2679 | SEncParamExt sParam2; | ||
| 2680 | encoder_->GetDefaultParams (&sParam1); | ||
| 2681 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, &sParam1); | ||
| 2682 | sParam1.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2683 | sParam1.iTemporalLayerNum = 1; | ||
| 2684 | //prepare param2 | ||
| 2685 | memcpy (&sParam2, &sParam1, sizeof (SEncParamExt)); | ||
| 2686 | prepareParam (iSpatialLayerNum, iSliceNum, sParam2.iPicWidth, sParam2.iPicHeight, fFrameRate, &sParam2); | ||
| 2687 | sParam2.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2688 | sParam2.iTemporalLayerNum = 3; | ||
| 2689 | |||
| 2690 | //prepare output if needed | ||
| 2691 | FILE* fEnc = NULL; | ||
| 2692 | #ifdef DEBUG_FILE_SAVE5 | ||
| 2693 | fEnc = fopen ("encID2.264", "wb"); | ||
| 2694 | #endif | ||
| 2695 | |||
| 2696 | // step#1: pParam1 | ||
| 2697 | int rv = encoder_->InitializeExt (&sParam1); | ||
| 2698 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2699 | sParam1.iPicHeight; | ||
| 2700 | |||
| 2701 | // step#2: pParam2 | ||
| 2702 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2703 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv; | ||
| 2704 | |||
| 2705 | // step#3: set back to pParam1, with a smaller num_ref, it still uses the previous SPS | ||
| 2706 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam1); | ||
| 2707 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam1: rv = " << rv; | ||
| 2708 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2709 | |||
| 2710 | // new IDR, PPS increases | ||
| 2711 | rv = encoder_->ForceIntraFrame (true); | ||
| 2712 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2713 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2714 | |||
| 2715 | rv = encoder_->Uninitialize(); | ||
| 2716 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2717 | |||
| 2718 | #ifdef DEBUG_FILE_SAVE5 | ||
| 2719 | fclose (fEnc); | ||
| 2720 | #endif | ||
| 2721 | } | ||
| 2722 | |||
| 2723 | TEST_F (EncodeDecodeTestAPI, ParameterSetStrategy_SPS_LISTING_AND_PPS_INCREASING3) { | ||
| 2724 | |||
| 2725 | int iWidth = GetRandWidth(); | ||
| 2726 | int iHeight = GetRandHeight(); | ||
| 2727 | float fFrameRate = rand() + 0.5f; | ||
| 2728 | int iEncFrameNum = 0; | ||
| 2729 | int iSpatialLayerNum = 1; | ||
| 2730 | int iSliceNum = 1; | ||
| 2731 | |||
| 2732 | // prepare params | ||
| 2733 | SEncParamExt sParam1; | ||
| 2734 | SEncParamExt sParam2; | ||
| 2735 | encoder_->GetDefaultParams (&sParam1); | ||
| 2736 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, &sParam1); | ||
| 2737 | sParam1.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2738 | |||
| 2739 | //prepare output if needed | ||
| 2740 | FILE* fEnc = NULL; | ||
| 2741 | #ifdef DEBUG_FILE_SAVE2 | ||
| 2742 | fEnc = fopen ("enc4.264", "wb"); | ||
| 2743 | #endif | ||
| 2744 | |||
| 2745 | // step#1: pParam1 | ||
| 2746 | int rv = encoder_->InitializeExt (&sParam1); | ||
| 2747 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt Failed: rv = " << rv; | ||
| 2748 | |||
| 2749 | int max_count = 65; // make it more then twice as MAX_SPS_COUNT | ||
| 2750 | std::vector<int> vWidthTable; | ||
| 2751 | vWidthTable.push_back (sParam1.iPicWidth); | ||
| 2752 | |||
| 2753 | std::vector<int>::iterator vWidthTableIt; | ||
| 2754 | for (int times = 0; times < max_count; times++) { | ||
| 2755 | //prepare param2 | ||
| 2756 | memcpy (&sParam2, &sParam1, sizeof (SEncParamExt)); | ||
| 2757 | do { | ||
| 2758 | sParam2.iPicWidth = GetRandWidth(); | ||
| 2759 | vWidthTableIt = std::find (vWidthTable.begin(), vWidthTable.end(), sParam2.iPicWidth); | ||
| 2760 | } while (vWidthTableIt == vWidthTable.end()); | ||
| 2761 | vWidthTable.push_back (sParam2.iPicWidth); | ||
| 2762 | prepareParam (iSpatialLayerNum, iSliceNum, sParam2.iPicWidth, sParam2.iPicHeight, fFrameRate, &sParam2); | ||
| 2763 | sParam2.iSpsPpsIdStrategy = SPS_LISTING_AND_PPS_INCREASING; | ||
| 2764 | |||
| 2765 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2766 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv << ", sParam2.iPicWidth=" << | ||
| 2767 | sParam2.iPicWidth; | ||
| 2768 | } // end of setting loop | ||
| 2769 | |||
| 2770 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2771 | |||
| 2772 | #ifdef DEBUG_FILE_SAVE2 | ||
| 2773 | fclose (fEnc); | ||
| 2774 | #endif | ||
| 2775 | rv = encoder_->Uninitialize(); | ||
| 2776 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2777 | } | ||
| 2778 | |||
| 2779 | //#define DEBUG_FILE_SAVE6 | ||
| 2780 | TEST_F (EncodeDecodeTestAPI, ParameterSetStrategy_SPS_PPS_LISTING1) { | ||
| 2781 | //usage 1: 1 resolution Params, encode IDR0, P1, IDR2; | ||
| 2782 | //the bs will show same SPS and different PPS | ||
| 2783 | // PPS: pic_parameter_set_id 1 ( 0) | ||
| 2784 | // PPS: seq_parameter_set_id 1 ( 0) | ||
| 2785 | // PPS: pic_parameter_set_id 010 ( 1) | ||
| 2786 | // PPS: seq_parameter_set_id 1 ( 0) | ||
| 2787 | // SH: slice_type 011 ( 2) | ||
| 2788 | // SH: pic_parameter_set_id 1 ( 0) | ||
| 2789 | // SH: slice_type 1 ( 0) | ||
| 2790 | // SH: pic_parameter_set_id 1 ( 0) | ||
| 2791 | // SH: slice_type 011 ( 2) | ||
| 2792 | // SH: pic_parameter_set_id 010 ( 1) | ||
| 2793 | int iWidth = GetRandWidth(); | ||
| 2794 | int iHeight = GetRandHeight(); | ||
| 2795 | float fFrameRate = rand() + 0.5f; | ||
| 2796 | int iEncFrameNum = 0; | ||
| 2797 | int iSpatialLayerNum = 1; | ||
| 2798 | int iSliceNum = 1; | ||
| 2799 | |||
| 2800 | // prepare params | ||
| 2801 | SEncParamExt sParam1; | ||
| 2802 | encoder_->GetDefaultParams (&sParam1); | ||
| 2803 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, &sParam1); | ||
| 2804 | sParam1.iSpsPpsIdStrategy = SPS_PPS_LISTING; | ||
| 2805 | |||
| 2806 | //prepare output if needed | ||
| 2807 | FILE* fEnc = NULL; | ||
| 2808 | #ifdef DEBUG_FILE_SAVE6 | ||
| 2809 | fEnc = fopen ("encLIST1.264", "wb"); | ||
| 2810 | #endif | ||
| 2811 | |||
| 2812 | // step#1: pParam1 | ||
| 2813 | int rv = encoder_->InitializeExt (&sParam1); | ||
| 2814 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2815 | sParam1.iPicHeight; | ||
| 2816 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2817 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2818 | |||
| 2819 | // new IDR | ||
| 2820 | rv = encoder_->ForceIntraFrame (true); | ||
| 2821 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2822 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2823 | |||
| 2824 | rv = encoder_->Uninitialize(); | ||
| 2825 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2826 | |||
| 2827 | #ifdef DEBUG_FILE_SAVE6 | ||
| 2828 | fclose (fEnc); | ||
| 2829 | #endif | ||
| 2830 | } | ||
| 2831 | |||
| 2832 | TEST_F (EncodeDecodeTestAPI, ParameterSetStrategy_SPS_PPS_LISTING2) { | ||
| 2833 | //usage 2: 2 resolution Params, encode IDR0, IDR1, IDR2; | ||
| 2834 | //the bs will show two SPS and different PPS | ||
| 2835 | // === SPS LIST === | ||
| 2836 | //SPS: seq_parameter_set_id 1 ( 0) -- PARAM1 | ||
| 2837 | //SPS: seq_parameter_set_id 010 ( 1) -- PARAM2 | ||
| 2838 | // === PPS LIST === | ||
| 2839 | //PPS: pic_parameter_set_id 1 ( 0) | ||
| 2840 | //PPS: seq_parameter_set_id 1 ( 0) | ||
| 2841 | //PPS: pic_parameter_set_id 010 ( 1) | ||
| 2842 | //PPS: seq_parameter_set_id 010 ( 1) | ||
| 2843 | //PPS: pic_parameter_set_id 011 ( 2) -- PPS2 - SPS0 | ||
| 2844 | //PPS: seq_parameter_set_id 1 ( 0) | ||
| 2845 | //PPS: pic_parameter_set_id 00100 ( 3) -- PPS3 - SPS1 | ||
| 2846 | //PPS: seq_parameter_set_id 010 ( 1) | ||
| 2847 | //PPS: pic_parameter_set_id 00101 ( 4) -- PPS4 - SPS0 | ||
| 2848 | //PPS: seq_parameter_set_id 1 ( 0) | ||
| 2849 | // === VCL LAYER === | ||
| 2850 | //SH: slice_type 011 ( 2) -- PARAM2 | ||
| 2851 | //SH: pic_parameter_set_id 010 ( 1) -- PPS1 - SPS1 - PARAM2 | ||
| 2852 | //SH: slice_type 011 ( 2) -- PARAM1 | ||
| 2853 | //SH: pic_parameter_set_id 011 ( 2) -- PPS2 - SPS0 - PARAM1 | ||
| 2854 | //SH: slice_type 011 ( 2) -- PARAM1 | ||
| 2855 | //SH: pic_parameter_set_id 00101 ( 4) -- PPS4 - SPS0 - PARAM1 | ||
| 2856 | |||
| 2857 | int iWidth = GetRandWidth(); | ||
| 2858 | int iHeight = GetRandHeight(); | ||
| 2859 | float fFrameRate = rand() + 0.5f; | ||
| 2860 | int iEncFrameNum = 0; | ||
| 2861 | int iSpatialLayerNum = 1; | ||
| 2862 | int iSliceNum = 1; | ||
| 2863 | |||
| 2864 | // prepare params | ||
| 2865 | SEncParamExt sParam1; | ||
| 2866 | SEncParamExt sParam2; | ||
| 2867 | encoder_->GetDefaultParams (&sParam1); | ||
| 2868 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, &sParam1); | ||
| 2869 | sParam1.iSpsPpsIdStrategy = SPS_PPS_LISTING; | ||
| 2870 | //prepare param2 | ||
| 2871 | memcpy (&sParam2, &sParam1, sizeof (SEncParamExt)); | ||
| 2872 | while (sParam2.iPicWidth == sParam1.iPicWidth) { | ||
| 2873 | sParam2.iPicWidth = GetRandWidth(); | ||
| 2874 | } | ||
| 2875 | prepareParam (iSpatialLayerNum, iSliceNum, sParam2.iPicWidth, sParam2.iPicHeight, fFrameRate, &sParam2); | ||
| 2876 | sParam2.iSpsPpsIdStrategy = SPS_PPS_LISTING; | ||
| 2877 | |||
| 2878 | //prepare output if needed | ||
| 2879 | FILE* fEnc = NULL; | ||
| 2880 | #ifdef DEBUG_FILE_SAVE5 | ||
| 2881 | fEnc = fopen ("encLIST2.264", "wb"); | ||
| 2882 | #endif | ||
| 2883 | |||
| 2884 | // step#1: pParam1 | ||
| 2885 | int rv = encoder_->InitializeExt (&sParam1); | ||
| 2886 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2887 | sParam1.iPicHeight; | ||
| 2888 | |||
| 2889 | // step#2: pParam2 | ||
| 2890 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2891 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv; | ||
| 2892 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2893 | |||
| 2894 | // step#3: back to pParam1, SHOULD NOT encounter ERROR | ||
| 2895 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam1); | ||
| 2896 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2897 | sParam1.iPicHeight; | ||
| 2898 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2899 | |||
| 2900 | // new IDR | ||
| 2901 | rv = encoder_->ForceIntraFrame (true); | ||
| 2902 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2903 | EncDecOneFrame (sParam1.iPicWidth, sParam1.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2904 | |||
| 2905 | rv = encoder_->Uninitialize(); | ||
| 2906 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2907 | |||
| 2908 | #ifdef DEBUG_FILE_SAVE5 | ||
| 2909 | fclose (fEnc); | ||
| 2910 | #endif | ||
| 2911 | } | ||
| 2912 | |||
| 2913 | TEST_F (EncodeDecodeTestAPI, ParameterSetStrategy_SPS_PPS_LISTING3) { | ||
| 2914 | |||
| 2915 | int iWidth = GetRandWidth(); | ||
| 2916 | int iHeight = GetRandHeight(); | ||
| 2917 | float fFrameRate = rand() + 0.5f; | ||
| 2918 | int iEncFrameNum = 0; | ||
| 2919 | int iSpatialLayerNum = 1; | ||
| 2920 | int iSliceNum = 1; | ||
| 2921 | |||
| 2922 | // prepare params | ||
| 2923 | SEncParamExt sParam1; | ||
| 2924 | SEncParamExt sParam2; | ||
| 2925 | SEncParamExt sParam3; | ||
| 2926 | encoder_->GetDefaultParams (&sParam1); | ||
| 2927 | prepareParam (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, &sParam1); | ||
| 2928 | sParam1.iSpsPpsIdStrategy = SPS_PPS_LISTING; | ||
| 2929 | //prepare param2 | ||
| 2930 | memcpy (&sParam2, &sParam1, sizeof (SEncParamExt)); | ||
| 2931 | while (sParam2.iPicWidth == sParam1.iPicWidth) { | ||
| 2932 | sParam2.iPicWidth = GetRandWidth(); | ||
| 2933 | } | ||
| 2934 | prepareParam (iSpatialLayerNum, iSliceNum, sParam2.iPicWidth, sParam2.iPicHeight, fFrameRate, &sParam2); | ||
| 2935 | sParam2.iSpsPpsIdStrategy = SPS_PPS_LISTING; | ||
| 2936 | //prepare param3 | ||
| 2937 | memcpy (&sParam3, &sParam1, sizeof (SEncParamExt)); | ||
| 2938 | while (sParam3.iPicWidth == sParam1.iPicWidth || sParam3.iPicWidth == sParam2.iPicWidth) { | ||
| 2939 | sParam3.iPicWidth = GetRandWidth(); | ||
| 2940 | } | ||
| 2941 | prepareParam (iSpatialLayerNum, iSliceNum, sParam3.iPicWidth, sParam3.iPicHeight, fFrameRate, &sParam3); | ||
| 2942 | sParam3.iSpsPpsIdStrategy = SPS_PPS_LISTING; | ||
| 2943 | |||
| 2944 | //prepare output if needed | ||
| 2945 | FILE* fEnc = NULL; | ||
| 2946 | #ifdef DEBUG_FILE_SAVE5 | ||
| 2947 | fEnc = fopen ("enc4.264", "wb"); | ||
| 2948 | #endif | ||
| 2949 | |||
| 2950 | // step#1: ordinary encoding | ||
| 2951 | int rv = encoder_->InitializeExt (&sParam1); | ||
| 2952 | ASSERT_TRUE (rv == cmResultSuccess) << "InitializeExt: rv = " << rv << " at " << sParam1.iPicWidth << "x" << | ||
| 2953 | sParam1.iPicHeight; | ||
| 2954 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam2); | ||
| 2955 | ASSERT_TRUE (rv == cmResultSuccess) << "SetOption Failed sParam2: rv = " << rv; | ||
| 2956 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2957 | |||
| 2958 | // step#2: set strategy for success | ||
| 2959 | int32_t iNewStra = SPS_PPS_LISTING; | ||
| 2960 | rv = encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iNewStra); | ||
| 2961 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv << " iNewStra=" << iNewStra; | ||
| 2962 | |||
| 2963 | // step#3: setting new strategy, SHOULD encounter ERROR | ||
| 2964 | unsigned int TraceLevel = WELS_LOG_QUIET; | ||
| 2965 | rv = encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &TraceLevel); | ||
| 2966 | ASSERT_TRUE (rv == cmResultSuccess); | ||
| 2967 | iNewStra = CONSTANT_ID; | ||
| 2968 | rv = encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iNewStra); | ||
| 2969 | ASSERT_TRUE (rv != cmResultSuccess); | ||
| 2970 | |||
| 2971 | EncDecOneFrame (sParam2.iPicWidth, sParam2.iPicHeight, iEncFrameNum++, fEnc); | ||
| 2972 | |||
| 2973 | // step#4: pParam3, SHOULD encounter ERROR | ||
| 2974 | rv = encoder_->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, &sParam3); | ||
| 2975 | ASSERT_TRUE (rv != cmResultSuccess) << "SetOption: rv = " << rv << " at " << sParam3.iPicWidth << "x" << | ||
| 2976 | sParam3.iPicHeight; | ||
| 2977 | |||
| 2978 | rv = encoder_->Uninitialize(); | ||
| 2979 | ASSERT_TRUE (rv == cmResultSuccess) << "rv = " << rv; | ||
| 2980 | |||
| 2981 | #ifdef DEBUG_FILE_SAVE5 | ||
| 2982 | fclose (fEnc); | ||
| 2983 | #endif | ||
| 2984 | } | ||
| 2985 | |||