History

add ARM and ARM 64 Unit Test for Motion Compensation

syureyi committed 12 years ago

Commit eb115ad1 parent b6ed8cc1 file · +98 −66Browse files

Showing the changes to test/decoder/DecUT_MotionCompensation.cpp (1 of 1 file). Show all

Unified · Split

test/decoder/DecUT_MotionCompensation.cpp+98−66
@@ -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"
6using namespace WelsDec;7using namespace WelsDec;
7#ifdef X86_ASM8
8#define TEST_CASE 09#define MC_BUFF_SRC_STRIDE 32
9//TEST_CASE can be 0,WELS_CPU_SSE2 or WELS_CPU_MMXEXT10#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 3011#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) \
124TEST(McCopy_c,iW##x##iH) \120TEST(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
153DEF_MCCOPYTEST (2, 2)161DEF_MCCOPYTEST (2, 2, 1)
154DEF_MCCOPYTEST (2, 4)162DEF_MCCOPYTEST (2, 4, 0)
155DEF_MCCOPYTEST (4, 2)163DEF_MCCOPYTEST (4, 2, 1)
156DEF_MCCOPYTEST (4, 4)164DEF_MCCOPYTEST (4, 4, 0)
157DEF_MCCOPYTEST (4, 8)165DEF_MCCOPYTEST (4, 8, 0)
158DEF_MCCOPYTEST (8, 4)166DEF_MCCOPYTEST (8, 4, 0)
159DEF_MCCOPYTEST (8, 8)167DEF_MCCOPYTEST (8, 8, 0)
160DEF_MCCOPYTEST (16, 8)168DEF_MCCOPYTEST (16, 8, 0)
161DEF_MCCOPYTEST (8, 16)169DEF_MCCOPYTEST (8, 16, 0)
162DEF_MCCOPYTEST (16, 16)170DEF_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) \
165TEST(McHorVer##a##b##_c,iW##x##iH) \173TEST(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) \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t