853 lines · 31.6 KB · C++
RawDownload
  PrepareOneSrcFrame();   iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR));   GetValidEncParamBase (&sEncParamBase);  iResult = pPtrEnc->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_BASE, &sEncParamBase);   PrepareOneSrcFrame();   iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));   iResult = pPtrEnc->Uninitialize();  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));} TEST_F (EncoderInterfaceTest, BasicInitializeTestFalse) {  int iResult;  SEncParamBase sEncParamBase;  int uiTraceLevel = WELS_LOG_QUIET;   pPtrEnc->SetOption (ENCODER_OPTION_TRACE_LEVEL, &uiTraceLevel);  //iUsageType  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iUsageType = static_cast<EUsageType> (2);  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   //iPicWidth  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iPicWidth = 0;  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iPicWidth = -1;  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   //TODO: add checking max in interface and then enable this checking  //GetValidEncParamBase(&sEncParamBase);  //sEncParamBase.iPicWidth = rand()+(MAX_WIDTH+1);  //iResult = pPtrEnc->Initialize (&sEncParamBase);  //EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   //iPicHeight  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iPicHeight = 0;  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iPicHeight = -1;  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   //TODO: add checking max in interface and then enable this checking  //GetValidEncParamBase(&sEncParamBase);  //sEncParamBase.iPicWidth = rand()+(MAX_HEIGHT+1);  //iResult = pPtrEnc->Initialize (&sEncParamBase);  //EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   //iTargetBitrate  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iTargetBitrate = 0;  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iTargetBitrate = -1;  iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmInitParaError));   uiTraceLevel = WELS_LOG_ERROR;  pPtrEnc->SetOption (ENCODER_OPTION_TRACE_LEVEL, &uiTraceLevel);} TEST_F (EncoderInterfaceTest, BasicInitializeTestAutoAdjustment) {  SEncParamBase sEncParamBase;   // large fMaxFrameRate  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.fMaxFrameRate = 50000;  EncodeOneFrame (&sEncParamBase);  EXPECT_LE (sEncParamBase.fMaxFrameRate, 30.0);  EXPECT_GE (sEncParamBase.fMaxFrameRate, 1.0);   // fMaxFrameRate = 0  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.fMaxFrameRate = 0;  EncodeOneFrame (&sEncParamBase);  EXPECT_LE (sEncParamBase.fMaxFrameRate, 30.0);  EXPECT_GE (sEncParamBase.fMaxFrameRate, 1.0);   // fMaxFrameRate = -1  GetValidEncParamBase (&sEncParamBase);  sEncParamBase.fMaxFrameRate = -1;  EncodeOneFrame (&sEncParamBase);  EXPECT_LE (sEncParamBase.fMaxFrameRate, 30.0);  EXPECT_GE (sEncParamBase.fMaxFrameRate, 1.0);} TEST_F (EncoderInterfaceTest, ForceIntraFrame) {  SEncParamBase sEncParamBase;  GetValidEncParamBase (&sEncParamBase);   int iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  if (iResult != cmResultSuccess) {    fprintf (stderr, "Unexpected ParamBase? \             iUsageType=%d, Pic=%dx%d, TargetBitrate=%d, iRCMode=%d, fMaxFrameRate=%.1f\n",             sEncParamBase.iUsageType, sEncParamBase.iPicWidth, sEncParamBase.iPicHeight,             sEncParamBase.iTargetBitrate, sEncParamBase.iRCMode, sEncParamBase.fMaxFrameRate);  }   PrepareOneSrcFrame();   bool bIDR = true;  pPtrEnc->ForceIntraFrame (bIDR);  EncodeOneIDRandP (pPtrEnc);   //call next frame to be IDR  pPtrEnc->ForceIntraFrame (bIDR);  EncodeOneIDRandP (pPtrEnc);   pPtrEnc->Uninitialize();  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));} TEST_F (EncoderInterfaceTest, ForceIntraFrameWithTemporal) {  SEncParamExt sEncParamExt;  pPtrEnc->GetDefaultParams (&sEncParamExt);  sEncParamExt.iUsageType = CAMERA_VIDEO_REAL_TIME;  sEncParamExt.iPicWidth = MB_SIZE + abs ((rand() * 2) % (MAX_WIDTH - MB_SIZE));  sEncParamExt.iPicHeight = MB_SIZE + abs ((rand() * 2) % (MAX_HEIGHT - MB_SIZE));  sEncParamExt.iTargetBitrate = rand() + 1; //!=0  int32_t iLevelMaxBitrate = WelsCommon::g_ksLevelLimits[LEVEL_5_0 - 1].uiMaxBR * CpbBrNalFactor;  if (sEncParamExt.iTargetBitrate > iLevelMaxBitrate)    sEncParamExt.iTargetBitrate = iLevelMaxBitrate;  sEncParamExt.iRCMode = RC_BITRATE_MODE; //-1, 0, 1, 2  sEncParamExt.fMaxFrameRate = rand() + 0.5f; //!=0  sEncParamExt.sSpatialLayers[0].iVideoWidth = sEncParamExt.iPicWidth;  sEncParamExt.sSpatialLayers[0].iVideoHeight = sEncParamExt.iPicHeight;  sEncParamExt.sSpatialLayers[0].iSpatialBitrate = sEncParamExt.iTargetBitrate;  int iTargetTemporalLayerNum = rand() % MAX_TEMPORAL_LAYER_NUM;  sEncParamExt.iTemporalLayerNum = (iTargetTemporalLayerNum > 2) ? iTargetTemporalLayerNum : 2;   int iResult = pPtrEnc->InitializeExt (&sEncParamExt);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  if (iResult != cmResultSuccess) {    fprintf (stderr, "Unexpected ParamBase? \             iUsageType=%d, Pic=%dx%d, TargetBitrate=%d, iRCMode=%d, fMaxFrameRate=%.1f\n",             sEncParamExt.iUsageType, sEncParamExt.iPicWidth, sEncParamExt.iPicHeight,             sEncParamExt.iTargetBitrate, sEncParamExt.iRCMode, sEncParamExt.fMaxFrameRate);  }   PrepareOneSrcFrame();   bool bIDR = true;  EncodeOneIDRandP (pPtrEnc);   //call next frame to be IDR  pPtrEnc->ForceIntraFrame (bIDR);  EncodeOneIDRandP (pPtrEnc);   pPtrEnc->Uninitialize();  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));} TEST_F (EncoderInterfaceTest, EncodeParameterSets) {  SEncParamBase sEncParamBase;  GetValidEncParamBase (&sEncParamBase);   int iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  if (iResult != cmResultSuccess) {    fprintf (stderr, "Unexpected ParamBase? \             iUsageType=%d, Pic=%dx%d, TargetBitrate=%d, iRCMode=%d, fMaxFrameRate=%.1f\n",             sEncParamBase.iUsageType, sEncParamBase.iPicWidth, sEncParamBase.iPicHeight,             sEncParamBase.iTargetBitrate, sEncParamBase.iRCMode, sEncParamBase.fMaxFrameRate);  }  PrepareOneSrcFrame();  EncodeOneIDRandP (pPtrEnc);   //try EncodeParameterSets  pPtrEnc->EncodeParameterSets (&sFbi);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeInvalid));   //check the result  int iNalType = 0;  SLayerBSInfo* pLayerBsInfo;  for (int i = 0; i < sFbi.iLayerNum; i++) {    pLayerBsInfo = & (sFbi.sLayerInfo[i]);    EXPECT_EQ (pLayerBsInfo->uiLayerType , static_cast<int> (NON_VIDEO_CODING_LAYER));     iNalType = GET_NAL_TYPE (pLayerBsInfo->pBsBuf);    EXPECT_EQ (true, IS_PARASET (iNalType));    for (int j = 0; j < (pLayerBsInfo->iNalCount - 1); j++) {      iNalType = GET_NAL_TYPE (pLayerBsInfo->pBsBuf + pLayerBsInfo->pNalLengthInByte[j]);      EXPECT_EQ (true, IS_PARASET (iNalType));    }  }   //try another P to make sure no impact on succeeding frames  iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_NE (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR));   iResult = pPtrEnc->Uninitialize();  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));} TEST_F (EncoderInterfaceTest, BasicReturnTypeTest) {  //TODO} void EncoderInterfaceTest::ChangeResolutionAndCheckStatistics (const SEncParamBase& sEncParamBase,    SEncoderStatistics* pEncoderStatistics) {  unsigned int uiExistingFrameCount = pEncoderStatistics->uiInputFrameCount;  unsigned int uiExistingIDR = pEncoderStatistics->uiIDRSentNum;  unsigned int uiExistingResolutionChange = pEncoderStatistics->uiResolutionChangeTimes;   // 1, get the existing param  int iResult = pPtrEnc->GetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, pParamExt);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));   // 2, change setting  unsigned int uiKnownResolutionChangeTimes = uiExistingResolutionChange;  bool bCheckIDR = false;  if (pParamExt->iPicWidth != sEncParamBase.iPicWidth || pParamExt->iPicHeight != sEncParamBase.iPicHeight) {    uiKnownResolutionChangeTimes += 1;    bCheckIDR = true;  }  pParamExt->iPicWidth = pParamExt->sSpatialLayers[0].iVideoWidth = sEncParamBase.iPicWidth;  pParamExt->iPicHeight = pParamExt->sSpatialLayers[0].iVideoHeight = sEncParamBase.iPicHeight;  pPtrEnc->SetOption (ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, pParamExt);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));   // 3, code one frame  PrepareOneSrcFrame();  pSrcPic->uiTimeStamp = 30 * pEncoderStatistics->uiInputFrameCount;  iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  iResult = pPtrEnc->GetOption (ENCODER_OPTION_GET_STATISTICS, pEncoderStatistics);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));   EXPECT_EQ (pEncoderStatistics->uiInputFrameCount, uiExistingFrameCount + 1);  EXPECT_EQ (pEncoderStatistics->uiResolutionChangeTimes, uiKnownResolutionChangeTimes);  if (bCheckIDR) {    EXPECT_EQ (pEncoderStatistics->uiIDRSentNum, uiExistingIDR + 1);  }   EXPECT_EQ (pEncoderStatistics->uiWidth, static_cast<unsigned int> (sEncParamBase.iPicWidth));  EXPECT_EQ (pEncoderStatistics->uiHeight, static_cast<unsigned int> (sEncParamBase.iPicHeight));}  TEST_F (EncoderInterfaceTest, GetStatistics) {  SEncParamBase sEncParamBase;  GetValidEncParamBase (&sEncParamBase);   int iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  if (iResult != cmResultSuccess) {    fprintf (stderr, "Unexpected ParamBase? \             iUsageType=%d, Pic=%dx%d, TargetBitrate=%d, iRCMode=%d, fMaxFrameRate=%.1f\n",             sEncParamBase.iUsageType, sEncParamBase.iPicWidth, sEncParamBase.iPicHeight,             sEncParamBase.iTargetBitrate, sEncParamBase.iRCMode, sEncParamBase.fMaxFrameRate);  }   PrepareOneSrcFrame();  EncodeOneIDRandP (pPtrEnc);   SEncoderStatistics sEncoderStatistics;  iResult = pPtrEnc->GetOption (ENCODER_OPTION_GET_STATISTICS, &sEncoderStatistics);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (sEncoderStatistics.uiInputFrameCount, static_cast<unsigned int> (2));  EXPECT_EQ (sEncoderStatistics.uiIDRSentNum, static_cast<unsigned int> (1));  EXPECT_EQ (sEncoderStatistics.uiResolutionChangeTimes, static_cast<unsigned int> (0));   EXPECT_EQ (sEncoderStatistics.uiWidth, static_cast<unsigned int> (sEncParamBase.iPicWidth));  EXPECT_EQ (sEncoderStatistics.uiHeight, static_cast<unsigned int> (sEncParamBase.iPicHeight));   // try param change  GetValidEncParamBase (&sEncParamBase);  ChangeResolutionAndCheckStatistics (sEncParamBase, &sEncoderStatistics);   GetValidEncParamBase (&sEncParamBase);  sEncParamBase.iPicWidth = (sEncParamBase.iPicWidth % 16) + 1; //try 1~16  sEncParamBase.iPicHeight = (sEncParamBase.iPicHeight % 16) + 1; //try 1~16  ChangeResolutionAndCheckStatistics (sEncParamBase, &sEncoderStatistics);   // try timestamp and frame rate  pSrcPic->uiTimeStamp = 1000;  iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  iResult = pPtrEnc->GetOption (ENCODER_OPTION_GET_STATISTICS, &sEncoderStatistics);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (static_cast<unsigned int> (sEncoderStatistics.fAverageFrameRate), sEncoderStatistics.uiInputFrameCount);   // 4, change log interval  int32_t iInterval = 0;  iResult = pPtrEnc->GetOption (ENCODER_OPTION_STATISTICS_LOG_INTERVAL, &iInterval);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (iInterval, 5000);   int32_t iInterval2 = 2000;  iResult = pPtrEnc->SetOption (ENCODER_OPTION_STATISTICS_LOG_INTERVAL, &iInterval2);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  iResult = pPtrEnc->GetOption (ENCODER_OPTION_STATISTICS_LOG_INTERVAL, &iInterval);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (iInterval, iInterval2);   iInterval2 = 0;  iResult = pPtrEnc->SetOption (ENCODER_OPTION_STATISTICS_LOG_INTERVAL, &iInterval2);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  iResult = pPtrEnc->GetOption (ENCODER_OPTION_STATISTICS_LOG_INTERVAL, &iInterval);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  EXPECT_EQ (iInterval, iInterval2);   // finish  pPtrEnc->Uninitialize();} TEST_F (EncoderInterfaceTest, FrameSizeCheck) {  SEncParamBase sEncParamBase;  GetValidEncParamBase (&sEncParamBase);   int iResult = pPtrEnc->Initialize (&sEncParamBase);  EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));  if (iResult != cmResultSuccess) {    fprintf (stderr, "Unexpected ParamBase? \             iUsageType=%d, Pic=%dx%d, TargetBitrate=%d, iRCMode=%d, fMaxFrameRate=%.1f\n",             sEncParamBase.iUsageType, sEncParamBase.iPicWidth, sEncParamBase.iPicHeight,             sEncParamBase.iTargetBitrate, sEncParamBase.iRCMode, sEncParamBase.fMaxFrameRate);  }   PrepareOneSrcFrame();  iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);   int length = 0;  for (int i = 0; i < sFbi.iLayerNum; ++i) {    for (int j = 0; j < sFbi.sLayerInfo[i].iNalCount; ++j) {      length += sFbi.sLayerInfo[i].pNalLengthInByte[j];    }  }  EXPECT_EQ (length, sFbi.iFrameSizeInBytes);   // finish  pPtrEnc->Uninitialize();}

Lines 501–853 of 853. Previous lines

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t