Mercurial > libavcodec.hg
annotate motion-test.c @ 8566:48a4d9f4c6f8 libavcodec
RV30 decoder passes possible frame sizes in extradata and selects
an appropriate frame size from them in slice, make my decoder do
that as well.
This fixes issue 779
author | kostya |
---|---|
date | Sun, 11 Jan 2009 08:03:45 +0000 |
parents | a0d64d63a131 |
children | 5b7d5a33a3e2 |
rev | line source |
---|---|
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
1 /* |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
2 * (c) 2001 Fabrice Bellard |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
3 * |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
4 * This file is part of FFmpeg. |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
5 * |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
6 * FFmpeg is free software; you can redistribute it and/or |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
8 * License as published by the Free Software Foundation; either |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
10 * |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
11 * FFmpeg is distributed in the hope that it will be useful, |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
14 * Lesser General Public License for more details. |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
15 * |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
17 * License along with FFmpeg; if not, write to the Free Software |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
19 */ |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
20 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
21 /** |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
22 * @file motion_test.c |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
23 * motion test. |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
24 */ |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
25 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
26 #include <stdlib.h> |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
27 #include <stdio.h> |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
28 #include <string.h> |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
29 #include <sys/time.h> |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
30 #include <unistd.h> |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
31 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
32 #include "dsputil.h" |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
33 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
34 #undef exit |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
35 #undef printf |
5379
e9f8a337c5ce
Fix the compilation of dct-test, fft-test and motion-test which are using
takis
parents:
5121
diff
changeset
|
36 #undef random |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
37 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
38 #define WIDTH 64 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
39 #define HEIGHT 64 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
40 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
41 uint8_t img1[WIDTH * HEIGHT]; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
42 uint8_t img2[WIDTH * HEIGHT]; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
43 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
44 void fill_random(uint8_t *tab, int size) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
45 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
46 int i; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
47 for(i=0;i<size;i++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
48 #if 1 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
49 tab[i] = random() % 256; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
50 #else |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
51 tab[i] = i; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
52 #endif |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
53 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
54 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
55 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
56 void help(void) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
57 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
58 printf("motion-test [-h]\n" |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
59 "test motion implementations\n"); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
60 exit(1); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
61 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
62 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
63 int64_t gettime(void) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
64 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
65 struct timeval tv; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
66 gettimeofday(&tv,NULL); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
67 return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
68 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
69 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
70 #define NB_ITS 500 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
71 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
72 int dummy; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
73 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
74 void test_motion(const char *name, |
5121 | 75 me_cmp_func test_func, me_cmp_func ref_func) |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
76 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
77 int x, y, d1, d2, it; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
78 uint8_t *ptr; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
79 int64_t ti; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
80 printf("testing '%s'\n", name); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
81 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
82 /* test correctness */ |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
83 for(it=0;it<20;it++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
84 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
85 fill_random(img1, WIDTH * HEIGHT); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
86 fill_random(img2, WIDTH * HEIGHT); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
87 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
88 for(y=0;y<HEIGHT-17;y++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
89 for(x=0;x<WIDTH-17;x++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
90 ptr = img2 + y * WIDTH + x; |
5121 | 91 d1 = test_func(NULL, img1, ptr, WIDTH, 1); |
92 d2 = ref_func(NULL, img1, ptr, WIDTH, 1); | |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
93 if (d1 != d2) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
94 printf("error: mmx=%d c=%d\n", d1, d2); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
95 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
96 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
97 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
98 } |
5116
dd5796283029
emms --> emms_c, taken from a patch by Ronald Bultje
diego
parents:
5056
diff
changeset
|
99 emms_c(); |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
100 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
101 /* speed test */ |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
102 ti = gettime(); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
103 d1 = 0; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
104 for(it=0;it<NB_ITS;it++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
105 for(y=0;y<HEIGHT-17;y++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
106 for(x=0;x<WIDTH-17;x++) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
107 ptr = img2 + y * WIDTH + x; |
5121 | 108 d1 += test_func(NULL, img1, ptr, WIDTH, 1); |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
109 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
110 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
111 } |
5116
dd5796283029
emms --> emms_c, taken from a patch by Ronald Bultje
diego
parents:
5056
diff
changeset
|
112 emms_c(); |
5963 | 113 dummy = d1; /* avoid optimization */ |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
114 ti = gettime() - ti; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
115 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
116 printf(" %0.0f kop/s\n", |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
117 (double)NB_ITS * (WIDTH - 16) * (HEIGHT - 16) / |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
118 (double)(ti / 1000.0)); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
119 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
120 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
121 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
122 int main(int argc, char **argv) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
123 { |
5121 | 124 AVCodecContext *ctx; |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
125 int c; |
5121 | 126 DSPContext cctx, mmxctx; |
127 int flags[2] = { FF_MM_MMX, FF_MM_MMXEXT }; | |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
128 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
129 for(;;) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
130 c = getopt(argc, argv, "h"); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
131 if (c == -1) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
132 break; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
133 switch(c) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
134 case 'h': |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
135 help(); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
136 break; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
137 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
138 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
139 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
140 printf("ffmpeg motion test\n"); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
141 |
5121 | 142 ctx = avcodec_alloc_context(); |
143 ctx->dsp_mask = FF_MM_FORCE; | |
144 dsputil_init(&cctx, ctx); | |
145 for (c = 0; c < 2; c++) { | |
146 int x; | |
147 ctx->dsp_mask = FF_MM_FORCE | flags[c]; | |
148 dsputil_init(&mmxctx, ctx); | |
149 | |
150 for (x = 0; x < 2; x++) { | |
151 printf("%s for %dx%d pixels\n", c ? "mmx2" : "mmx", | |
152 x ? 8 : 16, x ? 8 : 16); | |
153 test_motion("mmx", mmxctx.pix_abs[x][0], cctx.pix_abs[x][0]); | |
154 test_motion("mmx_x2", mmxctx.pix_abs[x][1], cctx.pix_abs[x][1]); | |
155 test_motion("mmx_y2", mmxctx.pix_abs[x][2], cctx.pix_abs[x][2]); | |
156 test_motion("mmx_xy2", mmxctx.pix_abs[x][3], cctx.pix_abs[x][3]); | |
157 } | |
158 } | |
159 av_free(ctx); | |
160 | |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
161 return 0; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
162 } |