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
33 #include "mc.h"
44 #include "mem_align.h"
55 #include "cpu_core.h"
6+#include "cpu.h"
67 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
1511 #define MC_BUFF_HEIGHT 30
1612
1713 /**********************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
120116 }
121117
122118 /**********************MC Unit Test OPENH264 Code Begin******************************/
123−#define DEF_MCCOPYTEST(iH,iW) \
119+#define DEF_MCCOPYTEST(iH,iW, forceC) \
124120 TEST(McCopy_c,iW##x##iH) \
125121 { \
126122 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+ { \
135142 for(int32_t i=0;i<MC_BUFF_SRC_STRIDE;i++) \
136143 { \
137− uSrcAnchor[j][i] = uSrcTest[j][i] = rand()%256; \
144+ uSrcAnchor[j][i] = uSrcTest[j][i] = rand()%256; \
138145 } \
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+ { \
146153 for(int32_t i=0;i<MC_BUFF_DST_STRIDE;i++) \
147154 { \
148− ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \
155+ ASSERT_EQ(uDstAnchor[j][i],uDstTest[j][i]); \
149156 } \
150− } \
157+ } \
158+ }\
151159 }
152160
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)
163171
164172 #define DEF_LUMA_MCTEST_SUBCASE(a,b,iW,iH) \
165173 TEST(McHorVer##a##b##_c,iW##x##iH) \
@@ -167,8 +175,8 @@ TEST(McHorVer##a##b##_c,iW##x##iH) \ · 1 unmodified line
167175 SMcFunc sMcFunc; \
168176 uint8_t uSrcAnchor[4][MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE]; \
169177 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))); \
172180 uint8_t* uSrcInputAnchor[4]; \
173181 int16_t pBuf[MC_BUFF_DST_STRIDE]; \
174182 uSrcInputAnchor[0] = &uSrcAnchor[0][4][4]; \
@@ -183,19 +191,31 @@ TEST(McHorVer##a##b##_c,iW##x##iH) \ · 8 unmodified lines
183191 uSrcAnchor[0][j][i] = uSrcTest[j][i] = rand()%256; \
184192 }\
185193 }\
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+ }\
199219 }
200220
201221 #define DEF_LUMA_MCTEST(a,b) \
@@ -229,8 +249,8 @@ TEST(McChromaWithFragMv_##a##b##_c,iW##x##iH) \ · 27 unmodified lines
229249 SMcFunc sMcFunc; \
230250 uint8_t uSrcAnchor[MC_BUFF_HEIGHT][MC_BUFF_SRC_STRIDE*2]; \
231251 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))); \
234254 srand((unsigned int)time(0)); \
235255 for(int32_t j=0;j<MC_BUFF_HEIGHT;j++) \
236256 {\
@@ -239,18 +259,30 @@ TEST(McChromaWithFragMv_##a##b##_c,iW##x##iH) \ · 2 unmodified lines
239259 uSrcAnchor[j][i*2] = uSrcTest[j][i] = rand()%256; \
240260 }\
241261 }\
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+ }\
254286 }
255287
256288 #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