| 186 | } |
| 187 | |
| 188 | static int dct_error(const struct algo *dct, int test, int is_idct, int speed, const int bits) |
| 189 | { |
| 190 | void (*ref)(int16_t *block) = is_idct ? ff_ref_idct : ff_ref_fdct; |
| 191 | int it, i, scale; |
| 192 | int err_inf, v; |
| 193 | int64_t err2, ti, ti1, it1, err_sum = 0; |
| 194 | int64_t sysErr[64], sysErrMax = 0; |
| 195 | int64_t err2_matrix[64], err2_max = 0; |
| 196 | int maxout = 0; |
| 197 | int blockSumErrMax = 0, blockSumErr; |
| 198 | AVLFG prng; |
| 199 | const int vals=1<<bits; |
| 200 | double omse, ome; |
| 201 | int spec_err; |
| 202 | |
| 203 | av_lfg_init(&prng, 1); |
| 204 | |
| 205 | err_inf = 0; |
| 206 | err2 = 0; |
| 207 | for (i = 0; i < 64; i++) |
| 208 | err2_matrix[i] = sysErr[i] = 0; |
| 209 | for (it = 0; it < NB_ITS; it++) { |
| 210 | init_block(block1, test, is_idct, &prng, vals); |
| 211 | permute(block, block1, dct->perm_type); |
| 212 | |
| 213 | dct->func(block); |
| 214 | |
| 215 | if (!strcmp(dct->name, "IJG-AAN-INT")) { |
| 216 | for (i = 0; i < 64; i++) { |
| 217 | scale = 8 * (1 << (AANSCALE_BITS + 11)) / ff_aanscales[i]; |
| 218 | block[i] = (block[i] * scale) >> AANSCALE_BITS; |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | ref(block1); |
| 223 | if (!strcmp(dct->name, "PR-SSE2")) |
| 224 | for (i = 0; i < 64; i++) |
| 225 | block1[i] = av_clip(block1[i], 4-512, 1019-512); |
| 226 | |
| 227 | blockSumErr = 0; |
| 228 | for (i = 0; i < 64; i++) { |
| 229 | int err = block[i] - block1[i]; |
| 230 | err_sum += err; |
| 231 | v = abs(err); |
| 232 | if (v > err_inf) |
| 233 | err_inf = v; |
| 234 | err2_matrix[i] += v * (int64_t)v; |
| 235 | err2 += v * (int64_t)v; |
| 236 | sysErr[i] += block[i] - block1[i]; |
| 237 | blockSumErr += v; |
| 238 | if (abs(block[i]) > maxout) |
| 239 | maxout = abs(block[i]); |
| 240 | } |
| 241 | if (blockSumErrMax < blockSumErr) |
| 242 | blockSumErrMax = blockSumErr; |
| 243 | } |
| 244 | for (i = 0; i < 64; i++) { |
| 245 | sysErrMax = FFMAX(sysErrMax, FFABS(sysErr[i])); |
no test coverage detected