|
|
|
@ -200,7 +200,7 @@ static inline void mmx_emms(void) |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void dct_error(const struct algo *dct, int test, int is_idct) |
|
|
|
|
static void dct_error(const struct algo *dct, int test, int is_idct, int speed) |
|
|
|
|
{ |
|
|
|
|
int it, i, scale; |
|
|
|
|
int err_inf, v; |
|
|
|
@ -303,6 +303,9 @@ static void dct_error(const struct algo *dct, int test, int is_idct) |
|
|
|
|
(double) err2 / NB_ITS / 64.0, (double) sysErrMax / NB_ITS, |
|
|
|
|
maxout, blockSumErrMax); |
|
|
|
|
|
|
|
|
|
if (!speed) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
/* speed test */ |
|
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
|
block1[i] = 0; |
|
|
|
@ -439,7 +442,8 @@ static void idct248_ref(uint8_t *dest, int linesize, int16_t *block) |
|
|
|
|
|
|
|
|
|
static void idct248_error(const char *name, |
|
|
|
|
void (*idct248_put)(uint8_t *dest, int line_size, |
|
|
|
|
int16_t *block)) |
|
|
|
|
int16_t *block), |
|
|
|
|
int speed) |
|
|
|
|
{ |
|
|
|
|
int it, i, it1, ti, ti1, err_max, v; |
|
|
|
|
AVLFG prng; |
|
|
|
@ -473,6 +477,9 @@ static void idct248_error(const char *name, |
|
|
|
|
} |
|
|
|
|
printf("%s %s: err_inf=%d\n", 1 ? "IDCT248" : "DCT248", name, err_max); |
|
|
|
|
|
|
|
|
|
if (!speed) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
ti = gettime(); |
|
|
|
|
it1 = 0; |
|
|
|
|
do { |
|
|
|
@ -497,7 +504,8 @@ static void help(void) |
|
|
|
|
" 1 -> test with random sparse matrixes\n" |
|
|
|
|
" 2 -> do 3. test from mpeg4 std\n" |
|
|
|
|
"-i test IDCT implementations\n" |
|
|
|
|
"-4 test IDCT248 implementations\n"); |
|
|
|
|
"-4 test IDCT248 implementations\n" |
|
|
|
|
"-t speed test\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(int argc, char **argv) |
|
|
|
@ -505,6 +513,7 @@ int main(int argc, char **argv) |
|
|
|
|
int test_idct = 0, test_248_dct = 0; |
|
|
|
|
int c, i; |
|
|
|
|
int test = 1; |
|
|
|
|
int speed = 0; |
|
|
|
|
|
|
|
|
|
cpu_flags = av_get_cpu_flags(); |
|
|
|
|
|
|
|
|
@ -519,7 +528,7 @@ int main(int argc, char **argv) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (;;) { |
|
|
|
|
c = getopt(argc, argv, "ih4"); |
|
|
|
|
c = getopt(argc, argv, "ih4t"); |
|
|
|
|
if (c == -1) |
|
|
|
|
break; |
|
|
|
|
switch (c) { |
|
|
|
@ -529,6 +538,9 @@ int main(int argc, char **argv) |
|
|
|
|
case '4': |
|
|
|
|
test_248_dct = 1; |
|
|
|
|
break; |
|
|
|
|
case 't': |
|
|
|
|
speed = 1; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
case 'h': |
|
|
|
|
help(); |
|
|
|
@ -542,12 +554,12 @@ int main(int argc, char **argv) |
|
|
|
|
printf("ffmpeg DCT/IDCT test\n"); |
|
|
|
|
|
|
|
|
|
if (test_248_dct) { |
|
|
|
|
idct248_error("SIMPLE-C", ff_simple_idct248_put); |
|
|
|
|
idct248_error("SIMPLE-C", ff_simple_idct248_put, speed); |
|
|
|
|
} else { |
|
|
|
|
const struct algo *algos = test_idct ? idct_tab : fdct_tab; |
|
|
|
|
for (i = 0; algos[i].name; i++) |
|
|
|
|
if (!(~cpu_flags & algos[i].mm_support)) { |
|
|
|
|
dct_error(&algos[i], test, test_idct); |
|
|
|
|
dct_error(&algos[i], test, test_idct, speed); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|