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
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); }