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 | +} | |