Showing the changes to test/encoder/EncUT_MotionCompensation.cpp (1 of 1 file). Show all
Unified · Split
| @@ -36,3 +36,84 @@ DEF_CHROMA_MCTEST_SUBCASE(pfx,a,b,8,4) \ · 35 unmodified lines | |||
| 36 | DEF_CHROMA_MCTEST_SUBCASE(pfx,a,b,8,8) | 36 | DEF_CHROMA_MCTEST_SUBCASE(pfx,a,b,8,8) |
| 37 | 37 | ||
| 38 | #include "mc_test_common.h" | 38 | #include "mc_test_common.h" |
| 39 | |||
| 40 | TEST (EncMcAvg, PixelAvg) { | ||
| 41 | SMcFunc sMcFunc; | ||
| 42 | for (int32_t k = 0; k < 2; k++) { | ||
| 43 | for (int32_t w = 0; w < 2; w++) { | ||
| 44 | int32_t width = 8 << w; | ||
| 45 | int32_t height = 16; | ||
| 46 | uint32_t uiCpuFlag = k == 0 ? 0 : WelsCPUFeatureDetect (NULL); | ||
| 47 | WelsInitMcFuncs (&sMcFunc, uiCpuFlag); | ||
| 48 | uint8_t uSrc1[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; | ||
| 49 | uint8_t uSrc2[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; | ||
| 50 | ENFORCE_STACK_ALIGN_2D (uint8_t, uDstAnchor, MC_BUFF_HEIGHT, MC_BUFF_DST_STRIDE, 16); | ||
| 51 | ENFORCE_STACK_ALIGN_2D (uint8_t, uDstTest, MC_BUFF_HEIGHT, MC_BUFF_DST_STRIDE, 16); | ||
| 52 | for (int32_t j = 0; j < MC_BUFF_HEIGHT; j++) { | ||
| 53 | for (int32_t i = 0; i < MC_BUFF_SRC_STRIDE; i++) { | ||
| 54 | uSrc1[j][i] = rand() % 256; | ||
| 55 | uSrc2[j][i] = rand() % 256; | ||
| 56 | } | ||
| 57 | } | ||
| 58 | PixelAvgAnchor (uDstAnchor[0], MC_BUFF_DST_STRIDE, uSrc1[0], MC_BUFF_SRC_STRIDE, uSrc2[0], MC_BUFF_SRC_STRIDE, width, | ||
| 59 | height); | ||
| 60 | sMcFunc.pfSampleAveraging[w] (uDstTest[0], MC_BUFF_DST_STRIDE, uSrc1[0], MC_BUFF_SRC_STRIDE, uSrc2[0], | ||
| 61 | MC_BUFF_SRC_STRIDE, height); | ||
| 62 | for (int32_t j = 0; j < height; j++) { | ||
| 63 | for (int32_t i = 0; i < width; i++) { | ||
| 64 | ASSERT_EQ (uDstAnchor[j][i], uDstTest[j][i]); | ||
| 65 | } | ||
| 66 | } | ||
| 67 | } | ||
| 68 | } | ||
| 69 | } | ||
| 70 | |||
| 71 | TEST (EncMcHalfpel, LumaHalfpel) { | ||
| 72 | SMcFunc sMcFunc; | ||
| 73 | for (int32_t k = 0; k < 2; k++) { | ||
| 74 | for (int32_t w = 0; w < 2; w++) { | ||
| 75 | int32_t width = 8 << w; | ||
| 76 | int32_t height = 16; | ||
| 77 | uint8_t uAnchor[4][MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; | ||
| 78 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; | ||
| 79 | ENFORCE_STACK_ALIGN_2D (uint8_t, uDstTest, MC_BUFF_HEIGHT, MC_BUFF_DST_STRIDE, 16); | ||
| 80 | uint8_t* uAnchors[4]; | ||
| 81 | int16_t pBuf[MC_BUFF_DST_STRIDE]; | ||
| 82 | uAnchors[0] = &uAnchor[0][4][4]; | ||
| 83 | uAnchors[1] = &uAnchor[1][4][4]; | ||
| 84 | uAnchors[2] = &uAnchor[2][4][4]; | ||
| 85 | uAnchors[3] = &uAnchor[3][4][4]; | ||
| 86 | |||
| 87 | memset (uAnchor, 0, 4 * sizeof (uint8_t)*MC_BUFF_HEIGHT * MC_BUFF_DST_STRIDE); | ||
| 88 | memset (uDstTest, 0, sizeof (uint8_t)*MC_BUFF_HEIGHT * MC_BUFF_DST_STRIDE); | ||
| 89 | for (int32_t j = 0; j < MC_BUFF_HEIGHT; j++) { | ||
| 90 | for (int32_t i = 0; i < MC_BUFF_SRC_STRIDE; i++) { | ||
| 91 | uAnchor[0][j][i] = uSrcTest[j][i] = rand() % 256; | ||
| 92 | } | ||
| 93 | } | ||
| 94 | |||
| 95 | uint32_t uiCpuFlag = k == 0 ? 0 : WelsCPUFeatureDetect (NULL); | ||
| 96 | WelsInitMcFuncs (&sMcFunc, uiCpuFlag); | ||
| 97 | |||
| 98 | MCHalfPelFilterAnchor (uAnchors[1], uAnchors[2], uAnchors[3], uAnchors[0], MC_BUFF_SRC_STRIDE, width, height, pBuf + 4); | ||
| 99 | sMcFunc.pfLumaHalfpelHor (&uSrcTest[4][4], MC_BUFF_SRC_STRIDE, uDstTest[0], MC_BUFF_DST_STRIDE, width + 1, height); | ||
| 100 | for (int32_t j = 0; j < height; j++) { | ||
| 101 | for (int32_t i = 0; i < width; i++) { | ||
| 102 | ASSERT_EQ (uAnchor[1][4 + j][4 + i], uDstTest[j][i]); | ||
| 103 | } | ||
| 104 | } | ||
| 105 | sMcFunc.pfLumaHalfpelVer (&uSrcTest[4][4], MC_BUFF_SRC_STRIDE, uDstTest[0], MC_BUFF_DST_STRIDE, width, height + 1); | ||
| 106 | for (int32_t j = 0; j < height; j++) { | ||
| 107 | for (int32_t i = 0; i < width; i++) { | ||
| 108 | ASSERT_EQ (uAnchor[2][4 + j][4 + i], uDstTest[j][i]); | ||
| 109 | } | ||
| 110 | } | ||
| 111 | sMcFunc.pfLumaHalfpelCen (&uSrcTest[4][4], MC_BUFF_SRC_STRIDE, uDstTest[0], MC_BUFF_DST_STRIDE, width + 1, height + 1); | ||
| 112 | for (int32_t j = 0; j < height; j++) { | ||
| 113 | for (int32_t i = 0; i < width; i++) { | ||
| 114 | ASSERT_EQ (uAnchor[3][4 + j][4 + i], uDstTest[j][i]); | ||
| 115 | } | ||
| 116 | } | ||
| 117 | } | ||
| 118 | } | ||
| 119 | } | ||