Showing the changes to test/decoder/DecUT_MotionCompensation.cpp (1 of 2 files). Show all
Unified · Split
| @@ -0,0 +1,334 @@ | ||
| 1 | +#include<gtest/gtest.h> | |
| 2 | +#include "codec_def.h" | |
| 3 | +#include "mc.h" | |
| 4 | +#include "mem_align.h" | |
| 5 | +#include "cpu_core.h" | |
| 6 | +using namespace WelsDec; | |
| 7 | +#ifdef X86_ASM | |
| 8 | +#define TEST_CASE 0 | |
| 9 | +//TEST_CASE can be 0,WELS_CPU_SSE2 or WELS_CPU_MMXEXT | |
| 10 | +#else | |
| 11 | +#define TEST_CASE 0 | |
| 12 | +#endif | |
| 13 | +#define MC_BUFF_SRC_STRIDE 30 | |
| 14 | +#define MC_BUFF_DST_STRIDE 31 | |
| 15 | +#define MC_BUFF_HEIGHT 30 | |
| 16 | + | |
| 17 | +/**********************MC Unit Test Anchor Code Begin******************************/ | |
| 18 | +bool bQpelNeeded[4][4] = { | |
| 19 | + { false, true, false, true }, | |
| 20 | + { true, true, true, true }, | |
| 21 | + { false, true, false, true }, | |
| 22 | + { true, true, true, true } | |
| 23 | +}; | |
| 24 | +int32_t iHpelRef0Array[4][4] = { | |
| 25 | + { 0, 1, 1, 1 }, | |
| 26 | + { 0, 1, 1, 1 }, | |
| 27 | + { 2, 3, 3, 3 }, | |
| 28 | + { 0, 1, 1, 1 } | |
| 29 | +}; | |
| 30 | +int32_t iHpelRef1Array[4][4] = { | |
| 31 | + { 0, 0, 0, 0 }, | |
| 32 | + { 2, 2, 3, 2 }, | |
| 33 | + { 2, 2, 3, 2 }, | |
| 34 | + { 2, 2, 3, 2 } | |
| 35 | +}; | |
| 36 | +#define FILTER6TAP(pPixBuff, x, iStride) ((pPixBuff)[x-2*iStride] + (pPixBuff)[x+3*iStride] - 5*((pPixBuff)[x-iStride] + (pPixBuff)[x+2*iStride]) + 20*((pPixBuff)[x] + (pPixBuff)[x+iStride])) | |
| 37 | +static inline uint8_t Clip255 (int32_t x) { | |
| 38 | + return ((x & ~255) ? (-x) >> 31 & 255 : x); | |
| 39 | +} | |
| 40 | + | |
| 41 | +void MCCopyAnchor (uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, | |
| 42 | + int32_t iHeight) { | |
| 43 | + for (int32_t y = 0; y < iHeight; y++) { | |
| 44 | + memcpy (pDst, pSrc, iWidth * sizeof (uint8_t)); | |
| 45 | + pSrc += iSrcStride; | |
| 46 | + pDst += iDstStride; | |
| 47 | + } | |
| 48 | +} | |
| 49 | + | |
| 50 | +void MCHalfPelFilterAnchor (uint8_t* pDstH, uint8_t* pDstV, uint8_t* pDstHV, uint8_t* pSrc, | |
| 51 | + int32_t iStride, int32_t iWidth, int32_t iHeight, int16_t* pBuf) { | |
| 52 | + for (int32_t y = 0; y < iHeight; y++) { | |
| 53 | + for (int32_t x = 0; x < iWidth; x++) | |
| 54 | + pDstH[x] = Clip255 ((FILTER6TAP (pSrc, x, 1) + 16) >> 5); | |
| 55 | + for (int32_t x = -2; x < iWidth + 3; x++) { | |
| 56 | + int32_t v = FILTER6TAP (pSrc, x, iStride); | |
| 57 | + pDstV[x] = Clip255 ((v + 16) >> 5); | |
| 58 | + pBuf[x + 2] = v; | |
| 59 | + } | |
| 60 | + for (int32_t x = 0; x < iWidth; x++) | |
| 61 | + pDstHV[x] = Clip255 ((FILTER6TAP (pBuf + 2, x, 1) + 512) >> 10); | |
| 62 | + pDstH += iStride; | |
| 63 | + pDstV += iStride; | |
| 64 | + pDstHV += iStride; | |
| 65 | + pSrc += iStride; | |
| 66 | + } | |
| 67 | +} | |
| 68 | + | |
| 69 | +void PixelAvgAnchor (uint8_t* pDst, int32_t iDstStride, | |
| 70 | + uint8_t* pSrc1, int32_t iSrc1Stride, | |
| 71 | + uint8_t* pSrc2, int32_t iSrc2Stride, int32_t iWidth, int32_t iHeight) { | |
| 72 | + for (int32_t y = 0; y < iHeight; y++) { | |
| 73 | + for (int32_t x = 0; x < iWidth; x++) | |
| 74 | + pDst[x] = (pSrc1[x] + pSrc2[x] + 1) >> 1; | |
| 75 | + pDst += iDstStride; | |
| 76 | + pSrc1 += iSrc1Stride; | |
| 77 | + pSrc2 += iSrc2Stride; | |
| 78 | + } | |
| 79 | +} | |
| 80 | + | |
| 81 | +void MCLumaAnchor (uint8_t* pDst, int32_t iDstStride, uint8_t* pSrc[4], int32_t iSrcStride, | |
| 82 | + int32_t iMvX, int32_t iMvY, int32_t iWidth, int32_t iHeight) { | |
| 83 | + int32_t iMvXIdx = iMvX & 3; | |
| 84 | + int32_t iMvYIdx = iMvY & 3; | |
| 85 | + int32_t iOffset = (iMvY >> 2) * iSrcStride + (iMvX >> 2); | |
| 86 | + uint8_t* pSrc1 = pSrc[iHpelRef0Array[iMvYIdx][iMvXIdx]] + iOffset + ((iMvYIdx) == 3) * iSrcStride; | |
| 87 | + | |
| 88 | + if (bQpelNeeded[iMvYIdx][iMvXIdx]) { | |
| 89 | + uint8_t* pSrc2 = pSrc[iHpelRef1Array[iMvYIdx][iMvXIdx]] + iOffset + ((iMvXIdx) == 3); | |
| 90 | + PixelAvgAnchor (pDst, iDstStride, pSrc1, iSrcStride, pSrc2, iSrcStride, iWidth, iHeight); | |
| 91 | + } else { | |
| 92 | + MCCopyAnchor (pSrc1, iSrcStride, pDst, iDstStride, iWidth, iHeight); | |
| 93 | + } | |
| 94 | +} | |
| 95 | + | |
| 96 | +void MCChromaAnchor (uint8_t* pDstU, uint8_t* pDstV, int32_t iDstStride, uint8_t* pSrc, int32_t iSrcStride, | |
| 97 | + int32_t iMvX, int32_t iMvY, int32_t iWidth, int32_t iHeight) { | |
| 98 | + uint8_t* pSrcTmp; | |
| 99 | + pSrc += (iMvY >> 3) * iSrcStride + (iMvX >> 3) * 2; | |
| 100 | + pSrcTmp = &pSrc[iSrcStride]; | |
| 101 | + | |
| 102 | + int32_t iMvXIdx = iMvX & 0x07; | |
| 103 | + int32_t iMvYIdx = iMvY & 0x07; | |
| 104 | + int32_t iBiPara0 = (8 - iMvXIdx) * (8 - iMvYIdx); | |
| 105 | + int32_t iBiPara1 = iMvXIdx * (8 - iMvYIdx); | |
| 106 | + int32_t iBiPara2 = (8 - iMvXIdx) * iMvYIdx; | |
| 107 | + int32_t iBiPara3 = iMvXIdx * iMvYIdx; | |
| 108 | + for (int32_t y = 0; y < iHeight; y++) { | |
| 109 | + for (int32_t x = 0; x < iWidth; x++) { | |
| 110 | + pDstU[x] = (iBiPara0 * pSrc[2 * x] + iBiPara1 * pSrc[2 * x + 2] + | |
| 111 | + iBiPara2 * pSrcTmp[2 * x] + iBiPara3 * pSrcTmp[2 * x + 2] + 32) >> 6; | |
| 112 | + pDstV[x] = (iBiPara0 * pSrc[2 * x + 1] + iBiPara1 * pSrc[2 * x + 3] + | |
| 113 | + iBiPara2 * pSrcTmp[2 * x + 1] + iBiPara3 * pSrcTmp[2 * x + 3] + 32) >> 6; | |
| 114 | + } | |
| 115 | + pSrc = pSrcTmp; | |
| 116 | + pSrcTmp += iSrcStride; | |
| 117 | + pDstU += iDstStride; | |
| 118 | + pDstV += iDstStride; | |
| 119 | + } | |
| 120 | +} | |
| 121 | + | |
| 122 | +/**********************MC Unit Test OPENH264 Code Begin******************************/ | |
| 123 | +#define DEF_MCCOPYTEST(iH,iW) \ | |
| 124 | +TEST(McCopy_c,iW##x##iH) \ | |
| 125 | +{ \ | |
| 126 | + SMcFunc sMcFunc; \ | |
| 127 | + InitMcFunc(&sMcFunc, TEST_CASE); \ | |
| 128 | + uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | |
| 129 | + uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | |
| 130 | + uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | |
| 131 | + uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | |
| 132 | + srand((unsigned int)time(0)); \ | |
| 133 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 134 | + { \ | |
| 135 | + for(int32_t i=0;i<MC_BUFF_SRC_STRIDE;i++) \ | |
| 136 | + { \ | |
| 137 | + uSrcAnchor[j][i] = uSrcTest[j][i] = rand()%256; \ | |
| 138 | + } \ | |
| 139 | + } \ | |
| 140 | + memset(uDstAnchor,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE);\ | |
| 141 | + memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | |
| 142 | + MCCopyAnchor(uSrcAnchor[0],MC_BUFF_SRC_STRIDE,uDstAnchor[0],MC_BUFF_DST_STRIDE,iW,iH); \ | |
| 143 | + sMcFunc.pMcLumaFunc(uSrcTest[0],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,0,0,iW,iH); \ | |
| 144 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 145 | + { \ | |
| 146 | + for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | |
| 147 | + { \ | |
| 148 | + ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \ | |
| 149 | + } \ | |
| 150 | + } \ | |
| 151 | +} | |
| 152 | + | |
| 153 | +DEF_MCCOPYTEST (2, 2) | |
| 154 | +DEF_MCCOPYTEST (2, 4) | |
| 155 | +DEF_MCCOPYTEST (4, 2) | |
| 156 | +DEF_MCCOPYTEST (4, 4) | |
| 157 | +DEF_MCCOPYTEST (4, 8) | |
| 158 | +DEF_MCCOPYTEST (8, 4) | |
| 159 | +DEF_MCCOPYTEST (8, 8) | |
| 160 | +DEF_MCCOPYTEST (16, 8) | |
| 161 | +DEF_MCCOPYTEST (8, 16) | |
| 162 | +DEF_MCCOPYTEST (16, 16) | |
| 163 | + | |
| 164 | +#define DEF_LUMA_MCTEST_SUBCASE(a,b,iW,iH) \ | |
| 165 | +TEST(McHorVer##a##b##_c,iW##x##iH) \ | |
| 166 | +{ \ | |
| 167 | + SMcFunc sMcFunc; \ | |
| 168 | + uint8_t uSrcAnchor[4][MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | |
| 169 | + uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | |
| 170 | + uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | |
| 171 | + uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | |
| 172 | + uint8_t* uSrcInputAnchor[4]; \ | |
| 173 | + int16_t pBuf[MC_BUFF_DST_STRIDE]; \ | |
| 174 | + uSrcInputAnchor[0] = &uSrcAnchor[0][4][4]; \ | |
| 175 | + uSrcInputAnchor[1] = &uSrcAnchor[1][4][4]; \ | |
| 176 | + uSrcInputAnchor[2] = &uSrcAnchor[2][4][4]; \ | |
| 177 | + uSrcInputAnchor[3] = &uSrcAnchor[3][4][4]; \ | |
| 178 | + srand((unsigned int)time(0)); \ | |
| 179 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 180 | + {\ | |
| 181 | + for(int32_t i=0;i<MC_BUFF_SRC_STRIDE;i++) \ | |
| 182 | + {\ | |
| 183 | + uSrcAnchor[0][j][i] = uSrcTest[j][i] = rand()%256; \ | |
| 184 | + }\ | |
| 185 | + }\ | |
| 186 | + InitMcFunc(&sMcFunc,TEST_CASE);\ | |
| 187 | + memset(uDstAnchor,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | |
| 188 | + memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | |
| 189 | + MCHalfPelFilterAnchor(uSrcInputAnchor[1],uSrcInputAnchor[2],uSrcInputAnchor[3],uSrcInputAnchor[0],MC_BUFF_SRC_STRIDE,iW+1,iH+1,pBuf+4); \ | |
| 190 | + MCLumaAnchor(uDstAnchor[0],MC_BUFF_DST_STRIDE,uSrcInputAnchor,MC_BUFF_SRC_STRIDE,a,b,iW,iH); \ | |
| 191 | + sMcFunc.pMcLumaFunc(&uSrcTest[4][4],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,a,b,iW,iH);\ | |
| 192 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 193 | + { \ | |
| 194 | + for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | |
| 195 | + { \ | |
| 196 | + ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \ | |
| 197 | + } \ | |
| 198 | + } \ | |
| 199 | +} | |
| 200 | + | |
| 201 | +#define DEF_LUMA_MCTEST(a,b) \ | |
| 202 | +DEF_LUMA_MCTEST_SUBCASE(a,b,4,4) \ | |
| 203 | +DEF_LUMA_MCTEST_SUBCASE(a,b,4,8) \ | |
| 204 | +DEF_LUMA_MCTEST_SUBCASE(a,b,8,4) \ | |
| 205 | +DEF_LUMA_MCTEST_SUBCASE(a,b,8,8) \ | |
| 206 | +DEF_LUMA_MCTEST_SUBCASE(a,b,16,8) \ | |
| 207 | +DEF_LUMA_MCTEST_SUBCASE(a,b,8,16) \ | |
| 208 | +DEF_LUMA_MCTEST_SUBCASE(a,b,16,16) | |
| 209 | + | |
| 210 | +DEF_LUMA_MCTEST (0, 1) | |
| 211 | +DEF_LUMA_MCTEST (0, 2) | |
| 212 | +DEF_LUMA_MCTEST (0, 3) | |
| 213 | +DEF_LUMA_MCTEST (1, 0) | |
| 214 | +DEF_LUMA_MCTEST (1, 1) | |
| 215 | +DEF_LUMA_MCTEST (1, 2) | |
| 216 | +DEF_LUMA_MCTEST (1, 3) | |
| 217 | +DEF_LUMA_MCTEST (2, 0) | |
| 218 | +DEF_LUMA_MCTEST (2, 1) | |
| 219 | +DEF_LUMA_MCTEST (2, 2) | |
| 220 | +DEF_LUMA_MCTEST (2, 3) | |
| 221 | +DEF_LUMA_MCTEST (3, 0) | |
| 222 | +DEF_LUMA_MCTEST (3, 1) | |
| 223 | +DEF_LUMA_MCTEST (3, 2) | |
| 224 | +DEF_LUMA_MCTEST (3, 3) | |
| 225 | + | |
| 226 | +#define DEF_CHROMA_MCTEST_SUBCASE(a,b,iW,iH) \ | |
| 227 | +TEST(McChromaWithFragMv_##a##b##_c,iW##x##iH) \ | |
| 228 | +{ \ | |
| 229 | + SMcFunc sMcFunc; \ | |
| 230 | + uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE*2]; \ | |
| 231 | + uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | |
| 232 | + uint8_t uDstAnchor[2][MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | |
| 233 | + uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | |
| 234 | + srand((unsigned int)time(0)); \ | |
| 235 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 236 | + {\ | |
| 237 | + for(int32_t i=0;i<MC_BUFF_SRC_STRIDE;i++) \ | |
| 238 | + {\ | |
| 239 | + uSrcAnchor[j][i*2] = uSrcTest[j][i] = rand()%256; \ | |
| 240 | + }\ | |
| 241 | + }\ | |
| 242 | + InitMcFunc(&sMcFunc,TEST_CASE);\ | |
| 243 | + memset(uDstAnchor[0],0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | |
| 244 | + memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | |
| 245 | + MCChromaAnchor(uDstAnchor[0][0],uDstAnchor[1][0],MC_BUFF_DST_STRIDE,uSrcAnchor[0],MC_BUFF_SRC_STRIDE*2,a,b,iW,iH); \ | |
| 246 | + sMcFunc.pMcChromaFunc(uSrcTest[0],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,a,b,iW,iH);\ | |
| 247 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 248 | + { \ | |
| 249 | + for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | |
| 250 | + { \ | |
| 251 | + ASSERT_EQ(uDstAnchor[0][j][i],uDstTest[j][i]); \ | |
| 252 | + } \ | |
| 253 | + } \ | |
| 254 | +} | |
| 255 | + | |
| 256 | +#define DEF_CHROMA_MCTEST(a,b) \ | |
| 257 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,2,2) \ | |
| 258 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,2,4) \ | |
| 259 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,4,2) \ | |
| 260 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,4,4) \ | |
| 261 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,4,8) \ | |
| 262 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,8,4) \ | |
| 263 | +DEF_CHROMA_MCTEST_SUBCASE(a,b,8,8) | |
| 264 | + | |
| 265 | +DEF_CHROMA_MCTEST (0, 1) | |
| 266 | +DEF_CHROMA_MCTEST (0, 2) | |
| 267 | +DEF_CHROMA_MCTEST (0, 3) | |
| 268 | +DEF_CHROMA_MCTEST (0, 4) | |
| 269 | +DEF_CHROMA_MCTEST (0, 5) | |
| 270 | +DEF_CHROMA_MCTEST (0, 6) | |
| 271 | +DEF_CHROMA_MCTEST (0, 7) | |
| 272 | + | |
| 273 | +DEF_CHROMA_MCTEST (1, 0) | |
| 274 | +DEF_CHROMA_MCTEST (1, 1) | |
| 275 | +DEF_CHROMA_MCTEST (1, 2) | |
| 276 | +DEF_CHROMA_MCTEST (1, 3) | |
| 277 | +DEF_CHROMA_MCTEST (1, 4) | |
| 278 | +DEF_CHROMA_MCTEST (1, 5) | |
| 279 | +DEF_CHROMA_MCTEST (1, 6) | |
| 280 | +DEF_CHROMA_MCTEST (1, 7) | |
| 281 | + | |
| 282 | +DEF_CHROMA_MCTEST (2, 0) | |
| 283 | +DEF_CHROMA_MCTEST (2, 1) | |
| 284 | +DEF_CHROMA_MCTEST (2, 2) | |
| 285 | +DEF_CHROMA_MCTEST (2, 3) | |
| 286 | +DEF_CHROMA_MCTEST (2, 4) | |
| 287 | +DEF_CHROMA_MCTEST (2, 5) | |
| 288 | +DEF_CHROMA_MCTEST (2, 6) | |
| 289 | +DEF_CHROMA_MCTEST (2, 7) | |
| 290 | + | |
| 291 | +DEF_CHROMA_MCTEST (3, 0) | |
| 292 | +DEF_CHROMA_MCTEST (3, 1) | |
| 293 | +DEF_CHROMA_MCTEST (3, 2) | |
| 294 | +DEF_CHROMA_MCTEST (3, 3) | |
| 295 | +DEF_CHROMA_MCTEST (3, 4) | |
| 296 | +DEF_CHROMA_MCTEST (3, 5) | |
| 297 | +DEF_CHROMA_MCTEST (3, 6) | |
| 298 | +DEF_CHROMA_MCTEST (3, 7) | |
| 299 | + | |
| 300 | +DEF_CHROMA_MCTEST (4, 0) | |
| 301 | +DEF_CHROMA_MCTEST (4, 1) | |
| 302 | +DEF_CHROMA_MCTEST (4, 2) | |
| 303 | +DEF_CHROMA_MCTEST (4, 3) | |
| 304 | +DEF_CHROMA_MCTEST (4, 4) | |
| 305 | +DEF_CHROMA_MCTEST (4, 5) | |
| 306 | +DEF_CHROMA_MCTEST (4, 6) | |
| 307 | +DEF_CHROMA_MCTEST (4, 7) | |
| 308 | + | |
| 309 | +DEF_CHROMA_MCTEST (5, 0) | |
| 310 | +DEF_CHROMA_MCTEST (5, 1) | |
| 311 | +DEF_CHROMA_MCTEST (5, 2) | |
| 312 | +DEF_CHROMA_MCTEST (5, 3) | |
| 313 | +DEF_CHROMA_MCTEST (5, 4) | |
| 314 | +DEF_CHROMA_MCTEST (5, 5) | |
| 315 | +DEF_CHROMA_MCTEST (5, 6) | |
| 316 | +DEF_CHROMA_MCTEST (5, 7) | |
| 317 | + | |
| 318 | +DEF_CHROMA_MCTEST (6, 0) | |
| 319 | +DEF_CHROMA_MCTEST (6, 1) | |
| 320 | +DEF_CHROMA_MCTEST (6, 2) | |
| 321 | +DEF_CHROMA_MCTEST (6, 3) | |
| 322 | +DEF_CHROMA_MCTEST (6, 4) | |
| 323 | +DEF_CHROMA_MCTEST (6, 5) | |
| 324 | +DEF_CHROMA_MCTEST (6, 6) | |
| 325 | +DEF_CHROMA_MCTEST (6, 7) | |
| 326 | + | |
| 327 | +DEF_CHROMA_MCTEST (7, 0) | |
| 328 | +DEF_CHROMA_MCTEST (7, 1) | |
| 329 | +DEF_CHROMA_MCTEST (7, 2) | |
| 330 | +DEF_CHROMA_MCTEST (7, 3) | |
| 331 | +DEF_CHROMA_MCTEST (7, 4) | |
| 332 | +DEF_CHROMA_MCTEST (7, 5) | |
| 333 | +DEF_CHROMA_MCTEST (7, 6) | |
| 334 | +DEF_CHROMA_MCTEST (7, 7) | |