Mercurial > libavcodec.hg
comparison motion-test.c @ 5121:71d080656056 libavcodec
Adapt to API changes, fix compilation.
patch by Ronald S. Bultje, rbultje ronald.bitfreak net
author | diego |
---|---|
date | Sun, 10 Jun 2007 13:54:11 +0000 |
parents | dd5796283029 |
children | e9f8a337c5ce |
comparison
equal
deleted
inserted
replaced
5120:ae7f2c01811f | 5121:71d080656056 |
---|---|
34 #include "i386/mmx.h" | 34 #include "i386/mmx.h" |
35 | 35 |
36 #undef exit | 36 #undef exit |
37 #undef printf | 37 #undef printf |
38 | 38 |
39 int pix_abs16x16_mmx(uint8_t *blk1, uint8_t *blk2, int lx); | |
40 int pix_abs16x16_mmx1(uint8_t *blk1, uint8_t *blk2, int lx); | |
41 int pix_abs16x16_c(uint8_t *blk1, uint8_t *blk2, int lx); | |
42 int pix_abs16x16_x2_mmx(uint8_t *blk1, uint8_t *blk2, int lx); | |
43 int pix_abs16x16_x2_mmx1(uint8_t *blk1, uint8_t *blk2, int lx); | |
44 int pix_abs16x16_x2_c(uint8_t *blk1, uint8_t *blk2, int lx); | |
45 int pix_abs16x16_y2_mmx(uint8_t *blk1, uint8_t *blk2, int lx); | |
46 int pix_abs16x16_y2_mmx1(uint8_t *blk1, uint8_t *blk2, int lx); | |
47 int pix_abs16x16_y2_c(uint8_t *blk1, uint8_t *blk2, int lx); | |
48 int pix_abs16x16_xy2_mmx(uint8_t *blk1, uint8_t *blk2, int lx); | |
49 int pix_abs16x16_xy2_mmx1(uint8_t *blk1, uint8_t *blk2, int lx); | |
50 int pix_abs16x16_xy2_c(uint8_t *blk1, uint8_t *blk2, int lx); | |
51 | |
52 typedef int motion_func(uint8_t *blk1, uint8_t *blk2, int lx); | |
53 | |
54 #define WIDTH 64 | 39 #define WIDTH 64 |
55 #define HEIGHT 64 | 40 #define HEIGHT 64 |
56 | 41 |
57 uint8_t img1[WIDTH * HEIGHT]; | 42 uint8_t img1[WIDTH * HEIGHT]; |
58 uint8_t img2[WIDTH * HEIGHT]; | 43 uint8_t img2[WIDTH * HEIGHT]; |
86 #define NB_ITS 500 | 71 #define NB_ITS 500 |
87 | 72 |
88 int dummy; | 73 int dummy; |
89 | 74 |
90 void test_motion(const char *name, | 75 void test_motion(const char *name, |
91 motion_func *test_func, motion_func *ref_func) | 76 me_cmp_func test_func, me_cmp_func ref_func) |
92 { | 77 { |
93 int x, y, d1, d2, it; | 78 int x, y, d1, d2, it; |
94 uint8_t *ptr; | 79 uint8_t *ptr; |
95 int64_t ti; | 80 int64_t ti; |
96 printf("testing '%s'\n", name); | 81 printf("testing '%s'\n", name); |
102 fill_random(img2, WIDTH * HEIGHT); | 87 fill_random(img2, WIDTH * HEIGHT); |
103 | 88 |
104 for(y=0;y<HEIGHT-17;y++) { | 89 for(y=0;y<HEIGHT-17;y++) { |
105 for(x=0;x<WIDTH-17;x++) { | 90 for(x=0;x<WIDTH-17;x++) { |
106 ptr = img2 + y * WIDTH + x; | 91 ptr = img2 + y * WIDTH + x; |
107 d1 = test_func(img1, ptr, WIDTH); | 92 d1 = test_func(NULL, img1, ptr, WIDTH, 1); |
108 d2 = ref_func(img1, ptr, WIDTH); | 93 d2 = ref_func(NULL, img1, ptr, WIDTH, 1); |
109 if (d1 != d2) { | 94 if (d1 != d2) { |
110 printf("error: mmx=%d c=%d\n", d1, d2); | 95 printf("error: mmx=%d c=%d\n", d1, d2); |
111 } | 96 } |
112 } | 97 } |
113 } | 98 } |
119 d1 = 0; | 104 d1 = 0; |
120 for(it=0;it<NB_ITS;it++) { | 105 for(it=0;it<NB_ITS;it++) { |
121 for(y=0;y<HEIGHT-17;y++) { | 106 for(y=0;y<HEIGHT-17;y++) { |
122 for(x=0;x<WIDTH-17;x++) { | 107 for(x=0;x<WIDTH-17;x++) { |
123 ptr = img2 + y * WIDTH + x; | 108 ptr = img2 + y * WIDTH + x; |
124 d1 += test_func(img1, ptr, WIDTH); | 109 d1 += test_func(NULL, img1, ptr, WIDTH, 1); |
125 } | 110 } |
126 } | 111 } |
127 } | 112 } |
128 emms_c(); | 113 emms_c(); |
129 dummy = d1; /* avoid optimisation */ | 114 dummy = d1; /* avoid optimisation */ |
135 } | 120 } |
136 | 121 |
137 | 122 |
138 int main(int argc, char **argv) | 123 int main(int argc, char **argv) |
139 { | 124 { |
125 AVCodecContext *ctx; | |
140 int c; | 126 int c; |
127 DSPContext cctx, mmxctx; | |
128 int flags[2] = { FF_MM_MMX, FF_MM_MMXEXT }; | |
141 | 129 |
142 for(;;) { | 130 for(;;) { |
143 c = getopt(argc, argv, "h"); | 131 c = getopt(argc, argv, "h"); |
144 if (c == -1) | 132 if (c == -1) |
145 break; | 133 break; |
150 } | 138 } |
151 } | 139 } |
152 | 140 |
153 printf("ffmpeg motion test\n"); | 141 printf("ffmpeg motion test\n"); |
154 | 142 |
155 test_motion("mmx", pix_abs16x16_mmx, pix_abs16x16_c); | 143 ctx = avcodec_alloc_context(); |
156 test_motion("mmx_x2", pix_abs16x16_x2_mmx, pix_abs16x16_x2_c); | 144 ctx->dsp_mask = FF_MM_FORCE; |
157 test_motion("mmx_y2", pix_abs16x16_y2_mmx, pix_abs16x16_y2_c); | 145 dsputil_init(&cctx, ctx); |
158 test_motion("mmx_xy2", pix_abs16x16_xy2_mmx, pix_abs16x16_xy2_c); | 146 for (c = 0; c < 2; c++) { |
147 int x; | |
148 ctx->dsp_mask = FF_MM_FORCE | flags[c]; | |
149 dsputil_init(&mmxctx, ctx); | |
150 | |
151 for (x = 0; x < 2; x++) { | |
152 printf("%s for %dx%d pixels\n", c ? "mmx2" : "mmx", | |
153 x ? 8 : 16, x ? 8 : 16); | |
154 test_motion("mmx", mmxctx.pix_abs[x][0], cctx.pix_abs[x][0]); | |
155 test_motion("mmx_x2", mmxctx.pix_abs[x][1], cctx.pix_abs[x][1]); | |
156 test_motion("mmx_y2", mmxctx.pix_abs[x][2], cctx.pix_abs[x][2]); | |
157 test_motion("mmx_xy2", mmxctx.pix_abs[x][3], cctx.pix_abs[x][3]); | |
158 } | |
159 } | |
160 av_free(ctx); | |
161 | |
159 return 0; | 162 return 0; |
160 } | 163 } |