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 | 3 | #include "mc.h" |
| 4 | 4 | #include "mem_align.h" |
| 5 | 5 | #include "cpu_core.h" |
| 6 | +#include "cpu.h" | |
| 6 | 7 | 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 | |
| 8 | + | |
| 9 | +#define MC_BUFF_SRC_STRIDE 32 | |
| 10 | +#define MC_BUFF_DST_STRIDE 32 | |
| 15 | 11 | #define MC_BUFF_HEIGHT 30 |
| 16 | 12 | |
| 17 | 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 | 118 | /**********************MC Unit Test OPENH264 Code Begin******************************/ |
| 123 | −#define DEF_MCCOPYTEST(iH,iW) \ | |
| 119 | +#define DEF_MCCOPYTEST(iH,iW, forceC) \ | |
| 124 | 120 | TEST(McCopy_c,iW##x##iH) \ |
| 125 | 121 | { \ |
| 126 | 122 | 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 | − { \ | |
| 123 | + int32_t iCpuCores = 1; \ | |
| 124 | + uint32_t uiCpuFlag;\ | |
| 125 | + for(int32_t k =0; k<2; k++)\ | |
| 126 | + {\ | |
| 127 | + if(k==0||forceC!=0)\ | |
| 128 | + {\ | |
| 129 | + uiCpuFlag = 0;\ | |
| 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 | 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 | − } \ | |
| 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 | + } \ | |
| 147 | + memset(uDstAnchor,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); \ | |
| 149 | + MCCopyAnchor(uSrcAnchor[0],MC_BUFF_SRC_STRIDE,uDstAnchor[0],MC_BUFF_DST_STRIDE,iW,iH); \ | |
| 150 | + sMcFunc.pMcLumaFunc(uSrcTest[0],MC_BUFF_SRC_STRIDE,uDstTest[0],MC_BUFF_DST_STRIDE,0,0,iW,iH); \ | |
| 151 | + for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \ | |
| 152 | + { \ | |
| 146 | 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) | |
| 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) | |
| 161 | +DEF_MCCOPYTEST (2, 2, 1) | |
| 162 | +DEF_MCCOPYTEST (2, 4, 0) | |
| 163 | +DEF_MCCOPYTEST (4, 2, 1) | |
| 164 | +DEF_MCCOPYTEST (4, 4, 0) | |
| 165 | +DEF_MCCOPYTEST (4, 8, 0) | |
| 166 | +DEF_MCCOPYTEST (8, 4, 0) | |
| 167 | +DEF_MCCOPYTEST (8, 8, 0) | |
| 168 | +DEF_MCCOPYTEST (16, 8, 0) | |
| 169 | +DEF_MCCOPYTEST (8, 16, 0) | |
| 170 | +DEF_MCCOPYTEST (16, 16, 0) | |
| 163 | 171 | |
| 164 | 172 | #define DEF_LUMA_MCTEST_SUBCASE(a,b,iW,iH) \ |
| 165 | 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 | 175 | SMcFunc sMcFunc; \ |
| 168 | 176 | uint8_t uSrcAnchor[4][MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \ |
| 169 | 177 | 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]; \ | |
| 178 | + uint8_t uDstAnchor[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ | |
| 179 | + uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ | |
| 172 | 180 | uint8_t* uSrcInputAnchor[4]; \ |
| 173 | 181 | int16_t pBuf[MC_BUFF_DST_STRIDE]; \ |
| 174 | 182 | uSrcInputAnchor[0] = &uSrcAnchor[0][4][4]; \ |
| @@ -183,19 +191,31 @@ TEST(McHorVer##a##b##_c,iW##x##iH) \ · 8 unmodified lines | ||
| 183 | 191 | uSrcAnchor[0][j][i] = uSrcTest[j][i] = rand()%256; \ |
| 184 | 192 | }\ |
| 185 | 193 | }\ |
| 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 | − } \ | |
| 194 | + int32_t iCpuCores = 1; \ | |
| 195 | + uint32_t uiCpuFlag;\ | |
| 196 | + for(int32_t k =0; k<2; k++)\ | |
| 197 | + {\ | |
| 198 | + if(k==0)\ | |
| 199 | + {\ | |
| 200 | + uiCpuFlag = 0;\ | |
| 201 | + }else \ | |
| 202 | + {\ | |
| 203 | + uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores); \ | |
| 204 | + }\ | |
| 205 | + InitMcFunc(&sMcFunc,uiCpuFlag);\ | |
| 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 | 221 | #define DEF_LUMA_MCTEST(a,b) \ |
| @@ -229,8 +249,8 @@ TEST(McChromaWithFragMv_##a##b##_c,iW##x##iH) \ · 27 unmodified lines | ||
| 229 | 249 | SMcFunc sMcFunc; \ |
| 230 | 250 | uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE*2]; \ |
| 231 | 251 | 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]; \ | |
| 252 | + uint8_t uDstAnchor[2][MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ | |
| 253 | + uint8_t uDstTest[MC_BUFF_HEIGHT][MC_BUFF_DST_STRIDE] __attribute__ ((aligned(16))); \ | |
| 234 | 254 | srand((unsigned int)time(0)); \ |
| 235 | 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 | 259 | uSrcAnchor[j][i*2] = uSrcTest[j][i] = rand()%256; \ |
| 240 | 260 | }\ |
| 241 | 261 | }\ |
| 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 | − } \ | |
| 262 | + int32_t iCpuCores = 1; \ | |
| 263 | + uint32_t uiCpuFlag;\ | |
| 264 | + for(int32_t k =0; k<2; k++)\ | |
| 265 | + {\ | |
| 266 | + if(k==0)\ | |
| 267 | + {\ | |
| 268 | + uiCpuFlag = 0;\ | |
| 269 | + }else \ | |
| 270 | + {\ | |
| 271 | + uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores); \ | |
| 272 | + }\ | |
| 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 | 288 | #define DEF_CHROMA_MCTEST(a,b) \ |