History

[Encoder UT] sample UT code refactor

JuannyWang committed 12 years ago

Commit 1c3c5601 parent f1f3cc72 files · +705 −0Browse files

Showing the changes to test/encoder/EncUT_Sample.cpp (1 of 2 files). Show all

Unified · Split

test/encoder/EncUT_Sample.cpp+704−0
@@ -0,0 +1,704 @@
1+#include<gtest/gtest.h>
2+#include<math.h>
3+#include<stdlib.h>
4+#include<time.h>
5+
6+#include "cpu_core.h"
7+#include "cpu.h"
8+#include "sample.h"
9+#include "sad_common.h"
10+
11+using namespace WelsSVCEnc;
12+
13+#define ASSERT_MEMORY_FAIL2X(A, B) \
14+ if (NULL == B) { \
15+ pMemAlign->WelsFree(A, "Sad_SrcA");\
16+ ASSERT_TRUE(0); \
17+ }
18+
19+#define ASSERT_MEMORY_FAIL3X(A, B, C) \
20+ if (NULL == C) { \
21+ pMemAlign->WelsFree(A, "Sad_SrcA"); \
22+ pMemAlign->WelsFree(B, "Sad_SrcB"); \
23+ ASSERT_TRUE(0); \
24+ }
25+
26+#define PIXEL_STRIDE 32
27+
28+class SadSatdCFuncTest : public testing::Test {
29+public:
30+ virtual void SetUp() {
31+ pMemAlign = new CMemoryAlign(0);
32+
33+ srand((uint32_t)time(NULL));
34+ m_iStrideA = rand()%256 + PIXEL_STRIDE;
35+ m_iStrideB = rand()%256 + PIXEL_STRIDE;
36+ m_pPixSrcA = (uint8_t *)pMemAlign->WelsMalloc(m_iStrideA<<5,"Sad_m_pPixSrcA");
37+ ASSERT_TRUE(NULL != m_pPixSrcA);
38+ m_pPixSrcB = (uint8_t *)pMemAlign->WelsMalloc(m_iStrideB<<5,"Sad_m_pPixSrcB");
39+ ASSERT_MEMORY_FAIL2X(m_pPixSrcA, m_pPixSrcB)
40+ m_pSad = (int32_t*)pMemAlign->WelsMalloc(4*sizeof(int32_t), "m_pSad");
41+ ASSERT_MEMORY_FAIL3X(m_pPixSrcA, m_pPixSrcB, m_pSad)
42+ }
43+ virtual void TearDown() {
44+ pMemAlign->WelsFree(m_pPixSrcA,"Sad_m_pPixSrcA");
45+ pMemAlign->WelsFree(m_pPixSrcB,"Sad_m_pPixSrcB");
46+ pMemAlign->WelsFree(m_pSad,"m_pSad");
47+ delete pMemAlign;
48+ }
49+public:
50+ uint8_t* m_pPixSrcA;
51+ uint8_t* m_pPixSrcB;
52+ int32_t m_iStrideA;
53+ int32_t m_iStrideB;
54+ int32_t* m_pSad;
55+
56+ CMemoryAlign* pMemAlign;
57+};
58+
59+TEST_F(SadSatdCFuncTest, WelsSampleSad4x4_c) {
60+ srand((uint32_t)time(NULL));
61+ for(int i=0; i<(m_iStrideA<<2); i++)
62+ m_pPixSrcA[i]=rand()%256;
63+ for(int i=0; i<(m_iStrideB<<2); i++)
64+ m_pPixSrcB[i]=rand()%256;
65+ uint8_t *pPixA=m_pPixSrcA;
66+ uint8_t *pPixB=m_pPixSrcB;
67+
68+ int32_t iSumSad = 0;
69+ for (int i = 0; i < 4; i++ ) {
70+ for(int j=0; j<4; j++)
71+ iSumSad+=abs(pPixA[j]-pPixB[j]);
72+ pPixA += m_iStrideA;
73+ pPixB += m_iStrideB;
74+ }
75+ EXPECT_EQ(WelsSampleSad4x4_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), iSumSad);
76+}
77+
78+TEST_F(SadSatdCFuncTest, WelsSampleSad8x8_c) {
79+ srand((uint32_t)time(NULL));
80+ for(int i=0; i<(m_iStrideA<<3); i++)
81+ m_pPixSrcA[i]=rand()%256;
82+ for(int i=0; i<(m_iStrideB<<3); i++)
83+ m_pPixSrcB[i]=rand()%256;
84+ uint8_t *pPixA=m_pPixSrcA;
85+ uint8_t *pPixB=m_pPixSrcB;
86+
87+ int32_t iSumSad = 0;
88+ for (int i = 0; i < 8; i++ ) {
89+ for(int j=0; j<8; j++)
90+ iSumSad+=abs(pPixA[j]-pPixB[j]);
91+
92+ pPixA += m_iStrideA;
93+ pPixB += m_iStrideB;
94+ }
95+ EXPECT_EQ(WelsSampleSad8x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), iSumSad);
96+}
97+
98+TEST_F(SadSatdCFuncTest, WelsSampleSad16x8_c) {
99+ srand((uint32_t)time(NULL));
100+ for(int i=0; i<(m_iStrideA<<3); i++)
101+ m_pPixSrcA[i]=rand()%256;
102+ for(int i=0; i<(m_iStrideB<<3); i++)
103+ m_pPixSrcB[i]=rand()%256;
104+ uint8_t *pPixA=m_pPixSrcA;
105+ uint8_t *pPixB=m_pPixSrcB;
106+
107+ int32_t iSumSad = 0;
108+ for (int i = 0; i <8; i++ ) {
109+ for(int j=0; j<16; j++)
110+ iSumSad+=abs(pPixA[j]-pPixB[j]);
111+
112+ pPixA += m_iStrideA;
113+ pPixB += m_iStrideB;
114+ }
115+ EXPECT_EQ(WelsSampleSad16x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), iSumSad);
116+}
117+
118+TEST_F(SadSatdCFuncTest, WelsSampleSad8x16_c) {
119+ srand((uint32_t)time(NULL));
120+ for(int i=0; i<(m_iStrideA<<4); i++)
121+ m_pPixSrcA[i]=rand()%256;
122+ for(int i=0; i<(m_iStrideB<<4); i++)
123+ m_pPixSrcB[i]=rand()%256;
124+ uint8_t *pPixA=m_pPixSrcA;
125+ uint8_t *pPixB=m_pPixSrcB;
126+
127+ int32_t iSumSad = 0;
128+ for (int i = 0; i <16; i++ ) {
129+ for(int j=0; j<8; j++)
130+ iSumSad+=abs(pPixA[j]-pPixB[j]);
131+
132+ pPixA += m_iStrideA;
133+ pPixB += m_iStrideB;
134+ }
135+ EXPECT_EQ(WelsSampleSad8x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), iSumSad);
136+}
137+
138+TEST_F(SadSatdCFuncTest, WelsSampleSad16x16_c) {
139+ srand((uint32_t)time(NULL));
140+ for(int i=0; i<(m_iStrideA<<4); i++)
141+ m_pPixSrcA[i]=rand()%256;
142+ for(int i=0; i<(m_iStrideB<<4); i++)
143+ m_pPixSrcB[i]=rand()%256;
144+ uint8_t *pPixA=m_pPixSrcA;
145+ uint8_t *pPixB=m_pPixSrcB;
146+
147+ int32_t iSumSad = 0;
148+ for (int i = 0; i <16; i++ ) {
149+ for(int j=0; j<16; j++)
150+ iSumSad+=abs(pPixA[j]-pPixB[j]);
151+
152+ pPixA += m_iStrideA;
153+ pPixB += m_iStrideB;
154+ }
155+ EXPECT_EQ(WelsSampleSad16x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), iSumSad);
156+}
157+
158+TEST_F(SadSatdCFuncTest, WelsSampleSatd4x4_c) {
159+ srand((uint32_t)time(NULL));
160+ for(int i=0; i<(m_iStrideA<<2); i++)
161+ m_pPixSrcA[i]=rand()%256;
162+ for(int i=0; i<(m_iStrideB<<2); i++)
163+ m_pPixSrcB[i]=rand()%256;
164+ uint8_t *pPixA=m_pPixSrcA;
165+ uint8_t *pPixB=m_pPixSrcB;
166+
167+ int32_t W[16],T[16],Y[16],k=0;
168+ for(int i=0; i<4; i++) {
169+ for(int j=0; j<4; j++)
170+ W[k++]=pPixA[j]-pPixB[j];
171+ pPixA += m_iStrideA;
172+ pPixB += m_iStrideB;
173+ }
174+
175+ T[0]=W[0]+W[4]+W[8]+W[12];
176+ T[1]=W[1]+W[5]+W[9]+W[13];
177+ T[2]=W[2]+W[6]+W[10]+W[14];
178+ T[3]=W[3]+W[7]+W[11]+W[15];
179+
180+ T[4]=W[0]+W[4]-W[8]-W[12];
181+ T[5]=W[1]+W[5]-W[9]-W[13];
182+ T[6]=W[2]+W[6]-W[10]-W[14];
183+ T[7]=W[3]+W[7]-W[11]-W[15];
184+
185+ T[8]=W[0]-W[4]-W[8]+W[12];
186+ T[9]=W[1]-W[5]-W[9]+W[13];
187+ T[10]=W[2]-W[6]-W[10]+W[14];
188+ T[11]=W[3]-W[7]-W[11]+W[15];
189+
190+ T[12]=W[0]-W[4]+W[8]-W[12];
191+ T[13]=W[1]-W[5]+W[9]-W[13];
192+ T[14]=W[2]-W[6]+W[10]-W[14];
193+ T[15]=W[3]-W[7]+W[11]-W[15];
194+
195+ Y[0]=T[0]+T[1]+T[2]+T[3];
196+ Y[1]=T[0]+T[1]-T[2]-T[3];
197+ Y[2]=T[0]-T[1]-T[2]+T[3];
198+ Y[3]=T[0]-T[1]+T[2]-T[3];
199+
200+ Y[4]=T[4]+T[5]+T[6]+T[7];
201+ Y[5]=T[4]+T[5]-T[6]-T[7];
202+ Y[6]=T[4]-T[5]-T[6]+T[7];
203+ Y[7]=T[4]-T[5]+T[6]-T[7];
204+
205+ Y[8]=T[8]+T[9]+T[10]+T[11];
206+ Y[9]=T[8]+T[9]-T[10]-T[11];
207+ Y[10]=T[8]-T[9]-T[10]+T[11];
208+ Y[11]=T[8]-T[9]+T[10]-T[11];
209+
210+ Y[12]=T[12]+T[13]+T[14]+T[15];
211+ Y[13]=T[12]+T[13]-T[14]-T[15];
212+ Y[14]=T[12]-T[13]-T[14]+T[15];
213+ Y[15]=T[12]-T[13]+T[14]-T[15];
214+
215+ int32_t iSumSatd = 0;
216+ for(int i=0; i<16; i++)
217+ iSumSatd+=abs(Y[i]);
218+
219+ EXPECT_EQ(WelsSampleSatd4x4_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), (iSumSatd+1)>>1);
220+}
221+
222+TEST_F(SadSatdCFuncTest, WelsSampleSadFour16x16_c) {
223+ srand((uint32_t)time(NULL));
224+ for(int i=0; i<(m_iStrideA<<5); i++)
225+ m_pPixSrcA[i]=rand()%256;
226+ for(int i=0; i<(m_iStrideB<<5); i++)
227+ m_pPixSrcB[i]=rand()%256;
228+ uint8_t *pPixA=m_pPixSrcA;
229+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
230+
231+ int32_t iSumSad = 0;
232+ for (int i = 0; i <16; i++ ) {
233+ for(int j=0; j<16; j++) {
234+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
235+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
236+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
237+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
238+ }
239+ pPixA += m_iStrideA;
240+ pPixB += m_iStrideB;
241+ }
242+ WelsSampleSadFour16x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
243+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
244+}
245+
246+TEST_F(SadSatdCFuncTest, WelsSampleSadFour16x8_c) {
247+ srand((uint32_t)time(NULL));
248+ for(int i=0; i<(m_iStrideA<<5); i++)
249+ m_pPixSrcA[i]=rand()%256;
250+ for(int i=0; i<(m_iStrideB<<5); i++)
251+ m_pPixSrcB[i]=rand()%256;
252+ uint8_t *pPixA=m_pPixSrcA;
253+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
254+
255+ int32_t iSumSad = 0;
256+ for (int i = 0; i <8; i++ ) {
257+ for(int j=0; j<16; j++) {
258+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
259+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
260+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
261+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
262+ }
263+ pPixA += m_iStrideA;
264+ pPixB += m_iStrideB;
265+ }
266+
267+ WelsSampleSadFour16x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
268+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
269+}
270+
271+TEST_F(SadSatdCFuncTest, WelsSampleSadFour8x16_c) {
272+ srand((uint32_t)time(NULL));
273+ for(int i=0; i<(m_iStrideA<<5); i++)
274+ m_pPixSrcA[i]=rand()%256;
275+ for(int i=0; i<(m_iStrideB<<5); i++)
276+ m_pPixSrcB[i]=rand()%256;
277+ uint8_t *pPixA=m_pPixSrcA;
278+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
279+
280+ int32_t iSumSad = 0;
281+ for (int i = 0; i <16; i++ ) {
282+ for(int j=0; j<8; j++) {
283+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
284+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
285+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
286+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
287+ }
288+ pPixA += m_iStrideA;
289+ pPixB += m_iStrideB;
290+ }
291+
292+ WelsSampleSadFour8x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
293+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
294+}
295+
296+TEST_F(SadSatdCFuncTest, WelsSampleSadFour8x8_c) {
297+ srand((uint32_t)time(NULL));
298+ for(int i=0; i<(m_iStrideA<<4); i++)
299+ m_pPixSrcA[i]=rand()%256;
300+ for(int i=0; i<(m_iStrideB<<4); i++)
301+ m_pPixSrcB[i]=rand()%256;
302+ uint8_t *pPixA=m_pPixSrcA;
303+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
304+
305+ int32_t iSumSad = 0;
306+ for (int i = 0; i <8; i++ ) {
307+ for(int j=0; j<8; j++) {
308+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
309+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
310+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
311+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
312+ }
313+ pPixA += m_iStrideA;
314+ pPixB += m_iStrideB;
315+ }
316+ WelsSampleSadFour8x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
317+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
318+}
319+
320+TEST_F(SadSatdCFuncTest, WelsSampleSadFour4x4_c) {
321+ srand((uint32_t)time(NULL));
322+ for(int i=0; i<(m_iStrideA<<3); i++)
323+ m_pPixSrcA[i]=rand()%256;
324+ for(int i=0; i<(m_iStrideB<<3); i++)
325+ m_pPixSrcB[i]=rand()%256;
326+ uint8_t *pPixA=m_pPixSrcA;
327+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
328+
329+ int32_t iSumSad = 0;
330+ for (int i = 0; i <4; i++ ) {
331+ for(int j=0; j<4; j++) {
332+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
333+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
334+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
335+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
336+ }
337+ pPixA += m_iStrideA;
338+ pPixB += m_iStrideB;
339+ }
340+ WelsSampleSadFour4x4_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
341+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
342+}
343+
344+#ifdef X86_ASM
345+class SadSatdAssemblyFuncTest : public testing::Test {
346+public:
347+ virtual void SetUp() {
348+ int32_t iCpuCores = 0;
349+ m_uiCpuFeatureFlag = WelsCPUFeatureDetect(&iCpuCores);
350+ pMemAlign = new CMemoryAlign(16);
351+ m_iStrideA = m_iStrideB = PIXEL_STRIDE;
352+ m_pPixSrcA = (uint8_t *)pMemAlign->WelsMalloc(m_iStrideA<<5,"Sad_m_pPixSrcA");
353+ ASSERT_TRUE(NULL != m_pPixSrcA);
354+ m_pPixSrcB = (uint8_t *)pMemAlign->WelsMalloc(m_iStrideB<<5,"Sad_m_pPixSrcB");
355+ ASSERT_MEMORY_FAIL2X(m_pPixSrcA, m_pPixSrcB)
356+ m_pSad = (int32_t*)pMemAlign->WelsMalloc(4*sizeof(int32_t), "m_pSad");
357+ ASSERT_MEMORY_FAIL3X(m_pPixSrcA, m_pPixSrcB, m_pSad)
358+ }
359+ virtual void TearDown() {
360+ pMemAlign->WelsFree(m_pPixSrcA,"Sad_m_pPixSrcA");
361+ pMemAlign->WelsFree(m_pPixSrcB,"Sad_m_pPixSrcB");
362+ pMemAlign->WelsFree(m_pSad,"m_pSad");
363+ delete pMemAlign;
364+ }
365+public:
366+ uint32_t m_uiCpuFeatureFlag;
367+ uint8_t* m_pPixSrcA;
368+ uint8_t* m_pPixSrcB;
369+ int32_t m_iStrideA;
370+ int32_t m_iStrideB;
371+ int32_t* m_pSad;
372+
373+ CMemoryAlign* pMemAlign;
374+};
375+
376+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSad4x4_mmx) {
377+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_MMXEXT))
378+ return;
379+
380+ srand((uint32_t)time(NULL));
381+ for(int i=0; i<(m_iStrideA<<2); i++)
382+ m_pPixSrcA[i]=rand()%256;
383+ for(int i=0; i<(m_iStrideB<<2); i++)
384+ m_pPixSrcB[i]=rand()%256;
385+
386+ EXPECT_EQ(WelsSampleSad4x4_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSad4x4_mmx(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
387+}
388+
389+
390+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSad8x8_sse21) {
391+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
392+ return;
393+
394+ srand((uint32_t)time(NULL));
395+ for(int i=0; i<(m_iStrideA<<3); i++)
396+ m_pPixSrcA[i]=rand()%256;
397+ for(int i=0; i<(m_iStrideB<<3); i++)
398+ m_pPixSrcB[i]=rand()%256;
399+
400+ EXPECT_EQ(WelsSampleSad8x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSad8x8_sse21(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB ));
401+}
402+
403+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSad8x16_sse2) {
404+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
405+ return;
406+ srand((uint32_t)time(NULL));
407+ for(int i=0; i<(m_iStrideA<<4); i++)
408+ m_pPixSrcA[i]=rand()%256;
409+ for(int i=0; i<(m_iStrideB<<4); i++)
410+ m_pPixSrcB[i]=rand()%256;
411+
412+ EXPECT_EQ(WelsSampleSad8x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSad8x16_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
413+}
414+
415+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSad16x8_sse2) {
416+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
417+ return;
418+ srand((uint32_t)time(NULL));
419+ for(int i=0; i<(m_iStrideA<<3); i++)
420+ m_pPixSrcA[i]=rand()%256;
421+ for(int i=0; i<(m_iStrideB<<3); i++)
422+ m_pPixSrcB[i]=rand()%256;
423+
424+ EXPECT_EQ(WelsSampleSad16x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSad16x8_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
425+}
426+
427+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSad16x16_sse2) {
428+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
429+ return;
430+ srand((uint32_t)time(NULL));
431+ for(int i=0; i<(m_iStrideA<<4); i++)
432+ m_pPixSrcA[i]=rand()%256;
433+ for(int i=0; i<(m_iStrideB<<4); i++)
434+ m_pPixSrcB[i]=rand()%256;
435+
436+ EXPECT_EQ(WelsSampleSad16x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSad16x16_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
437+}
438+
439+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd4x4_sse2) {
440+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
441+ return;
442+ srand((uint32_t)time(NULL));
443+ for(int i=0; i<(m_iStrideA<<2); i++)
444+ m_pPixSrcA[i]=rand()%256;
445+ for(int i=0; i<(m_iStrideB<<2); i++)
446+ m_pPixSrcB[i]=rand()%256;
447+
448+ EXPECT_EQ(WelsSampleSatd4x4_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd4x4_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
449+}
450+
451+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd8x8_sse2) {
452+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
453+ return;
454+ srand((uint32_t)time(NULL));
455+ for(int i=0; i<(m_iStrideA<<3); i++)
456+ m_pPixSrcA[i]=rand()%256;
457+ for(int i=0; i<(m_iStrideB<<3); i++)
458+ m_pPixSrcB[i]=rand()%256;
459+
460+ EXPECT_EQ(WelsSampleSatd8x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd8x8_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB ));
461+}
462+
463+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd8x16_sse2) {
464+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
465+ return;
466+ srand((uint32_t)time(NULL));
467+ for(int i=0; i<(m_iStrideA<<4); i++)
468+ m_pPixSrcA[i]=rand()%256;
469+ for(int i=0; i<(m_iStrideB<<4); i++)
470+ m_pPixSrcB[i]=rand()%256;
471+
472+ EXPECT_EQ(WelsSampleSatd8x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd8x16_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
473+}
474+
475+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd16x8_sse2) {
476+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
477+ return;
478+ srand((uint32_t)time(NULL));
479+ for(int i=0; i<(m_iStrideA<<3); i++)
480+ m_pPixSrcA[i]=rand()%256;
481+ for(int i=0; i<(m_iStrideB<<3); i++)
482+ m_pPixSrcB[i]=rand()%256;
483+
484+ EXPECT_EQ(WelsSampleSatd16x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd16x8_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
485+}
486+
487+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd16x16_sse2) {
488+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
489+ return;
490+ srand((uint32_t)time(NULL));
491+ for(int i=0; i<(m_iStrideA<<4); i++)
492+ m_pPixSrcA[i]=rand()%256;
493+ for(int i=0; i<(m_iStrideB<<4); i++)
494+ m_pPixSrcB[i]=rand()%256;
495+
496+ EXPECT_EQ(WelsSampleSatd16x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd16x16_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
497+}
498+
499+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd4x4_sse41) {
500+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
501+ return;
502+ srand((uint32_t)time(NULL));
503+ for(int i=0; i<(m_iStrideA<<2); i++)
504+ m_pPixSrcA[i]=rand()%256;
505+ for(int i=0; i<(m_iStrideB<<2); i++)
506+ m_pPixSrcB[i]=rand()%256;
507+
508+ EXPECT_EQ(WelsSampleSatd4x4_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd4x4_sse41(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
509+}
510+
511+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd8x8_sse41) {
512+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
513+ return;
514+ srand((uint32_t)time(NULL));
515+ for(int i=0; i<(m_iStrideA<<3); i++)
516+ m_pPixSrcA[i]=rand()%256;
517+ for(int i=0; i<(m_iStrideB<<3); i++)
518+ m_pPixSrcB[i]=rand()%256;
519+
520+ EXPECT_EQ(WelsSampleSatd8x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd8x8_sse41(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB ));
521+}
522+
523+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd8x16_sse41) {
524+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
525+ return;
526+ srand((uint32_t)time(NULL));
527+ for(int i=0; i<(m_iStrideA<<4); i++)
528+ m_pPixSrcA[i]=rand()%256;
529+ for(int i=0; i<(m_iStrideB<<4); i++)
530+ m_pPixSrcB[i]=rand()%256;
531+
532+ EXPECT_EQ(WelsSampleSatd8x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd8x16_sse41(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
533+}
534+
535+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd16x8_sse41) {
536+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
537+ return;
538+ srand((uint32_t)time(NULL));
539+ for(int i=0; i<(m_iStrideA<<3); i++)
540+ m_pPixSrcA[i]=rand()%256;
541+ for(int i=0; i<(m_iStrideB<<3); i++)
542+ m_pPixSrcB[i]=rand()%256;
543+
544+ EXPECT_EQ(WelsSampleSatd16x8_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd16x8_sse41(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
545+}
546+
547+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSatd16x16_sse41) {
548+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
549+ return;
550+ srand((uint32_t)time(NULL));
551+ for(int i=0; i<(m_iStrideA<<4); i++)
552+ m_pPixSrcA[i]=rand()%256;
553+ for(int i=0; i<(m_iStrideB<<4); i++)
554+ m_pPixSrcB[i]=rand()%256;
555+
556+ EXPECT_EQ(WelsSampleSatd16x16_c(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB), WelsSampleSatd16x16_sse41(m_pPixSrcA, m_iStrideA, m_pPixSrcB, m_iStrideB));
557+}
558+
559+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSadFour16x16_sse2) {
560+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
561+ return;
562+
563+ srand((uint32_t)time(NULL));
564+ for(int i=0; i<(m_iStrideA<<5); i++)
565+ m_pPixSrcA[i]=rand()%256;
566+ for(int i=0; i<(m_iStrideB<<5); i++)
567+ m_pPixSrcB[i]=rand()%256;
568+ uint8_t *pPixA=m_pPixSrcA;
569+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
570+
571+ int32_t iSumSad = 0;
572+ for (int i = 0; i <16; i++ ) {
573+ for(int j=0; j<16; j++) {
574+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
575+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
576+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
577+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
578+ }
579+
580+ pPixA += m_iStrideA;
581+ pPixB += m_iStrideB;
582+ }
583+
584+ WelsSampleSadFour16x16_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
585+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
586+}
587+
588+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSadFour16x8_sse2) {
589+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
590+ return;
591+
592+ srand((uint32_t)time(NULL));
593+ for(int i=0; i<(m_iStrideA<<5); i++)
594+ m_pPixSrcA[i]=rand()%256;
595+ for(int i=0; i<(m_iStrideB<<5); i++)
596+ m_pPixSrcB[i]=rand()%256;
597+ uint8_t *pPixA=m_pPixSrcA;
598+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
599+
600+ int32_t iSumSad = 0;
601+ for (int i = 0; i <8; i++ ) {
602+ for(int j=0; j<16; j++) {
603+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
604+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
605+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
606+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
607+ }
608+
609+ pPixA += m_iStrideA;
610+ pPixB += m_iStrideB;
611+ }
612+
613+ WelsSampleSadFour16x8_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
614+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
615+}
616+
617+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSadFour8x16_sse2) {
618+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
619+ return;
620+
621+ srand((uint32_t)time(NULL));
622+ for(int i=0; i<(m_iStrideA<<5); i++)
623+ m_pPixSrcA[i]=rand()%256;
624+ for(int i=0; i<(m_iStrideB<<5); i++)
625+ m_pPixSrcB[i]=rand()%256;
626+ uint8_t *pPixA=m_pPixSrcA;
627+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
628+
629+ int32_t iSumSad = 0;
630+ for (int i = 0; i <16; i++ ) {
631+ for(int j=0; j<8; j++) {
632+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
633+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
634+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
635+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
636+ }
637+
638+ pPixA += m_iStrideA;
639+ pPixB += m_iStrideB;
640+ }
641+
642+ WelsSampleSadFour8x16_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
643+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
644+}
645+
646+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSadFour8x8_sse2) {
647+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
648+ return;
649+
650+ srand((uint32_t)time(NULL));
651+ for(int i=0; i<(m_iStrideA<<4); i++)
652+ m_pPixSrcA[i]=rand()%256;
653+ for(int i=0; i<(m_iStrideB<<4); i++)
654+ m_pPixSrcB[i]=rand()%256;
655+ uint8_t *pPixA=m_pPixSrcA;
656+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
657+
658+ int32_t iSumSad = 0;
659+ for (int i = 0; i <8; i++ ) {
660+ for(int j=0; j<8; j++) {
661+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
662+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
663+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
664+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
665+ }
666+
667+ pPixA += m_iStrideA;
668+ pPixB += m_iStrideB;
669+ }
670+
671+ WelsSampleSadFour8x8_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
672+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
673+}
674+
675+
676+TEST_F(SadSatdAssemblyFuncTest, WelsSampleSadFour4x4_sse2) {
677+ if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
678+ return;
679+
680+ srand((uint32_t)time(NULL));
681+ for(int i=0; i<(m_iStrideA<<3); i++)
682+ m_pPixSrcA[i]=rand()%256;
683+ for(int i=0; i<(m_iStrideB<<3); i++)
684+ m_pPixSrcB[i]=rand()%256;
685+ uint8_t *pPixA=m_pPixSrcA;
686+ uint8_t *pPixB=m_pPixSrcB+m_iStrideB;
687+
688+ int32_t iSumSad = 0;
689+ for (int i = 0; i <4; i++ ) {
690+ for(int j=0; j<4; j++) {
691+ iSumSad+=abs(pPixA[j]-pPixB[j-1]);
692+ iSumSad+=abs(pPixA[j]-pPixB[j+1]);
693+ iSumSad+=abs(pPixA[j]-pPixB[j-m_iStrideB]);
694+ iSumSad+=abs(pPixA[j]-pPixB[j+m_iStrideB]);
695+ }
696+
697+ pPixA += m_iStrideA;
698+ pPixB += m_iStrideB;
699+ }
700+
701+ WelsSampleSadFour4x4_sse2(m_pPixSrcA, m_iStrideA, m_pPixSrcB+m_iStrideB, m_iStrideB, m_pSad);
702+ EXPECT_EQ(m_pSad[0]+m_pSad[1]+m_pSad[2]+m_pSad[3],iSumSad);
703+}
704+#endif

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