Showing the changes to test/api/encode_options_test.cpp (1 of 2 files). Show all
Unified · Split
| @@ -1204,30 +1204,42 @@ static const EncodeOptionParam kOptionParamArray[] = { · 1203 unmodified lines | ||
| 1204 | 1204 | {true, true, false, 30, 140, 196, 51, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1205 | 1205 | {true, true, false, 30, 110, 296, 50, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1206 | 1206 | {true, true, false, 30, 104, 416, 44, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1207 | − {true, true, false, 30, 16, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, | |
| 1207 | + {true, true, false, 30, 16, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, //5 | |
| 1208 | 1208 | {true, false, true, 30, 600, 460, 1, SM_SIZELIMITED_SLICE, 450, 15.0, 1, ""}, |
| 1209 | 1209 | {true, false, true, 30, 340, 96, 24, SM_SIZELIMITED_SLICE, 1000, 30.0, 1, ""}, |
| 1210 | 1210 | {true, false, true, 30, 140, 196, 51, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1211 | 1211 | {true, false, true, 30, 110, 296, 50, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1212 | − {true, false, true, 30, 104, 416, 44, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, | |
| 1212 | + {true, false, true, 30, 104, 416, 44, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, //10 | |
| 1213 | 1213 | {true, false, true, 30, 16, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1214 | 1214 | {true, true, true, 30, 600, 460, 1, SM_SIZELIMITED_SLICE, 450, 15.0, 1, ""}, |
| 1215 | 1215 | {true, true, true, 30, 340, 96, 24, SM_SIZELIMITED_SLICE, 1000, 30.0, 1, ""}, |
| 1216 | 1216 | {true, true, true, 30, 140, 196, 51, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1217 | − {true, true, true, 30, 110, 296, 50, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, | |
| 1217 | + {true, true, true, 30, 110, 296, 50, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, //15 | |
| 1218 | 1218 | {true, true, true, 30, 104, 416, 44, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1219 | 1219 | {true, true, true, 30, 16, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1220 | − {false, false, true, 3, 4096, 2304, 2, SM_SINGLE_SLICE, 0, 7.5, 1, ""}, // large picture size | |
| 1221 | 1220 | {false, true, false, 30, 32, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 1, ""}, |
| 1222 | 1221 | {false, true, false, 30, 600, 460, 1, SM_SIZELIMITED_SLICE, 450, 15.0, 4, ""}, |
| 1223 | − {false, true, false, 30, 340, 96, 24, SM_SIZELIMITED_SLICE, 1000, 30.0, 2, ""}, | |
| 1222 | + {false, true, false, 30, 340, 96, 24, SM_SIZELIMITED_SLICE, 1000, 30.0, 2, ""}, //20 | |
| 1224 | 1223 | {false, true, false, 30, 140, 196, 51, SM_SIZELIMITED_SLICE, 500, 7.5, 3, ""}, |
| 1225 | 1224 | {false, true, false, 30, 110, 296, 50, SM_SIZELIMITED_SLICE, 500, 7.5, 2, ""}, |
| 1226 | 1225 | {false, true, false, 30, 104, 416, 44, SM_SIZELIMITED_SLICE, 500, 7.5, 2, ""}, |
| 1227 | 1226 | {false, true, false, 30, 16, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 3, ""}, |
| 1228 | − {false, true, false, 30, 32, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 3, ""}, | |
| 1227 | + {false, true, false, 30, 32, 16, 2, SM_SIZELIMITED_SLICE, 500, 7.5, 3, ""}, //25 | |
| 1229 | 1228 | {false, false, true, 30, 600, 460, 1, SM_FIXEDSLCNUM_SLICE, 0, 15.0, 4, ""}, |
| 1230 | 1229 | {false, false, true, 30, 600, 460, 1, SM_FIXEDSLCNUM_SLICE, 0, 15.0, 8, ""}, |
| 1230 | + //for large size tests | |
| 1231 | + {true, false, true, 30, 4096, 2304, 1, SM_RESERVED, 0, 7.5, 1, ""}, // large picture size | |
| 1232 | + {true, false, true, 30, 2304, 4096, 1, SM_RESERVED, 0, 15.0, 1, ""}, | |
| 1233 | + {true, false, true, 30, 3072, 3072, 1, SM_RESERVED, 0, 15.0, 1, ""}, | |
| 1234 | + //{true, false, true, 30, 3072, 3072, 1, SM_RESERVED, 0, 15.0, 4, ""}, //14760 | |
| 1235 | + {false, false, true, 30, 1072, 8576, 1, SM_RESERVED, 0, 15.0, 1, ""}, | |
| 1236 | + //{false, true, true, 30, 8576, 1072, 24, SM_SINGLE_SLICE, 0, 15.0, 1, ""}, //14754 | |
| 1237 | + //{false, false, false, 2, 8576, 1088, 24, SM_SINGLE_SLICE, 0, 15.0, 1, ""}, //14755 | |
| 1238 | + //{false, false, false, 2, 1088, 8576, 24, SM_SINGLE_SLICE, 0, 15.0, 1, ""}, //14755 | |
| 1239 | + {false, false, true, 1, 8688, 1072, 24, SM_SINGLE_SLICE, 0, 15.0, 1, ""}, //Annex A: PicWidthInMbs <= sqrt(36864*8) = 543; 543*16=8688; 36864/543=67; 67*16=1072 | |
| 1240 | + {false, false, true, 1, 1072, 8688, 24, SM_SINGLE_SLICE, 0, 15.0, 1, ""}, //Annex A: FrameHeightInMbs <= sqrt(36864*8) = 543; 543*16=8688; 36864/543=67; 67*16=1072 | |
| 1241 | + //{false, false, true, 30, 589824, 16, 24, SM_RESERVED, 0, 15.0, 1, ""}, | |
| 1242 | + //{false, false, true, 30, 589824, 16, 24, SM_RESERVED, 0, 15.0, 1, ""}, | |
| 1231 | 1243 | }; |
| 1232 | 1244 | |
| 1233 | 1245 | class EncodeTestAPI : public ::testing::TestWithParam<EncodeOptionParam>, public ::EncodeDecodeTestAPIBase { |
| @@ -1259,10 +1271,6 @@ INSTANTIATE_TEST_CASE_P (EncodeDecodeTestAPIBase, EncodeTestAPI, · 25 unmodified lines | ||
| 1259 | 1271 | |
| 1260 | 1272 | TEST_P (EncodeTestAPI, SetEncOptionSize) { |
| 1261 | 1273 | EncodeOptionParam p = GetParam(); |
| 1262 | − FILE* pFile = NULL; | |
| 1263 | − if (p.sFileSave != NULL && strlen (p.sFileSave) > 0) { | |
| 1264 | − pFile = fopen (p.sFileSave, "wb"); | |
| 1265 | − } | |
| 1266 | 1274 | memset (¶m_, 0, sizeof (SEncParamExt)); |
| 1267 | 1275 | encoder_->GetDefaultParams (¶m_); |
| 1268 | 1276 | param_.uiMaxNalSize = p.uiMaxNalLen; |
| @@ -1275,66 +1283,95 @@ TEST_P (EncodeTestAPI, SetEncOptionSize) { · 6 unmodified lines | ||
| 1275 | 1283 | param_.iRCMode = RC_OFF_MODE; //rc off |
| 1276 | 1284 | param_.iMultipleThreadIdc = p.iThreads; |
| 1277 | 1285 | param_.iNumRefFrame = AUTO_REF_PIC_COUNT; |
| 1278 | − param_.sSpatialLayers[0].iVideoWidth = p.iWidth ; | |
| 1286 | + param_.sSpatialLayers[0].iVideoWidth = p.iWidth; | |
| 1279 | 1287 | param_.sSpatialLayers[0].iVideoHeight = p.iHeight; |
| 1280 | 1288 | param_.sSpatialLayers[0].fFrameRate = p.fFramerate; |
| 1281 | − param_.sSpatialLayers[0].sSliceArgument.uiSliceMode = p.eSliceMode; | |
| 1282 | − if (SM_FIXEDSLCNUM_SLICE == p.eSliceMode) { | |
| 1283 | − param_.sSpatialLayers[0].sSliceArgument.uiSliceNum = 8; | |
| 1284 | − } | |
| 1285 | 1289 | |
| 1286 | − encoder_->Uninitialize(); | |
| 1287 | − int rv = encoder_->InitializeExt (¶m_); | |
| 1288 | − ASSERT_TRUE (rv == cmResultSuccess); | |
| 1289 | − InitialEncDec (p.iWidth, p.iHeight); | |
| 1290 | + int iSliceModeTestNum = 1; | |
| 1291 | + if (SM_RESERVED == p.eSliceMode) { | |
| 1292 | + iSliceModeTestNum = SLICE_MODE_NUM; | |
| 1293 | + } | |
| 1290 | 1294 | |
| 1291 | − int32_t iTraceLevel = WELS_LOG_QUIET; | |
| 1292 | − encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel); | |
| 1293 | − decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel); | |
| 1294 | − int32_t iSpsPpsIdAddition = 1; | |
| 1295 | − encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iSpsPpsIdAddition); | |
| 1296 | − int32_t iIDRPeriod = (int32_t) pow (2.0f, (param_.iTemporalLayerNum - 1)) * ((rand() % 5) + 1); | |
| 1297 | − encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod); | |
| 1298 | − int iIdx = 0; | |
| 1299 | − int iLen; | |
| 1300 | − unsigned char* pData[3] = { NULL }; | |
| 1295 | + for (int iSliceIdx = 0; iSliceIdx < iSliceModeTestNum; iSliceIdx++) { | |
| 1296 | + if (1 == iSliceModeTestNum) { | |
| 1297 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceMode = p.eSliceMode; | |
| 1298 | + } else { | |
| 1299 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceMode = static_cast<SliceModeEnum> (iSliceIdx); | |
| 1300 | + } | |
| 1301 | 1301 | |
| 1302 | − //FIXME: remove this after the multi-thread case is correctly handled in encoder | |
| 1303 | − if (p.iThreads > 1 && SM_SIZELIMITED_SLICE == p.eSliceMode) { | |
| 1304 | − p.bAllRandom = false; | |
| 1305 | − } | |
| 1302 | + FILE* pFile = NULL; | |
| 1303 | + if (p.sFileSave != NULL && strlen (p.sFileSave) > 0) { | |
| 1304 | + pFile = fopen (p.sFileSave, "wb"); | |
| 1305 | + } | |
| 1306 | 1306 | |
| 1307 | − while (iIdx <= p.iNumframes) { | |
| 1308 | − EncodeOneFrameRandom (0, p.bAllRandom); | |
| 1309 | − encToDecData (info, iLen); | |
| 1310 | − if (pFile) { | |
| 1311 | − fwrite (info.sLayerInfo[0].pBsBuf, iLen, 1, pFile); | |
| 1312 | − fflush (pFile); | |
| 1307 | + if (SM_FIXEDSLCNUM_SLICE == param_.sSpatialLayers[0].sSliceArgument.uiSliceMode) { | |
| 1308 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceNum = 8; | |
| 1309 | + } else if (SM_RASTER_SLICE == param_.sSpatialLayers[0].sSliceArgument.uiSliceMode) { | |
| 1310 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceMbNum[0] = | |
| 1311 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceMbNum[1] = | |
| 1312 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceMbNum[2] = | |
| 1313 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceMbNum[3] = ((p.iWidth * p.iHeight) >> 10); | |
| 1314 | + } else if (SM_SIZELIMITED_SLICE == param_.sSpatialLayers[0].sSliceArgument.uiSliceMode && 450 > p.uiMaxNalLen) { | |
| 1315 | + param_.uiMaxNalSize = 450; | |
| 1316 | + param_.sSpatialLayers[0].sSliceArgument.uiSliceSizeConstraint = 450; | |
| 1313 | 1317 | } |
| 1314 | − memset (&dstBufInfo_, 0, sizeof (SBufferInfo)); | |
| 1315 | − if (iLen && p.bTestDecoder) { | |
| 1316 | − rv = decoder_->DecodeFrameNoDelay (info.sLayerInfo[0].pBsBuf, iLen, pData, &dstBufInfo_); | |
| 1317 | − ASSERT_EQ (rv, 0); | |
| 1318 | − ASSERT_EQ (dstBufInfo_.iBufferStatus, 1); | |
| 1318 | + | |
| 1319 | + int32_t iTraceLevel = WELS_LOG_QUIET; | |
| 1320 | + encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &iTraceLevel); | |
| 1321 | + decoder_->SetOption (DECODER_OPTION_TRACE_LEVEL, &iTraceLevel); | |
| 1322 | + | |
| 1323 | + encoder_->Uninitialize(); | |
| 1324 | + int rv = encoder_->InitializeExt (¶m_); | |
| 1325 | + ASSERT_TRUE (rv == cmResultSuccess); | |
| 1326 | + InitialEncDec (p.iWidth, p.iHeight); | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + int32_t iSpsPpsIdAddition = 1; | |
| 1330 | + encoder_->SetOption (ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION, &iSpsPpsIdAddition); | |
| 1331 | + int32_t iIDRPeriod = (int32_t) pow (2.0f, (param_.iTemporalLayerNum - 1)) * ((rand() % 5) + 1); | |
| 1332 | + encoder_->SetOption (ENCODER_OPTION_IDR_INTERVAL, &iIDRPeriod); | |
| 1333 | + int iIdx = 0; | |
| 1334 | + int iLen; | |
| 1335 | + unsigned char* pData[3] = { NULL }; | |
| 1336 | + | |
| 1337 | + //FIXME: remove this after the multi-thread case is correctly handled in encoder | |
| 1338 | + if (p.iThreads > 1 && SM_SIZELIMITED_SLICE == p.eSliceMode) { | |
| 1339 | + p.bAllRandom = false; | |
| 1319 | 1340 | } |
| 1320 | − int iLayer = 0; | |
| 1321 | − while (iLayer < info.iLayerNum) { | |
| 1322 | − SLayerBSInfo* pLayerBsInfo = &info.sLayerInfo[iLayer]; | |
| 1323 | − if (pLayerBsInfo != NULL) { | |
| 1324 | − int iNalIdx = WELS_MAX (pLayerBsInfo->iNalCount - 2, 0); // ignore last slice under single slice mode | |
| 1325 | − do { | |
| 1326 | − if (p.bTestNalSize) { // ignore the case that 2 MBs in one picture, and the multithreads case, enable them when code is ready | |
| 1327 | − ASSERT_GE (((int)param_.uiMaxNalSize), pLayerBsInfo->pNalLengthInByte[iNalIdx]); | |
| 1328 | − } | |
| 1329 | − -- iNalIdx; | |
| 1330 | − } while (iNalIdx >= 0); | |
| 1341 | + | |
| 1342 | + while (iIdx <= p.iNumframes) { | |
| 1343 | + EncodeOneFrameRandom (0, p.bAllRandom); | |
| 1344 | + encToDecData (info, iLen); | |
| 1345 | + if (pFile) { | |
| 1346 | + fwrite (info.sLayerInfo[0].pBsBuf, iLen, 1, pFile); | |
| 1347 | + fflush (pFile); | |
| 1331 | 1348 | } |
| 1332 | − ++ iLayer; | |
| 1349 | + memset (&dstBufInfo_, 0, sizeof (SBufferInfo)); | |
| 1350 | + if (iLen && p.bTestDecoder) { | |
| 1351 | + rv = decoder_->DecodeFrameNoDelay (info.sLayerInfo[0].pBsBuf, iLen, pData, &dstBufInfo_); | |
| 1352 | + ASSERT_EQ (rv, 0); | |
| 1353 | + ASSERT_EQ (dstBufInfo_.iBufferStatus, 1); | |
| 1354 | + } | |
| 1355 | + int iLayer = 0; | |
| 1356 | + while (iLayer < info.iLayerNum) { | |
| 1357 | + SLayerBSInfo* pLayerBsInfo = &info.sLayerInfo[iLayer]; | |
| 1358 | + if (pLayerBsInfo != NULL) { | |
| 1359 | + int iNalIdx = WELS_MAX (pLayerBsInfo->iNalCount - 2, 0); // ignore last slice under single slice mode | |
| 1360 | + do { | |
| 1361 | + if (SM_SIZELIMITED_SLICE == p.eSliceMode | |
| 1362 | + && p.bTestNalSize) { // ignore the case that 2 MBs in one picture, and the multithreads case, enable them when code is ready | |
| 1363 | + ASSERT_GE (((int)param_.uiMaxNalSize), pLayerBsInfo->pNalLengthInByte[iNalIdx]); | |
| 1364 | + } | |
| 1365 | + -- iNalIdx; | |
| 1366 | + } while (iNalIdx >= 0); | |
| 1367 | + } | |
| 1368 | + ++ iLayer; | |
| 1369 | + } | |
| 1370 | + iIdx++; | |
| 1371 | + } | |
| 1372 | + if (pFile) { | |
| 1373 | + fclose (pFile); | |
| 1333 | 1374 | } |
| 1334 | − iIdx++; | |
| 1335 | − } | |
| 1336 | − if (pFile) { | |
| 1337 | − fclose (pFile); | |
| 1338 | 1375 | } |
| 1339 | 1376 | } |
| 1340 | 1377 | |