annotate motion_test.c @ 1985:b2bc62fdecc0 libavcodec

move the 0x80 vector outside of the function, thus saving the compiler the trouble of having to initialize each byte on the stack individually
author melanson
date Tue, 27 Apr 2004 04:06:24 +0000
parents 1e39f273ecd6
children ef2149182f1c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
429
718a22dc121f license/copyright change
glantau
parents: 75
diff changeset
1 /* motion test. (c) 2001 Fabrice Bellard. */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
2
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
3 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
4 * @file motion_test.c
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
5 * motion test.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
6 */
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
7
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
8 #include <stdlib.h>
bb7d6fe159ad motion test
glantau
parents:
diff changeset
9 #include <stdio.h>
bb7d6fe159ad motion test
glantau
parents:
diff changeset
10 #include <string.h>
bb7d6fe159ad motion test
glantau
parents:
diff changeset
11 #include <sys/time.h>
bb7d6fe159ad motion test
glantau
parents:
diff changeset
12 #include <unistd.h>
bb7d6fe159ad motion test
glantau
parents:
diff changeset
13
bb7d6fe159ad motion test
glantau
parents:
diff changeset
14 #include "dsputil.h"
bb7d6fe159ad motion test
glantau
parents:
diff changeset
15
bb7d6fe159ad motion test
glantau
parents:
diff changeset
16 #include "i386/mmx.h"
bb7d6fe159ad motion test
glantau
parents:
diff changeset
17
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
18 int pix_abs16x16_mmx(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
19 int pix_abs16x16_mmx1(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
20 int pix_abs16x16_x2_mmx(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
21 int pix_abs16x16_x2_mmx1(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
22 int pix_abs16x16_x2_c(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
23 int pix_abs16x16_y2_mmx(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
24 int pix_abs16x16_y2_mmx1(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
25 int pix_abs16x16_y2_c(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
26 int pix_abs16x16_xy2_mmx(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
27 int pix_abs16x16_xy2_mmx1(uint8_t *blk1, uint8_t *blk2, int lx);
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
28 int pix_abs16x16_xy2_c(uint8_t *blk1, uint8_t *blk2, int lx);
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
29
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
30 typedef int motion_func(uint8_t *blk1, uint8_t *blk2, int lx);
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
31
bb7d6fe159ad motion test
glantau
parents:
diff changeset
32 #define WIDTH 64
bb7d6fe159ad motion test
glantau
parents:
diff changeset
33 #define HEIGHT 64
bb7d6fe159ad motion test
glantau
parents:
diff changeset
34
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
35 uint8_t img1[WIDTH * HEIGHT];
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
36 uint8_t img2[WIDTH * HEIGHT];
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
37
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
38 void fill_random(uint8_t *tab, int size)
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
39 {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
40 int i;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
41 for(i=0;i<size;i++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
42 #if 1
bb7d6fe159ad motion test
glantau
parents:
diff changeset
43 tab[i] = random() % 256;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
44 #else
bb7d6fe159ad motion test
glantau
parents:
diff changeset
45 tab[i] = i;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
46 #endif
bb7d6fe159ad motion test
glantau
parents:
diff changeset
47 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
48 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
49
bb7d6fe159ad motion test
glantau
parents:
diff changeset
50 void help(void)
bb7d6fe159ad motion test
glantau
parents:
diff changeset
51 {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
52 printf("motion-test [-h]\n"
bb7d6fe159ad motion test
glantau
parents:
diff changeset
53 "test motion implementations\n");
bb7d6fe159ad motion test
glantau
parents:
diff changeset
54 exit(1);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
55 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
56
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
57 int64_t gettime(void)
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
58 {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
59 struct timeval tv;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
60 gettimeofday(&tv,NULL);
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
61 return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
62 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
63
bb7d6fe159ad motion test
glantau
parents:
diff changeset
64 #define NB_ITS 500
bb7d6fe159ad motion test
glantau
parents:
diff changeset
65
bb7d6fe159ad motion test
glantau
parents:
diff changeset
66 int dummy;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
67
bb7d6fe159ad motion test
glantau
parents:
diff changeset
68 void test_motion(const char *name,
bb7d6fe159ad motion test
glantau
parents:
diff changeset
69 motion_func *test_func, motion_func *ref_func)
bb7d6fe159ad motion test
glantau
parents:
diff changeset
70 {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
71 int x, y, d1, d2, it;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
72 uint8_t *ptr;
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
73 int64_t ti;
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
74 printf("testing '%s'\n", name);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
76 /* test correctness */
bb7d6fe159ad motion test
glantau
parents:
diff changeset
77 for(it=0;it<20;it++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
78
bb7d6fe159ad motion test
glantau
parents:
diff changeset
79 fill_random(img1, WIDTH * HEIGHT);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
80 fill_random(img2, WIDTH * HEIGHT);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
81
bb7d6fe159ad motion test
glantau
parents:
diff changeset
82 for(y=0;y<HEIGHT-17;y++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
83 for(x=0;x<WIDTH-17;x++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
84 ptr = img2 + y * WIDTH + x;
644
641708b5c33c fixing tests
michaelni
parents: 429
diff changeset
85 d1 = test_func(img1, ptr, WIDTH);
641708b5c33c fixing tests
michaelni
parents: 429
diff changeset
86 d2 = ref_func(img1, ptr, WIDTH);
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
87 if (d1 != d2) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
88 printf("error: mmx=%d c=%d\n", d1, d2);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
89 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
90 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
91 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
92 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
93 emms();
bb7d6fe159ad motion test
glantau
parents:
diff changeset
94
bb7d6fe159ad motion test
glantau
parents:
diff changeset
95 /* speed test */
bb7d6fe159ad motion test
glantau
parents:
diff changeset
96 ti = gettime();
bb7d6fe159ad motion test
glantau
parents:
diff changeset
97 d1 = 0;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
98 for(it=0;it<NB_ITS;it++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
99 for(y=0;y<HEIGHT-17;y++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
100 for(x=0;x<WIDTH-17;x++) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
101 ptr = img2 + y * WIDTH + x;
644
641708b5c33c fixing tests
michaelni
parents: 429
diff changeset
102 d1 += test_func(img1, ptr, WIDTH);
75
bb7d6fe159ad motion test
glantau
parents:
diff changeset
103 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
104 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
105 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
106 emms();
bb7d6fe159ad motion test
glantau
parents:
diff changeset
107 dummy = d1; /* avoid optimisation */
bb7d6fe159ad motion test
glantau
parents:
diff changeset
108 ti = gettime() - ti;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
109
bb7d6fe159ad motion test
glantau
parents:
diff changeset
110 printf(" %0.0f kop/s\n",
bb7d6fe159ad motion test
glantau
parents:
diff changeset
111 (double)NB_ITS * (WIDTH - 16) * (HEIGHT - 16) /
bb7d6fe159ad motion test
glantau
parents:
diff changeset
112 (double)(ti / 1000.0));
bb7d6fe159ad motion test
glantau
parents:
diff changeset
113 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
114
bb7d6fe159ad motion test
glantau
parents:
diff changeset
115
bb7d6fe159ad motion test
glantau
parents:
diff changeset
116 int main(int argc, char **argv)
bb7d6fe159ad motion test
glantau
parents:
diff changeset
117 {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
118 int c;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
119
bb7d6fe159ad motion test
glantau
parents:
diff changeset
120 for(;;) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
121 c = getopt(argc, argv, "h");
bb7d6fe159ad motion test
glantau
parents:
diff changeset
122 if (c == -1)
bb7d6fe159ad motion test
glantau
parents:
diff changeset
123 break;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
124 switch(c) {
bb7d6fe159ad motion test
glantau
parents:
diff changeset
125 case 'h':
bb7d6fe159ad motion test
glantau
parents:
diff changeset
126 help();
bb7d6fe159ad motion test
glantau
parents:
diff changeset
127 break;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
128 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
129 }
bb7d6fe159ad motion test
glantau
parents:
diff changeset
130
bb7d6fe159ad motion test
glantau
parents:
diff changeset
131 printf("ffmpeg motion test\n");
bb7d6fe159ad motion test
glantau
parents:
diff changeset
132
bb7d6fe159ad motion test
glantau
parents:
diff changeset
133 test_motion("mmx", pix_abs16x16_mmx, pix_abs16x16_c);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
134 test_motion("mmx_x2", pix_abs16x16_x2_mmx, pix_abs16x16_x2_c);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
135 test_motion("mmx_y2", pix_abs16x16_y2_mmx, pix_abs16x16_y2_c);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
136 test_motion("mmx_xy2", pix_abs16x16_xy2_mmx, pix_abs16x16_xy2_c);
bb7d6fe159ad motion test
glantau
parents:
diff changeset
137 return 0;
bb7d6fe159ad motion test
glantau
parents:
diff changeset
138 }