Mercurial > libavcodec.hg
annotate motion-test.c @ 7891:13ee9bb85721 libavcodec
Zero 'idx' for each iteration of the coupling gain loop and as it is only used
within this loop, we can move its declaration there too. This fixes bitstream
desync when decoding streams containing CCEs.
Based on a patch by Alex Converse (alex converse gmail com)
author | superdump |
---|---|
date | Thu, 18 Sep 2008 16:02:51 +0000 |
parents | 80103098c797 |
children | a0d64d63a131 |
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 #include "i386/mmx.h" |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
35 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
36 #undef exit |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
37 #undef printf |
5379
e9f8a337c5ce
Fix the compilation of dct-test, fft-test and motion-test which are using
takis
parents:
5121
diff
changeset
|
38 #undef random |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
39 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
40 #define WIDTH 64 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
41 #define HEIGHT 64 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
42 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
43 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
|
44 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
|
45 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
46 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
|
47 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
48 int i; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
49 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
|
50 #if 1 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
51 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
|
52 #else |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
53 tab[i] = i; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
54 #endif |
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 } |
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 void help(void) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
59 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
60 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
|
61 "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
|
62 exit(1); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
63 } |
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 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
|
66 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
67 struct timeval tv; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
68 gettimeofday(&tv,NULL); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
69 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
|
70 } |
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 #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
|
73 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
74 int dummy; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
75 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
76 void test_motion(const char *name, |
5121 | 77 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
|
78 { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
79 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
|
80 uint8_t *ptr; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
81 int64_t ti; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
82 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
|
83 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
84 /* test correctness */ |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
85 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
|
86 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
87 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
|
88 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
|
89 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
90 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
|
91 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
|
92 ptr = img2 + y * WIDTH + x; |
5121 | 93 d1 = test_func(NULL, img1, ptr, WIDTH, 1); |
94 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
|
95 if (d1 != d2) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
96 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
|
97 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
98 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
99 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
100 } |
5116
dd5796283029
emms --> emms_c, taken from a patch by Ronald Bultje
diego
parents:
5056
diff
changeset
|
101 emms_c(); |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
102 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
103 /* speed test */ |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
104 ti = gettime(); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
105 d1 = 0; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
106 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
|
107 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
|
108 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
|
109 ptr = img2 + y * WIDTH + x; |
5121 | 110 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
|
111 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
112 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
113 } |
5116
dd5796283029
emms --> emms_c, taken from a patch by Ronald Bultje
diego
parents:
5056
diff
changeset
|
114 emms_c(); |
5963 | 115 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
|
116 ti = gettime() - ti; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
117 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
118 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
|
119 (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
|
120 (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
|
121 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
122 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
123 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
124 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
|
125 { |
5121 | 126 AVCodecContext *ctx; |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
127 int c; |
5121 | 128 DSPContext cctx, mmxctx; |
129 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
|
130 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
131 for(;;) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
132 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
|
133 if (c == -1) |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
134 break; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
135 switch(c) { |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
136 case 'h': |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
137 help(); |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
138 break; |
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 } |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
141 |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
142 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
|
143 |
5121 | 144 ctx = avcodec_alloc_context(); |
145 ctx->dsp_mask = FF_MM_FORCE; | |
146 dsputil_init(&cctx, ctx); | |
147 for (c = 0; c < 2; c++) { | |
148 int x; | |
149 ctx->dsp_mask = FF_MM_FORCE | flags[c]; | |
150 dsputil_init(&mmxctx, ctx); | |
151 | |
152 for (x = 0; x < 2; x++) { | |
153 printf("%s for %dx%d pixels\n", c ? "mmx2" : "mmx", | |
154 x ? 8 : 16, x ? 8 : 16); | |
155 test_motion("mmx", mmxctx.pix_abs[x][0], cctx.pix_abs[x][0]); | |
156 test_motion("mmx_x2", mmxctx.pix_abs[x][1], cctx.pix_abs[x][1]); | |
157 test_motion("mmx_y2", mmxctx.pix_abs[x][2], cctx.pix_abs[x][2]); | |
158 test_motion("mmx_xy2", mmxctx.pix_abs[x][3], cctx.pix_abs[x][3]); | |
159 } | |
160 } | |
161 av_free(ctx); | |
162 | |
5056
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
163 return 0; |
bea5fb6c0999
Rename motion_test.c to motion-test.c, which is the naming scheme used by all
diego
parents:
diff
changeset
|
164 } |