History

add nalsize checking UT and fix nalsize control when cabac on

Karina committed 10 years ago

Commit 2171d841 parent 1fa02f67 files · +4724 −4618Browse files

Showing the changes to test/encoder/EncUT_EncoderExt.cpp (1 of 7 files). Show all

Unified · Split

test/encoder/EncUT_EncoderExt.cpp+102−0
@@ -4,6 +4,7 @@ · 3 unmodified lines
44 #include "codec_app_def.h"
55 #include "svc_enc_slice_segment.h"
66 #include "test_stdint.h"
7+#include "utils/FileInputStream.h"
78 //TODO: consider using BaseEncoderTest class from #include "../BaseEncoderTest.h"
89
910 class EncoderInterfaceTest : public ::testing::Test {
@@ -1054,3 +1055,104 @@ TEST_F (EncoderInterfaceTest, DiffResolutionCheck) { · 1044 unmodified lines
10541055 // finish
10551056 pPtrEnc->Uninitialize();
10561057 }
1058+
1059+TEST_F (EncoderInterfaceTest, NalSizeChecking) {
1060+ // int uiTraceLevel = WELS_LOG_DETAIL;
1061+ // pPtrEnc->SetOption (ENCODER_OPTION_TRACE_LEVEL, &uiTraceLevel);
1062+
1063+ pParamExt->iPicWidth = 1280;
1064+ pParamExt->iPicHeight = 720;
1065+ pParamExt->iPicWidth += (rand() << 1) % IMAGE_VARY_SIZE;
1066+ pParamExt->iPicHeight += (rand() << 1) % IMAGE_VARY_SIZE;
1067+ pParamExt->fMaxFrameRate = 30;
1068+ pParamExt->iTemporalLayerNum = rand()%3;
1069+ pParamExt->iSpatialLayerNum = rand()%4;
1070+ pParamExt->iNumRefFrame = AUTO_REF_PIC_COUNT;
1071+ pParamExt->iSpatialLayerNum = WELS_CLIP3(pParamExt->iSpatialLayerNum,1,4);
1072+
1073+ pParamExt->iMultipleThreadIdc = 1;//multi-thread can't control size. will be fixed.
1074+ pParamExt->iEntropyCodingModeFlag = rand()%2;
1075+ int iMaxNalSize =rand()%5000;
1076+ iMaxNalSize = WELS_CLIP3(iMaxNalSize,1000,5000);
1077+ pParamExt->uiMaxNalSize = iMaxNalSize;
1078+ for(int i = 0;i<pParamExt->iSpatialLayerNum;i++){
1079+ pParamExt->sSpatialLayers[i].sSliceArgument.uiSliceMode = SM_SIZELIMITED_SLICE;
1080+ pParamExt->sSpatialLayers[i].sSliceArgument.uiSliceSizeConstraint = iMaxNalSize;
1081+ pParamExt->sSpatialLayers[i].iVideoHeight = pParamExt->iPicHeight;
1082+ pParamExt->sSpatialLayers[i].iVideoWidth = pParamExt->iPicWidth;
1083+ int bitrate = rand()%3000000;
1084+ pParamExt->sSpatialLayers[i].iSpatialBitrate = WELS_CLIP3(bitrate,500000,3000000) ;
1085+ pParamExt->iTargetBitrate+= pParamExt->sSpatialLayers[i].iSpatialBitrate;
1086+ pParamExt->sSpatialLayers[i].fFrameRate = 30;
1087+ }
1088+ int iResult = pPtrEnc->InitializeExt (pParamExt);
1089+ const int kiFrameNumber = TEST_FRAMES;
1090+
1091+ m_iWidth = pParamExt->iPicWidth;
1092+ m_iHeight = pParamExt->iPicHeight;
1093+ m_iPicResSize = m_iWidth * m_iHeight * 3 >> 1;
1094+ delete []pYUV;
1095+ pYUV = new unsigned char [m_iPicResSize];
1096+ FileInputStream fileStream;
1097+ ASSERT_TRUE (fileStream.Open ("res/Cisco_Absolute_Power_1280x720_30fps.yuv"));
1098+ PrepareOneSrcFrame();
1099+ for (int i = 0; i < kiFrameNumber; i ++) {
1100+ if(fileStream.read (pYUV, m_iPicResSize) != m_iPicResSize){
1101+ int iStartX = rand() % (m_iPicResSize >> 1);
1102+ int iEndX = (iStartX + (rand() % MEM_VARY_SIZE)) % m_iPicResSize;
1103+ for (int j = iStartX; j < iEndX; j++)
1104+ pYUV[j] = rand() % 256;
1105+
1106+ }
1107+ iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
1108+ EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));
1109+ pSrcPic->uiTimeStamp += 30;
1110+
1111+ for (int i = 0; i < sFbi.iLayerNum; ++i) {
1112+ for (int j = 0; j < sFbi.sLayerInfo[i].iNalCount; ++j) {
1113+ int length = sFbi.sLayerInfo[i].pNalLengthInByte[j];
1114+ EXPECT_LE (length, iMaxNalSize);
1115+ }
1116+ }
1117+
1118+ }
1119+ pParamExt->iPicWidth = 1280;
1120+ pParamExt->iPicHeight = 720;
1121+ pParamExt->iPicWidth += (rand() << 1) % IMAGE_VARY_SIZE;
1122+ pParamExt->iPicHeight += (rand() << 1) % IMAGE_VARY_SIZE;
1123+ m_iWidth = pParamExt->iPicWidth;
1124+ m_iHeight = pParamExt->iPicHeight;
1125+ m_iPicResSize = m_iWidth * m_iHeight * 3 >> 1;
1126+ delete []pYUV;
1127+ pYUV = new unsigned char [m_iPicResSize];
1128+
1129+ iResult = pPtrEnc->InitializeExt (pParamExt);
1130+ PrepareOneSrcFrame();
1131+
1132+ ENCODER_OPTION eOptionId = ENCODER_OPTION_SVC_ENCODE_PARAM_EXT;
1133+ memcpy (pOption, pParamExt, sizeof (SEncParamExt));
1134+ pOption ->iPicWidth = m_iWidth;
1135+ pOption ->iPicHeight = m_iHeight;
1136+ iResult = pPtrEnc->SetOption (eOptionId, pOption);
1137+ EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));
1138+
1139+ for (int i = 0; i < kiFrameNumber; i ++) {
1140+ int iStartX = rand() % (m_iPicResSize >> 1);
1141+ int iEndX = (iStartX + (rand() % MEM_VARY_SIZE)) % m_iPicResSize;
1142+ for (int j = iStartX; j < iEndX; j++)
1143+ pYUV[j] = rand() % 256;
1144+
1145+ iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi);
1146+ EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));
1147+ pSrcPic->uiTimeStamp += 30;
1148+
1149+ for (int i = 0; i < sFbi.iLayerNum; ++i) {
1150+ for (int j = 0; j < sFbi.sLayerInfo[i].iNalCount; ++j) {
1151+ int length = sFbi.sLayerInfo[i].pNalLengthInByte[j];
1152+ EXPECT_LE (length, iMaxNalSize);
1153+ }
1154+ }
1155+ }
1156+ iResult = pPtrEnc->Uninitialize();
1157+ EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess));
1158+}

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