[encoder] Added 1/8th pel MV refinement
[schroedinger/research-port.git] / testsuite / quant.c
blobe2d280d3a5e08b47d5e0433aee677a61c8a488e1
2 #include <stdio.h>
3 #include <math.h>
5 static int
6 dequantise (int q, int quant_factor, int quant_offset)
8 if (q == 0) return 0;
9 if (q < 0) {
10 return ((q * quant_factor - quant_offset + 2)>>2);
11 } else {
12 return (q * quant_factor + quant_offset + 2)>>2;
16 static int
17 quantise (int value, int quant_factor, int quant_offset)
19 unsigned int x;
21 if (value == 0) return 0;
22 if (value < 0) {
23 x = ((-value)<<2) - quant_offset + (quant_factor>>1);
24 //x = (x*(uint64_t)inv_quant_factor)>>32;
25 x /= quant_factor;
26 value = -x;
27 } else {
28 x = (value<<2) - quant_offset + (quant_factor>>1);
29 //x = (x*(uint64_t)inv_quant_factor)>>32;
30 x /= quant_factor;
31 value = x;
33 return value;
36 int
37 main (int argc, char *argv[])
39 int i;
40 int quant_factor = 128;
41 int quant_offset = 48;
42 int q;
44 for(i=-1000;i<1000;i++){
45 q = quantise(i,quant_factor,quant_offset);
46 printf("%d %d\n", i, dequantise(q,quant_factor,quant_offset));
49 return 0;