| 404 | } |
| 405 | |
| 406 | void CSliceBufferReallocatTest::SimulateSliceInOneLayer() { |
| 407 | int32_t iLayerIdx = 0; |
| 408 | SSpatialLayerConfig* pLayerCfg = &m_EncContext.pSvcParam->sSpatialLayers[iLayerIdx]; |
| 409 | int32_t iTotalSliceBuffer = m_EncContext.pCurDqLayer->iMaxSliceNum; |
| 410 | int32_t iSimulateSliceNum = rand() % iTotalSliceBuffer + 1; |
| 411 | |
| 412 | if (SM_SIZELIMITED_SLICE == pLayerCfg->sSliceArgument.uiSliceMode) { |
| 413 | int32_t iPartNum = m_EncContext.iActiveThreadsNum; |
| 414 | int32_t iSlicNumPerPart = iSimulateSliceNum / iPartNum; |
| 415 | int32_t iMaxSlcNumInThrd = m_EncContext.pCurDqLayer->sSliceBufferInfo[0].iMaxSliceNum; |
| 416 | int32_t iLastPartSlcNum = 0; |
| 417 | |
| 418 | iSlicNumPerPart = WelsClip3 (iSlicNumPerPart, 1, iMaxSlcNumInThrd); |
| 419 | iLastPartSlcNum = iSimulateSliceNum - iSlicNumPerPart * (iPartNum - 1); |
| 420 | iLastPartSlcNum = WelsClip3 (iLastPartSlcNum, 1, iMaxSlcNumInThrd); |
| 421 | |
| 422 | for (int32_t iPartIdx = 0; iPartIdx < iPartNum; iPartIdx ++) { |
| 423 | int32_t iSlcNumInPart = (iPartIdx < (iPartNum - 1)) ? iSlicNumPerPart : iLastPartSlcNum; |
| 424 | SimulateSliceInOnePartition (iPartNum, iPartIdx, iSlcNumInPart); |
| 425 | } |
| 426 | } else { |
| 427 | for (int32_t iSlcIdx = 0; iSlcIdx < iSimulateSliceNum; iSlcIdx ++) { |
| 428 | int32_t iSlcThrdIdx = RandAvailableThread (&m_EncContext, 1); |
| 429 | ASSERT_TRUE (-1 != iSlcThrdIdx); |
| 430 | |
| 431 | SimulateEncodedOneSlice (iSlcIdx, iSlcThrdIdx); |
| 432 | m_EncContext.pCurDqLayer->sSliceEncCtx.iSliceNumInFrame++; |
| 433 | } |
| 434 | } |
| 435 | } |
| 436 | |
| 437 | TEST_F (CSliceBufferReallocatTest, Reallocate_in_one_partition) { |
| 438 | sWelsEncCtx* pCtx = &m_EncContext; |
nothing calls this directly
no test coverage detected