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 | 2 | #include <stdlib.h> |
| 3 | 3 | #include "codec_api.h" |
| 4 | 4 | #include "codec_app_def.h" |
| 5 | +#include "svc_enc_slice_segment.h" | |
| 5 | 6 | #include "test_stdint.h" |
| 6 | 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 | 60 | void InitializeParamExt(); |
| 61 | + void SetRandomParams(); | |
| 60 | 62 | void TemporalLayerSettingTest(); |
| 61 | 63 | void MemoryCheckTest(); |
| 62 | 64 | void EncodeOneFrame (SEncParamBase* pEncParamBase); |
| @@ -65,12 +67,10 @@ class EncoderInterfaceTest : public ::testing::Test { · 2 unmodified lines | ||
| 65 | 67 | |
| 66 | 68 | public: |
| 67 | 69 | ISVCEncoder* pPtrEnc; |
| 68 | − | |
| 69 | 70 | SEncParamExt* pParamExt; |
| 70 | 71 | SSourcePicture* pSrcPic; |
| 71 | 72 | SEncParamExt* pOption; |
| 72 | 73 | unsigned char* pYUV; |
| 73 | − | |
| 74 | 74 | SFrameBSInfo sFbi; |
| 75 | 75 | |
| 76 | 76 | int m_iWidth; |
| @@ -84,9 +84,13 @@ void EncoderInterfaceTest::PrepareOneSrcFrame() { · 7 unmodified lines | ||
| 84 | 84 | pSrcPic->iPicWidth = pParamExt->iPicWidth; |
| 85 | 85 | pSrcPic->iPicHeight = pParamExt->iPicHeight; |
| 86 | 86 | |
| 87 | − for (int i = 0; i < m_iPicResSize; i++) | |
| 88 | − pYUV[i] = rand() % 256; | |
| 89 | − | |
| 87 | + pYUV[0] = rand() % 256; | |
| 88 | + for (int i = 1; i < m_iPicResSize; i++){ | |
| 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 | 94 | pSrcPic->iStride[0] = m_iWidth; |
| 91 | 95 | pSrcPic->iStride[1] = pSrcPic->iStride[2] = pSrcPic->iStride[0] >> 1; |
| 92 | 96 | |
| @@ -94,7 +98,6 @@ void EncoderInterfaceTest::PrepareOneSrcFrame() { · 1 unmodified line | ||
| 94 | 98 | pSrcPic->pData[1] = pSrcPic->pData[0] + (m_iWidth * m_iHeight); |
| 95 | 99 | pSrcPic->pData[2] = pSrcPic->pData[1] + (m_iWidth * m_iHeight >> 2); |
| 96 | 100 | |
| 97 | − //clean the output | |
| 98 | 101 | memset (&sFbi, 0, sizeof (SFrameBSInfo)); |
| 99 | 102 | } |
| 100 | 103 | |
| @@ -136,22 +139,128 @@ void EncoderInterfaceTest::InitializeParamExt() { · 35 unmodified lines | ||
| 136 | 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 | 249 | TEST_F (EncoderInterfaceTest, TemporalLayerSettingTest) { |
| 140 | 250 | |
| 141 | − pParamExt->iPicWidth = 1280; | |
| 142 | − pParamExt->iPicHeight = 720; | |
| 143 | − m_iWidth = pParamExt->iPicWidth; | |
| 144 | − m_iHeight = pParamExt->iPicHeight; | |
| 251 | + pParamExt->iPicWidth = m_iWidth; | |
| 252 | + pParamExt->iPicHeight = m_iHeight; | |
| 145 | 253 | pParamExt->iTargetBitrate = 60000; |
| 146 | 254 | pParamExt->sSpatialLayers[0].iVideoHeight = pParamExt->iPicHeight; |
| 147 | 255 | pParamExt->sSpatialLayers[0].iVideoWidth = pParamExt->iPicWidth; |
| 148 | 256 | pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000; |
| 149 | 257 | pParamExt->iTemporalLayerNum = 1; |
| 150 | 258 | pParamExt->iSpatialLayerNum = 1; |
| 259 | + int iResult; | |
| 151 | 260 | |
| 152 | 261 | for(int i = 0; i < 2; i++){ |
| 153 | 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 | 264 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 156 | 265 | |
| 157 | 266 | PrepareOneSrcFrame(); |
| @@ -198,46 +307,6 @@ TEST_F (EncoderInterfaceTest, TemporalLayerSettingTest) { · 40 unmodified lines | ||
| 198 | 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 | 310 | iResult = pPtrEnc->Uninitialize(); |
| 242 | 311 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 243 | 312 | |