Showing the changes to test/api/encode_decode_api_test.cpp (1 of 1 file). Show all
Unified · Split
| @@ -2316,14 +2316,20 @@ struct EncodeDecodeParamBase { · 2315 unmodified lines | ||
| 2316 | 2316 | int iTarBitrate; |
| 2317 | 2317 | }; |
| 2318 | 2318 | |
| 2319 | − | |
| 2319 | +#define NUM_OF_POSSIBLE_RESOLUTION (9) | |
| 2320 | 2320 | static const EncodeDecodeParamBase kParamArray[] = { |
| 2321 | 2321 | {160, 90, 6.0f, 250000}, |
| 2322 | + {90, 160, 6.0f, 250000}, | |
| 2322 | 2323 | {320, 180, 12.0f, 500000}, |
| 2324 | + {180, 320, 12.0f, 500000}, | |
| 2325 | + {480, 270, 12.0f, 600000}, | |
| 2326 | + {270, 480, 12.0f, 600000}, | |
| 2323 | 2327 | {640, 360, 24.0f, 800000}, |
| 2328 | + {360, 640, 24.0f, 800000}, | |
| 2329 | + {1280, 720, 24.0f, 1000000}, | |
| 2324 | 2330 | }; |
| 2325 | 2331 | |
| 2326 | −//#define DEBUG_FILE_SAVE | |
| 2332 | +//#define DEBUG_FILE_SAVE_CRA | |
| 2327 | 2333 | TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { |
| 2328 | 2334 | uint32_t uiGet; |
| 2329 | 2335 | encoder_->Uninitialize(); |
| @@ -2332,33 +2338,62 @@ TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { · 2 unmodified lines | ||
| 2332 | 2338 | unsigned int uiLoopRound = 0; |
| 2333 | 2339 | unsigned char* pucBuf = ucBuf_; |
| 2334 | 2340 | int iDecAuSize; |
| 2335 | −#ifdef DEBUG_FILE_SAVE | |
| 2341 | +#ifdef DEBUG_FILE_SAVE_CRA | |
| 2336 | 2342 | //open file to save tested BS |
| 2337 | − FILE* f = fopen ("test_crash.264", "wb"); | |
| 2343 | + FILE* fDataFile = fopen ("test_crash.264", "wb"); | |
| 2344 | + FILE* fLenFile = fopen ("test_crash_len.log", "w"); | |
| 2338 | 2345 | int iFileSize = 0; |
| 2339 | 2346 | #endif |
| 2340 | 2347 | |
| 2348 | + //set eCurStrategy for one test | |
| 2349 | + EParameterSetStrategy eCurStrategy = CONSTANT_ID; | |
| 2350 | + switch (rand() % 7) { | |
| 2351 | + case 1: | |
| 2352 | + eCurStrategy = INCREASING_ID; | |
| 2353 | + break; | |
| 2354 | + case 2: | |
| 2355 | + eCurStrategy = SPS_LISTING; | |
| 2356 | + break; | |
| 2357 | + case 3: | |
| 2358 | + eCurStrategy = SPS_LISTING_AND_PPS_INCREASING; | |
| 2359 | + break; | |
| 2360 | + case 6: | |
| 2361 | + eCurStrategy = SPS_PPS_LISTING; | |
| 2362 | + break; | |
| 2363 | + default: | |
| 2364 | + //using the initial value | |
| 2365 | + break; | |
| 2366 | + } | |
| 2367 | + | |
| 2341 | 2368 | do { |
| 2342 | 2369 | int iTotalFrameNum = (rand() % 100) + 1; |
| 2343 | − int iSeed = rand() % 3; //3 indicates the length of kParamArray[] used in the following | |
| 2370 | + int iSeed = rand() % NUM_OF_POSSIBLE_RESOLUTION; | |
| 2344 | 2371 | EncodeDecodeParamBase p = kParamArray[iSeed]; |
| 2372 | +#ifdef DEBUG_FILE_SAVE_CRA | |
| 2373 | + printf ("using param set %d in loop %d\n", iSeed, uiLoopRound); | |
| 2374 | +#endif | |
| 2345 | 2375 | //Initialize Encoder |
| 2346 | 2376 | prepareParam (1, 1, p.width, p.height, p.frameRate, ¶m_); |
| 2347 | − param_.iRCMode = RC_BITRATE_MODE; | |
| 2377 | + param_.iRCMode = RC_TIMESTAMP_MODE; | |
| 2348 | 2378 | param_.iTargetBitrate = p.iTarBitrate; |
| 2349 | 2379 | param_.uiIntraPeriod = 0; |
| 2350 | − param_.eSpsPpsIdStrategy = INCREASING_ID; | |
| 2380 | + param_.eSpsPpsIdStrategy = eCurStrategy; | |
| 2351 | 2381 | param_.bEnableBackgroundDetection = true; |
| 2352 | − param_.bEnableSceneChangeDetect = true; | |
| 2353 | − param_.bPrefixNalAddingCtrl = true; | |
| 2382 | + param_.bEnableSceneChangeDetect = (rand() % 3) ? true : false; | |
| 2383 | + param_.bPrefixNalAddingCtrl = (rand() % 2) ? true : false; | |
| 2354 | 2384 | param_.iEntropyCodingModeFlag = 0; |
| 2355 | 2385 | param_.bEnableFrameSkip = true; |
| 2356 | − param_.uiMaxNalSize = 1400; | |
| 2357 | 2386 | param_.iMultipleThreadIdc = 0; |
| 2358 | 2387 | param_.sSpatialLayers[0].iSpatialBitrate = p.iTarBitrate; |
| 2359 | 2388 | param_.sSpatialLayers[0].iMaxSpatialBitrate = p.iTarBitrate << 1; |
| 2360 | − param_.sSpatialLayers[0].sSliceCfg.uiSliceMode = SM_DYN_SLICE; | |
| 2361 | − param_.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 1000; | |
| 2389 | + param_.sSpatialLayers[0].sSliceCfg.uiSliceMode = (rand() % 2) ? SM_DYN_SLICE : SM_SINGLE_SLICE; | |
| 2390 | + if (param_.sSpatialLayers[0].sSliceCfg.uiSliceMode == SM_DYN_SLICE) { | |
| 2391 | + param_.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 1400; | |
| 2392 | + param_.uiMaxNalSize = 1400; | |
| 2393 | + } else { | |
| 2394 | + param_.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 0; | |
| 2395 | + param_.uiMaxNalSize = 0; | |
| 2396 | + } | |
| 2362 | 2397 | |
| 2363 | 2398 | int rv = encoder_->InitializeExt (¶m_); |
| 2364 | 2399 | ASSERT_TRUE (rv == cmResultSuccess); |
| @@ -2379,11 +2414,11 @@ TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { · 14 unmodified lines | ||
| 2379 | 2414 | prepareEncDecParam (pInput); |
| 2380 | 2415 | while (iIdx++ < iTotalFrameNum) { // loop in frame |
| 2381 | 2416 | EncodeOneFrame(); |
| 2382 | −#ifdef DEBUG_FILE_SAVE | |
| 2417 | +#ifdef DEBUG_FILE_SAVE_CRA | |
| 2383 | 2418 | //reset file if file size large |
| 2384 | 2419 | if ((info.eFrameType == videoFrameTypeIDR) && (iFileSize >= (1 << 25))) { |
| 2385 | − fclose (f); | |
| 2386 | − f = fopen ("test_crash.264", "wb"); | |
| 2420 | + fclose (fDataFile); | |
| 2421 | + fDataFile = fopen ("test_crash.264", "wb"); | |
| 2387 | 2422 | iFileSize = 0; |
| 2388 | 2423 | decoder_->Uninitialize(); |
| 2389 | 2424 | |
| @@ -2411,7 +2446,8 @@ TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { · 21 unmodified lines | ||
| 2411 | 2446 | for (int iNalCnt = 0; iNalCnt < iTotalNalCnt; iNalCnt++) { //loop in NAL |
| 2412 | 2447 | int iPacketSize = pLayerBsInfo->pNalLengthInByte[iNalCnt]; |
| 2413 | 2448 | //packet loss |
| 2414 | − int iLossRate = (rand() % 11); //loss rate among 0 ~ 10% | |
| 2449 | + int iLossRateRange = (uiLoopRound % 100) + 1; //1-100 | |
| 2450 | + int iLossRate = (rand() % iLossRateRange); | |
| 2415 | 2451 | bool bPacketLost = (rand() % 101) > (100 - |
| 2416 | 2452 | iLossRate); // [0, (100-iLossRate)] indicates NO LOSS, (100-iLossRate, 100] indicates LOSS |
| 2417 | 2453 | if (!bPacketLost) { //no loss |
| @@ -2419,15 +2455,29 @@ TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { · 1 unmodified line | ||
| 2419 | 2455 | pucBuf += iPacketSize; |
| 2420 | 2456 | iDecAuSize += iPacketSize; |
| 2421 | 2457 | } |
| 2458 | +#ifdef DEBUG_FILE_SAVE_CRA | |
| 2459 | + else { | |
| 2460 | + printf ("lost packet size=%d at frame-type=%d at loss rate %d (%d)\n", iPacketSize, info.eFrameType, iLossRate, | |
| 2461 | + iLossRateRange); | |
| 2462 | + } | |
| 2463 | +#endif | |
| 2422 | 2464 | //update bs info |
| 2423 | 2465 | pBsBuf += iPacketSize; |
| 2424 | 2466 | } //nal |
| 2425 | 2467 | } //layer |
| 2426 | 2468 | |
| 2427 | −#ifdef DEBUG_FILE_SAVE | |
| 2469 | +#ifdef DEBUG_FILE_SAVE_CRA | |
| 2428 | 2470 | //save to file |
| 2429 | − fwrite (ucBuf_, 1, iDecAuSize, f); | |
| 2471 | + fwrite (ucBuf_, 1, iDecAuSize, fDataFile); | |
| 2472 | + fflush (fDataFile); | |
| 2430 | 2473 | iFileSize += iDecAuSize; |
| 2474 | + | |
| 2475 | + //save to len file | |
| 2476 | + unsigned long ulTmp[4]; | |
| 2477 | + ulTmp[0] = ulTmp[1] = ulTmp[2] = iIdx; | |
| 2478 | + ulTmp[3] = iDecAuSize; | |
| 2479 | + fwrite (ulTmp, sizeof (unsigned long), 4, fLenFile); // index, timeStamp, data size | |
| 2480 | + fflush (fLenFile); | |
| 2431 | 2481 | #endif |
| 2432 | 2482 | |
| 2433 | 2483 | //decode |
| @@ -2443,11 +2493,12 @@ TEST_F (DecodeCrashTestAPI, DecoderCrashTest) { · 9 unmodified lines | ||
| 2443 | 2493 | uiLoopRound ++; |
| 2444 | 2494 | if (uiLoopRound >= (1 << 30)) |
| 2445 | 2495 | uiLoopRound = 0; |
| 2446 | −#ifdef DEBUG_FILE_SAVE | |
| 2496 | +#ifdef DEBUG_FILE_SAVE_CRA | |
| 2447 | 2497 | if (uiLoopRound % 100 == 0) |
| 2448 | 2498 | printf ("run %d times.\n", uiLoopRound); |
| 2449 | 2499 | } while (1); //while (iLoopRound<100); |
| 2450 | − fclose (f); | |
| 2500 | + fclose (fDataFile); | |
| 2501 | + fclose (fLenFile); | |
| 2451 | 2502 | #else |
| 2452 | 2503 | } |
| 2453 | 2504 | while (uiLoopRound < 10); |