ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / VLIB / P264 / p264_transform.c
1 #include <VLIB/P264/p264_transform.h>
2
3 void p264_hadamard_2x2 (int16_t * in, int16_t * out)
4 // validated
5 {
6   out[0] = in[0] + in[1] + in[2] + in[3];
7   out[1] = in[0] - in[1] + in[2] - in[3];
8   out[2] = in[0] + in[1] - in[2] - in[3];
9   out[3] = in[0] - in[1] - in[2] + in[3];
10 }
11
12 void p264_ihadamard_4x4(int16_t *tblock, int16_t *block)
13 // validated
14 {
15   int32_t i;
16   int16_t tmp[16];
17   int16_t *pTmp = tmp;//, *pblock;
18   int16_t p0,p1,p2,p3;
19   int16_t t0,t1,t2,t3;
20
21   // Horizontal
22   for (i = 0; i < 4; i++)
23   {
24     t0 = tblock[(i<<2)];
25     t1 = tblock[(i<<2)+1];
26     t2 = tblock[(i<<2)+2];
27     t3 = tblock[(i<<2)+3];
28
29     p0 = t0 + t2;
30     p1 = t0 - t2;
31     p2 = t1 - t3;
32     p3 = t1 + t3;
33
34     *(pTmp++) = p0 + p3;
35     *(pTmp++) = p1 + p2;
36     *(pTmp++) = p1 - p2;
37     *(pTmp++) = p0 - p3;
38   }
39
40   //  Vertical
41   for (i = 0; i < 4; i++)
42   {
43     pTmp = tmp + i;
44     t0 = *pTmp;
45     t1 = *(pTmp += 4);
46     t2 = *(pTmp += 4);
47     t3 = *(pTmp += 4);
48
49     p0 = t0 + t2;
50     p1 = t0 - t2;
51     p2 = t1 - t3;
52     p3 = t1 + t3;
53
54     block[0+i] = p0 + p3;
55     block[4+i] = p1 + p2;
56     block[8+i] = p1 - p2;
57     block[12+i] = p0 - p3;
58   }
59 }
60
61 void p264_inverse_4x4(int16_t *tblock, int16_t *block)
62 // validated
63 {
64   int32_t i;//, ii;
65   int16_t tmp[16];
66   int16_t *pTmp = tmp;//, *pblock;
67   int16_t p0,p1,p2,p3;
68   int16_t t0,t1,t2,t3;
69
70   // Horizontal
71   for (i = 0; i < 4; i++)
72   {
73     t0 = tblock[(i<<2)];
74     t1 = tblock[(i<<2)+1];
75     t2 = tblock[(i<<2)+2];
76     t3 = tblock[(i<<2)+3];
77
78     p0 =  t0 + t2;
79     p1 =  t0 - t2;
80     p2 = (t1 >> 1) - t3;
81     p3 =  t1 + (t3 >> 1);
82
83     *(pTmp++) = p0 + p3;
84     *(pTmp++) = p1 + p2;
85     *(pTmp++) = p1 - p2;
86     *(pTmp++) = p0 - p3;
87   }
88
89   //  Vertical
90   for (i = 0; i < 4; i++)
91   {
92     pTmp = tmp + i;
93     t0 = *pTmp;
94     t1 = *(pTmp += 4);
95     t2 = *(pTmp += 4);
96     t3 = *(pTmp += 4);
97
98     p0 = t0 + t2;
99     p1 = t0 - t2;
100     p2 =(t1 >> 1) - t3;
101     p3 = t1 + (t3 >> 1);
102
103     block[0+i] = p0 + p3;
104     block[4+i] = p1 + p2;
105     block[8+i] = p1 - p2;
106     block[12+i] = p0 - p3;
107   }
108 }