Showing the changes to test/encoder/EncUT_EncoderExt.cpp (1 of 1 file). Show all
Unified · Split
| @@ -2,6 +2,7 @@ · 1 unmodified line | |||
| 2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
| 3 | #include "codec_api.h" | 3 | #include "codec_api.h" |
| 4 | #include "codec_app_def.h" | 4 | #include "codec_app_def.h" |
| 5 | #include "svc_enc_slice_segment.h" | ||
| 5 | #include "test_stdint.h" | 6 | #include "test_stdint.h" |
| 6 | //TODO: consider using BaseEncoderTest class from #include "../BaseEncoderTest.h" | 7 | //TODO: consider using BaseEncoderTest class from #include "../BaseEncoderTest.h" |
| 7 | 8 | ||
| @@ -57,6 +58,7 @@ class EncoderInterfaceTest : public ::testing::Test { · 49 unmodified lines | |||
| 57 | } | 58 | } |
| 58 | 59 | ||
| 59 | void InitializeParamExt(); | 60 | void InitializeParamExt(); |
| 61 | void SetRandomParams(); | ||
| 60 | void TemporalLayerSettingTest(); | 62 | void TemporalLayerSettingTest(); |
| 61 | void MemoryCheckTest(); | 63 | void MemoryCheckTest(); |
| 62 | void EncodeOneFrame (SEncParamBase* pEncParamBase); | 64 | void EncodeOneFrame (SEncParamBase* pEncParamBase); |
| @@ -65,12 +67,10 @@ class EncoderInterfaceTest : public ::testing::Test { · 2 unmodified lines | |||
| 65 | 67 | ||
| 66 | public: | 68 | public: |
| 67 | ISVCEncoder* pPtrEnc; | 69 | ISVCEncoder* pPtrEnc; |
| 68 | |||
| 69 | SEncParamExt* pParamExt; | 70 | SEncParamExt* pParamExt; |
| 70 | SSourcePicture* pSrcPic; | 71 | SSourcePicture* pSrcPic; |
| 71 | SEncParamExt* pOption; | 72 | SEncParamExt* pOption; |
| 72 | unsigned char* pYUV; | 73 | unsigned char* pYUV; |
| 73 | |||
| 74 | SFrameBSInfo sFbi; | 74 | SFrameBSInfo sFbi; |
| 75 | 75 | ||
| 76 | int m_iWidth; | 76 | int m_iWidth; |
| @@ -84,9 +84,13 @@ void EncoderInterfaceTest::PrepareOneSrcFrame() { · 7 unmodified lines | |||
| 84 | pSrcPic->iPicWidth = pParamExt->iPicWidth; | 84 | pSrcPic->iPicWidth = pParamExt->iPicWidth; |
| 85 | pSrcPic->iPicHeight = pParamExt->iPicHeight; | 85 | pSrcPic->iPicHeight = pParamExt->iPicHeight; |
| 86 | 86 | ||
| 87 | for (int i = 0; i < m_iPicResSize; i++) | 87 | pYUV[0] = rand() % 256; |
| 88 | pYUV[i] = rand() % 256; | 88 | for (int i = 1; i < m_iPicResSize; i++){ |
| 89 | 89 | if((i%256) == 0) | |
| 90 | pYUV[i] = rand() % 256; | ||
| 91 | else | ||
| 92 | pYUV[i] = WELS_CLIP3(pYUV[i-1]+(rand()%3)-1,0,255); | ||
| 93 | } | ||
| 90 | pSrcPic->iStride[0] = m_iWidth; | 94 | pSrcPic->iStride[0] = m_iWidth; |
| 91 | pSrcPic->iStride[1] = pSrcPic->iStride[2] = pSrcPic->iStride[0] >> 1; | 95 | pSrcPic->iStride[1] = pSrcPic->iStride[2] = pSrcPic->iStride[0] >> 1; |
| 92 | 96 | ||
| @@ -94,7 +98,6 @@ void EncoderInterfaceTest::PrepareOneSrcFrame() { · 1 unmodified line | |||
| 94 | pSrcPic->pData[1] = pSrcPic->pData[0] + (m_iWidth * m_iHeight); | 98 | pSrcPic->pData[1] = pSrcPic->pData[0] + (m_iWidth * m_iHeight); |
| 95 | pSrcPic->pData[2] = pSrcPic->pData[1] + (m_iWidth * m_iHeight >> 2); | 99 | pSrcPic->pData[2] = pSrcPic->pData[1] + (m_iWidth * m_iHeight >> 2); |
| 96 | 100 | ||
| 97 | //clean the output | ||
| 98 | memset (&sFbi, 0, sizeof (SFrameBSInfo)); | 101 | memset (&sFbi, 0, sizeof (SFrameBSInfo)); |
| 99 | } | 102 | } |
| 100 | 103 | ||
| @@ -136,22 +139,128 @@ void EncoderInterfaceTest::InitializeParamExt() { · 35 unmodified lines | |||
| 136 | pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000; | 139 | pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000; |
| 137 | } | 140 | } |
| 138 | 141 | ||
| 142 | TEST_F (EncoderInterfaceTest, EncoderAdditionalOptionSetTest) { | ||
| 143 | int iResult, iValue, iReturn; | ||
| 144 | float fValue, fReturn; | ||
| 145 | |||
| 146 | InitializeParamExt(); | ||
| 147 | iResult = pPtrEnc->InitializeExt (pParamExt); | ||
| 148 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 149 | |||
| 150 | PrepareOneSrcFrame(); | ||
| 151 | |||
| 152 | ENCODER_OPTION eOptionId = ENCODER_OPTION_DATAFORMAT; | ||
| 153 | iValue = rand() % 256; | ||
| 154 | iResult = pPtrEnc->SetOption (eOptionId, &iValue); | ||
| 155 | |||
| 156 | if (iValue ==0) | ||
| 157 | EXPECT_EQ (iResult, static_cast<int> (cmInitParaError)); | ||
| 158 | else | ||
| 159 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 160 | |||
| 161 | iResult = pPtrEnc->GetOption (eOptionId, &iReturn); | ||
| 162 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 163 | EXPECT_EQ (iValue, iReturn); | ||
| 164 | |||
| 165 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 166 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 167 | pSrcPic->uiTimeStamp += 30; | ||
| 168 | |||
| 169 | eOptionId = ENCODER_OPTION_IDR_INTERVAL; | ||
| 170 | iValue = rand() % 256 - 5; | ||
| 171 | iResult = pPtrEnc->SetOption (eOptionId, &iValue); | ||
| 172 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 173 | |||
| 174 | iResult = pPtrEnc->GetOption (eOptionId, &iReturn); | ||
| 175 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 176 | EXPECT_EQ (iValue, iReturn); | ||
| 177 | |||
| 178 | PrepareOneSrcFrame(); | ||
| 179 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 180 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 181 | pSrcPic->uiTimeStamp += 30; | ||
| 182 | |||
| 183 | eOptionId = ENCODER_OPTION_FRAME_RATE; | ||
| 184 | fValue = static_cast<int> (rand() % 60 - 5); | ||
| 185 | iResult = pPtrEnc->SetOption (eOptionId, &fValue); | ||
| 186 | |||
| 187 | if (fValue <=0) | ||
| 188 | EXPECT_EQ (iResult, static_cast<int> (cmInitParaError)); | ||
| 189 | else{ | ||
| 190 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 191 | |||
| 192 | iResult = pPtrEnc->GetOption (eOptionId, &fReturn); | ||
| 193 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 194 | EXPECT_EQ (WELS_CLIP3 (fValue, 1, 30), fReturn); | ||
| 195 | } | ||
| 196 | PrepareOneSrcFrame(); | ||
| 197 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 198 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 199 | pSrcPic->uiTimeStamp += 30; | ||
| 200 | |||
| 201 | eOptionId = ENCODER_OPTION_BITRATE; | ||
| 202 | SBitrateInfo sInfo,sReturn; | ||
| 203 | sInfo.iBitrate = rand() % 100000 - 100; | ||
| 204 | sInfo.iLayer = static_cast<LAYER_NUM>(pParamExt->iSpatialLayerNum); | ||
| 205 | iResult = pPtrEnc->SetOption (eOptionId, &sInfo); | ||
| 206 | if (sInfo.iBitrate <=0) | ||
| 207 | EXPECT_EQ (iResult, static_cast<int> (cmInitParaError)); | ||
| 208 | else{ | ||
| 209 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 210 | sReturn.iLayer = static_cast<LAYER_NUM>(pParamExt->iSpatialLayerNum); | ||
| 211 | iResult = pPtrEnc->GetOption (eOptionId, &sReturn); | ||
| 212 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 213 | EXPECT_EQ (WELS_CLIP3 (sInfo.iBitrate, 1, 2147483647), sReturn.iBitrate); | ||
| 214 | } | ||
| 215 | PrepareOneSrcFrame(); | ||
| 216 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 217 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 218 | pSrcPic->uiTimeStamp += 30; | ||
| 219 | |||
| 220 | eOptionId = ENCODER_OPTION_MAX_BITRATE; | ||
| 221 | sInfo.iBitrate = rand() % 100000 - 100; | ||
| 222 | sInfo.iLayer = static_cast<LAYER_NUM>(pParamExt->iSpatialLayerNum); | ||
| 223 | iResult = pPtrEnc->SetOption (eOptionId, &sInfo); | ||
| 224 | if (sInfo.iBitrate <=0) | ||
| 225 | EXPECT_EQ (iResult, static_cast<int> (cmInitParaError)); | ||
| 226 | else{ | ||
| 227 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 228 | sReturn.iLayer = static_cast<LAYER_NUM>(pParamExt->iSpatialLayerNum); | ||
| 229 | iResult = pPtrEnc->GetOption (eOptionId, &sReturn); | ||
| 230 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 231 | EXPECT_EQ (WELS_CLIP3 (sInfo.iBitrate, 1, 2147483647), sReturn.iBitrate); | ||
| 232 | } | ||
| 233 | PrepareOneSrcFrame(); | ||
| 234 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 235 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 236 | pSrcPic->uiTimeStamp += 30; | ||
| 237 | |||
| 238 | eOptionId = ENCODER_OPTION_RC_MODE; | ||
| 239 | iValue = (rand() % 4) - 1; | ||
| 240 | iResult = pPtrEnc->SetOption (eOptionId, &iValue); | ||
| 241 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 242 | |||
| 243 | PrepareOneSrcFrame(); | ||
| 244 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 245 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | ||
| 246 | pSrcPic->uiTimeStamp += 30; | ||
| 247 | } | ||
| 248 | |||
| 139 | TEST_F (EncoderInterfaceTest, TemporalLayerSettingTest) { | 249 | TEST_F (EncoderInterfaceTest, TemporalLayerSettingTest) { |
| 140 | 250 | ||
| 141 | pParamExt->iPicWidth = 1280; | 251 | pParamExt->iPicWidth = m_iWidth; |
| 142 | pParamExt->iPicHeight = 720; | 252 | pParamExt->iPicHeight = m_iHeight; |
| 143 | m_iWidth = pParamExt->iPicWidth; | ||
| 144 | m_iHeight = pParamExt->iPicHeight; | ||
| 145 | pParamExt->iTargetBitrate = 60000; | 253 | pParamExt->iTargetBitrate = 60000; |
| 146 | pParamExt->sSpatialLayers[0].iVideoHeight = pParamExt->iPicHeight; | 254 | pParamExt->sSpatialLayers[0].iVideoHeight = pParamExt->iPicHeight; |
| 147 | pParamExt->sSpatialLayers[0].iVideoWidth = pParamExt->iPicWidth; | 255 | pParamExt->sSpatialLayers[0].iVideoWidth = pParamExt->iPicWidth; |
| 148 | pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000; | 256 | pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000; |
| 149 | pParamExt->iTemporalLayerNum = 1; | 257 | pParamExt->iTemporalLayerNum = 1; |
| 150 | pParamExt->iSpatialLayerNum = 1; | 258 | pParamExt->iSpatialLayerNum = 1; |
| 259 | int iResult; | ||
| 151 | 260 | ||
| 152 | for(int i = 0; i < 2; i++){ | 261 | for(int i = 0; i < 2; i++){ |
| 153 | pParamExt->iUsageType = (( i == 0 ) ? SCREEN_CONTENT_REAL_TIME : CAMERA_VIDEO_REAL_TIME); | 262 | pParamExt->iUsageType = (( i == 0 ) ? SCREEN_CONTENT_REAL_TIME : CAMERA_VIDEO_REAL_TIME); |
| 154 | int iResult = pPtrEnc->InitializeExt (pParamExt); | 263 | iResult = pPtrEnc->InitializeExt (pParamExt); |
| 155 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | 264 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 156 | 265 | ||
| 157 | PrepareOneSrcFrame(); | 266 | PrepareOneSrcFrame(); |
| @@ -198,46 +307,6 @@ TEST_F (EncoderInterfaceTest, TemporalLayerSettingTest) { · 40 unmodified lines | |||
| 198 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | 307 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 199 | } | 308 | } |
| 200 | 309 | ||
| 201 | InitializeParamExt(); | ||
| 202 | pParamExt->iUsageType = (rand() % 2) ? SCREEN_CONTENT_REAL_TIME : CAMERA_VIDEO_REAL_TIME; | ||
| 203 | pParamExt->iRCMode = (rand() % 2) ? RC_BITRATE_MODE : RC_QUALITY_MODE; | ||
| 204 | |||
| 205 | int iResult = pPtrEnc->InitializeExt (pParamExt); | ||
| 206 | const int kiFrameNumber = TEST_FRAMES; | ||
| 207 | |||
| 208 | m_iWidth = pParamExt->iPicWidth; | ||
| 209 | m_iHeight = pParamExt->iPicHeight; | ||
| 210 | m_iPicResSize = m_iWidth * m_iHeight * 3 >> 1; | ||
| 211 | delete []pYUV; | ||
| 212 | pYUV = new unsigned char [m_iPicResSize]; | ||
| 213 | ASSERT_TRUE (pYUV != NULL); | ||
| 214 | PrepareOneSrcFrame(); | ||
| 215 | |||
| 216 | ENCODER_OPTION eOptionId = ENCODER_OPTION_SVC_ENCODE_PARAM_EXT; | ||
| 217 | memcpy (pOption, pParamExt, sizeof (SEncParamExt)); | ||
| 218 | |||
| 219 | for(int i = 0; i < kiFrameNumber; i ++){ | ||
| 220 | if ((i%7) == 0){ | ||
| 221 | if (pOption->iTemporalLayerNum<4){ | ||
| 222 | pOption->iTemporalLayerNum++; | ||
| 223 | } else { | ||
| 224 | pOption->iTemporalLayerNum--; | ||
| 225 | } | ||
| 226 | iResult = pPtrEnc->SetOption (eOptionId, pOption); | ||
| 227 | EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess)); | ||
| 228 | pSrcPic->uiTimeStamp += 30; | ||
| 229 | } | ||
| 230 | |||
| 231 | int iStartX = rand() % (m_iPicResSize >> 1); | ||
| 232 | int iEndX = (iStartX + (rand() % MEM_VARY_SIZE)) % m_iPicResSize; | ||
| 233 | for (int j = iStartX; j < iEndX; j++) | ||
| 234 | pYUV[j] = rand() % 256; | ||
| 235 | |||
| 236 | iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | ||
| 237 | EXPECT_EQ (iResult, static_cast<int32_t> (cmResultSuccess)); | ||
| 238 | pSrcPic->uiTimeStamp += 30; | ||
| 239 | } | ||
| 240 | |||
| 241 | iResult = pPtrEnc->Uninitialize(); | 310 | iResult = pPtrEnc->Uninitialize(); |
| 242 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | 311 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 243 | 312 | ||