* qatar/master: (36 commits)
ARM: allow unaligned buffer in fixed-point NEON FFT4
fate: test more FFT etc sizes
dca: set AVCodecContext frame_size for DTS audio
YASM: Shut up unused variable compiler warning with --disable-yasm.
x86_32: Fix build on x86_32 with --disable-yasm.
iirfilter: add fate test
doxygen: Add qmul docs.
ogg: propagate return values and return more meaningful error values
H.264: fix overreads of qscale_table
Remove unused static tables and static inline functions.
eval: clear Parser instances before using
dct-test: remove 'ref' function pointer from tables
build: Remove deleted 'check' target from .PHONY list.
oggdec: Abort Ogg header parsing when encountering a data packet.
Add LGPL license boilerplate to files lacking it.
mxfenc: small typo fix
doxygen: Fix documentation for some VP8 functions.
sha: use AV_RB32() instead of assuming buffer can be cast to uint32_t*
des: allow unaligned input and output buffers
aes: allow unaligned input and output buffers
...
Conflicts:
libavcodec/dct-test.c
libavcodec/libvpxenc.c
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/h264_qpel_mmx.c
libavfilter/x86/gradfun.c
libavformat/oggdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
... | ... |
@@ -164,5 +164,5 @@ $(sort $(OBJDIRS)): |
164 | 164 |
# so this saves some time on slow systems. |
165 | 165 |
.SUFFIXES: |
166 | 166 |
|
167 |
-.PHONY: all all-yes alltools *clean check config examples install* |
|
167 |
+.PHONY: all all-yes alltools *clean config examples install* |
|
168 | 168 |
.PHONY: testprogs uninstall* |
... | ... |
@@ -1650,6 +1650,7 @@ static int dca_decode_frame(AVCodecContext * avctx, |
1650 | 1650 |
//set AVCodec values with parsed data |
1651 | 1651 |
avctx->sample_rate = s->sample_rate; |
1652 | 1652 |
avctx->bit_rate = s->bit_rate; |
1653 |
+ avctx->frame_size = s->sample_blocks * 32; |
|
1653 | 1654 |
|
1654 | 1655 |
s->profile = FF_PROFILE_DTS; |
1655 | 1656 |
|
... | ... |
@@ -68,12 +68,12 @@ void ff_simple_idct_neon(DCTELEM *data); |
68 | 68 |
void ff_simple_idct_axp(DCTELEM *data); |
69 | 69 |
|
70 | 70 |
struct algo { |
71 |
- const char *name; |
|
72 |
- enum { FDCT, IDCT } is_idct; |
|
73 |
- void (* func) (DCTELEM *block); |
|
74 |
- void (* ref) (DCTELEM *block); |
|
75 |
- enum formattag { NO_PERM,MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM, SSE2_PERM, PARTTRANS_PERM } format; |
|
76 |
- int mm_support; |
|
71 |
+ const char *name; |
|
72 |
+ void (*func)(DCTELEM *block); |
|
73 |
+ enum formattag { NO_PERM, MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM, |
|
74 |
+ SSE2_PERM, PARTTRANS_PERM } format; |
|
75 |
+ int mm_support; |
|
76 |
+ int nonspec; |
|
77 | 77 |
}; |
78 | 78 |
|
79 | 79 |
#ifndef FAAN_POSTSCALE |
... | ... |
@@ -84,61 +84,69 @@ struct algo { |
84 | 84 |
|
85 | 85 |
static int cpu_flags; |
86 | 86 |
|
87 |
-struct algo algos[] = { |
|
88 |
- {"REF-DBL", 0, ff_ref_fdct, ff_ref_fdct, NO_PERM}, |
|
89 |
- {"FAAN", 0, ff_faandct, ff_ref_fdct, FAAN_SCALE}, |
|
90 |
- {"FAANI", 1, ff_faanidct, ff_ref_idct, NO_PERM}, |
|
91 |
- {"IJG-AAN-INT", 0, fdct_ifast, ff_ref_fdct, SCALE_PERM}, |
|
92 |
- {"IJG-LLM-INT", 0, ff_jpeg_fdct_islow, ff_ref_fdct, NO_PERM}, |
|
93 |
- {"REF-DBL", 1, ff_ref_idct, ff_ref_idct, NO_PERM}, |
|
94 |
- {"INT", 1, j_rev_dct, ff_ref_idct, MMX_PERM}, |
|
95 |
- {"SIMPLE-C", 1, ff_simple_idct, ff_ref_idct, NO_PERM}, |
|
87 |
+static const struct algo fdct_tab[] = { |
|
88 |
+ { "REF-DBL", ff_ref_fdct, NO_PERM }, |
|
89 |
+ { "FAAN", ff_faandct, FAAN_SCALE }, |
|
90 |
+ { "IJG-AAN-INT", fdct_ifast, SCALE_PERM }, |
|
91 |
+ { "IJG-LLM-INT", ff_jpeg_fdct_islow, NO_PERM }, |
|
96 | 92 |
|
97 | 93 |
#if HAVE_MMX |
98 |
- {"MMX", 0, ff_fdct_mmx, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_MMX}, |
|
99 |
-#if HAVE_MMX2 |
|
100 |
- {"MMX2", 0, ff_fdct_mmx2, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_MMX2}, |
|
101 |
- {"SSE2", 0, ff_fdct_sse2, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_SSE2}, |
|
94 |
+ { "MMX", ff_fdct_mmx, NO_PERM, AV_CPU_FLAG_MMX }, |
|
95 |
+ { "MMX2", ff_fdct_mmx2, NO_PERM, AV_CPU_FLAG_MMX2 }, |
|
96 |
+ { "SSE2", ff_fdct_sse2, NO_PERM, AV_CPU_FLAG_SSE2 }, |
|
102 | 97 |
#endif |
103 | 98 |
|
104 |
-#if CONFIG_GPL |
|
105 |
- {"LIBMPEG2-MMX", 1, ff_mmx_idct, ff_ref_idct, MMX_PERM, AV_CPU_FLAG_MMX}, |
|
106 |
- {"LIBMPEG2-MMX2", 1, ff_mmxext_idct, ff_ref_idct, MMX_PERM, AV_CPU_FLAG_MMX2}, |
|
99 |
+#if HAVE_ALTIVEC |
|
100 |
+ { "altivecfdct", fdct_altivec, NO_PERM, AV_CPU_FLAG_ALTIVEC }, |
|
107 | 101 |
#endif |
108 |
- {"SIMPLE-MMX", 1, ff_simple_idct_mmx, ff_ref_idct, MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX}, |
|
109 |
- {"XVID-MMX", 1, ff_idct_xvid_mmx, ff_ref_idct, NO_PERM, AV_CPU_FLAG_MMX}, |
|
110 |
- {"XVID-MMX2", 1, ff_idct_xvid_mmx2, ff_ref_idct, NO_PERM, AV_CPU_FLAG_MMX2}, |
|
111 |
- {"XVID-SSE2", 1, ff_idct_xvid_sse2, ff_ref_idct, SSE2_PERM, AV_CPU_FLAG_SSE2}, |
|
102 |
+ |
|
103 |
+#if ARCH_BFIN |
|
104 |
+ { "BFINfdct", ff_bfin_fdct, NO_PERM }, |
|
112 | 105 |
#endif |
113 | 106 |
|
114 |
-#if HAVE_ALTIVEC |
|
115 |
- {"altivecfdct", 0, fdct_altivec, ff_ref_fdct, NO_PERM, AV_CPU_FLAG_ALTIVEC}, |
|
107 |
+ { 0 } |
|
108 |
+}; |
|
109 |
+ |
|
110 |
+static const struct algo idct_tab[] = { |
|
111 |
+ { "FAANI", ff_faanidct, NO_PERM }, |
|
112 |
+ { "REF-DBL", ff_ref_idct, NO_PERM }, |
|
113 |
+ { "INT", j_rev_dct, MMX_PERM }, |
|
114 |
+ { "SIMPLE-C", ff_simple_idct, NO_PERM }, |
|
115 |
+ |
|
116 |
+#if HAVE_MMX |
|
117 |
+#if CONFIG_GPL |
|
118 |
+ { "LIBMPEG2-MMX", ff_mmx_idct, MMX_PERM, AV_CPU_FLAG_MMX, 1 }, |
|
119 |
+ { "LIBMPEG2-MMX2", ff_mmxext_idct, MMX_PERM, AV_CPU_FLAG_MMX2, 1 }, |
|
120 |
+#endif |
|
121 |
+ { "SIMPLE-MMX", ff_simple_idct_mmx, MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX }, |
|
122 |
+ { "XVID-MMX", ff_idct_xvid_mmx, NO_PERM, AV_CPU_FLAG_MMX, 1 }, |
|
123 |
+ { "XVID-MMX2", ff_idct_xvid_mmx2, NO_PERM, AV_CPU_FLAG_MMX2, 1 }, |
|
124 |
+ { "XVID-SSE2", ff_idct_xvid_sse2, SSE2_PERM, AV_CPU_FLAG_SSE2, 1 }, |
|
116 | 125 |
#endif |
117 | 126 |
|
118 | 127 |
#if ARCH_BFIN |
119 |
- {"BFINfdct", 0, ff_bfin_fdct, ff_ref_fdct, NO_PERM}, |
|
120 |
- {"BFINidct", 1, ff_bfin_idct, ff_ref_idct, NO_PERM}, |
|
128 |
+ { "BFINidct", ff_bfin_idct, NO_PERM }, |
|
121 | 129 |
#endif |
122 | 130 |
|
123 | 131 |
#if ARCH_ARM |
124 |
- {"SIMPLE-ARM", 1, ff_simple_idct_arm, ff_ref_idct, NO_PERM }, |
|
125 |
- {"INT-ARM", 1, ff_j_rev_dct_arm, ff_ref_idct, MMX_PERM }, |
|
132 |
+ { "SIMPLE-ARM", ff_simple_idct_arm, NO_PERM }, |
|
133 |
+ { "INT-ARM", ff_j_rev_dct_arm, MMX_PERM }, |
|
134 |
+#endif |
|
126 | 135 |
#if HAVE_ARMV5TE |
127 |
- {"SIMPLE-ARMV5TE", 1, ff_simple_idct_armv5te, ff_ref_idct, NO_PERM }, |
|
136 |
+ { "SIMPLE-ARMV5TE", ff_simple_idct_armv5te,NO_PERM }, |
|
128 | 137 |
#endif |
129 | 138 |
#if HAVE_ARMV6 |
130 |
- {"SIMPLE-ARMV6", 1, ff_simple_idct_armv6, ff_ref_idct, MMX_PERM }, |
|
139 |
+ { "SIMPLE-ARMV6", ff_simple_idct_armv6, MMX_PERM }, |
|
131 | 140 |
#endif |
132 | 141 |
#if HAVE_NEON |
133 |
- {"SIMPLE-NEON", 1, ff_simple_idct_neon, ff_ref_idct, PARTTRANS_PERM }, |
|
142 |
+ { "SIMPLE-NEON", ff_simple_idct_neon, PARTTRANS_PERM }, |
|
134 | 143 |
#endif |
135 |
-#endif /* ARCH_ARM */ |
|
136 | 144 |
|
137 | 145 |
#if ARCH_ALPHA |
138 |
- {"SIMPLE-ALPHA", 1, ff_simple_idct_axp, ff_ref_idct, NO_PERM }, |
|
146 |
+ { "SIMPLE-ALPHA", ff_simple_idct_axp, NO_PERM }, |
|
139 | 147 |
#endif |
140 | 148 |
|
141 |
- { 0 } |
|
149 |
+ { 0 } |
|
142 | 150 |
}; |
143 | 151 |
|
144 | 152 |
#define AANSCALE_BITS 12 |
... | ... |
@@ -148,7 +156,7 @@ uint8_t cropTbl[256 + 2 * MAX_NEG_CROP]; |
148 | 148 |
static int64_t gettime(void) |
149 | 149 |
{ |
150 | 150 |
struct timeval tv; |
151 |
- gettimeofday(&tv,NULL); |
|
151 |
+ gettimeofday(&tv, NULL); |
|
152 | 152 |
return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec; |
153 | 153 |
} |
154 | 154 |
|
... | ... |
@@ -157,18 +165,18 @@ static int64_t gettime(void) |
157 | 157 |
|
158 | 158 |
static short idct_mmx_perm[64]; |
159 | 159 |
|
160 |
-static short idct_simple_mmx_perm[64]={ |
|
161 |
- 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D, |
|
162 |
- 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D, |
|
163 |
- 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D, |
|
164 |
- 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F, |
|
165 |
- 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F, |
|
166 |
- 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D, |
|
167 |
- 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F, |
|
168 |
- 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F, |
|
160 |
+static short idct_simple_mmx_perm[64] = { |
|
161 |
+ 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D, |
|
162 |
+ 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D, |
|
163 |
+ 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D, |
|
164 |
+ 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F, |
|
165 |
+ 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F, |
|
166 |
+ 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D, |
|
167 |
+ 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F, |
|
168 |
+ 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F, |
|
169 | 169 |
}; |
170 | 170 |
|
171 |
-static const uint8_t idct_sse2_row_perm[8] = {0, 4, 1, 5, 2, 6, 3, 7}; |
|
171 |
+static const uint8_t idct_sse2_row_perm[8] = { 0, 4, 1, 5, 2, 6, 3, 7 }; |
|
172 | 172 |
|
173 | 173 |
static void idct_mmx_init(void) |
174 | 174 |
{ |
... | ... |
@@ -177,13 +185,12 @@ static void idct_mmx_init(void) |
177 | 177 |
/* the mmx/mmxext idct uses a reordered input, so we patch scan tables */ |
178 | 178 |
for (i = 0; i < 64; i++) { |
179 | 179 |
idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2); |
180 |
-// idct_simple_mmx_perm[i] = simple_block_permute_op(i); |
|
181 | 180 |
} |
182 | 181 |
} |
183 | 182 |
|
184 | 183 |
DECLARE_ALIGNED(16, static DCTELEM, block)[64]; |
185 |
-DECLARE_ALIGNED(8, static DCTELEM, block1)[64]; |
|
186 |
-DECLARE_ALIGNED(8, static DCTELEM, block_org)[64]; |
|
184 |
+DECLARE_ALIGNED(8, static DCTELEM, block1)[64]; |
|
185 |
+DECLARE_ALIGNED(8, static DCTELEM, block_org)[64]; |
|
187 | 186 |
|
188 | 187 |
static inline void mmx_emms(void) |
189 | 188 |
{ |
... | ... |
@@ -193,188 +200,177 @@ static inline void mmx_emms(void) |
193 | 193 |
#endif |
194 | 194 |
} |
195 | 195 |
|
196 |
-static void dct_error(const char *name, int is_idct, |
|
197 |
- void (*fdct_func)(DCTELEM *block), |
|
198 |
- void (*fdct_ref)(DCTELEM *block), int form, int test, const int bits) |
|
196 |
+ |
|
197 |
+static int dct_error(const struct algo *dct, int test, int is_idct, int speed, const int bits) |
|
199 | 198 |
{ |
199 |
+ void (*ref)(DCTELEM *block) = is_idct ? ff_ref_idct : ff_ref_fdct; |
|
200 | 200 |
int it, i, scale; |
201 | 201 |
int err_inf, v; |
202 |
- int64_t err2, ti, ti1, it1; |
|
203 |
- int64_t sysErr[64], sysErrMax=0; |
|
204 |
- int maxout=0; |
|
205 |
- int blockSumErrMax=0, blockSumErr; |
|
202 |
+ int64_t err2, ti, ti1, it1, err_sum = 0; |
|
203 |
+ int64_t sysErr[64], sysErrMax = 0; |
|
204 |
+ int maxout = 0; |
|
205 |
+ int blockSumErrMax = 0, blockSumErr; |
|
206 | 206 |
AVLFG prng; |
207 | 207 |
const int vals=1<<bits; |
208 |
+ double omse, ome; |
|
209 |
+ int spec_err; |
|
208 | 210 |
|
209 | 211 |
av_lfg_init(&prng, 1); |
210 | 212 |
|
211 | 213 |
err_inf = 0; |
212 | 214 |
err2 = 0; |
213 |
- for(i=0; i<64; i++) sysErr[i]=0; |
|
214 |
- for(it=0;it<NB_ITS;it++) { |
|
215 |
- for(i=0;i<64;i++) |
|
215 |
+ for (i = 0; i < 64; i++) |
|
216 |
+ sysErr[i] = 0; |
|
217 |
+ for (it = 0; it < NB_ITS; it++) { |
|
218 |
+ for (i = 0; i < 64; i++) |
|
216 | 219 |
block1[i] = 0; |
217 |
- switch(test){ |
|
220 |
+ switch (test) { |
|
218 | 221 |
case 0: |
219 |
- for(i=0;i<64;i++) |
|
222 |
+ for (i = 0; i < 64; i++) |
|
220 | 223 |
block1[i] = (av_lfg_get(&prng) % (2*vals)) -vals; |
221 |
- if (is_idct){ |
|
224 |
+ if (is_idct) { |
|
222 | 225 |
ff_ref_fdct(block1); |
223 |
- |
|
224 |
- for(i=0;i<64;i++) |
|
225 |
- block1[i]>>=3; |
|
226 |
+ for (i = 0; i < 64; i++) |
|
227 |
+ block1[i] >>= 3; |
|
226 | 228 |
} |
227 |
- break; |
|
228 |
- case 1:{ |
|
229 |
- int num = av_lfg_get(&prng) % 10 + 1; |
|
230 |
- for(i=0;i<num;i++) |
|
231 |
- block1[av_lfg_get(&prng) % 64] = av_lfg_get(&prng) % (2*vals) -vals; |
|
232 |
- }break; |
|
229 |
+ break; |
|
230 |
+ case 1: { |
|
231 |
+ int num = av_lfg_get(&prng) % 10 + 1; |
|
232 |
+ for (i = 0; i < num; i++) |
|
233 |
+ block1[av_lfg_get(&prng) % 64] = av_lfg_get(&prng) % (2*vals) -vals; |
|
234 |
+ } |
|
235 |
+ break; |
|
233 | 236 |
case 2: |
234 | 237 |
block1[0] = av_lfg_get(&prng) % (16*vals) - (8*vals); |
235 |
- block1[63]= (block1[0]&1)^1; |
|
236 |
- break; |
|
238 |
+ block1[63] = (block1[0] & 1) ^ 1; |
|
239 |
+ break; |
|
237 | 240 |
} |
238 | 241 |
|
239 |
-#if 0 // simulate mismatch control |
|
240 |
-{ int sum=0; |
|
241 |
- for(i=0;i<64;i++) |
|
242 |
- sum+=block1[i]; |
|
243 |
- |
|
244 |
- if((sum&1)==0) block1[63]^=1; |
|
245 |
-} |
|
246 |
-#endif |
|
242 |
+ for (i = 0; i < 64; i++) |
|
243 |
+ block_org[i] = block1[i]; |
|
247 | 244 |
|
248 |
- for(i=0; i<64; i++) |
|
249 |
- block_org[i]= block1[i]; |
|
250 |
- |
|
251 |
- if (form == MMX_PERM) { |
|
252 |
- for(i=0;i<64;i++) |
|
245 |
+ if (dct->format == MMX_PERM) { |
|
246 |
+ for (i = 0; i < 64; i++) |
|
253 | 247 |
block[idct_mmx_perm[i]] = block1[i]; |
254 |
- } else if (form == MMX_SIMPLE_PERM) { |
|
255 |
- for(i=0;i<64;i++) |
|
248 |
+ } else if (dct->format == MMX_SIMPLE_PERM) { |
|
249 |
+ for (i = 0; i < 64; i++) |
|
256 | 250 |
block[idct_simple_mmx_perm[i]] = block1[i]; |
257 |
- |
|
258 |
- } else if (form == SSE2_PERM) { |
|
259 |
- for(i=0; i<64; i++) |
|
260 |
- block[(i&0x38) | idct_sse2_row_perm[i&7]] = block1[i]; |
|
261 |
- } else if (form == PARTTRANS_PERM) { |
|
262 |
- for(i=0; i<64; i++) |
|
263 |
- block[(i&0x24) | ((i&3)<<3) | ((i>>3)&3)] = block1[i]; |
|
251 |
+ } else if (dct->format == SSE2_PERM) { |
|
252 |
+ for (i = 0; i < 64; i++) |
|
253 |
+ block[(i & 0x38) | idct_sse2_row_perm[i & 7]] = block1[i]; |
|
254 |
+ } else if (dct->format == PARTTRANS_PERM) { |
|
255 |
+ for (i = 0; i < 64; i++) |
|
256 |
+ block[(i & 0x24) | ((i & 3) << 3) | ((i >> 3) & 3)] = block1[i]; |
|
264 | 257 |
} else { |
265 |
- for(i=0; i<64; i++) |
|
266 |
- block[i]= block1[i]; |
|
258 |
+ for (i = 0; i < 64; i++) |
|
259 |
+ block[i] = block1[i]; |
|
267 | 260 |
} |
268 |
-#if 0 // simulate mismatch control for tested IDCT but not the ref |
|
269 |
-{ int sum=0; |
|
270 |
- for(i=0;i<64;i++) |
|
271 |
- sum+=block[i]; |
|
272 |
- |
|
273 |
- if((sum&1)==0) block[63]^=1; |
|
274 |
-} |
|
275 |
-#endif |
|
276 | 261 |
|
277 |
- fdct_func(block); |
|
262 |
+ dct->func(block); |
|
278 | 263 |
mmx_emms(); |
279 | 264 |
|
280 |
- if (form == SCALE_PERM) { |
|
281 |
- for(i=0; i<64; i++) { |
|
282 |
- scale = 8*(1 << (AANSCALE_BITS + 11)) / ff_aanscales[i]; |
|
283 |
- block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS; |
|
265 |
+ if (dct->format == SCALE_PERM) { |
|
266 |
+ for (i = 0; i < 64; i++) { |
|
267 |
+ scale = 8 * (1 << (AANSCALE_BITS + 11)) / ff_aanscales[i]; |
|
268 |
+ block[i] = (block[i] * scale) >> AANSCALE_BITS; |
|
284 | 269 |
} |
285 | 270 |
} |
286 | 271 |
|
287 |
- fdct_ref(block1); |
|
272 |
+ ref(block1); |
|
288 | 273 |
|
289 |
- blockSumErr=0; |
|
290 |
- for(i=0;i<64;i++) { |
|
291 |
- v = abs(block[i] - block1[i]); |
|
274 |
+ blockSumErr = 0; |
|
275 |
+ for (i = 0; i < 64; i++) { |
|
276 |
+ int err = block[i] - block1[i]; |
|
277 |
+ err_sum += err; |
|
278 |
+ v = abs(err); |
|
292 | 279 |
if (v > err_inf) |
293 | 280 |
err_inf = v; |
294 | 281 |
err2 += v * v; |
295 | 282 |
sysErr[i] += block[i] - block1[i]; |
296 | 283 |
blockSumErr += v; |
297 |
- if( abs(block[i])>maxout) maxout=abs(block[i]); |
|
284 |
+ if (abs(block[i]) > maxout) |
|
285 |
+ maxout = abs(block[i]); |
|
298 | 286 |
} |
299 |
- if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr; |
|
300 |
-#if 0 // print different matrix pairs |
|
301 |
- if(blockSumErr){ |
|
302 |
- printf("\n"); |
|
303 |
- for(i=0; i<64; i++){ |
|
304 |
- if((i&7)==0) printf("\n"); |
|
305 |
- printf("%4d ", block_org[i]); |
|
306 |
- } |
|
307 |
- for(i=0; i<64; i++){ |
|
308 |
- if((i&7)==0) printf("\n"); |
|
309 |
- printf("%4d ", block[i] - block1[i]); |
|
310 |
- } |
|
311 |
- } |
|
312 |
-#endif |
|
287 |
+ if (blockSumErrMax < blockSumErr) |
|
288 |
+ blockSumErrMax = blockSumErr; |
|
313 | 289 |
} |
314 |
- for(i=0; i<64; i++) sysErrMax= FFMAX(sysErrMax, FFABS(sysErr[i])); |
|
290 |
+ for (i = 0; i < 64; i++) |
|
291 |
+ sysErrMax = FFMAX(sysErrMax, FFABS(sysErr[i])); |
|
315 | 292 |
|
316 |
- for(i=0; i<64; i++){ |
|
317 |
- if(i%8==0) printf("\n"); |
|
318 |
- printf("%7d ", (int)sysErr[i]); |
|
293 |
+ for (i = 0; i < 64; i++) { |
|
294 |
+ if (i % 8 == 0) |
|
295 |
+ printf("\n"); |
|
296 |
+ printf("%7d ", (int) sysErr[i]); |
|
319 | 297 |
} |
320 | 298 |
printf("\n"); |
321 | 299 |
|
322 |
- printf("%s %s: err_inf=%d err2=%0.8f syserr=%0.8f maxout=%d blockSumErr=%d\n", |
|
323 |
- is_idct ? "IDCT" : "DCT", |
|
324 |
- name, err_inf, (double)err2 / NB_ITS / 64.0, (double)sysErrMax / NB_ITS, maxout, blockSumErrMax); |
|
300 |
+ omse = (double) err2 / NB_ITS / 64; |
|
301 |
+ ome = (double) err_sum / NB_ITS / 64; |
|
302 |
+ |
|
303 |
+ spec_err = is_idct && (err_inf > 1 || omse > 0.02 || fabs(ome) > 0.0015); |
|
304 |
+ |
|
305 |
+ printf("%s %s: ppe=%d omse=%0.8f ome=%0.8f syserr=%0.8f maxout=%d blockSumErr=%d\n", |
|
306 |
+ is_idct ? "IDCT" : "DCT", dct->name, err_inf, |
|
307 |
+ omse, ome, (double) sysErrMax / NB_ITS, |
|
308 |
+ maxout, blockSumErrMax); |
|
309 |
+ |
|
310 |
+ if (spec_err && !dct->nonspec) |
|
311 |
+ return 1; |
|
312 |
+ |
|
313 |
+ if (!speed) |
|
314 |
+ return 0; |
|
325 | 315 |
|
326 | 316 |
/* speed test */ |
327 |
- for(i=0;i<64;i++) |
|
317 |
+ for (i = 0; i < 64; i++) |
|
328 | 318 |
block1[i] = 0; |
329 |
- switch(test){ |
|
319 |
+ |
|
320 |
+ switch (test) { |
|
330 | 321 |
case 0: |
331 |
- for(i=0;i<64;i++) |
|
322 |
+ for (i = 0; i < 64; i++) |
|
332 | 323 |
block1[i] = av_lfg_get(&prng) % (2*vals) -vals; |
333 |
- if (is_idct){ |
|
324 |
+ if (is_idct) { |
|
334 | 325 |
ff_ref_fdct(block1); |
335 |
- |
|
336 |
- for(i=0;i<64;i++) |
|
337 |
- block1[i]>>=3; |
|
326 |
+ for (i = 0; i < 64; i++) |
|
327 |
+ block1[i] >>= 3; |
|
338 | 328 |
} |
339 |
- break; |
|
340 |
- case 1:{ |
|
329 |
+ break; |
|
330 |
+ case 1: |
|
341 | 331 |
case 2: |
342 | 332 |
block1[0] = av_lfg_get(&prng) % (2*vals) -vals; |
343 | 333 |
block1[1] = av_lfg_get(&prng) % (2*vals) -vals; |
344 | 334 |
block1[2] = av_lfg_get(&prng) % (2*vals) -vals; |
345 | 335 |
block1[3] = av_lfg_get(&prng) % (2*vals) -vals; |
346 |
- }break; |
|
336 |
+ break; |
|
347 | 337 |
} |
348 | 338 |
|
349 |
- if (form == MMX_PERM) { |
|
350 |
- for(i=0;i<64;i++) |
|
339 |
+ if (dct->format == MMX_PERM) { |
|
340 |
+ for (i = 0; i < 64; i++) |
|
351 | 341 |
block[idct_mmx_perm[i]] = block1[i]; |
352 |
- } else if(form == MMX_SIMPLE_PERM) { |
|
353 |
- for(i=0;i<64;i++) |
|
342 |
+ } else if (dct->format == MMX_SIMPLE_PERM) { |
|
343 |
+ for (i = 0; i < 64; i++) |
|
354 | 344 |
block[idct_simple_mmx_perm[i]] = block1[i]; |
355 | 345 |
} else { |
356 |
- for(i=0; i<64; i++) |
|
357 |
- block[i]= block1[i]; |
|
346 |
+ for (i = 0; i < 64; i++) |
|
347 |
+ block[i] = block1[i]; |
|
358 | 348 |
} |
359 | 349 |
|
360 | 350 |
ti = gettime(); |
361 | 351 |
it1 = 0; |
362 | 352 |
do { |
363 |
- for(it=0;it<NB_ITS_SPEED;it++) { |
|
364 |
- for(i=0; i<64; i++) |
|
365 |
- block[i]= block1[i]; |
|
366 |
-// memcpy(block, block1, sizeof(DCTELEM) * 64); |
|
367 |
-// do not memcpy especially not fastmemcpy because it does movntq !!! |
|
368 |
- fdct_func(block); |
|
353 |
+ for (it = 0; it < NB_ITS_SPEED; it++) { |
|
354 |
+ for (i = 0; i < 64; i++) |
|
355 |
+ block[i] = block1[i]; |
|
356 |
+ dct->func(block); |
|
369 | 357 |
} |
370 | 358 |
it1 += NB_ITS_SPEED; |
371 | 359 |
ti1 = gettime() - ti; |
372 | 360 |
} while (ti1 < 1000000); |
373 | 361 |
mmx_emms(); |
374 | 362 |
|
375 |
- printf("%s %s: %0.1f kdct/s\n", |
|
376 |
- is_idct ? "IDCT" : "DCT", |
|
377 |
- name, (double)it1 * 1000.0 / (double)ti1); |
|
363 |
+ printf("%s %s: %0.1f kdct/s\n", is_idct ? "IDCT" : "DCT", dct->name, |
|
364 |
+ (double) it1 * 1000.0 / (double) ti1); |
|
365 |
+ |
|
366 |
+ return 0; |
|
378 | 367 |
} |
379 | 368 |
|
380 | 369 |
DECLARE_ALIGNED(8, static uint8_t, img_dest)[64]; |
... | ... |
@@ -392,19 +388,19 @@ static void idct248_ref(uint8_t *dest, int linesize, int16_t *block) |
392 | 392 |
if (!init) { |
393 | 393 |
init = 1; |
394 | 394 |
|
395 |
- for(i=0;i<8;i++) { |
|
395 |
+ for (i = 0; i < 8; i++) { |
|
396 | 396 |
sum = 0; |
397 |
- for(j=0;j<8;j++) { |
|
398 |
- s = (i==0) ? sqrt(1.0/8.0) : sqrt(1.0/4.0); |
|
397 |
+ for (j = 0; j < 8; j++) { |
|
398 |
+ s = (i == 0) ? sqrt(1.0 / 8.0) : sqrt(1.0 / 4.0); |
|
399 | 399 |
c8[i][j] = s * cos(M_PI * i * (j + 0.5) / 8.0); |
400 | 400 |
sum += c8[i][j] * c8[i][j]; |
401 | 401 |
} |
402 | 402 |
} |
403 | 403 |
|
404 |
- for(i=0;i<4;i++) { |
|
404 |
+ for (i = 0; i < 4; i++) { |
|
405 | 405 |
sum = 0; |
406 |
- for(j=0;j<4;j++) { |
|
407 |
- s = (i==0) ? sqrt(1.0/4.0) : sqrt(1.0/2.0); |
|
406 |
+ for (j = 0; j < 4; j++) { |
|
407 |
+ s = (i == 0) ? sqrt(1.0 / 4.0) : sqrt(1.0 / 2.0); |
|
408 | 408 |
c4[i][j] = s * cos(M_PI * i * (j + 0.5) / 4.0); |
409 | 409 |
sum += c4[i][j] * c4[i][j]; |
410 | 410 |
} |
... | ... |
@@ -413,58 +409,59 @@ static void idct248_ref(uint8_t *dest, int linesize, int16_t *block) |
413 | 413 |
|
414 | 414 |
/* butterfly */ |
415 | 415 |
s = 0.5 * sqrt(2.0); |
416 |
- for(i=0;i<4;i++) { |
|
417 |
- for(j=0;j<8;j++) { |
|
418 |
- block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * s; |
|
419 |
- block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * s; |
|
416 |
+ for (i = 0; i < 4; i++) { |
|
417 |
+ for (j = 0; j < 8; j++) { |
|
418 |
+ block1[8 * (2 * i) + j] = |
|
419 |
+ (block[8 * (2 * i) + j] + block[8 * (2 * i + 1) + j]) * s; |
|
420 |
+ block1[8 * (2 * i + 1) + j] = |
|
421 |
+ (block[8 * (2 * i) + j] - block[8 * (2 * i + 1) + j]) * s; |
|
420 | 422 |
} |
421 | 423 |
} |
422 | 424 |
|
423 | 425 |
/* idct8 on lines */ |
424 |
- for(i=0;i<8;i++) { |
|
425 |
- for(j=0;j<8;j++) { |
|
426 |
+ for (i = 0; i < 8; i++) { |
|
427 |
+ for (j = 0; j < 8; j++) { |
|
426 | 428 |
sum = 0; |
427 |
- for(k=0;k<8;k++) |
|
428 |
- sum += c8[k][j] * block1[8*i+k]; |
|
429 |
- block2[8*i+j] = sum; |
|
429 |
+ for (k = 0; k < 8; k++) |
|
430 |
+ sum += c8[k][j] * block1[8 * i + k]; |
|
431 |
+ block2[8 * i + j] = sum; |
|
430 | 432 |
} |
431 | 433 |
} |
432 | 434 |
|
433 | 435 |
/* idct4 */ |
434 |
- for(i=0;i<8;i++) { |
|
435 |
- for(j=0;j<4;j++) { |
|
436 |
+ for (i = 0; i < 8; i++) { |
|
437 |
+ for (j = 0; j < 4; j++) { |
|
436 | 438 |
/* top */ |
437 | 439 |
sum = 0; |
438 |
- for(k=0;k<4;k++) |
|
439 |
- sum += c4[k][j] * block2[8*(2*k)+i]; |
|
440 |
- block3[8*(2*j)+i] = sum; |
|
440 |
+ for (k = 0; k < 4; k++) |
|
441 |
+ sum += c4[k][j] * block2[8 * (2 * k) + i]; |
|
442 |
+ block3[8 * (2 * j) + i] = sum; |
|
441 | 443 |
|
442 | 444 |
/* bottom */ |
443 | 445 |
sum = 0; |
444 |
- for(k=0;k<4;k++) |
|
445 |
- sum += c4[k][j] * block2[8*(2*k+1)+i]; |
|
446 |
- block3[8*(2*j+1)+i] = sum; |
|
446 |
+ for (k = 0; k < 4; k++) |
|
447 |
+ sum += c4[k][j] * block2[8 * (2 * k + 1) + i]; |
|
448 |
+ block3[8 * (2 * j + 1) + i] = sum; |
|
447 | 449 |
} |
448 | 450 |
} |
449 | 451 |
|
450 | 452 |
/* clamp and store the result */ |
451 |
- for(i=0;i<8;i++) { |
|
452 |
- for(j=0;j<8;j++) { |
|
453 |
- v = block3[8*i+j]; |
|
454 |
- if (v < 0) |
|
455 |
- v = 0; |
|
456 |
- else if (v > 255) |
|
457 |
- v = 255; |
|
458 |
- dest[i * linesize + j] = (int)rint(v); |
|
453 |
+ for (i = 0; i < 8; i++) { |
|
454 |
+ for (j = 0; j < 8; j++) { |
|
455 |
+ v = block3[8 * i + j]; |
|
456 |
+ if (v < 0) v = 0; |
|
457 |
+ else if (v > 255) v = 255; |
|
458 |
+ dest[i * linesize + j] = (int) rint(v); |
|
459 | 459 |
} |
460 | 460 |
} |
461 | 461 |
} |
462 | 462 |
|
463 | 463 |
static void idct248_error(const char *name, |
464 |
- void (*idct248_put)(uint8_t *dest, int line_size, int16_t *block)) |
|
464 |
+ void (*idct248_put)(uint8_t *dest, int line_size, |
|
465 |
+ int16_t *block), |
|
466 |
+ int speed) |
|
465 | 467 |
{ |
466 | 468 |
int it, i, it1, ti, ti1, err_max, v; |
467 |
- |
|
468 | 469 |
AVLFG prng; |
469 | 470 |
|
470 | 471 |
av_lfg_init(&prng, 1); |
... | ... |
@@ -472,23 +469,22 @@ static void idct248_error(const char *name, |
472 | 472 |
/* just one test to see if code is correct (precision is less |
473 | 473 |
important here) */ |
474 | 474 |
err_max = 0; |
475 |
- for(it=0;it<NB_ITS;it++) { |
|
476 |
- |
|
475 |
+ for (it = 0; it < NB_ITS; it++) { |
|
477 | 476 |
/* XXX: use forward transform to generate values */ |
478 |
- for(i=0;i<64;i++) |
|
477 |
+ for (i = 0; i < 64; i++) |
|
479 | 478 |
block1[i] = av_lfg_get(&prng) % 256 - 128; |
480 | 479 |
block1[0] += 1024; |
481 | 480 |
|
482 |
- for(i=0; i<64; i++) |
|
483 |
- block[i]= block1[i]; |
|
481 |
+ for (i = 0; i < 64; i++) |
|
482 |
+ block[i] = block1[i]; |
|
484 | 483 |
idct248_ref(img_dest1, 8, block); |
485 | 484 |
|
486 |
- for(i=0; i<64; i++) |
|
487 |
- block[i]= block1[i]; |
|
485 |
+ for (i = 0; i < 64; i++) |
|
486 |
+ block[i] = block1[i]; |
|
488 | 487 |
idct248_put(img_dest, 8, block); |
489 | 488 |
|
490 |
- for(i=0;i<64;i++) { |
|
491 |
- v = abs((int)img_dest[i] - (int)img_dest1[i]); |
|
489 |
+ for (i = 0; i < 64; i++) { |
|
490 |
+ v = abs((int) img_dest[i] - (int) img_dest1[i]); |
|
492 | 491 |
if (v == 255) |
493 | 492 |
printf("%d %d\n", img_dest[i], img_dest1[i]); |
494 | 493 |
if (v > err_max) |
... | ... |
@@ -514,18 +510,17 @@ static void idct248_error(const char *name, |
514 | 514 |
} |
515 | 515 |
#endif |
516 | 516 |
} |
517 |
- printf("%s %s: err_inf=%d\n", |
|
518 |
- 1 ? "IDCT248" : "DCT248", |
|
519 |
- name, err_max); |
|
517 |
+ printf("%s %s: err_inf=%d\n", 1 ? "IDCT248" : "DCT248", name, err_max); |
|
518 |
+ |
|
519 |
+ if (!speed) |
|
520 |
+ return; |
|
520 | 521 |
|
521 | 522 |
ti = gettime(); |
522 | 523 |
it1 = 0; |
523 | 524 |
do { |
524 |
- for(it=0;it<NB_ITS_SPEED;it++) { |
|
525 |
- for(i=0; i<64; i++) |
|
526 |
- block[i]= block1[i]; |
|
527 |
-// memcpy(block, block1, sizeof(DCTELEM) * 64); |
|
528 |
-// do not memcpy especially not fastmemcpy because it does movntq !!! |
|
525 |
+ for (it = 0; it < NB_ITS_SPEED; it++) { |
|
526 |
+ for (i = 0; i < 64; i++) |
|
527 |
+ block[i] = block1[i]; |
|
529 | 528 |
idct248_put(img_dest, 8, block); |
530 | 529 |
} |
531 | 530 |
it1 += NB_ITS_SPEED; |
... | ... |
@@ -533,9 +528,8 @@ static void idct248_error(const char *name, |
533 | 533 |
} while (ti1 < 1000000); |
534 | 534 |
mmx_emms(); |
535 | 535 |
|
536 |
- printf("%s %s: %0.1f kdct/s\n", |
|
537 |
- 1 ? "IDCT248" : "DCT248", |
|
538 |
- name, (double)it1 * 1000.0 / (double)ti1); |
|
536 |
+ printf("%s %s: %0.1f kdct/s\n", 1 ? "IDCT248" : "DCT248", name, |
|
537 |
+ (double) it1 * 1000.0 / (double) ti1); |
|
539 | 538 |
} |
540 | 539 |
|
541 | 540 |
static void help(void) |
... | ... |
@@ -545,56 +539,67 @@ static void help(void) |
545 | 545 |
" 1 -> test with random sparse matrixes\n" |
546 | 546 |
" 2 -> do 3. test from mpeg4 std\n" |
547 | 547 |
"-i test IDCT implementations\n" |
548 |
- "-4 test IDCT248 implementations\n"); |
|
548 |
+ "-4 test IDCT248 implementations\n" |
|
549 |
+ "-t speed test\n"); |
|
549 | 550 |
} |
550 | 551 |
|
551 | 552 |
int main(int argc, char **argv) |
552 | 553 |
{ |
553 | 554 |
int test_idct = 0, test_248_dct = 0; |
554 |
- int c,i; |
|
555 |
- int test=1; |
|
555 |
+ int c, i; |
|
556 |
+ int test = 1; |
|
557 |
+ int speed = 0; |
|
558 |
+ int err = 0; |
|
556 | 559 |
int bits=8; |
560 |
+ |
|
557 | 561 |
cpu_flags = av_get_cpu_flags(); |
558 | 562 |
|
559 | 563 |
ff_ref_dct_init(); |
560 | 564 |
idct_mmx_init(); |
561 | 565 |
|
562 |
- for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i; |
|
563 |
- for(i=0;i<MAX_NEG_CROP;i++) { |
|
566 |
+ for (i = 0; i < 256; i++) |
|
567 |
+ cropTbl[i + MAX_NEG_CROP] = i; |
|
568 |
+ for (i = 0; i < MAX_NEG_CROP; i++) { |
|
564 | 569 |
cropTbl[i] = 0; |
565 | 570 |
cropTbl[i + MAX_NEG_CROP + 256] = 255; |
566 | 571 |
} |
567 | 572 |
|
568 |
- for(;;) { |
|
569 |
- c = getopt(argc, argv, "ih4"); |
|
573 |
+ for (;;) { |
|
574 |
+ c = getopt(argc, argv, "ih4t"); |
|
570 | 575 |
if (c == -1) |
571 | 576 |
break; |
572 |
- switch(c) { |
|
577 |
+ switch (c) { |
|
573 | 578 |
case 'i': |
574 | 579 |
test_idct = 1; |
575 | 580 |
break; |
576 | 581 |
case '4': |
577 | 582 |
test_248_dct = 1; |
578 | 583 |
break; |
579 |
- default : |
|
584 |
+ case 't': |
|
585 |
+ speed = 1; |
|
586 |
+ break; |
|
587 |
+ default: |
|
580 | 588 |
case 'h': |
581 | 589 |
help(); |
582 | 590 |
return 0; |
583 | 591 |
} |
584 | 592 |
} |
585 | 593 |
|
586 |
- if(optind <argc) test= atoi(argv[optind]); |
|
594 |
+ if (optind < argc) |
|
595 |
+ test = atoi(argv[optind]); |
|
587 | 596 |
if(optind+1 < argc) bits= atoi(argv[optind+1]); |
588 | 597 |
|
589 | 598 |
printf("ffmpeg DCT/IDCT test\n"); |
590 | 599 |
|
591 | 600 |
if (test_248_dct) { |
592 |
- idct248_error("SIMPLE-C", ff_simple_idct248_put); |
|
601 |
+ idct248_error("SIMPLE-C", ff_simple_idct248_put, speed); |
|
593 | 602 |
} else { |
594 |
- for (i=0;algos[i].name;i++) |
|
595 |
- if (algos[i].is_idct == test_idct && !(~cpu_flags & algos[i].mm_support)) { |
|
596 |
- dct_error (algos[i].name, algos[i].is_idct, algos[i].func, algos[i].ref, algos[i].format, test, bits); |
|
597 |
- } |
|
603 |
+ const struct algo *algos = test_idct ? idct_tab : fdct_tab; |
|
604 |
+ for (i = 0; algos[i].name; i++) |
|
605 |
+ if (!(~cpu_flags & algos[i].mm_support)) { |
|
606 |
+ err |= dct_error(&algos[i], test, test_idct, speed, bits); |
|
607 |
+ } |
|
598 | 608 |
} |
599 |
- return 0; |
|
609 |
+ |
|
610 |
+ return err; |
|
600 | 611 |
} |
... | ... |
@@ -237,6 +237,7 @@ void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, DCTELEM * |
237 | 237 |
} |
238 | 238 |
/** |
239 | 239 |
* IDCT transforms the 16 dc values and dequantizes them. |
240 |
+ * @param qmul quantization parameter |
|
240 | 241 |
*/ |
241 | 242 |
void FUNCC(ff_h264_luma_dc_dequant_idct)(DCTELEM *p_output, DCTELEM *p_input, int qmul){ |
242 | 243 |
#define stride 16 |
... | ... |
@@ -1,3 +1,21 @@ |
1 |
+/* |
|
2 |
+ * This file is part of Libav. |
|
3 |
+ * |
|
4 |
+ * Libav is free software; you can redistribute it and/or |
|
5 |
+ * modify it under the terms of the GNU Lesser General Public |
|
6 |
+ * License as published by the Free Software Foundation; either |
|
7 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
8 |
+ * |
|
9 |
+ * Libav is distributed in the hope that it will be useful, |
|
10 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
12 |
+ * Lesser General Public License for more details. |
|
13 |
+ * |
|
14 |
+ * You should have received a copy of the GNU Lesser General Public |
|
15 |
+ * License along with Libav; if not, write to the Free Software |
|
16 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
17 |
+ */ |
|
18 |
+ |
|
1 | 19 |
#include "dsputil.h" |
2 | 20 |
|
3 | 21 |
#ifndef BIT_DEPTH |
... | ... |
@@ -311,6 +311,9 @@ av_cold void ff_iir_filter_free_coeffs(struct FFIIRFilterCoeffs *coeffs) |
311 | 311 |
} |
312 | 312 |
|
313 | 313 |
#ifdef TEST |
314 |
+#undef printf |
|
315 |
+#include <stdio.h> |
|
316 |
+ |
|
314 | 317 |
#define FILT_ORDER 4 |
315 | 318 |
#define SIZE 1024 |
316 | 319 |
int main(void) |
... | ... |
@@ -320,7 +323,6 @@ int main(void) |
320 | 320 |
float cutoff_coeff = 0.4; |
321 | 321 |
int16_t x[SIZE], y[SIZE]; |
322 | 322 |
int i; |
323 |
- FILE* fd; |
|
324 | 323 |
|
325 | 324 |
fcoeffs = ff_iir_filter_init_coeffs(NULL, FF_FILTER_TYPE_BUTTERWORTH, |
326 | 325 |
FF_FILTER_MODE_LOWPASS, FILT_ORDER, |
... | ... |
@@ -333,13 +335,8 @@ int main(void) |
333 | 333 |
|
334 | 334 |
ff_iir_filter(fcoeffs, fstate, SIZE, x, 1, y, 1); |
335 | 335 |
|
336 |
- fd = fopen("in.bin", "w"); |
|
337 |
- fwrite(x, sizeof(x[0]), SIZE, fd); |
|
338 |
- fclose(fd); |
|
339 |
- |
|
340 |
- fd = fopen("out.bin", "w"); |
|
341 |
- fwrite(y, sizeof(y[0]), SIZE, fd); |
|
342 |
- fclose(fd); |
|
336 |
+ for (i = 0; i < SIZE; i++) |
|
337 |
+ printf("%6d %6d\n", x[i], y[i]); |
|
343 | 338 |
|
344 | 339 |
ff_iir_filter_free_coeffs(fcoeffs); |
345 | 340 |
ff_iir_filter_free_state(fstate); |
... | ... |
@@ -285,9 +285,10 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared){ |
285 | 285 |
} |
286 | 286 |
|
287 | 287 |
FF_ALLOCZ_OR_GOTO(s->avctx, pic->mbskip_table , mb_array_size * sizeof(uint8_t)+2, fail) //the +2 is for the slice end check |
288 |
- FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table , mb_array_size * sizeof(uint8_t) , fail) |
|
288 |
+ FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table_base , (big_mb_num + s->mb_stride) * sizeof(uint8_t) , fail) |
|
289 | 289 |
FF_ALLOCZ_OR_GOTO(s->avctx, pic->mb_type_base , (big_mb_num + s->mb_stride) * sizeof(uint32_t), fail) |
290 | 290 |
pic->mb_type= pic->mb_type_base + 2*s->mb_stride+1; |
291 |
+ pic->qscale_table = pic->qscale_table_base + 2*s->mb_stride + 1; |
|
291 | 292 |
if(s->out_format == FMT_H264){ |
292 | 293 |
for(i=0; i<2; i++){ |
293 | 294 |
FF_ALLOCZ_OR_GOTO(s->avctx, pic->motion_val_base[i], 2 * (b4_array_size+4) * sizeof(int16_t), fail) |
... | ... |
@@ -339,7 +340,7 @@ static void free_picture(MpegEncContext *s, Picture *pic){ |
339 | 339 |
av_freep(&pic->mc_mb_var); |
340 | 340 |
av_freep(&pic->mb_mean); |
341 | 341 |
av_freep(&pic->mbskip_table); |
342 |
- av_freep(&pic->qscale_table); |
|
342 |
+ av_freep(&pic->qscale_table_base); |
|
343 | 343 |
av_freep(&pic->mb_type_base); |
344 | 344 |
av_freep(&pic->dct_coeff); |
345 | 345 |
av_freep(&pic->pan_scan); |
... | ... |
@@ -88,6 +88,7 @@ typedef struct Picture{ |
88 | 88 |
* halfpel luma planes. |
89 | 89 |
*/ |
90 | 90 |
uint8_t *interpolated[3]; |
91 |
+ int8_t *qscale_table_base; |
|
91 | 92 |
int16_t (*motion_val_base[2])[2]; |
92 | 93 |
uint32_t *mb_type_base; |
93 | 94 |
#define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type |
... | ... |
@@ -1,3 +1,21 @@ |
1 |
+/* |
|
2 |
+ * This file is part of Libav. |
|
3 |
+ * |
|
4 |
+ * Libav is free software; you can redistribute it and/or |
|
5 |
+ * modify it under the terms of the GNU Lesser General Public |
|
6 |
+ * License as published by the Free Software Foundation; either |
|
7 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
8 |
+ * |
|
9 |
+ * Libav is distributed in the hope that it will be useful, |
|
10 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
12 |
+ * Lesser General Public License for more details. |
|
13 |
+ * |
|
14 |
+ * You should have received a copy of the GNU Lesser General Public |
|
15 |
+ * License along with Libav; if not, write to the Free Software |
|
16 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
17 |
+ */ |
|
18 |
+ |
|
1 | 19 |
/** |
2 | 20 |
* @file |
3 | 21 |
* This header is provided for compatibility only and will be removed |
... | ... |
@@ -424,17 +424,6 @@ static inline RV34VLC* choose_vlc_set(int quant, int mod, int type) |
424 | 424 |
} |
425 | 425 |
|
426 | 426 |
/** |
427 |
- * Decode quantizer difference and return modified quantizer. |
|
428 |
- */ |
|
429 |
-static inline int rv34_decode_dquant(GetBitContext *gb, int quant) |
|
430 |
-{ |
|
431 |
- if(get_bits1(gb)) |
|
432 |
- return rv34_dquant_tab[get_bits1(gb)][quant]; |
|
433 |
- else |
|
434 |
- return get_bits(gb, 5); |
|
435 |
-} |
|
436 |
- |
|
437 |
-/** |
|
438 | 427 |
* Decode macroblock header and return CBP in case of success, -1 otherwise. |
439 | 428 |
*/ |
440 | 429 |
static int rv34_decode_mb_header(RV34DecContext *r, int8_t *intra_types) |
... | ... |
@@ -1255,15 +1244,6 @@ static int check_slice_end(RV34DecContext *r, MpegEncContext *s) |
1255 | 1255 |
return 0; |
1256 | 1256 |
} |
1257 | 1257 |
|
1258 |
-static inline int slice_compare(SliceInfo *si1, SliceInfo *si2) |
|
1259 |
-{ |
|
1260 |
- return si1->type != si2->type || |
|
1261 |
- si1->start >= si2->start || |
|
1262 |
- si1->width != si2->width || |
|
1263 |
- si1->height != si2->height|| |
|
1264 |
- si1->pts != si2->pts; |
|
1265 |
-} |
|
1266 |
- |
|
1267 | 1258 |
static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int buf_size) |
1268 | 1259 |
{ |
1269 | 1260 |
MpegEncContext *s = &r->s; |
... | ... |
@@ -641,8 +641,6 @@ void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, uint8_ |
641 | 641 |
* @param block destination for block coefficients |
642 | 642 |
* @param probs probabilities to use when reading trees from the bitstream |
643 | 643 |
* @param i initial coeff index, 0 unless a separate DC block is coded |
644 |
- * @param zero_nhood the initial prediction context for number of surrounding |
|
645 |
- * all-zero blocks (only left/top, so 0-2) |
|
646 | 644 |
* @param qmul array holding the dc/ac dequant factor at position 0/1 |
647 | 645 |
* @return 0 if no coeffs were decoded |
648 | 646 |
* otherwise, the index of the last coeff decoded plus one |
... | ... |
@@ -701,6 +699,17 @@ skip_eob: |
701 | 701 |
} |
702 | 702 |
#endif |
703 | 703 |
|
704 |
+/** |
|
705 |
+ * @param c arithmetic bitstream reader context |
|
706 |
+ * @param block destination for block coefficients |
|
707 |
+ * @param probs probabilities to use when reading trees from the bitstream |
|
708 |
+ * @param i initial coeff index, 0 unless a separate DC block is coded |
|
709 |
+ * @param zero_nhood the initial prediction context for number of surrounding |
|
710 |
+ * all-zero blocks (only left/top, so 0-2) |
|
711 |
+ * @param qmul array holding the dc/ac dequant factor at position 0/1 |
|
712 |
+ * @return 0 if no coeffs were decoded |
|
713 |
+ * otherwise, the index of the last coeff decoded plus one |
|
714 |
+ */ |
|
704 | 715 |
static av_always_inline |
705 | 716 |
int decode_block_coeffs(VP56RangeCoder *c, DCTELEM block[16], |
706 | 717 |
uint8_t probs[16][3][NUM_DCT_TOKENS-1], |
... | ... |
@@ -1034,10 +1043,9 @@ static const uint8_t subpel_idx[3][8] = { |
1034 | 1034 |
}; |
1035 | 1035 |
|
1036 | 1036 |
/** |
1037 |
- * Generic MC function. |
|
1037 |
+ * luma MC function |
|
1038 | 1038 |
* |
1039 | 1039 |
* @param s VP8 decoding context |
1040 |
- * @param luma 1 for luma (Y) planes, 0 for chroma (Cb/Cr) planes |
|
1041 | 1040 |
* @param dst target buffer for block data at block position |
1042 | 1041 |
* @param ref reference picture buffer at origin (0, 0) |
1043 | 1042 |
* @param mv motion vector (relative to block position) to get pixel data from |
... | ... |
@@ -1083,6 +1091,23 @@ void vp8_mc_luma(VP8Context *s, uint8_t *dst, AVFrame *ref, const VP56mv *mv, |
1083 | 1083 |
} |
1084 | 1084 |
} |
1085 | 1085 |
|
1086 |
+/** |
|
1087 |
+ * chroma MC function |
|
1088 |
+ * |
|
1089 |
+ * @param s VP8 decoding context |
|
1090 |
+ * @param dst1 target buffer for block data at block position (U plane) |
|
1091 |
+ * @param dst2 target buffer for block data at block position (V plane) |
|
1092 |
+ * @param ref reference picture buffer at origin (0, 0) |
|
1093 |
+ * @param mv motion vector (relative to block position) to get pixel data from |
|
1094 |
+ * @param x_off horizontal position of block from origin (0, 0) |
|
1095 |
+ * @param y_off vertical position of block from origin (0, 0) |
|
1096 |
+ * @param block_w width of block (16, 8 or 4) |
|
1097 |
+ * @param block_h height of block (always same as block_w) |
|
1098 |
+ * @param width width of src/dst plane data |
|
1099 |
+ * @param height height of src/dst plane data |
|
1100 |
+ * @param linesize size of a single line of plane data, including padding |
|
1101 |
+ * @param mc_func motion compensation function pointers (bilinear or sixtap MC) |
|
1102 |
+ */ |
|
1086 | 1103 |
static av_always_inline |
1087 | 1104 |
void vp8_mc_chroma(VP8Context *s, uint8_t *dst1, uint8_t *dst2, AVFrame *ref, |
1088 | 1105 |
const VP56mv *mv, int x_off, int y_off, |
... | ... |
@@ -2563,8 +2563,8 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) |
2563 | 2563 |
SET_QPEL_FUNCS(avg_h264_qpel, 1, 8, mmx2, ); |
2564 | 2564 |
SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmx2, ); |
2565 | 2565 |
} |
2566 |
-#if HAVE_YASM |
|
2567 | 2566 |
else if (bit_depth == 10) { |
2567 |
+#if HAVE_YASM |
|
2568 | 2568 |
#if !ARCH_X86_64 |
2569 | 2569 |
SET_QPEL_FUNCS(avg_h264_qpel, 0, 16, 10_mmxext, ff_); |
2570 | 2570 |
SET_QPEL_FUNCS(put_h264_qpel, 0, 16, 10_mmxext, ff_); |
... | ... |
@@ -2573,8 +2573,8 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) |
2573 | 2573 |
#endif |
2574 | 2574 |
SET_QPEL_FUNCS(put_h264_qpel, 2, 4, 10_mmxext, ff_); |
2575 | 2575 |
SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, 10_mmxext, ff_); |
2576 |
- } |
|
2577 | 2576 |
#endif |
2577 |
+ } |
|
2578 | 2578 |
|
2579 | 2579 |
SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmx2, ); |
2580 | 2580 |
SET_QPEL_FUNCS(put_2tap_qpel, 1, 8, mmx2, ); |
... | ... |
@@ -1,19 +1,21 @@ |
1 | 1 |
/* |
2 |
+ * Copyright (C) 2009 Loren Merritt <lorenm@u.washignton.edu> |
|
3 |
+ * |
|
2 | 4 |
* This file is part of FFmpeg. |
3 | 5 |
* |
4 |
- * FFmpeg is free software; you can redistribute it and/or modify |
|
5 |
- * it under the terms of the GNU General Public License as published by |
|
6 |
- * the Free Software Foundation; either version 2 of the License, or |
|
7 |
- * (at your option) any later version. |
|
6 |
+ * FFmpeg is free software; you can redistribute it and/or |
|
7 |
+ * modify it under the terms of the GNU Lesser General Public |
|
8 |
+ * License as published by the Free Software Foundation; either |
|
9 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
8 | 10 |
* |
9 | 11 |
* FFmpeg is distributed in the hope that it will be useful, |
10 | 12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 |
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
- * GNU General Public License for more details. |
|
13 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
14 |
+ * Lesser General Public License for more details. |
|
13 | 15 |
* |
14 |
- * You should have received a copy of the GNU General Public License along |
|
15 |
- * with FFmpeg; if not, write to the Free Software Foundation, Inc., |
|
16 |
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|
16 |
+ * You should have received a copy of the GNU Lesser General Public |
|
17 |
+ * License along with FFmpeg; if not, write to the Free Software |
|
18 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
17 | 19 |
*/ |
18 | 20 |
|
19 | 21 |
#include "libavutil/cpu.h" |
... | ... |
@@ -1549,7 +1549,7 @@ static uint32_t ff_framenum_to_12m_time_code(unsigned frame, int drop, int fps) |
1549 | 1549 |
((((frame / (fps * 60)) % 60) / 10) << 12) | // tens of minutes |
1550 | 1550 |
((((frame / (fps * 60)) % 60) % 10) << 8) | // units of minutes |
1551 | 1551 |
(0 << 7) | // b1 |
1552 |
- (0 << 6) | // b2 (NSC), field phase (PAL) |
|
1552 |
+ (0 << 6) | // b2 (NTSC), field phase (PAL) |
|
1553 | 1553 |
((((frame / (fps * 3600) % 24)) / 10) << 4) | // tens of hours |
1554 | 1554 |
( (frame / (fps * 3600) % 24)) % 10; // units of hours |
1555 | 1555 |
} |
... | ... |
@@ -201,7 +201,7 @@ static int ogg_read_page(AVFormatContext *s, int *str) |
201 | 201 |
uint8_t sync[4]; |
202 | 202 |
int sp = 0; |
203 | 203 |
|
204 |
- ret = avio_read (bc, sync, 4); |
|
204 |
+ ret = avio_read(bc, sync, 4); |
|
205 | 205 |
if (ret < 4) |
206 | 206 |
return ret < 0 ? ret : AVERROR_EOF; |
207 | 207 |
|
... | ... |
@@ -259,7 +259,7 @@ static int ogg_read_page(AVFormatContext *s, int *str) |
259 | 259 |
if(os->psize > 0) |
260 | 260 |
ogg_new_buf(ogg, idx); |
261 | 261 |
|
262 |
- ret = avio_read (bc, os->segments, nsegs); |
|
262 |
+ ret = avio_read(bc, os->segments, nsegs); |
|
263 | 263 |
if (ret < nsegs) |
264 | 264 |
return ret < 0 ? ret : AVERROR_EOF; |
265 | 265 |
|
... | ... |
@@ -292,7 +292,7 @@ static int ogg_read_page(AVFormatContext *s, int *str) |
292 | 292 |
os->buf = nb; |
293 | 293 |
} |
294 | 294 |
|
295 |
- ret = avio_read (bc, os->buf + os->bufpos, size); |
|
295 |
+ ret = avio_read(bc, os->buf + os->bufpos, size); |
|
296 | 296 |
if (ret < size) |
297 | 297 |
return ret < 0 ? ret : AVERROR_EOF; |
298 | 298 |
|
... | ... |
@@ -321,7 +321,7 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize, |
321 | 321 |
idx = ogg->curidx; |
322 | 322 |
|
323 | 323 |
while (idx < 0){ |
324 |
- ret = ogg_read_page (s, &idx); |
|
324 |
+ ret = ogg_read_page(s, &idx); |
|
325 | 325 |
if (ret < 0) |
326 | 326 |
return ret; |
327 | 327 |
} |
... | ... |
@@ -437,7 +437,7 @@ static int ogg_get_headers(AVFormatContext *s) |
437 | 437 |
int ret; |
438 | 438 |
|
439 | 439 |
do{ |
440 |
- ret = ogg_packet (s, NULL, NULL, NULL, NULL); |
|
440 |
+ ret = ogg_packet(s, NULL, NULL, NULL, NULL); |
|
441 | 441 |
if (ret < 0) |
442 | 442 |
return ret; |
443 | 443 |
}while (!ogg->headers); |
... | ... |
@@ -501,10 +501,9 @@ static int ogg_read_header(AVFormatContext *s, AVFormatParameters *ap) |
501 | 501 |
int ret, i; |
502 | 502 |
ogg->curidx = -1; |
503 | 503 |
//linear headers seek from start |
504 |
- ret = ogg_get_headers (s); |
|
505 |
- if (ret < 0){ |
|
504 |
+ ret = ogg_get_headers(s); |
|
505 |
+ if (ret < 0) |
|
506 | 506 |
return ret; |
507 |
- } |
|
508 | 507 |
|
509 | 508 |
for (i = 0; i < ogg->nstreams; i++) |
510 | 509 |
if (ogg->streams[i].header < 0) |
... | ... |
@@ -558,7 +557,7 @@ static int ogg_read_packet(AVFormatContext *s, AVPacket *pkt) |
558 | 558 |
//Get an ogg packet |
559 | 559 |
retry: |
560 | 560 |
do{ |
561 |
- ret = ogg_packet (s, &idx, &pstart, &psize, &fpos); |
|
561 |
+ ret = ogg_packet(s, &idx, &pstart, &psize, &fpos); |
|
562 | 562 |
if (ret < 0) |
563 | 563 |
return ret; |
564 | 564 |
}while (idx < 0 || !s->streams[idx]); |
... | ... |
@@ -574,7 +573,7 @@ retry: |
574 | 574 |
os->keyframe_seek = 0; |
575 | 575 |
|
576 | 576 |
//Alloc a pkt |
577 |
- ret = av_new_packet (pkt, psize); |
|
577 |
+ ret = av_new_packet(pkt, psize); |
|
578 | 578 |
if (ret < 0) |
579 | 579 |
return ret; |
580 | 580 |
pkt->stream_index = idx; |
... | ... |
@@ -22,6 +22,7 @@ |
22 | 22 |
|
23 | 23 |
#include "common.h" |
24 | 24 |
#include "aes.h" |
25 |
+#include "intreadwrite.h" |
|
25 | 26 |
|
26 | 27 |
typedef union { |
27 | 28 |
uint64_t u64[2]; |
... | ... |
@@ -67,6 +68,20 @@ static inline void addkey(av_aes_block *dst, const av_aes_block *src, |
67 | 67 |
dst->u64[1] = src->u64[1] ^ round_key->u64[1]; |
68 | 68 |
} |
69 | 69 |
|
70 |
+static inline void addkey_s(av_aes_block *dst, const uint8_t *src, |
|
71 |
+ const av_aes_block *round_key) |
|
72 |
+{ |
|
73 |
+ dst->u64[0] = AV_RN64(src) ^ round_key->u64[0]; |
|
74 |
+ dst->u64[1] = AV_RN64(src + 8) ^ round_key->u64[1]; |
|
75 |
+} |
|
76 |
+ |
|
77 |
+static inline void addkey_d(uint8_t *dst, const av_aes_block *src, |
|
78 |
+ const av_aes_block *round_key) |
|
79 |
+{ |
|
80 |
+ AV_WN64(dst, src->u64[0] ^ round_key->u64[0]); |
|
81 |
+ AV_WN64(dst + 8, src->u64[1] ^ round_key->u64[1]); |
|
82 |
+} |
|
83 |
+ |
|
70 | 84 |
static void subshift(av_aes_block s0[2], int s, const uint8_t *box) |
71 | 85 |
{ |
72 | 86 |
av_aes_block *s1 = (av_aes_block *) (s0[0].u8 - s); |
... | ... |
@@ -119,32 +134,28 @@ static inline void crypt(AVAES *a, int s, const uint8_t *sbox, |
119 | 119 |
subshift(&a->state[0], s, sbox); |
120 | 120 |
} |
121 | 121 |
|
122 |
-void av_aes_crypt(AVAES *a, uint8_t *dst_, const uint8_t *src_, |
|
123 |
- int count, uint8_t *iv_, int decrypt) |
|
122 |
+void av_aes_crypt(AVAES *a, uint8_t *dst, const uint8_t *src, |
|
123 |
+ int count, uint8_t *iv, int decrypt) |
|
124 | 124 |
{ |
125 |
- av_aes_block *dst = (av_aes_block *) dst_; |
|
126 |
- const av_aes_block *src = (const av_aes_block *) src_; |
|
127 |
- av_aes_block *iv = (av_aes_block *) iv_; |
|
128 |
- |
|
129 | 125 |
while (count--) { |
130 |
- addkey(&a->state[1], src, &a->round_key[a->rounds]); |
|
126 |
+ addkey_s(&a->state[1], src, &a->round_key[a->rounds]); |
|
131 | 127 |
if (decrypt) { |
132 | 128 |
crypt(a, 0, inv_sbox, dec_multbl); |
133 | 129 |
if (iv) { |
134 |
- addkey(&a->state[0], &a->state[0], iv); |
|
135 |
- *iv = *src; |
|
130 |
+ addkey_s(&a->state[0], iv, &a->state[0]); |
|
131 |
+ memcpy(iv, src, 16); |
|
136 | 132 |
} |
137 |
- addkey(dst, &a->state[0], &a->round_key[0]); |
|
133 |
+ addkey_d(dst, &a->state[0], &a->round_key[0]); |
|
138 | 134 |
} else { |
139 | 135 |
if (iv) |
140 |
- addkey(&a->state[1], &a->state[1], iv); |
|
136 |
+ addkey_s(&a->state[1], iv, &a->state[1]); |
|
141 | 137 |
crypt(a, 2, sbox, enc_multbl); |
142 |
- addkey(dst, &a->state[0], &a->round_key[0]); |
|
138 |
+ addkey_d(dst, &a->state[0], &a->round_key[0]); |
|
143 | 139 |
if (iv) |
144 |
- *iv = *dst; |
|
140 |
+ memcpy(iv, dst, 16); |
|
145 | 141 |
} |
146 |
- src++; |
|
147 |
- dst++; |
|
142 |
+ src += 16; |
|
143 |
+ dst += 16; |
|
148 | 144 |
} |
149 | 145 |
} |
150 | 146 |
|
... | ... |
@@ -299,10 +299,10 @@ int av_des_init(AVDES *d, const uint8_t *key, int key_bits, int decrypt) { |
299 | 299 |
} |
300 | 300 |
|
301 | 301 |
void av_des_crypt(AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt) { |
302 |
- uint64_t iv_val = iv ? av_be2ne64(*(uint64_t *)iv) : 0; |
|
302 |
+ uint64_t iv_val = iv ? AV_RB64(iv) : 0; |
|
303 | 303 |
while (count-- > 0) { |
304 | 304 |
uint64_t dst_val; |
305 |
- uint64_t src_val = src ? av_be2ne64(*(const uint64_t *)src) : 0; |
|
305 |
+ uint64_t src_val = src ? AV_RB64(src) : 0; |
|
306 | 306 |
if (decrypt) { |
307 | 307 |
uint64_t tmp = src_val; |
308 | 308 |
if (d->triple_des) { |
... | ... |
@@ -319,12 +319,12 @@ void av_des_crypt(AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t |
319 | 319 |
} |
320 | 320 |
iv_val = iv ? dst_val : 0; |
321 | 321 |
} |
322 |
- *(uint64_t *)dst = av_be2ne64(dst_val); |
|
322 |
+ AV_WB64(dst, dst_val); |
|
323 | 323 |
src += 8; |
324 | 324 |
dst += 8; |
325 | 325 |
} |
326 | 326 |
if (iv) |
327 |
- *(uint64_t *)iv = av_be2ne64(iv_val); |
|
327 |
+ AV_WB64(iv, iv_val); |
|
328 | 328 |
} |
329 | 329 |
|
330 | 330 |
#ifdef TEST |
... | ... |
@@ -472,7 +472,7 @@ int av_expr_parse(AVExpr **expr, const char *s, |
472 | 472 |
const char * const *func2_names, double (* const *funcs2)(void *, double, double), |
473 | 473 |
int log_offset, void *log_ctx) |
474 | 474 |
{ |
475 |
- Parser p; |
|
475 |
+ Parser p = { 0 }; |
|
476 | 476 |
AVExpr *e = NULL; |
477 | 477 |
char *w = av_malloc(strlen(s) + 1); |
478 | 478 |
char *wp = w; |
... | ... |
@@ -517,7 +517,7 @@ end: |
517 | 517 |
|
518 | 518 |
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque) |
519 | 519 |
{ |
520 |
- Parser p; |
|
520 |
+ Parser p = { 0 }; |
|
521 | 521 |
|
522 | 522 |
p.const_values = const_values; |
523 | 523 |
p.opaque = opaque; |
... | ... |
@@ -576,6 +576,8 @@ void av_free_expr(AVExpr *e) |
576 | 576 |
|
577 | 577 |
#ifdef TEST |
578 | 578 |
#undef printf |
579 |
+#include <string.h> |
|
580 |
+ |
|
579 | 581 |
static double const_values[] = { |
580 | 582 |
M_PI, |
581 | 583 |
M_E, |
... | ... |
@@ -588,7 +590,7 @@ static const char *const_names[] = { |
588 | 588 |
0 |
589 | 589 |
}; |
590 | 590 |
|
591 |
-int main(void) |
|
591 |
+int main(int argc, char **argv) |
|
592 | 592 |
{ |
593 | 593 |
int i; |
594 | 594 |
double d; |
... | ... |
@@ -669,13 +671,16 @@ int main(void) |
669 | 669 |
NULL, NULL, NULL, NULL, NULL, 0, NULL); |
670 | 670 |
printf("%f == 0.931322575\n", d); |
671 | 671 |
|
672 |
- for (i=0; i<1050; i++) { |
|
673 |
- START_TIMER |
|
672 |
+ if (argc > 1 && !strcmp(argv[1], "-t")) { |
|
673 |
+ for (i = 0; i < 1050; i++) { |
|
674 |
+ START_TIMER; |
|
674 | 675 |
av_expr_parse_and_eval(&d, "1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", |
675 | 676 |
const_names, const_values, |
676 | 677 |
NULL, NULL, NULL, NULL, NULL, 0, NULL); |
677 |
- STOP_TIMER("av_expr_parse_and_eval") |
|
678 |
+ STOP_TIMER("av_expr_parse_and_eval"); |
|
679 |
+ } |
|
678 | 680 |
} |
681 |
+ |
|
679 | 682 |
return 0; |
680 | 683 |
} |
681 | 684 |
#endif |
... | ... |
@@ -42,7 +42,7 @@ const int av_sha_size = sizeof(AVSHA); |
42 | 42 |
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) |
43 | 43 |
|
44 | 44 |
/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ |
45 |
-#define blk0(i) (block[i] = av_be2ne32(((const uint32_t*)buffer)[i])) |
|
45 |
+#define blk0(i) (block[i] = AV_RB32(buffer + 4 * (i))) |
|
46 | 46 |
#define blk(i) (block[i] = rol(block[i-3] ^ block[i-8] ^ block[i-14] ^ block[i-16], 1)) |
47 | 47 |
|
48 | 48 |
#define R0(v,w,x,y,z,i) z += ((w&(x^y))^y) + blk0(i) + 0x5A827999 + rol(v, 5); w = rol(w, 30); |
... | ... |
@@ -67,7 +67,7 @@ static void sha1_transform(uint32_t state[5], const uint8_t buffer[64]) |
67 | 67 |
for (i = 0; i < 80; i++) { |
68 | 68 |
int t; |
69 | 69 |
if (i < 16) |
70 |
- t = av_be2ne32(((uint32_t*)buffer)[i]); |
|
70 |
+ t = AV_RB32(buffer + 4 * i); |
|
71 | 71 |
else |
72 | 72 |
t = rol(block[i-3] ^ block[i-8] ^ block[i-14] ^ block[i-16], 1); |
73 | 73 |
block[i] = t; |
... | ... |
@@ -80,17 +80,6 @@ untested special converters |
80 | 80 |
#define RV ( (int)(0.500*224/255*(1<<RGB2YUV_SHIFT)+0.5)) |
81 | 81 |
#define RU (-(int)(0.169*224/255*(1<<RGB2YUV_SHIFT)+0.5)) |
82 | 82 |
|
83 |
-static const double rgb2yuv_table[8][9]={ |
|
84 |
- {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5}, //ITU709 |
|
85 |
- {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5}, //ITU709 |
|
86 |
- {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M |
|
87 |
- {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M |
|
88 |
- {0.59 , 0.11 , 0.30 , -0.331, 0.5, -0.169, -0.421, -0.079, 0.5}, //FCC |
|
89 |
- {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M |
|
90 |
- {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M |
|
91 |
- {0.701 , 0.087 , 0.212 , -0.384, 0.5, -0.116, -0.445, -0.055, 0.5}, //SMPTE 240M |
|
92 |
-}; |
|
93 |
- |
|
94 | 83 |
/* |
95 | 84 |
NOTES |
96 | 85 |
Special versions: fast Y 1:1 scaling (no interpolation in y direction) |
... | ... |
@@ -41,6 +41,7 @@ include $(SRC_PATH)/tests/fate/aac.mak |
41 | 41 |
include $(SRC_PATH)/tests/fate/als.mak |
42 | 42 |
include $(SRC_PATH)/tests/fate/amrnb.mak |
43 | 43 |
include $(SRC_PATH)/tests/fate/amrwb.mak |
44 |
+include $(SRC_PATH)/tests/fate/dct.mak |
|
44 | 45 |
include $(SRC_PATH)/tests/fate/fft.mak |
45 | 46 |
include $(SRC_PATH)/tests/fate/h264.mak |
46 | 47 |
include $(SRC_PATH)/tests/fate/libavutil.mak |
... | ... |
@@ -123,6 +123,7 @@ if test -e "$ref"; then |
123 | 123 |
diff) diff -u -w "$ref" "$outfile" >$cmpfile ;; |
124 | 124 |
oneoff) oneoff "$ref" "$outfile" "$fuzz" >$cmpfile ;; |
125 | 125 |
stddev) stddev "$ref" "$outfile" "$fuzz" >$cmpfile ;; |
126 |
+ null) cat "$outfile" >$cmpfile ;; |
|
126 | 127 |
esac |
127 | 128 |
cmperr=$? |
128 | 129 |
test $err = 0 && err=$cmperr |
... | ... |
@@ -1,28 +1,36 @@ |
1 |
-FATE_FFT = fate-fft fate-ifft \ |
|
2 |
- fate-mdct fate-imdct \ |
|
3 |
- fate-rdft fate-irdft \ |
|
4 |
- fate-dct1d fate-idct1d |
|
5 |
- |
|
6 |
-fate-fft: CMD = run libavcodec/fft-test |
|
7 |
-fate-ifft: CMD = run libavcodec/fft-test -i |
|
8 |
-fate-mdct: CMD = run libavcodec/fft-test -m |
|
9 |
-fate-imdct: CMD = run libavcodec/fft-test -m -i |
|
10 |
-fate-rdft: CMD = run libavcodec/fft-test -r |
|
11 |
-fate-irdft: CMD = run libavcodec/fft-test -r -i |
|
12 |
-fate-dct1d: CMD = run libavcodec/fft-test -d |
|
13 |
-fate-idct1d: CMD = run libavcodec/fft-test -d -i |
|
1 |
+define DEF_FFT |
|
2 |
+FATE_FFT += fate-fft-$(1) fate-ifft-$(1) \ |
|
3 |
+ fate-mdct-$(1) fate-imdct-$(1) \ |
|
4 |
+ fate-rdft-$(1) fate-irdft-$(1) \ |
|
5 |
+ fate-dct1d-$(1) fate-idct1d-$(1) |
|
6 |
+ |
|
7 |
+fate-fft-$(N): CMD = run libavcodec/fft-test -n$(1) |
|
8 |
+fate-ifft-$(N): CMD = run libavcodec/fft-test -n$(1) -i |
|
9 |
+fate-mdct-$(N): CMD = run libavcodec/fft-test -n$(1) -m |
|
10 |
+fate-imdct-$(N): CMD = run libavcodec/fft-test -n$(1) -m -i |
|
11 |
+fate-rdft-$(N): CMD = run libavcodec/fft-test -n$(1) -r |
|
12 |
+fate-irdft-$(N): CMD = run libavcodec/fft-test -n$(1) -r -i |
|
13 |
+fate-dct1d-$(N): CMD = run libavcodec/fft-test -n$(1) -d |
|
14 |
+fate-idct1d-$(N): CMD = run libavcodec/fft-test -n$(1) -d -i |
|
15 |
+endef |
|
16 |
+ |
|
17 |
+$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT,$(N)))) |
|
14 | 18 |
|
15 | 19 |
fate-fft-test: $(FATE_FFT) |
16 | 20 |
$(FATE_FFT): libavcodec/fft-test$(EXESUF) |
17 | 21 |
$(FATE_FFT): REF = /dev/null |
18 | 22 |
|
19 |
-FATE_FFT_FIXED = fate-fft-fixed fate-ifft-fixed \ |
|
20 |
- fate-mdct-fixed fate-imdct-fixed |
|
23 |
+define DEF_FFT_FIXED |
|
24 |
+FATE_FFT_FIXED += fate-fft-fixed-$(1) fate-ifft-fixed-$(1) \ |
|
25 |
+ fate-mdct-fixed-$(1) fate-imdct-fixed-$(1) |
|
26 |
+ |
|
27 |
+fate-fft-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) |
|
28 |
+fate-ifft-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -i |
|
29 |
+fate-mdct-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -m |
|
30 |
+fate-imdct-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -m -i |
|
31 |
+endef |
|
21 | 32 |
|
22 |
-fate-fft-fixed: CMD = run libavcodec/fft-fixed-test |
|
23 |
-fate-ifft-fixed: CMD = run libavcodec/fft-fixed-test -i |
|
24 |
-fate-mdct-fixed: CMD = run libavcodec/fft-fixed-test -m |
|
25 |
-fate-imdct-fixed: CMD = run libavcodec/fft-fixed-test -m -i |
|
33 |
+$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT_FIXED,$(N)))) |
|
26 | 34 |
|
27 | 35 |
fate-fft-fixed-test: $(FATE_FFT_FIXED) |
28 | 36 |
$(FATE_FFT_FIXED): libavcodec/fft-fixed-test$(EXESUF) |
... | ... |
@@ -21,6 +21,10 @@ fate-des: libavutil/des-test$(EXESUF) |
21 | 21 |
fate-des: CMD = run libavutil/des-test |
22 | 22 |
fate-des: REF = /dev/null |
23 | 23 |
|
24 |
+FATE_TESTS += fate-eval |
|
25 |
+fate-eval: libavutil/eval-test$(EXESUF) |
|
26 |
+fate-eval: CMD = run libavutil/eval-test |
|
27 |
+ |
|
24 | 28 |
FATE_TESTS += fate-md5 |
25 | 29 |
fate-md5: libavutil/md5-test$(EXESUF) |
26 | 30 |
fate-md5: CMD = run libavutil/md5-test |
... | ... |
@@ -218,3 +218,7 @@ fate-musepack7: CMD = pcm -i $(SAMPLES)/musepack/inside-mp7.mpc |
218 | 218 |
fate-musepack7: CMP = oneoff |
219 | 219 |
fate-musepack7: REF = $(SAMPLES)/musepack/inside-mp7.pcm |
220 | 220 |
fate-musepack7: FUZZ = 1 |
221 |
+ |
|
222 |
+FATE_TESTS += fate-iirfilter |
|
223 |
+fate-iirfilter: libavcodec/iirfilter-test$(EXESUF) |
|
224 |
+fate-iirfilter: CMD = run libavcodec/iirfilter-test |
221 | 225 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,161 @@ |
0 |
+Evaluating '' |
|
1 |
+'' -> nan |
|
2 |
+ |
|
3 |
+Evaluating '1;2' |
|
4 |
+'1;2' -> 2.000000 |
|
5 |
+ |
|
6 |
+Evaluating '-20' |
|
7 |
+'-20' -> -20.000000 |
|
8 |
+ |
|
9 |
+Evaluating '-PI' |
|
10 |
+'-PI' -> -3.141593 |
|
11 |
+ |
|
12 |
+Evaluating '+PI' |
|
13 |
+'+PI' -> 3.141593 |
|
14 |
+ |
|
15 |
+Evaluating '1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)' |
|
16 |
+'1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)' -> 12.700000 |
|
17 |
+ |
|
18 |
+Evaluating '80G/80Gi1k' |
|
19 |
+'80G/80Gi1k' -> nan |
|
20 |
+ |
|
21 |
+Evaluating '1Gi' |
|
22 |
+'1Gi' -> 1073741824.000000 |
|
23 |
+ |
|
24 |
+Evaluating '1gi' |
|
25 |
+'1gi' -> nan |
|
26 |
+ |
|
27 |
+Evaluating '1GiFoo' |
|
28 |
+'1GiFoo' -> nan |
|
29 |
+ |
|
30 |
+Evaluating '1k+1k' |
|
31 |
+'1k+1k' -> 2000.000000 |
|
32 |
+ |
|
33 |
+Evaluating '1Gi*3foo' |
|
34 |
+'1Gi*3foo' -> nan |
|
35 |
+ |
|
36 |
+Evaluating 'foo' |
|
37 |
+'foo' -> nan |
|
38 |
+ |
|
39 |
+Evaluating 'foo(' |
|
40 |
+'foo(' -> nan |
|
41 |
+ |
|
42 |
+Evaluating 'foo()' |
|
43 |
+'foo()' -> nan |
|
44 |
+ |
|
45 |
+Evaluating 'foo)' |
|
46 |
+'foo)' -> nan |
|
47 |
+ |
|
48 |
+Evaluating 'sin' |
|
49 |
+'sin' -> nan |
|
50 |
+ |
|
51 |
+Evaluating 'sin(' |
|
52 |
+'sin(' -> nan |
|
53 |
+ |
|
54 |
+Evaluating 'sin()' |
|
55 |
+'sin()' -> nan |
|
56 |
+ |
|
57 |
+Evaluating 'sin)' |
|
58 |
+'sin)' -> nan |
|
59 |
+ |
|
60 |
+Evaluating 'sin 10' |
|
61 |
+'sin 10' -> nan |
|
62 |
+ |
|
63 |
+Evaluating 'sin(1,2,3)' |
|
64 |
+'sin(1,2,3)' -> nan |
|
65 |
+ |
|
66 |
+Evaluating 'sin(1 )' |
|
67 |
+'sin(1 )' -> 0.841471 |
|
68 |
+ |
|
69 |
+Evaluating '1' |
|
70 |
+'1' -> 1.000000 |
|
71 |
+ |
|
72 |
+Evaluating '1foo' |
|
73 |
+'1foo' -> nan |
|
74 |
+ |
|
75 |
+Evaluating 'bar + PI + E + 100f*2 + foo' |
|
76 |
+'bar + PI + E + 100f*2 + foo' -> nan |
|
77 |
+ |
|
78 |
+Evaluating '13k + 12f - foo(1, 2)' |
|
79 |
+'13k + 12f - foo(1, 2)' -> nan |
|
80 |
+ |
|
81 |
+Evaluating '1gi' |
|
82 |
+'1gi' -> nan |
|
83 |
+ |
|
84 |
+Evaluating '1Gi' |
|
85 |
+'1Gi' -> 1073741824.000000 |
|
86 |
+ |
|
87 |
+Evaluating 'st(0, 123)' |
|
88 |
+'st(0, 123)' -> 123.000000 |
|
89 |
+ |
|
90 |
+Evaluating 'st(1, 123); ld(1)' |
|
91 |
+'st(1, 123); ld(1)' -> 123.000000 |
|
92 |
+ |
|
93 |
+Evaluating 'st(0, 1); while(lte(ld(0), 100), st(1, ld(1)+ld(0));st(0, ld(0)+1)); ld(1)' |
|
94 |
+'st(0, 1); while(lte(ld(0), 100), st(1, ld(1)+ld(0));st(0, ld(0)+1)); ld(1)' -> 4950.000000 |
|
95 |
+ |
|
96 |
+Evaluating 'st(1, 1); st(2, 2); st(0, 1); while(lte(ld(0),10), st(3, ld(1)+ld(2)); st(1, ld(2)); st(2, ld(3)); st(0, ld(0)+1)); ld(3)' |
|
97 |
+'st(1, 1); st(2, 2); st(0, 1); while(lte(ld(0),10), st(3, ld(1)+ld(2)); st(1, ld(2)); st(2, ld(3)); st(0, ld(0)+1)); ld(3)' -> 144.000000 |
|
98 |
+ |
|
99 |
+Evaluating 'while(0, 10)' |
|
100 |
+'while(0, 10)' -> nan |
|
101 |
+ |
|
102 |
+Evaluating 'st(0, 1); while(lte(ld(0),100), st(1, ld(1)+ld(0)); st(0, ld(0)+1))' |
|
103 |
+'st(0, 1); while(lte(ld(0),100), st(1, ld(1)+ld(0)); st(0, ld(0)+1))' -> 100.000000 |
|
104 |
+ |
|
105 |
+Evaluating 'isnan(1)' |
|
106 |
+'isnan(1)' -> 0.000000 |
|
107 |
+ |
|
108 |
+Evaluating 'isnan(NAN)' |
|
109 |
+'isnan(NAN)' -> 1.000000 |
|
110 |
+ |
|
111 |
+Evaluating 'floor(NAN)' |
|
112 |
+'floor(NAN)' -> nan |
|
113 |
+ |
|
114 |
+Evaluating 'floor(123.123)' |
|
115 |
+'floor(123.123)' -> 123.000000 |
|
116 |
+ |
|
117 |
+Evaluating 'floor(-123.123)' |
|
118 |
+'floor(-123.123)' -> -124.000000 |
|
119 |
+ |
|
120 |
+Evaluating 'trunc(123.123)' |
|
121 |
+'trunc(123.123)' -> 123.000000 |
|
122 |
+ |
|
123 |
+Evaluating 'trunc(-123.123)' |
|
124 |
+'trunc(-123.123)' -> -123.000000 |
|
125 |
+ |
|
126 |
+Evaluating 'ceil(123.123)' |
|
127 |
+'ceil(123.123)' -> 124.000000 |
|
128 |
+ |
|
129 |
+Evaluating 'ceil(-123.123)' |
|
130 |
+'ceil(-123.123)' -> -123.000000 |
|
131 |
+ |
|
132 |
+Evaluating 'sqrt(1764)' |
|
133 |
+'sqrt(1764)' -> 42.000000 |
|
134 |
+ |
|
135 |
+Evaluating 'sqrt(-1)' |
|
136 |
+'sqrt(-1)' -> -nan |
|
137 |
+ |
|
138 |
+Evaluating 'not(1)' |
|
139 |
+'not(1)' -> 0.000000 |
|
140 |
+ |
|
141 |
+Evaluating 'not(NAN)' |
|
142 |
+'not(NAN)' -> 0.000000 |
|
143 |
+ |
|
144 |
+Evaluating 'not(0)' |
|
145 |
+'not(0)' -> 1.000000 |
|
146 |
+ |
|
147 |
+Evaluating 'pow(0,1.23)' |
|
148 |
+'pow(0,1.23)' -> 0.000000 |
|
149 |
+ |
|
150 |
+Evaluating 'pow(PI,1.23)' |
|
151 |
+'pow(PI,1.23)' -> 4.087844 |
|
152 |
+ |
|
153 |
+Evaluating 'PI^1.23' |
|
154 |
+'PI^1.23' -> 4.087844 |
|
155 |
+ |
|
156 |
+Evaluating 'pow(-1,1.23)' |
|
157 |
+'pow(-1,1.23)' -> -nan |
|
158 |
+ |
|
159 |
+12.700000 == 12.7 |
|
160 |
+0.931323 == 0.931322575 |
0 | 161 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,1024 @@ |
0 |
+ 0 0 |
|
1 |
+ 38 2 |
|
2 |
+ 151 15 |
|
3 |
+ 339 65 |
|
4 |
+ 603 182 |
|
5 |
+ 942 381 |
|
6 |
+ 1356 664 |
|
7 |
+ 1845 1021 |
|
8 |
+ 2409 1450 |
|
9 |
+ 3046 1953 |
|
10 |
+ 3755 2530 |
|
11 |
+ 4535 3182 |
|
12 |
+ 5384 3907 |
|
13 |
+ 6300 4700 |
|
14 |
+ 7278 5563 |
|
15 |
+ 8315 6491 |
|
16 |
+ 9405 7481 |
|
17 |
+ 10541 8529 |
|
18 |
+ 11717 9629 |
|
19 |
+ 12924 10773 |
|
20 |
+ 14151 11956 |
|
21 |
+ 15385 13167 |
|
22 |
+ 16615 14396 |
|
23 |
+ 17825 15630 |
|
24 |
+ 18997 16857 |
|
25 |
+ 20114 18060 |
|
26 |
+ 21156 19222 |
|
27 |
+ 22102 20325 |
|
28 |
+ 22929 21349 |
|
29 |
+ 23613 22273 |
|
30 |
+ 24132 23073 |
|
31 |
+ 24461 23726 |
|
32 |
+ 24575 24208 |
|
33 |
+ 24453 24495 |
|
34 |
+ 24073 24564 |
|
35 |
+ 23416 24392 |
|
36 |
+ 22467 23959 |
|
37 |
+ 21213 23245 |
|
38 |
+ 19649 22236 |
|
39 |
+ 17773 20922 |
|
40 |
+ 15590 19296 |
|
41 |
+ 13116 17360 |
|
42 |
+ 10371 15119 |
|
43 |
+ 7386 12591 |
|
44 |
+ 4201 9797 |
|
45 |
+ 867 6771 |
|
46 |
+ -2559 3554 |
|
47 |
+ -6008 199 |
|
48 |
+ -9405 -3235 |
|
49 |
+-12667 -6678 |
|
50 |
+-15707 -10053 |
|
51 |
+-18435 -13277 |
|
52 |
+-20762 -16261 |
|
53 |
+-22602 -18916 |
|
54 |
+-23875 -21153 |
|
55 |
+-24511 -22887 |
|
56 |
+-24457 -24040 |
|
57 |
+-23675 -24546 |
|
58 |
+-22151 -24352 |
|
59 |
+-19895 -23428 |
|
60 |
+-16946 -21762 |
|
61 |
+-13370 -19370 |
|
62 |
+ -9265 -16296 |
|
63 |
+ -4757 -12613 |
|
64 |
+ 0 -8423 |
|
65 |
+ 4831 -3858 |
|
66 |
+ 9544 923 |
|
67 |
+ 13934 5743 |
|
68 |
+ 17799 10406 |
|
69 |
+ 20942 14708 |
|
70 |
+ 23189 18447 |
|
71 |
+ 24395 21430 |
|
72 |
+ 24457 23488 |
|
73 |
+ 23323 24483 |
|
74 |
+ 21001 24321 |
|
75 |
+ 17563 22963 |
|
76 |
+ 13148 20426 |
|
77 |
+ 7959 16795 |
|
78 |
+ 2259 12223 |
|
79 |
+ -3643 6922 |
|
80 |
+ -9405 1166 |
|
81 |
+-14670 -4731 |
|
82 |
+-19092 -10421 |
|
83 |
+-22359 -15550 |
|
84 |
+-24213 -19777 |
|
85 |
+-24481 -22797 |
|
86 |
+-23087 -24368 |
|
87 |
+-20071 -24334 |
|
88 |
+-15590 -22639 |
|
89 |
+ -9924 -19343 |
|
90 |
+ -3457 -14629 |
|
91 |
+ 3345 -8793 |
|
92 |
+ 9959 -2236 |
|
93 |
+ 15851 4563 |
|
94 |
+ 20517 11078 |
|
95 |
+ 23528 16779 |
|
96 |
+ 24575 21171 |
|
97 |
+ 23506 23846 |
|
98 |
+ 20349 24522 |
|
99 |
+ 15327 23076 |
|
100 |
+ 8845 19572 |
|
101 |
+ 1469 14264 |
|
102 |
+ -6117 7589 |
|
103 |
+-13180 135 |
|
104 |
+-18997 -7403 |
|
105 |
+-22942 -14289 |
|
106 |
+-24553 -19814 |
|
107 |
+-23592 -23377 |
|
108 |
+-20092 -24551 |
|
109 |
+-14366 -23145 |
|
110 |
+ -6989 -19239 |
|
111 |
+ 1244 -13192 |
|
112 |
+ 9405 -5620 |
|
113 |
+ 16532 2656 |
|
114 |
+ 21744 10697 |
|
115 |
+ 24357 17548 |
|
116 |
+ 23978 22356 |
|
117 |
+ 20579 24483 |
|
118 |
+ 14518 23593 |
|
119 |
+ 6518 19723 |
|
120 |
+ -2409 13293 |
|
121 |
+-11083 5078 |
|
122 |
+-18310 -3876 |
|
123 |
+-23048 -12378 |
|
124 |
+-24568 -19252 |
|
125 |
+-22573 -23500 |
|
126 |
+-17270 -24458 |
|
127 |
+ -9370 -21908 |
|
128 |
+ 0 -16140 |
|
129 |
+ 9439 -7935 |
|
130 |
+ 17484 1526 |
|
131 |
+ 22832 10824 |
|
132 |
+ 24568 18508 |
|
133 |
+ 22327 23330 |
|
134 |
+ 16392 24452 |
|
135 |
+ 7673 21608 |
|
136 |
+ -2409 15181 |
|
137 |
+-12146 6168 |
|
138 |
+-19828 -3955 |
|
139 |
+-24050 -13466 |
|
140 |
+-23978 -20689 |
|
141 |
+-19535 -24292 |
|
142 |
+-11451 -23552 |
|
143 |
+ -1168 -18512 |
|
144 |
+ 9405 -10015 |
|
145 |
+ 18234 416 |
|
146 |
+ 23560 10836 |
|
147 |
+ 24257 19234 |
|
148 |
+ 20092 23929 |
|
149 |
+ 11817 23916 |
|
150 |
+ 1055 19105 |
|
151 |
+ -9993 10379 |
|
152 |
+-18997 -540 |
|
153 |
+-23986 -11413 |
|
154 |
+-23802 -19939 |
|
155 |
+-18385 -24246 |
|
156 |
+ -8845 -23318 |
|
157 |
+ 2746 -17260 |
|
158 |
+ 13778 -7325 |
|
159 |
+ 21691 4319 |
|
160 |
+ 24575 15045 |
|
161 |
+ 21656 22357 |
|
162 |
+ 13528 24482 |
|
163 |
+ 2071 20823 |
|
164 |
+ -9959 12152 |
|
165 |
+-19581 484 |
|
166 |
+-24331 -11367 |
|
167 |
+-22915 -20460 |
|
168 |
+-15590 -24459 |
|
169 |
+ -4164 -22257 |
|
170 |
+ 8421 -14315 |
|
171 |
+ 18828 -2603 |
|
172 |
+ 24213 9857 |
|
173 |
+ 23022 19756 |
|
174 |
+ 15474 24383 |
|
175 |
+ 3569 22388 |
|
176 |
+ -9405 14211 |
|
177 |
+-19761 2031 |
|
178 |
+-24471 -10785 |
|
179 |
+-22069 -20591 |
|
180 |
+-13148 -24512 |
|
181 |
+ -264 -21311 |
|
182 |
+ 12763 -11818 |
|
183 |
+ 21968 1241 |
|
184 |
+ 24457 13990 |
|
185 |
+ 19351 22545 |
|
186 |
+ 8137 24211 |
|
187 |
+ -5715 18362 |
|
188 |
+-17799 6720 |
|
189 |
+-24167 -7108 |
|
190 |
+-22646 -18722 |
|
191 |
+-13622 -24326 |
|
192 |
+ 0 -21995 |
|
193 |
+ 13685 -12382 |
|
194 |
+ 22762 1409 |
|
195 |
+ 24035 14788 |
|
196 |
+ 16946 23188 |
|
197 |
+ 3867 23644 |
|
198 |
+-10643 15884 |
|
199 |
+-21401 2514 |
|
200 |
+-24457 -11806 |
|
201 |
+-18584 -21960 |
|
202 |
+ -5825 -24220 |
|
203 |
+ 9160 -17649 |
|
204 |
+ 20762 -4546 |
|
205 |
+ 24527 10303 |
|
206 |
+ 18901 21343 |
|
207 |
+ 5935 24337 |
|
208 |
+ -9405 18028 |
|
209 |
+-21098 4727 |
|
210 |
+-24442 -10470 |
|
211 |
+-17979 -21608 |
|
212 |
+ -4201 -24206 |
|
213 |
+ 11351 -17110 |
|
214 |
+ 22280 -3064 |
|
215 |
+ 23970 12287 |
|
216 |
+ 15590 22636 |
|
217 |
+ 565 23615 |
|
218 |
+-14760 14693 |
|
219 |
+-23773 -479 |
|
220 |
+-22467 -15504 |
|
221 |
+-11284 -23907 |
|
222 |
+ 4942 -21954 |
|
223 |
+ 19021 -10373 |
|
224 |
+ 24575 5837 |
|
225 |
+ 18973 19502 |
|
226 |
+ 4646 24445 |
|
227 |
+-11883 18316 |
|
228 |
+-22929 3786 |
|
229 |
+-23226 -12541 |
|
230 |
+-12505 -23090 |
|
231 |
+ 4239 -22841 |
|
232 |
+ 18997 -11784 |
|
233 |
+ 24567 4932 |
|
234 |
+ 18107 19331 |
|
235 |
+ 2671 24403 |
|
236 |
+-14151 17558 |
|
237 |
+-23919 2036 |
|
238 |
+-21602 -14549 |
|
239 |
+ -8244 -23897 |
|
240 |
+ 9405 -21206 |
|
241 |
+ 22232 -7710 |
|
242 |
+ 23473 9785 |
|
243 |
+ 12342 22272 |
|
244 |
+ -5384 23186 |
|
245 |
+-20286 11920 |
|
246 |
+-24287 -5693 |
|
247 |
+-15090 -20319 |
|
248 |
+ 2409 -24060 |
|
249 |
+ 18633 -14771 |
|
250 |
+ 24538 2613 |
|
251 |
+ 16698 18608 |
|
252 |
+ -603 24329 |
|
253 |
+-17616 16471 |
|
254 |
+-24575 -682 |
|
255 |
+-17351 -17495 |
|
256 |
+ 0 -24355 |
|
257 |
+ 17404 -17211 |
|
258 |
+ 24575 -65 |
|
259 |
+ 17136 17163 |
|
260 |
+ -603 24334 |
|
261 |
+-18031 17094 |
|
262 |
+-24538 -374 |
|
263 |
+-16023 -17660 |
|
264 |
+ 2409 -24287 |
|
265 |
+ 19397 -16108 |
|
266 |
+ 24287 1992 |
|
267 |
+ 13872 18902 |
|
268 |
+ -5384 24066 |
|
269 |
+-21251 14131 |
|
270 |
+-23473 -4761 |
|
271 |
+-10473 -20664 |
|
272 |
+ 9405 -23351 |
|
273 |
+ 23151 -10967 |
|
274 |
+ 21602 8573 |
|
275 |
+ 5642 22543 |
|
276 |
+-14151 21682 |
|
277 |
+-24430 6431 |
|
278 |
+-18107 -13147 |
|
279 |
+ 641 -23920 |
|
280 |
+ 18997 -18514 |
|
281 |
+ 24207 -475 |
|
282 |
+ 12505 17922 |
|
283 |
+ -8030 23970 |
|
284 |
+-22929 13357 |
|
285 |
+-21511 -6625 |
|
286 |
+ -4646 -21972 |
|
287 |
+ 15619 -21758 |
|
288 |
+ 24575 -6009 |
|
289 |
+ 15561 14083 |
|
290 |
+ -4942 24019 |
|
291 |
+-21831 16485 |
|
292 |
+-22467 -3138 |
|
293 |
+ -6227 -20474 |
|
294 |
+ 14760 -22641 |
|
295 |
+ 24569 -7904 |
|
296 |
+ 15590 12791 |
|
297 |
+ -5421 23839 |
|
298 |
+-22280 16760 |
|
299 |
+-21797 -3160 |
|
300 |
+ -4201 -20666 |
|
301 |
+ 16754 -22169 |
|
302 |
+ 24442 -6381 |
|
303 |
+ 12602 14430 |
|
304 |
+ -9405 23865 |
|
305 |
+-23848 14348 |
|
306 |
+-18901 -6644 |
|
307 |
+ 1545 -22308 |
|
308 |
+ 20762 -19937 |
|
309 |
+ 22804 -1339 |
|
310 |
+ 5825 18365 |
|
311 |
+-16080 22954 |
|
312 |
+-24457 8529 |
|
313 |
+-12080 -13009 |
|
314 |
+ 10643 -23650 |
|
315 |
+ 24269 -14353 |
|
316 |
+ 16946 7119 |
|
317 |
+ -5127 22521 |
|
318 |
+-22762 18602 |
|
319 |
+-20413 -1370 |
|
320 |
+ 0 -20152 |
|
321 |
+ 20454 -21342 |
|
322 |
+ 22646 -3797 |
|
323 |
+ 4461 17096 |
|
324 |
+-17799 22804 |
|
325 |
+-23902 8148 |
|
326 |
+ -8137 -13817 |
|
327 |
+ 15149 -23296 |
|
328 |
+ 24457 -11618 |
|
329 |
+ 11016 10660 |
|
330 |
+-12763 23135 |
|
331 |
+-24574 14243 |
|
332 |
+-13148 -7861 |
|
333 |
+ 10813 -22608 |
|
334 |
+ 24471 -16124 |
|
335 |
+ 14609 5565 |
|
336 |
+ -9405 21949 |
|
337 |
+-24315 17379 |
|
338 |
+-15474 -3849 |
|
339 |
+ 8598 -21336 |
|
340 |
+ 24213 -18120 |
|
341 |
+ 15793 2745 |
|
342 |
+ -8421 20885 |
|
343 |
+-24220 18429 |
|
344 |
+-15590 -2263 |
|
345 |
+ 8880 -20663 |
|
346 |
+ 24331 -18359 |
|
347 |
+ 14851 2398 |
|
348 |
+ -9959 20685 |
|
349 |
+-24488 17917 |
|
350 |
+-13528 -3137 |
|
351 |
+ 11618 -20918 |
|
352 |
+ 24575 -17075 |
|
353 |
+ 11551 4460 |
|
354 |
+-13778 21286 |
|
355 |
+-24421 15770 |
|
356 |
+ -8845 -6328 |
|
357 |
+ 16307 -21661 |
|
358 |
+ 23802 -13916 |
|
359 |
+ 5348 8671 |
|
360 |
+-18997 21868 |
|
361 |
+-22452 11421 |
|
362 |
+ -1055 -11371 |
|
363 |
+ 21548 -21685 |
|
364 |
+ 20092 -8212 |
|
365 |
+ -3941 14242 |
|
366 |
+-23560 20853 |
|
367 |
+-16476 4267 |
|
368 |
+ 9405 -17009 |
|
369 |
+ 24547 -19106 |
|
370 |
+ 11451 343 |
|
371 |
+-14911 19309 |
|
372 |
+-23978 16208 |
|
373 |
+ -5053 -5409 |
|
374 |
+ 19828 -20699 |
|
375 |
+ 21364 -12016 |
|
376 |
+ -2409 10553 |
|
377 |
+-23347 20700 |
|
378 |
+-16392 6559 |
|
379 |
+ 10268 -15211 |
|
380 |
+ 24568 -18879 |
|
381 |
+ 9090 -118 |
|
382 |
+-17484 18664 |
|
383 |
+-22690 14969 |
|
384 |
+ 0 -6714 |
|
385 |
+ 22719 -20134 |
|
386 |
+ 17270 -9014 |
|
387 |
+ -9717 13022 |
|
388 |
+-24568 18943 |
|
389 |
+ -8527 1506 |
|
390 |
+ 18310 -17662 |
|
391 |
+ 21934 -14749 |
|
392 |
+ -2409 6538 |
|
393 |
+-23695 19463 |
|
394 |
+-14518 7789 |
|
395 |
+ 13433 -13633 |
|
396 |
+ 23978 -17566 |
|
397 |
+ 3270 935 |
|
398 |
+-21744 18075 |
|
399 |
+-18184 11812 |
|
400 |
+ 9405 -9654 |
|
401 |
+ 24544 -18394 |
|
402 |
+ 6989 -3082 |
|
403 |
+-19939 16117 |
|
404 |
+-20092 13945 |
|
405 |
+ 6881 -6613 |
|
406 |
+ 24553 -18196 |
|
407 |
+ 8809 -5437 |
|
408 |
+-18997 14458 |
|
409 |
+-20742 14731 |
|
410 |
+ 6117 -4859 |
|
411 |
+ 24531 -17657 |
|
412 |
+ 8845 -6307 |
|
413 |
+-19210 13526 |
|
414 |
+-20349 14588 |
|
415 |
+ 7170 -4444 |
|
416 |
+ 24575 -17109 |
|
417 |
+ 7098 -5874 |
|
418 |
+-20517 13412 |
|
419 |
+-18780 13691 |
|
420 |
+ 9959 -5272 |
|
421 |
+ 24347 -16558 |
|
422 |
+ 3457 -4241 |
|
423 |
+-22482 13949 |
|
424 |
+-15590 11979 |
|
425 |
+ 14181 -7142 |
|
426 |
+ 23087 -15723 |
|
427 |
+ -2146 -1459 |
|
428 |
+-24213 14726 |
|
429 |
+-10200 9228 |
|
430 |
+ 19092 -9692 |
|
431 |
+ 19717 -14108 |
|
432 |
+ -9405 2343 |
|
433 |
+-24304 15085 |
|
434 |
+ -2259 5221 |
|
435 |
+ 23251 -12286 |
|
436 |
+ 13148 -11127 |
|
437 |
+-17190 6746 |
|
438 |
+-21001 14161 |
|
439 |
+ 7745 2 |
|
440 |
+ 24457 -13938 |
|
441 |
+ 2971 -6372 |
|
442 |
+-23189 10842 |
|
443 |
+-12860 11094 |
|
444 |
+ 17799 -5795 |
|
445 |
+ 20243 -13421 |
|
446 |
+ -9544 -30 |
|
447 |
+-24096 13184 |
|
448 |
+ 0 5498 |
|
449 |
+ 24110 -10713 |
|
450 |
+ 9265 -9718 |
|
451 |
+-20620 6673 |
|
452 |
+-16946 12155 |
|
453 |
+ 14427 -1883 |
|
454 |
+ 22151 -12653 |
|
455 |
+ -6591 -2861 |
|
456 |
+-24457 11378 |
|
457 |
+ -1770 6908 |
|
458 |
+ 23875 -8726 |
|
459 |
+ 9648 -9817 |
|
460 |
+-20762 5209 |
|
461 |
+-16251 11385 |
|
462 |
+ 15707 -1358 |
|
463 |
+ 21059 -11610 |
|
464 |
+ -9405 -2353 |
|
465 |
+-23830 10656 |
|
466 |
+ 2559 5560 |
|
467 |
+ 24560 -8789 |
|
468 |
+ 4201 -8028 |
|
469 |
+-23439 6314 |
|
470 |
+-10371 9643 |
|
471 |
+ 20783 -3542 |
|
472 |
+ 15590 -10404 |
|
473 |
+-16973 742 |
|
474 |
+-19649 10386 |
|
475 |
+ 12407 1870 |
|
476 |
+ 22467 -9720 |
|
477 |
+ -7458 -4144 |
|
478 |
+-24073 8562 |
|
479 |
+ 2446 5991 |
|
480 |
+ 24575 -7072 |
|
481 |
+ 2371 -7375 |
|
482 |
+-24132 5398 |
|
483 |
+ -6808 8306 |
|
484 |
+ 22929 -3667 |
|
485 |
+ 10745 -8824 |
|
486 |
+-21156 1980 |
|
487 |
+-14120 8987 |
|
488 |
+ 18997 -408 |
|
489 |
+ 16918 -8863 |
|
490 |
+-16615 -1001 |
|
491 |
+-19163 8521 |
|
492 |
+ 14151 2220 |
|
493 |
+ 20902 -8027 |
|
494 |
+-11717 -3241 |
|
495 |
+-22200 7441 |
|
496 |
+ 9405 4071 |
|
497 |
+ 23126 -6811 |
|
498 |
+ -7278 -4722 |
|
499 |
+-23754 6177 |
|
500 |
+ 5384 5213 |
|
501 |
+ 24153 -5571 |
|
502 |
+ -3755 -5566 |
|
503 |
+-24386 5013 |
|
504 |
+ 2409 5801 |
|
505 |
+ 24506 -4521 |
|
506 |
+ -1356 -5939 |
|
507 |
+-24557 4104 |
|
508 |
+ 603 5999 |
|
509 |
+ 24573 -3765 |
|
510 |
+ -151 -5994 |
|
511 |
+-24575 3508 |
|
512 |
+ 0 5937 |
|
513 |
+ 24575 -3331 |
|
514 |
+ -151 -5835 |
|
515 |
+-24573 3232 |
|
516 |
+ 603 5694 |
|
517 |
+ 24557 -3205 |
|
518 |
+ -1356 -5517 |
|
519 |
+-24506 3244 |
|
520 |
+ 2409 5303 |
|
521 |
+ 24386 -3343 |
|
522 |
+ -3755 -5049 |
|
523 |
+-24153 3494 |
|
524 |
+ 5384 4752 |
|
525 |
+ 23754 -3685 |
|
526 |
+ -7278 -4407 |
|
527 |
+-23126 3906 |
|
528 |
+ 9405 4007 |
|
529 |
+ 22200 -4143 |
|
530 |
+-11717 -3547 |
|
531 |
+-20902 4380 |
|
532 |
+ 14151 3025 |
|
533 |
+ 19163 -4598 |
|
534 |
+-16615 -2434 |
|
535 |
+-16918 4778 |
|
536 |
+ 18997 1780 |
|
537 |
+ 14120 -4898 |
|
538 |
+-21156 -1066 |
|
539 |
+-10745 4934 |
|
540 |
+ 22929 304 |
|
541 |
+ 6808 -4862 |
|
542 |
+-24132 489 |
|
543 |
+ -2371 4664 |
|
544 |
+ 24575 -1288 |
|
545 |
+ -2446 -4320 |
|
546 |
+-24073 2060 |
|
547 |
+ 7458 3820 |
|
548 |
+ 22467 -2767 |
|
549 |
+-12407 -3162 |
|
550 |
+-19649 3365 |
|
551 |
+ 16973 2357 |
|
552 |
+ 15590 -3808 |
|
553 |
+-20783 -1429 |
|
554 |
+-10371 4050 |
|
555 |
+ 23439 419 |
|
556 |
+ 4201 -4055 |
|
557 |
+-24560 616 |
|
558 |
+ 2559 3795 |
|
559 |
+ 23830 -1607 |
|
560 |
+ -9405 -3266 |
|
561 |
+-21059 2473 |
|
562 |
+ 15707 2486 |
|
563 |
+ 16251 -3130 |
|
564 |
+-20762 -1499 |
|
565 |
+ -9648 3505 |
|
566 |
+ 23875 386 |
|
567 |
+ 1770 -3539 |
|
568 |
+-24457 754 |
|
569 |
+ 6591 3205 |
|
570 |
+ 22151 -1798 |
|
571 |
+-14427 -2518 |
|
572 |
+-16946 2618 |
|
573 |
+ 20620 1540 |
|
574 |
+ 9265 -3101 |
|
575 |
+-24110 -381 |
|
576 |
+ 0 3162 |
|
577 |
+ 24096 -809 |
|
578 |
+ -9544 -2775 |
|
579 |
+-20243 1859 |
|
580 |
+ 17799 1978 |
|
581 |
+ 12860 -2598 |
|
582 |
+-23189 -879 |
|
583 |
+ -2971 2893 |
|
584 |
+ 24457 -344 |
|
585 |
+ -7745 -2674 |
|
586 |
+-21001 1478 |
|
587 |
+ 17190 1966 |
|
588 |
+ 13148 -2304 |
|
589 |
+-23251 -890 |
|
590 |
+ -2259 2647 |
|
591 |
+ 24304 -341 |
|
592 |
+ -9405 -2421 |
|
593 |
+-19717 1467 |
|
594 |
+ 19092 1662 |
|
595 |
+ 10200 -2229 |
|
596 |
+-24213 -535 |
|
597 |
+ 2146 2434 |
|
598 |
+ 23087 -692 |
|
599 |
+-14181 -2022 |
|
600 |
+-15590 1706 |
|
601 |
+ 22482 1090 |
|
602 |
+ 3457 -2230 |
|
603 |
+-24347 115 |
|
604 |
+ 9959 2111 |
|
605 |
+ 18780 -1251 |
|
606 |
+-20517 -1374 |
|
607 |
+ -7098 1975 |
|
608 |
+ 24575 238 |
|
609 |
+ -7170 -2057 |
|
610 |
+-20349 938 |
|
611 |
+ 19210 1464 |
|
612 |
+ 8845 -1763 |
|
613 |
+-24531 -392 |
|
614 |
+ 6117 1949 |
|
615 |
+ 20742 -783 |
|
616 |
+-18997 -1425 |
|
617 |
+ -8809 1630 |
|
618 |
+ 24553 385 |
|
619 |
+ -6881 -1825 |
|
620 |
+-20092 770 |
|
621 |
+ 19939 1291 |
|
622 |
+ 6989 -1572 |
|
623 |
+-24544 -244 |
|
624 |
+ 9405 1688 |
|
625 |
+ 18184 -869 |
|
626 |
+-21744 -1069 |
|
627 |
+ -3270 1559 |
|
628 |
+ 23978 -7 |
|
629 |
+-13433 -1511 |
|
630 |
+-14518 1041 |
|
631 |
+ 23695 753 |
|
632 |
+ -2409 -1536 |
|
633 |
+-21934 344 |
|
634 |
+ 18310 1251 |
|
635 |
+ 8527 -1225 |
|
636 |
+-24568 -337 |
|
637 |
+ 9717 1436 |
|
638 |
+ 17270 -719 |
|
639 |
+-22719 -869 |
|
640 |
+ 0 1342 |
|
641 |
+ 22690 -157 |
|
642 |
+-17484 -1188 |
|
643 |
+ -9090 1051 |
|
644 |
+ 24568 353 |
|
645 |
+-10268 -1293 |
|
646 |
+-16392 658 |
|
647 |
+ 23347 745 |
|
648 |
+ -2409 -1224 |
|
649 |
+-21364 244 |
|
650 |
+ 19828 996 |
|
651 |
+ 5053 -1036 |
|
652 |
+-23978 -132 |
|
653 |
+ 14911 1114 |
|
654 |
+ 11451 -783 |
|
655 |
+-24547 -437 |
|
656 |
+ 9405 1124 |
|
657 |
+ 16476 -513 |
|
658 |
+-23560 -661 |
|
659 |
+ 3941 1058 |
|
660 |
+ 20092 -257 |
|
661 |
+-21548 -807 |
|
662 |
+ -1055 945 |
|
663 |
+ 22452 -37 |
|
664 |
+-18997 -887 |
|
665 |
+ -5348 815 |
|
666 |
+ 23802 142 |
|
667 |
+-16307 -917 |
|
668 |
+ -8845 682 |
|
669 |
+ 24421 276 |
|
670 |
+-13778 -913 |
|
671 |
+-11551 563 |
|
672 |
+ 24575 371 |
|
673 |
+-11618 -888 |
|
674 |
+-13528 463 |
|
675 |
+ 24488 431 |
|
676 |
+ -9959 -854 |
|
677 |
+-14851 386 |
|
678 |
+ 24331 462 |
|
679 |
+ -8880 -815 |
|
680 |
+-15590 333 |
|
681 |
+ 24220 471 |
|
682 |
+ -8421 -779 |
|
683 |
+-15793 302 |
|
684 |
+ 24213 460 |
|
685 |
+ -8598 -746 |
|
686 |
+-15474 292 |
|
687 |
+ 24315 433 |
|
688 |
+ -9405 -717 |
|
689 |
+-14609 300 |
|
690 |
+ 24471 391 |
|
691 |
+-10813 -689 |
|
692 |
+-13148 324 |
|
693 |
+ 24574 336 |
|
694 |
+-12763 -660 |
|
695 |
+-11016 359 |
|
696 |
+ 24457 267 |
|
697 |
+-15149 -627 |
|
698 |
+ -8137 400 |
|
699 |
+ 23902 184 |
|
700 |
+-17799 -584 |
|
701 |
+ -4461 444 |
|
702 |
+ 22646 90 |
|
703 |
+-20454 -527 |
|
704 |
+ 0 483 |
|
705 |
+ 20413 -15 |
|
706 |
+-22762 -452 |
|
707 |
+ 5127 511 |
|
708 |
+ 16946 -124 |
|
709 |
+-24269 -357 |
|
710 |
+ 10643 517 |
|
711 |
+ 12080 -232 |
|
712 |
+-24457 -241 |
|
713 |
+ 16080 495 |
|
714 |
+ 5825 -328 |
|
715 |
+-22804 -107 |
|
716 |
+ 20762 440 |
|
717 |
+ -1545 -400 |
|
718 |
+-18901 35 |
|
719 |
+ 23848 347 |
|
720 |
+ -9405 -437 |
|
721 |
+-12602 173 |
|
722 |
+ 24442 220 |
|
723 |
+-16754 -426 |
|
724 |
+ -4201 290 |
|
725 |
+ 21797 69 |
|
726 |
+-22280 -362 |
|
727 |
+ 5421 366 |
|
728 |
+ 15590 -89 |
|
729 |
+-24569 -247 |
|
730 |
+ 14760 384 |
|
731 |
+ 6227 -228 |
|
732 |
+-22467 -95 |
|
733 |
+ 21831 335 |
|
734 |
+ -4942 -321 |
|
735 |
+-15561 71 |
|
736 |
+ 24575 222 |
|
737 |
+-15619 -344 |
|
738 |
+ -4646 214 |
|
739 |
+ 21511 65 |
|
740 |
+-22929 -288 |
|
741 |
+ 8030 300 |
|
742 |
+ 12505 -102 |
|
743 |
+-24207 -162 |
|
744 |
+ 18997 304 |
|
745 |
+ -641 -232 |
|
746 |
+-18107 4 |
|
747 |
+ 24430 218 |
|
748 |
+-14151 -286 |
|
749 |
+ -5642 160 |
|
750 |
+ 21602 68 |
|
751 |
+-23151 -244 |
|
752 |
+ 9405 253 |
|
753 |
+ 10473 -97 |
|
754 |
+-23473 -115 |
|
755 |
+ 21251 247 |
|
756 |
+ -5384 -216 |
|
757 |
+-13872 49 |
|
758 |
+ 24287 142 |
|
759 |
+-19397 -238 |
|
760 |
+ 2409 183 |
|
761 |
+ 16023 -17 |
|
762 |
+-24538 -153 |
|
763 |
+ 18031 224 |
|
764 |
+ -603 -158 |
|
765 |
+-17136 0 |
|
766 |
+ 24575 153 |
|
767 |
+-17404 -209 |
|
768 |
+ 0 142 |
|
769 |
+ 17351 6 |
|
770 |
+-24575 -144 |
|
771 |
+ 17616 196 |
|
772 |
+ -603 -133 |
|
773 |
+-16698 -1 |
|
774 |
+ 24538 131 |
|
775 |
+-18633 -182 |
|
776 |
+ 2409 132 |
|
777 |
+ 15090 -11 |
|
778 |
+-24287 -111 |
|
779 |
+ 20286 169 |
|
780 |
+ -5384 -134 |
|
781 |
+-12342 30 |
|
782 |
+ 23473 86 |
|
783 |
+-22232 -152 |
|
784 |
+ 9405 138 |
|
785 |
+ 8244 -53 |
|
786 |
+-21602 -56 |
|
787 |
+ 23919 132 |
|
788 |
+-14151 -138 |
|
789 |
+ -2671 76 |
|
790 |
+ 18107 21 |
|
791 |
+-24567 -104 |
|
792 |
+ 18997 134 |
|
793 |
+ -4239 -98 |
|
794 |
+-12505 16 |
|
795 |
+ 23226 69 |
|
796 |
+-22929 -119 |
|
797 |
+ 11883 111 |
|
798 |
+ 4646 -53 |
|
799 |
+-18973 -28 |
|
800 |
+ 24575 92 |
|
801 |
+-19021 -113 |
|
802 |
+ 4942 82 |
|
803 |
+ 11284 -16 |
|
804 |
+-22467 -54 |
|
805 |
+ 23773 97 |
|
806 |
+-14760 -97 |
|
807 |
+ -565 56 |
|
808 |
+ 15590 8 |
|
809 |
+-23970 -65 |
|
810 |
+ 22280 93 |
|
811 |
+-11351 -82 |
|
812 |
+ -4201 37 |
|
813 |
+ 17979 21 |
|
814 |
+-24442 -67 |
|
815 |
+ 21098 85 |
|
816 |
+ -9405 -69 |
|
817 |
+ -5935 26 |
|
818 |
+ 18901 24 |
|
819 |
+-24527 -64 |
|
820 |
+ 20762 77 |
|
821 |
+ -9160 -61 |
|
822 |
+ -5825 23 |
|
823 |
+ 18584 21 |
|
824 |
+-24457 -56 |
|
825 |
+ 21401 69 |
|
826 |
+-10643 -57 |
|
827 |
+ -3867 25 |
|
828 |
+ 16946 15 |
|
829 |
+-24035 -47 |
|
830 |
+ 22762 62 |
|
831 |
+-13685 -55 |
|
832 |
+ 0 29 |
|
833 |
+ 13622 4 |
|
834 |
+-22646 -35 |
|
835 |
+ 24167 53 |
|
836 |
+-17799 -52 |
|
837 |
+ 5715 36 |
|
838 |
+ 8137 -8 |
|
839 |
+-19351 -21 |
|
840 |
+ 24457 41 |
|
841 |
+-21968 -49 |
|
842 |
+ 12763 41 |
|
843 |
+ 264 -21 |
|
844 |
+-13148 -4 |
|
845 |
+ 22069 27 |
|
846 |
+-24471 -40 |
|
847 |
+ 19761 42 |
|
848 |
+ -9405 -31 |
|
849 |
+ -3569 12 |
|
850 |
+ 15474 9 |
|
851 |
+-23022 -27 |
|
852 |
+ 24213 36 |
|
853 |
+-18828 -35 |
|
854 |
+ 8421 25 |
|
855 |
+ 4164 -9 |
|
856 |
+-15590 -9 |
|
857 |
+ 22915 23 |
|
858 |
+-24331 -31 |
|
859 |
+ 19581 31 |
|
860 |
+ -9959 -23 |
|
861 |
+ -2071 10 |
|
862 |
+ 13528 5 |
|
863 |
+-21656 -18 |
|
864 |
+ 24575 26 |
|
865 |
+-21691 -27 |
|
866 |
+ 13778 22 |
|
867 |
+ -2746 -12 |
|
868 |
+ -8845 0 |
|
869 |
+ 18385 11 |
|
870 |
+-23802 -20 |
|
871 |
+ 23986 23 |
|
872 |
+-18997 -22 |
|
873 |
+ 9993 15 |
|
874 |
+ 1055 -7 |
|
875 |
+-11817 -3 |
|
876 |
+ 20092 11 |
|
877 |
+-24257 -17 |
|
878 |
+ 23560 19 |
|
879 |
+-18234 -17 |
|
880 |
+ 9405 12 |
|
881 |
+ 1168 -5 |
|
882 |
+-11451 -3 |
|
883 |
+ 19535 10 |
|
884 |
+-23978 -14 |
|
885 |
+ 24050 16 |
|
886 |
+-19828 -14 |
|
887 |
+ 12146 11 |
|
888 |
+ -2409 -5 |
|
889 |
+ -7673 0 |
|
890 |
+ 16392 6 |
|
891 |
+-22327 -10 |
|
892 |
+ 24568 12 |
|
893 |
+-22832 -12 |
|
894 |
+ 17484 11 |
|
895 |
+ -9439 -7 |
|
896 |
+ 0 3 |
|
897 |
+ 9370 2 |
|
898 |
+-17270 -5 |
|
899 |
+ 22573 8 |
|
900 |
+-24568 -9 |
|
901 |
+ 23048 10 |
|
902 |
+-18310 -8 |
|
903 |
+ 11083 5 |
|
904 |
+ -2409 -3 |
|
905 |
+ -6518 -1 |
|
906 |
+ 14518 3 |
|
907 |
+-20579 -5 |
|
908 |
+ 23978 7 |
|
909 |
+-24357 -7 |
|
910 |
+ 21744 7 |
|
911 |
+-16532 -6 |
|
912 |
+ 9405 3 |
|
913 |
+ -1244 -1 |
|
914 |
+ -6989 -1 |
|
915 |
+ 14366 3 |
|
916 |
+-20092 -4 |
|
917 |
+ 23592 5 |
|
918 |
+-24553 -5 |
|
919 |
+ 22942 5 |
|
920 |
+-18997 -4 |
|
921 |
+ 13180 3 |
|
922 |
+ -6117 -2 |
|
923 |
+ -1469 1 |
|
924 |
+ 8845 2 |
|
925 |
+-15327 -2 |
|
926 |
+ 20349 3 |
|
927 |
+-23506 -4 |
|
928 |
+ 24575 3 |
|
929 |
+-23528 -4 |
|
930 |
+ 20517 3 |
|
931 |
+-15851 -2 |
|
932 |
+ 9959 1 |
|
933 |
+ -3345 0 |
|
934 |
+ -3457 0 |
|
935 |
+ 9924 1 |
|
936 |
+-15590 -2 |
|
937 |
+ 20071 2 |
|
938 |
+-23087 -2 |
|
939 |
+ 24481 3 |
|
940 |
+-24213 -2 |
|
941 |
+ 22359 2 |
|
942 |
+-19092 -1 |
|
943 |
+ 14670 1 |
|
944 |
+ -9405 0 |
|
945 |
+ 3643 0 |
|
946 |
+ 2259 0 |
|
947 |
+ -7959 -1 |
|
948 |
+ 13148 1 |
|
949 |
+-17563 -1 |
|
950 |
+ 21001 1 |
|
951 |
+-23323 -1 |
|
952 |
+ 24457 1 |
|
953 |
+-24395 -1 |
|
954 |
+ 23189 1 |
|
955 |
+-20942 -1 |
|
956 |
+ 17799 1 |
|
957 |
+-13934 0 |
|
958 |
+ 9544 0 |
|
959 |
+ -4831 0 |
|
960 |
+ 0 0 |
|
961 |
+ 4757 1 |
|
962 |
+ -9265 0 |
|
963 |
+ 13370 0 |
|
964 |
+-16946 -1 |
|
965 |
+ 19895 0 |
|
966 |
+-22151 -1 |
|
967 |
+ 23675 0 |
|
968 |
+-24457 -1 |
|
969 |
+ 24511 0 |
|
970 |
+-23875 0 |
|
971 |
+ 22602 0 |
|
972 |
+-20762 0 |
|
973 |
+ 18435 0 |
|
974 |
+-15707 0 |
|
975 |
+ 12667 0 |
|
976 |
+ -9405 0 |
|
977 |
+ 6008 0 |
|
978 |
+ -2559 0 |
|
979 |
+ -867 0 |
|
980 |
+ 4201 0 |
|
981 |
+ -7386 0 |
|
982 |
+ 10371 0 |
|
983 |
+-13116 0 |
|
984 |
+ 15590 0 |
|
985 |
+-17773 0 |
|
986 |
+ 19649 0 |
|
987 |
+-21213 0 |
|
988 |
+ 22467 0 |
|
989 |
+-23416 0 |
|
990 |
+ 24073 0 |
|
991 |
+-24453 0 |
|
992 |
+ 24575 0 |
|
993 |
+-24461 0 |
|
994 |
+ 24132 0 |
|
995 |
+-23613 0 |
|
996 |
+ 22929 0 |
|
997 |
+-22102 0 |
|
998 |
+ 21156 0 |
|
999 |
+-20114 0 |
|
1000 |
+ 18997 0 |
|
1001 |
+-17825 0 |
|
1002 |
+ 16615 0 |
|
1003 |
+-15385 0 |
|
1004 |
+ 14151 0 |
|
1005 |
+-12924 0 |
|
1006 |
+ 11717 0 |
|
1007 |
+-10541 0 |
|
1008 |
+ 9405 0 |
|
1009 |
+ -8315 0 |
|
1010 |
+ 7278 0 |
|
1011 |
+ -6300 0 |
|
1012 |
+ 5384 0 |
|
1013 |
+ -4535 0 |
|
1014 |
+ 3755 0 |
|
1015 |
+ -3046 0 |
|
1016 |
+ 2409 0 |
|
1017 |
+ -1845 0 |
|
1018 |
+ 1356 0 |
|
1019 |
+ -942 0 |
|
1020 |
+ 603 0 |
|
1021 |
+ -339 0 |
|
1022 |
+ 151 0 |
|
1023 |
+ -38 0 |