Showing the changes to test/api/encode_options_test.cpp (1 of 3 files). Show all
Unified · Split
| @@ -2332,3 +2332,48 @@ TEST_F (EncodeDecodeTestAPI, TemporalLayerChangeDuringEncoding_Specific) { · 2331 unmodified lines | |||
| 2332 | 2332 | ||
| 2333 | } | 2333 | } |
| 2334 | 2334 | ||
| 2335 | TEST_F (EncodeDecodeTestAPI, ENCODER_OPTION_IDR_INTERVAL) { | ||
| 2336 | int iSpatialLayerNum = 1; | ||
| 2337 | int iWidth = WelsClip3 ((((rand() % MAX_WIDTH) >> 1) + 1) << 1, 1 << iSpatialLayerNum, MAX_WIDTH); | ||
| 2338 | int iHeight = WelsClip3 ((((rand() % MAX_HEIGHT) >> 1) + 1) << 1, 1 << iSpatialLayerNum, MAX_HEIGHT); | ||
| 2339 | float fFrameRate = rand() + 0.5f; | ||
| 2340 | int iSliceNum = 1; | ||
| 2341 | encoder_->GetDefaultParams (¶m_); | ||
| 2342 | prepareParamDefault (iSpatialLayerNum, iSliceNum, iWidth, iHeight, fFrameRate, ¶m_); | ||
| 2343 | param_.iTemporalLayerNum = 1; | ||
| 2344 | |||
| 2345 | int iTraceLevel = WELS_LOG_QUIET; | ||
| 2346 | int rv = encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel); | ||
| 2347 | EXPECT_TRUE (rv == cmResultSuccess); | ||
| 2348 | |||
| 2349 | rv = encoder_->InitializeExt (¶m_); | ||
| 2350 | ASSERT_TRUE (rv == cmResultSuccess); | ||
| 2351 | |||
| 2352 | InitialEncDec (param_.iPicWidth, param_.iPicHeight); | ||
| 2353 | EncodeOneFrame (0); | ||
| 2354 | EXPECT_TRUE (info.eFrameType == videoFrameTypeIDR); | ||
| 2355 | |||
| 2356 | int iLastIdrIdx = 0; | ||
| 2357 | int iFrame = 1; | ||
| 2358 | int iTtlAttempt = (rand() % 5) + 2; | ||
| 2359 | for (int iAtt = 0; iAtt < iTtlAttempt; iAtt++) { | ||
| 2360 | int kiTargetIntraPeriod = WelsClip3 ((rand() % ENCODE_FRAME_NUM) - 1, -1, ENCODE_FRAME_NUM); | ||
| 2361 | rv = encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &kiTargetIntraPeriod); | ||
| 2362 | EXPECT_TRUE (rv == cmResultSuccess); | ||
| 2363 | |||
| 2364 | int iEncFrameNum = kiTargetIntraPeriod * 3; | ||
| 2365 | for (int i = 0; i < iEncFrameNum; i++) { | ||
| 2366 | EncodeOneFrame (0); | ||
| 2367 | |||
| 2368 | if ((kiTargetIntraPeriod <= 0) || (((iFrame - iLastIdrIdx) % kiTargetIntraPeriod) == 0)) { | ||
| 2369 | EXPECT_TRUE (info.eFrameType == videoFrameTypeIDR) << "kiTargetIntraPeriod " << kiTargetIntraPeriod << | ||
| 2370 | " info.eFrameType " << info.eFrameType << " Frame " << i; | ||
| 2371 | iLastIdrIdx = iFrame; | ||
| 2372 | } else { | ||
| 2373 | EXPECT_FALSE (info.eFrameType == videoFrameTypeIDR); | ||
| 2374 | } | ||
| 2375 | |||
| 2376 | iFrame ++; | ||
| 2377 | } | ||
| 2378 | } | ||
| 2379 | } | ||