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
11using 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
28class SadSatdCFuncTest : public testing::Test {
29public:
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 }
49public:
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
59TEST_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
78TEST_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
98TEST_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
118TEST_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
138TEST_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
158TEST_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
222TEST_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
246TEST_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
271TEST_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
296TEST_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
320TEST_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
345class SadSatdAssemblyFuncTest : public testing::Test {
346public:
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 }
365public:
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
376TEST_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
390TEST_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
403TEST_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
415TEST_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
427TEST_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
439TEST_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
451TEST_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
463TEST_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
475TEST_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
487TEST_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
499TEST_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
511TEST_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
523TEST_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
535TEST_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
547TEST_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
559TEST_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
588TEST_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
617TEST_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
646TEST_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
676TEST_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