660 lines · 22.8 KB · C++
RawDownload
void InitRandomLayerData (PDqLayer pDqLayer) {  InitRandomLayerSliceIdc (pDqLayer);  InitRandomLayerMbType (pDqLayer);  InitRandomLayerMvData (pDqLayer);  InitRandomLayerRefIdxData (pDqLayer);} #define TEST_SKIP_MV_PRED \  PredPSkipMvFromNeighbor (&sDqLayer, iWelsMvp); \  bOK = ((iWelsMvp[0] == iAncMvp[0]) && (iWelsMvp[1] == iAncMvp[1])); \  EXPECT_EQ (bOK, true); TEST (PredMvTest, PredSkipMvFromNeighbor) {  const int32_t kiRandTime = 100;  bool bOK = true;  SDqLayer sDqLayer;  int16_t iAncMvp[2], iWelsMvp[2];   memset (&sDqLayer, 0, sizeof (SDqLayer));  //Assume the input data as 352x288 size  //allocate the data  sDqLayer.iMbWidth = 11;  sDqLayer.iMbHeight = 9;  if (AllocLayerData (&sDqLayer)) { //memory allocate failed    FreeLayerData (&sDqLayer);    return;  }  InitRandomLayerData (&sDqLayer); //init MV data, as it would not affect the following logic test #define CURR_MB_IDX (sDqLayer.iMbXyIndex)#define LEFT_MB_IDX (sDqLayer.iMbXyIndex - 1)#define LEFT_MB_BLK 3#define TOP_MB_IDX (sDqLayer.iMbXyIndex - sDqLayer.iMbWidth)#define TOP_MB_BLK 12#define LEFT_TOP_MB_IDX (sDqLayer.iMbXyIndex - sDqLayer.iMbWidth - 1)#define LEFT_TOP_MB_BLK 15#define RIGHT_TOP_MB_IDX (sDqLayer.iMbXyIndex - sDqLayer.iMbWidth + 1)#define RIGHT_TOP_MB_BLK 12   //CASE 1: test MB [0,0], expect mvp = (0,0)  sDqLayer.iMbX = 0;  sDqLayer.iMbY = 0;  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0  TEST_SKIP_MV_PRED;  //CASE 2: test MB [ANY, 0], expect mvp = (0,0)  sDqLayer.iMbX = rand() % sDqLayer.iMbWidth;  sDqLayer.iMbY = 0;  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0  TEST_SKIP_MV_PRED;  //CASE 3: test MB [0, ANY], expect mvp = (0,0)  sDqLayer.iMbX = 0;  sDqLayer.iMbY = rand() % sDqLayer.iMbHeight;  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0  TEST_SKIP_MV_PRED;  //CASE 4.1: test MB [RIGHT_SIDE, ANY]  sDqLayer.iMbX = sDqLayer.iMbWidth - 1;  sDqLayer.iMbY = rand() % (sDqLayer.iMbHeight - 1) + 1; //not equal to 0  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  //CASE 4.1.1: same slice_idc, assume = 0  memset (sDqLayer.pSliceIdc, 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int32_t));  //CASE 4.1.1.1: ALL P modes  memset (sDqLayer.pMbType, MB_TYPE_16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t));  //CASE 4.1.1.1.1: ref_idx = 0, left MV = 0, top MV != 0, expect mvp = (0,0)  memset (sDqLayer.pRefIndex[0], 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (int8_t));  InitRandomLayerMvData (&sDqLayer); //reset Mv data  sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1] = 0; //left_mv = 0  sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][0] = sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][1] = 1; //top_mv != 0  iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0  TEST_SKIP_MV_PRED;  //CASE 4.1.1.1.2: ref_idx = 0, left MV != 0, top MV = 0, expect mvp = (0,0)  memset (sDqLayer.pRefIndex[0], 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (int8_t));  InitRandomLayerMvData (&sDqLayer); //reset Mv data  sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1] = 1; //left_mv != 0  sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][0] = sDqLayer.pMv[0][ TOP_MB_IDX][ TOP_MB_BLK][1] = 0; //top_mv = 0  iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0  TEST_SKIP_MV_PRED;  //CASE 4.1.1.1.3: ref_idx top = 0, others = 1, expect mvp = top mv  InitRandomLayerMvData (&sDqLayer); //reset Mv data  sDqLayer.pRefIndex[0][ TOP_MB_IDX][ TOP_MB_BLK] = 0; //top ref_idx = 0  sDqLayer.pRefIndex[0][LEFT_MB_IDX][LEFT_MB_BLK] = 1; //left ref_idx = 1  sDqLayer.pRefIndex[0][LEFT_TOP_MB_IDX][LEFT_TOP_MB_BLK] = 1; //left_top ref_idx = 1  iAncMvp[0] = sDqLayer.pMv[0][TOP_MB_IDX][TOP_MB_BLK][0];  iAncMvp[1] = sDqLayer.pMv[0][TOP_MB_IDX][TOP_MB_BLK][1];  TEST_SKIP_MV_PRED;  //CASE 4.1.1.1.4: ref_idx left = 0, others = 1, expect mvp = left mv  sDqLayer.pRefIndex[0][ TOP_MB_IDX][ TOP_MB_BLK] = 1; //top ref_idx = 1  sDqLayer.pRefIndex[0][LEFT_MB_IDX][LEFT_MB_BLK] = 0; //left ref_idx = 0  sDqLayer.pRefIndex[0][LEFT_TOP_MB_IDX][LEFT_TOP_MB_BLK] = 1; //left_top ref_idx = 1  iAncMvp[0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0];  iAncMvp[1] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1];  TEST_SKIP_MV_PRED;  //CASE 4.1.1.2: All I  memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t));  //CASE 4.1.1.2.1: left P, expect mvp = left mv  sDqLayer.pMbType[LEFT_MB_IDX] = MB_TYPE_16x16; //left P  iAncMvp[0] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][0];  iAncMvp[1] = sDqLayer.pMv[0][LEFT_MB_IDX][LEFT_MB_BLK][1];  TEST_SKIP_MV_PRED;  //CASE 4.1.1.3: only top P, top ref_idx = 0, expect mvp = top mv  memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB  memset (sDqLayer.pRefIndex[0], 1, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (            int8_t)); // All ref_idx = 1  sDqLayer.pMbType[TOP_MB_IDX] = MB_TYPE_16x16; //top P  sDqLayer.pRefIndex[0][TOP_MB_IDX][TOP_MB_BLK] = 0; //top ref_idx = 0  iAncMvp[0] = sDqLayer.pMv[0][TOP_MB_IDX][TOP_MB_BLK][0];  iAncMvp[1] = sDqLayer.pMv[0][TOP_MB_IDX][TOP_MB_BLK][1];  TEST_SKIP_MV_PRED;  //CASE 4.1.1.4: only left_top P, left_top ref_idx = 0, expect mvp = 0  sDqLayer.iMbX = (rand() % (sDqLayer.iMbWidth - 2)) + 1; //1 ~ (mb_width - 2)  sDqLayer.iMbY = (rand() % (sDqLayer.iMbHeight - 2)) + 1; //1 ~ (mb_height - 2)  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB  memset (sDqLayer.pRefIndex[0], 1, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (            int8_t)); // All ref_idx = 1  sDqLayer.pMbType[LEFT_TOP_MB_IDX] = MB_TYPE_16x16; //top P  sDqLayer.pRefIndex[0][LEFT_TOP_MB_IDX][LEFT_TOP_MB_BLK] = 0; //top ref_idx = 0  iAncMvp[0] = iAncMvp[1] = 0; //expect anchor result to 0  TEST_SKIP_MV_PRED;  //CASE 4.1.1.5: only right_top P, right_top ref_idx = 0, expect mvp = right_top mv  sDqLayer.iMbX = (rand() % (sDqLayer.iMbWidth - 2)) + 1; //1 ~ (mb_width - 2)  sDqLayer.iMbY = (rand() % (sDqLayer.iMbHeight - 2)) + 1; //1 ~ (mb_height - 2)  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  memset (sDqLayer.pMbType, MB_TYPE_INTRA16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB  memset (sDqLayer.pRefIndex[0], 1, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (            int8_t)); // All ref_idx = 1  sDqLayer.pMbType[RIGHT_TOP_MB_IDX] = MB_TYPE_16x16; //top P  sDqLayer.pRefIndex[0][RIGHT_TOP_MB_IDX][RIGHT_TOP_MB_BLK] = 0; //top ref_idx = 0  iAncMvp[0] = sDqLayer.pMv[0][RIGHT_TOP_MB_IDX][RIGHT_TOP_MB_BLK][0];  iAncMvp[1] = sDqLayer.pMv[0][RIGHT_TOP_MB_IDX][RIGHT_TOP_MB_BLK][1];  TEST_SKIP_MV_PRED;  //CASE 4.1.2: different neighbor slice idc for all P and ref_idx = 0, expect mvp = 0  memset (sDqLayer.pMbType, MB_TYPE_16x16, sDqLayer.iMbWidth * sDqLayer.iMbHeight * sizeof (int8_t)); // All I MB  memset (sDqLayer.pRefIndex[0], 0, sDqLayer.iMbWidth * sDqLayer.iMbHeight * MB_BLOCK4x4_NUM * sizeof (            int8_t)); // All ref_idx = 1  sDqLayer.iMbX = (rand() % (sDqLayer.iMbWidth - 2)) + 1; //1 ~ (mb_width - 2)  sDqLayer.iMbY = (rand() % (sDqLayer.iMbHeight - 2)) + 1; //1 ~ (mb_height - 2)  sDqLayer.iMbXyIndex = sDqLayer.iMbY * sDqLayer.iMbWidth + sDqLayer.iMbX;  sDqLayer.pSliceIdc[CURR_MB_IDX] = 5;  sDqLayer.pSliceIdc[LEFT_MB_IDX] = 0;  sDqLayer.pSliceIdc[TOP_MB_IDX] = 1;  sDqLayer.pSliceIdc[LEFT_TOP_MB_IDX] = 2;  sDqLayer.pSliceIdc[RIGHT_TOP_MB_IDX] = 3;  iAncMvp[0] = iAncMvp[1] = 0;  TEST_SKIP_MV_PRED;   //add new specific tests here   //normal tests  int32_t i = 0;  while (i++ < kiRandTime) {    InitRandomLayerData (&sDqLayer); //init MV data, as it would not affect the following logic test    AnchorPredPSkipMvFromNeighbor (&sDqLayer, iAncMvp);    TEST_SKIP_MV_PRED;  }   FreeLayerData (&sDqLayer);}

Lines 501–660 of 660. Previous lines

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t