Showing the changes to test/decoder/DecUT_MotionCompensation.cpp (1 of 1 file). Show all
Unified · Split
| @@ -3,15 +3,11 @@ · 2 unmodified lines | |||
| 3 | #include "mc.h" | 3 | #include "mc.h" |
| 4 | #include "mem_align.h" | 4 | #include "mem_align.h" |
| 5 | #include "cpu_core.h" | 5 | #include "cpu_core.h" |
| 6 | #include "cpu.h" | ||
| 6 | using namespace WelsDec; | 7 | using namespace WelsDec; |
| 7 | #ifdef X86_ASM | 8 | |
| 8 | #define TEST_CASE 0 | 9 | #define MC_BUFF_SRC_STRIDE 32 |
| 9 | //TEST_CASE can be 0,WELS_CPU_SSE2 or WELS_CPU_MMXEXT | 10 | #define MC_BUFF_DST_STRIDE 32 |
| 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 | 11 | #define MC_BUFF_HEIGHT 30 |
| 16 | 12 | ||
| 17 | /**********************MC Unit Test Anchor Code Begin******************************/ | 13 | /**********************MC Unit Test Anchor Code Begin******************************/ |
| @@ -120,46 +116,58 @@ void MCChromaAnchor (uint8_t* pDstU, uint8_t* pDstV, int32_t iDstStride, uint8_t · 102 unmodified lines | |||
| 120 | } | 116 | } |
| 121 | 117 | ||
| 122 | /**********************MC Unit Test OPENH264 Code Begin******************************/ | 118 | /**********************MC Unit Test OPENH264 Code Begin******************************/ |
| 123 | #define DEF_MCCOPYTEST(iH,iW) \ | 119 | #define DEF_MCCOPYTEST(iH,iW, forceC) \ |
| 124 | TEST(McCopy_c,iW##x##iH) \ | 120 | TEST(McCopy_c,iW##x##iH) \ |
| 125 | { \ | 121 | { \ |
| 126 | SMcFunc sMcFunc; \ | 122 | SMcFunc sMcFunc; \ |
| 127 | InitMcFunc(&sMcFunc, TEST_CASE); \ | 123 | int32_t iCpuCores = 1; \ |
| 128 | uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | 124 | uint32_t uiCpuFlag;\ |
| 129 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | 125 | for(int32_t k =0; k<2; k++)\ |
| 130 | uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | 126 | {\ |
| 131 | uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | 127 | if(k==0||forceC!=0)\ |
| 132 | srand((unsigned int)time(0)); \ | 128 | {\ |
| 133 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | 129 | uiCpuFlag = 0;\ |
| 134 | { \ | 130 | }else \ |
| 131 | {\ | ||
| 132 | uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores); \ | ||
| 133 | }\ | ||
| 134 | InitMcFunc(&sMcFunc, uiCpuFlag); \ | ||
| 135 | uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | ||
| 136 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | ||
| 137 | uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ | ||
| 138 | uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ | ||
| 139 | srand((unsigned int)time(0)); \ | ||
| 140 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | ||
| 141 | { \ | ||
| 135 | for(int32_t i=0;i<MC_BUFF_SRC_STRIDE;i++) \ | 142 | for(int32_t i=0;i<MC_BUFF_SRC_STRIDE;i++) \ |
| 136 | { \ | 143 | { \ |
| 137 | uSrcAnchor[j][i] = uSrcTest[j][i] = rand()%256; \ | 144 | uSrcAnchor[j][i] = uSrcTest[j][i] = rand()%256; \ |
| 138 | } \ | 145 | } \ |
| 139 | } \ | 146 | } \ |
| 140 | memset(uDstAnchor,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE);\ | 147 | 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); \ | 148 | 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); \ | 149 | 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); \ | 150 | 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++) \ | 151 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ |
| 145 | { \ | 152 | { \ |
| 146 | for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | 153 | for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ |
| 147 | { \ | 154 | { \ |
| 148 | ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \ | 155 | ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \ |
| 149 | } \ | 156 | } \ |
| 150 | } \ | 157 | } \ |
| 158 | }\ | ||
| 151 | } | 159 | } |
| 152 | 160 | ||
| 153 | DEF_MCCOPYTEST (2, 2) | 161 | DEF_MCCOPYTEST (2, 2, 1) |
| 154 | DEF_MCCOPYTEST (2, 4) | 162 | DEF_MCCOPYTEST (2, 4, 0) |
| 155 | DEF_MCCOPYTEST (4, 2) | 163 | DEF_MCCOPYTEST (4, 2, 1) |
| 156 | DEF_MCCOPYTEST (4, 4) | 164 | DEF_MCCOPYTEST (4, 4, 0) |
| 157 | DEF_MCCOPYTEST (4, 8) | 165 | DEF_MCCOPYTEST (4, 8, 0) |
| 158 | DEF_MCCOPYTEST (8, 4) | 166 | DEF_MCCOPYTEST (8, 4, 0) |
| 159 | DEF_MCCOPYTEST (8, 8) | 167 | DEF_MCCOPYTEST (8, 8, 0) |
| 160 | DEF_MCCOPYTEST (16, 8) | 168 | DEF_MCCOPYTEST (16, 8, 0) |
| 161 | DEF_MCCOPYTEST (8, 16) | 169 | DEF_MCCOPYTEST (8, 16, 0) |
| 162 | DEF_MCCOPYTEST (16, 16) | 170 | DEF_MCCOPYTEST (16, 16, 0) |
| 163 | 171 | ||
| 164 | #define DEF_LUMA_MCTEST_SUBCASE(a,b,iW,iH) \ | 172 | #define DEF_LUMA_MCTEST_SUBCASE(a,b,iW,iH) \ |
| 165 | TEST(McHorVer##a##b##_c,iW##x##iH) \ | 173 | TEST(McHorVer##a##b##_c,iW##x##iH) \ |
| @@ -167,8 +175,8 @@ TEST(McHorVer##a##b##_c,iW##x##iH) \ · 1 unmodified line | |||
| 167 | SMcFunc sMcFunc; \ | 175 | SMcFunc sMcFunc; \ |
| 168 | uint8_t uSrcAnchor[4][MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | 176 | uint8_t uSrcAnchor[4][MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ |
| 169 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | 177 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ |
| 170 | uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | 178 | uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ |
| 171 | uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | 179 | uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ |
| 172 | uint8_t* uSrcInputAnchor[4]; \ | 180 | uint8_t* uSrcInputAnchor[4]; \ |
| 173 | int16_t pBuf[MC_BUFF_DST_STRIDE]; \ | 181 | int16_t pBuf[MC_BUFF_DST_STRIDE]; \ |
| 174 | uSrcInputAnchor[0] = &uSrcAnchor[0][4][4]; \ | 182 | uSrcInputAnchor[0] = &uSrcAnchor[0][4][4]; \ |
| @@ -183,19 +191,31 @@ TEST(McHorVer##a##b##_c,iW##x##iH) \ · 8 unmodified lines | |||
| 183 | uSrcAnchor[0][j][i] = uSrcTest[j][i] = rand()%256; \ | 191 | uSrcAnchor[0][j][i] = uSrcTest[j][i] = rand()%256; \ |
| 184 | }\ | 192 | }\ |
| 185 | }\ | 193 | }\ |
| 186 | InitMcFunc(&sMcFunc,TEST_CASE);\ | 194 | int32_t iCpuCores = 1; \ |
| 187 | memset(uDstAnchor,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | 195 | uint32_t uiCpuFlag;\ |
| 188 | memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | 196 | for(int32_t k =0; k<2; k++)\ |
| 189 | MCHalfPelFilterAnchor(uSrcInputAnchor[1],uSrcInputAnchor[2],uSrcInputAnchor[3],uSrcInputAnchor[0],MC_BUFF_SRC_STRIDE,iW+1,iH+1,pBuf+4); \ | 197 | {\ |
| 190 | MCLumaAnchor(uDstAnchor[0],MC_BUFF_DST_STRIDE,uSrcInputAnchor,MC_BUFF_SRC_STRIDE,a,b,iW,iH); \ | 198 | if(k==0)\ |
| 191 | sMcFunc.pMcLumaFunc(&uSrcTest[4][4],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,a,b,iW,iH);\ | 199 | {\ |
| 192 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | 200 | uiCpuFlag = 0;\ |
| 193 | { \ | 201 | }else \ |
| 194 | for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | 202 | {\ |
| 195 | { \ | 203 | uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores); \ |
| 196 | ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \ | 204 | }\ |
| 197 | } \ | 205 | InitMcFunc(&sMcFunc,uiCpuFlag);\ |
| 198 | } \ | 206 | memset(uDstAnchor,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ |
| 207 | memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | ||
| 208 | MCHalfPelFilterAnchor(uSrcInputAnchor[1],uSrcInputAnchor[2],uSrcInputAnchor[3],uSrcInputAnchor[0],MC_BUFF_SRC_STRIDE,iW+1,iH+1,pBuf+4); \ | ||
| 209 | MCLumaAnchor(uDstAnchor[0],MC_BUFF_DST_STRIDE,uSrcInputAnchor,MC_BUFF_SRC_STRIDE,a,b,iW,iH); \ | ||
| 210 | sMcFunc.pMcLumaFunc(&uSrcTest[4][4],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,a,b,iW,iH);\ | ||
| 211 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | ||
| 212 | { \ | ||
| 213 | for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | ||
| 214 | { \ | ||
| 215 | ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \ | ||
| 216 | } \ | ||
| 217 | } \ | ||
| 218 | }\ | ||
| 199 | } | 219 | } |
| 200 | 220 | ||
| 201 | #define DEF_LUMA_MCTEST(a,b) \ | 221 | #define DEF_LUMA_MCTEST(a,b) \ |
| @@ -229,8 +249,8 @@ TEST(McChromaWithFragMv_##a##b##_c,iW##x##iH) \ · 27 unmodified lines | |||
| 229 | SMcFunc sMcFunc; \ | 249 | SMcFunc sMcFunc; \ |
| 230 | uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE*2]; \ | 250 | uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE*2]; \ |
| 231 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ | 251 | uint8_t uSrcTest[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ |
| 232 | uint8_t uDstAnchor[2][MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | 252 | uint8_t uDstAnchor[2][MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ |
| 233 | uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE]; \ | 253 | uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ |
| 234 | srand((unsigned int)time(0)); \ | 254 | srand((unsigned int)time(0)); \ |
| 235 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | 255 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ |
| 236 | {\ | 256 | {\ |
| @@ -239,18 +259,30 @@ TEST(McChromaWithFragMv_##a##b##_c,iW##x##iH) \ · 2 unmodified lines | |||
| 239 | uSrcAnchor[j][i*2] = uSrcTest[j][i] = rand()%256; \ | 259 | uSrcAnchor[j][i*2] = uSrcTest[j][i] = rand()%256; \ |
| 240 | }\ | 260 | }\ |
| 241 | }\ | 261 | }\ |
| 242 | InitMcFunc(&sMcFunc,TEST_CASE);\ | 262 | int32_t iCpuCores = 1; \ |
| 243 | memset(uDstAnchor[0],0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | 263 | uint32_t uiCpuFlag;\ |
| 244 | memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | 264 | for(int32_t k =0; k<2; k++)\ |
| 245 | MCChromaAnchor(uDstAnchor[0][0],uDstAnchor[1][0],MC_BUFF_DST_STRIDE,uSrcAnchor[0],MC_BUFF_SRC_STRIDE*2,a,b,iW,iH); \ | 265 | {\ |
| 246 | sMcFunc.pMcChromaFunc(uSrcTest[0],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,a,b,iW,iH);\ | 266 | if(k==0)\ |
| 247 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | 267 | {\ |
| 248 | { \ | 268 | uiCpuFlag = 0;\ |
| 249 | for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | 269 | }else \ |
| 250 | { \ | 270 | {\ |
| 251 | ASSERT_EQ(uDstAnchor[0][j][i],uDstTest[j][i]); \ | 271 | uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores); \ |
| 252 | } \ | 272 | }\ |
| 253 | } \ | 273 | InitMcFunc(&sMcFunc,uiCpuFlag);\ |
| 274 | memset(uDstAnchor[0],0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | ||
| 275 | memset(uDstTest,0,sizeof(uint8_t)*MC_BUFF_HEIGHT*MC_BUFF_DST_STRIDE); \ | ||
| 276 | MCChromaAnchor(uDstAnchor[0][0],uDstAnchor[1][0],MC_BUFF_DST_STRIDE,uSrcAnchor[0],MC_BUFF_SRC_STRIDE*2,a,b,iW,iH); \ | ||
| 277 | sMcFunc.pMcChromaFunc(uSrcTest[0],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,a,b,iW,iH);\ | ||
| 278 | for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | ||
| 279 | { \ | ||
| 280 | for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \ | ||
| 281 | { \ | ||
| 282 | ASSERT_EQ(uDstAnchor[0][j][i],uDstTest[j][i]); \ | ||
| 283 | } \ | ||
| 284 | } \ | ||
| 285 | }\ | ||
| 254 | } | 286 | } |
| 255 | 287 | ||
| 256 | #define DEF_CHROMA_MCTEST(a,b) \ | 288 | #define DEF_CHROMA_MCTEST(a,b) \ |