Showing the changes to test/encoder/EncUT_EncoderExt.cpp (1 of 1 file). Show all
Unified · Split
| @@ -53,6 +53,7 @@ class EncoderInterfaceTest : public ::testing::Test { · 52 unmodified lines | ||
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | void TemporalLayerSettingTest(); |
| 56 | + void MemoryCheckTest(); | |
| 56 | 57 | void EncodeOneFrame (SEncParamBase* pEncParamBase); |
| 57 | 58 | void PrepareOneSrcFrame(); |
| 58 | 59 | void EncodeOneIDRandP (ISVCEncoder* pPtrEnc); |
| @@ -130,54 +131,141 @@ void EncoderInterfaceTest::TemporalLayerSettingTest() { · 71 unmodified lines | ||
| 130 | 131 | pParamExt->iTemporalLayerNum = 1; |
| 131 | 132 | pParamExt->iSpatialLayerNum = 1; |
| 132 | 133 | |
| 134 | + for(int i = 0; i < 2; i++){ | |
| 135 | + pParamExt->iUsageType = (( i == 0 ) ? SCREEN_CONTENT_REAL_TIME : CAMERA_VIDEO_REAL_TIME); | |
| 136 | + int iResult = pPtrEnc->InitializeExt (pParamExt); | |
| 137 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 138 | + | |
| 139 | + PrepareOneSrcFrame(); | |
| 140 | + | |
| 141 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 142 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 143 | + EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR)); | |
| 144 | + | |
| 145 | + pSrcPic->uiTimeStamp = 30; | |
| 146 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 147 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 148 | + EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeP)); | |
| 149 | + | |
| 150 | + memcpy (pOption, pParamExt, sizeof (SEncParamExt)); | |
| 151 | + pOption ->iTemporalLayerNum = 4; | |
| 152 | + | |
| 153 | + ENCODER_OPTION eOptionId = ENCODER_OPTION_SVC_ENCODE_PARAM_EXT; | |
| 154 | + iResult = pPtrEnc->SetOption (eOptionId, pOption); | |
| 155 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 156 | + | |
| 157 | + pSrcPic->uiTimeStamp = 60; | |
| 158 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 159 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 160 | + EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR)); | |
| 161 | + | |
| 162 | + pOption ->iTemporalLayerNum = 2; | |
| 163 | + iResult = pPtrEnc->SetOption (eOptionId, pOption); | |
| 164 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 165 | + pSrcPic->uiTimeStamp = 90; | |
| 166 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 167 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 168 | + EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeP)); | |
| 169 | + | |
| 170 | + pOption ->iTemporalLayerNum = 4; | |
| 171 | + iResult = pPtrEnc->SetOption (eOptionId, pOption); | |
| 172 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 173 | + pSrcPic->uiTimeStamp = 120; | |
| 174 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 175 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 176 | + EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeP)); | |
| 177 | + | |
| 178 | + pPtrEnc->Uninitialize(); | |
| 179 | + } | |
| 180 | +} | |
| 181 | + | |
| 182 | +TEST_F (EncoderInterfaceTest, TestTemporalLayerSetting) { | |
| 183 | + TemporalLayerSettingTest(); | |
| 184 | +} | |
| 185 | + | |
| 186 | +void EncoderInterfaceTest::MemoryCheckTest() { | |
| 187 | + #define MEM_VARY_SIZE 1024 | |
| 188 | + #define IMAGE_VARY_SIZE 512 | |
| 189 | + #define TEST_FRAMES 500 | |
| 190 | + | |
| 191 | + pParamExt->iPicWidth = 1280; | |
| 192 | + pParamExt->iPicHeight = 720; | |
| 193 | + pParamExt->iTargetBitrate = 60000; | |
| 194 | + pParamExt->sSpatialLayers[0].iVideoHeight = pParamExt->iPicHeight; | |
| 195 | + pParamExt->sSpatialLayers[0].iVideoWidth = pParamExt->iPicWidth; | |
| 196 | + pParamExt->sSpatialLayers[0].iSpatialBitrate = 50000; | |
| 197 | + pParamExt->iTemporalLayerNum = 3; | |
| 198 | + pParamExt->iSpatialLayerNum = 1; | |
| 199 | + | |
| 133 | 200 | int iResult = pPtrEnc->InitializeExt (pParamExt); |
| 134 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 201 | + const int kiFrameNumber = TEST_FRAMES; | |
| 135 | 202 | |
| 203 | + m_iWidth = pParamExt->iPicWidth; | |
| 204 | + m_iHeight = pParamExt->iPicHeight; | |
| 205 | + m_iPicResSize = m_iWidth * m_iHeight * 3 >> 1; | |
| 206 | + delete []pYUV; | |
| 207 | + pYUV = new unsigned char [m_iPicResSize]; | |
| 136 | 208 | PrepareOneSrcFrame(); |
| 137 | 209 | |
| 138 | − iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 139 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 140 | − EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR)); | |
| 210 | + for(int i = 0; i < kiFrameNumber; i ++){ | |
| 211 | + int iStartX = rand() % (m_iPicResSize >> 1); | |
| 212 | + int iEndX = (iStartX + (rand() % MEM_VARY_SIZE)) % m_iPicResSize; | |
| 213 | + for (int j = iStartX; j < iEndX; j++) | |
| 214 | + pYUV[j] = rand() % 256; | |
| 141 | 215 | |
| 142 | − pSrcPic->uiTimeStamp = 30; | |
| 143 | − iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 144 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 145 | − EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeP)); | |
| 216 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 217 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 218 | + pSrcPic->uiTimeStamp += 30; | |
| 219 | + } | |
| 146 | 220 | |
| 147 | − memcpy (pOption, pParamExt, sizeof (SEncParamExt)); | |
| 148 | − pOption ->iTemporalLayerNum = 4; | |
| 221 | + pParamExt->iPicWidth += (rand() << 1) % IMAGE_VARY_SIZE; | |
| 222 | + pParamExt->iPicHeight += (rand() << 1) % IMAGE_VARY_SIZE; | |
| 223 | + m_iWidth = pParamExt->iPicWidth; | |
| 224 | + m_iHeight = pParamExt->iPicHeight; | |
| 225 | + m_iPicResSize = m_iWidth * m_iHeight * 3 >> 1; | |
| 226 | + delete []pYUV; | |
| 227 | + pYUV = new unsigned char [m_iPicResSize]; | |
| 228 | + | |
| 229 | + iResult = pPtrEnc->InitializeExt (pParamExt); | |
| 230 | + PrepareOneSrcFrame(); | |
| 149 | 231 | |
| 150 | 232 | ENCODER_OPTION eOptionId = ENCODER_OPTION_SVC_ENCODE_PARAM_EXT; |
| 233 | + memcpy (pOption, pParamExt, sizeof (SEncParamExt)); | |
| 234 | + pOption ->iPicWidth = m_iWidth; | |
| 235 | + pOption ->iPicHeight = m_iHeight; | |
| 151 | 236 | iResult = pPtrEnc->SetOption (eOptionId, pOption); |
| 152 | 237 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 153 | 238 | |
| 154 | − pSrcPic->uiTimeStamp = 60; | |
| 155 | − iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 156 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 157 | − EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR)); | |
| 239 | + for(int i = 0; i < kiFrameNumber; i ++){ | |
| 240 | + int iStartX = rand() % (m_iPicResSize >> 1); | |
| 241 | + int iEndX = (iStartX + (rand() % MEM_VARY_SIZE)) % m_iPicResSize; | |
| 242 | + for (int j = iStartX; j < iEndX; j++) | |
| 243 | + pYUV[j] = rand() % 256; | |
| 158 | 244 | |
| 159 | − pOption ->iTemporalLayerNum = 2; | |
| 160 | − iResult = pPtrEnc->SetOption (eOptionId, pOption); | |
| 161 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 162 | − pSrcPic->uiTimeStamp = 90; | |
| 163 | − iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 164 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 165 | − EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeP)); | |
| 245 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 246 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 247 | + pSrcPic->uiTimeStamp += 30; | |
| 248 | + } | |
| 166 | 249 | |
| 167 | − pOption ->iTemporalLayerNum = 4; | |
| 250 | + pOption ->iLTRRefNum += rand() % 8 + 1; | |
| 168 | 251 | iResult = pPtrEnc->SetOption (eOptionId, pOption); |
| 169 | 252 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 170 | − pSrcPic->uiTimeStamp = 120; | |
| 171 | − iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 172 | − EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 173 | − EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeP)); | |
| 174 | 253 | |
| 175 | − pPtrEnc->Uninitialize(); | |
| 254 | + for(int i = 0; i < kiFrameNumber; i ++){ | |
| 255 | + int iStartX = rand() % (m_iPicResSize >> 1); | |
| 256 | + int iEndX = (iStartX + (rand() % MEM_VARY_SIZE)) % m_iPicResSize; | |
| 257 | + for (int j = iStartX; j < iEndX; j++) | |
| 258 | + pYUV[j] = rand() % 256; | |
| 176 | 259 | |
| 260 | + iResult = pPtrEnc->EncodeFrame (pSrcPic, &sFbi); | |
| 261 | + EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); | |
| 262 | + pSrcPic->uiTimeStamp += 30; | |
| 263 | + } | |
| 264 | + pPtrEnc->Uninitialize(); | |
| 177 | 265 | } |
| 178 | 266 | |
| 179 | −TEST_F (EncoderInterfaceTest, TestTemporalLayerSetting) { | |
| 180 | − TemporalLayerSettingTest(); | |
| 267 | +TEST_F (EncoderInterfaceTest, MemoryCheck) { | |
| 268 | + MemoryCheckTest(); | |
| 181 | 269 | } |
| 182 | 270 | |
| 183 | 271 | void GetValidEncParamBase (SEncParamBase* pEncParamBase) { |
| @@ -210,7 +298,7 @@ TEST_F (EncoderInterfaceTest, BasicInitializeTest) { · 26 unmodified lines | ||
| 210 | 298 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 211 | 299 | EXPECT_EQ (sFbi.eFrameType, static_cast<int> (videoFrameTypeIDR)); |
| 212 | 300 | |
| 213 | − pPtrEnc->Uninitialize(); | |
| 301 | + iResult = pPtrEnc->Uninitialize(); | |
| 214 | 302 | EXPECT_EQ (iResult, static_cast<int> (cmResultSuccess)); |
| 215 | 303 | } |
| 216 | 304 | |