CDXLPlay added with permission from Fredik Wikstrom.
[AROS-Contrib.git] / MultiMedia / cdxlplay / p2c / p2c_7.c
blobce51da1160f35ba64a34ea5a3c79a22be0c64120
1 /*
2 ** Planar 2 Chunky routine (C) 2009 Fredrik Wikstrom
3 **/
5 static void p2c_7 (const uint16_t *planar, uint32_t plane_size, uint8_t *chunky,
6 uint32_t width, uint32_t height)
8 uint32_t *cp;
9 const uint16_t *pp1, *pp2, *pp3, *pp4, *pp5, *pp6, *pp7;
10 uint32_t cd1, cd2, cd3, cd4;
11 uint32_t pd1, pd2, pd3, pd4, pd5, pd6, pd7;
12 uint32_t x, y;
13 cp = (uint32_t *)chunky;
14 pp1 = planar;
15 pp2 = (const uint16_t *)((const uint8_t *)pp1 + plane_size);
16 pp3 = (const uint16_t *)((const uint8_t *)pp2 + plane_size);
17 pp4 = (const uint16_t *)((const uint8_t *)pp3 + plane_size);
18 pp5 = (const uint16_t *)((const uint8_t *)pp4 + plane_size);
19 pp6 = (const uint16_t *)((const uint8_t *)pp5 + plane_size);
20 pp7 = (const uint16_t *)((const uint8_t *)pp6 + plane_size);
21 for (y = 0; y < height; y++) {
22 for (x = 0; x < width; x++) {
23 pd1 = *pp1++;
24 pd2 = *pp2++;
25 pd3 = *pp3++;
26 pd4 = *pp4++;
27 pd5 = *pp5++;
28 pd6 = *pp6++;
29 pd7 = *pp7++;
31 #ifdef WORDS_BIGENDIAN
32 cd1 = ((pd1 << 9 ) & 0x01000000)|((pd2 << 10) & 0x02000000);
33 cd1 |= ((pd3 << 11) & 0x04000000)|((pd4 << 12) & 0x08000000);
34 cd1 |= ((pd5 << 13) & 0x10000000)|((pd6 << 14) & 0x20000000);
35 cd1 |= ((pd7 << 15) & 0x40000000);
37 cd2 = ((pd1 << 13) & 0x01000000)|((pd2 << 14) & 0x02000000);
38 cd2 |= ((pd3 << 15) & 0x04000000)|((pd4 << 16) & 0x08000000);
39 cd2 |= ((pd5 << 17) & 0x10000000)|((pd6 << 18) & 0x20000000);
40 cd2 |= ((pd7 << 19) & 0x40000000);
42 cd3 = ((pd1 << 17) & 0x01000000)|((pd2 << 18) & 0x02000000);
43 cd3 |= ((pd3 << 19) & 0x04000000)|((pd4 << 20) & 0x08000000);
44 cd3 |= ((pd5 << 21) & 0x10000000)|((pd6 << 22) & 0x20000000);
45 cd3 |= ((pd7 << 23) & 0x40000000);
47 cd4 = ((pd1 << 21) & 0x01000000)|((pd2 << 22) & 0x02000000);
48 cd4 |= ((pd3 << 23) & 0x04000000)|((pd4 << 24) & 0x08000000);
49 cd4 |= ((pd5 << 25) & 0x10000000)|((pd6 << 26) & 0x20000000);
50 cd4 |= ((pd7 << 27) & 0x40000000);
52 cd1 |= ((pd1 << 2 ) & 0x00010000)|((pd2 << 3 ) & 0x00020000);
53 cd1 |= ((pd3 << 4 ) & 0x00040000)|((pd4 << 5 ) & 0x00080000);
54 cd1 |= ((pd5 << 6 ) & 0x00100000)|((pd6 << 7 ) & 0x00200000);
55 cd1 |= ((pd7 << 8 ) & 0x00400000);
57 cd2 |= ((pd1 << 6 ) & 0x00010000)|((pd2 << 7 ) & 0x00020000);
58 cd2 |= ((pd3 << 8 ) & 0x00040000)|((pd4 << 9 ) & 0x00080000);
59 cd2 |= ((pd5 << 10) & 0x00100000)|((pd6 << 11) & 0x00200000);
60 cd2 |= ((pd7 << 12) & 0x00400000);
62 cd3 |= ((pd1 << 10) & 0x00010000)|((pd2 << 11) & 0x00020000);
63 cd3 |= ((pd3 << 12) & 0x00040000)|((pd4 << 13) & 0x00080000);
64 cd3 |= ((pd5 << 14) & 0x00100000)|((pd6 << 15) & 0x00200000);
65 cd3 |= ((pd7 << 16) & 0x00400000);
67 cd4 |= ((pd1 << 14) & 0x00010000)|((pd2 << 15) & 0x00020000);
68 cd4 |= ((pd3 << 16) & 0x00040000)|((pd4 << 17) & 0x00080000);
69 cd4 |= ((pd5 << 18) & 0x00100000)|((pd6 << 19) & 0x00200000);
70 cd4 |= ((pd7 << 20) & 0x00400000);
72 cd1 |= ((pd1 >> 5 ) & 0x00000100)|((pd2 >> 4 ) & 0x00000200);
73 cd1 |= ((pd3 >> 3 ) & 0x00000400)|((pd4 >> 2 ) & 0x00000800);
74 cd1 |= ((pd5 >> 1 ) & 0x00001000)|((pd6 ) & 0x00002000);
75 cd1 |= ((pd7 << 1 ) & 0x00004000);
77 cd2 |= ((pd1 >> 1 ) & 0x00000100)|((pd2 ) & 0x00000200);
78 cd2 |= ((pd3 << 1 ) & 0x00000400)|((pd4 << 2 ) & 0x00000800);
79 cd2 |= ((pd5 << 3 ) & 0x00001000)|((pd6 << 4 ) & 0x00002000);
80 cd2 |= ((pd7 << 5 ) & 0x00004000);
82 cd3 |= ((pd1 << 3 ) & 0x00000100)|((pd2 << 4 ) & 0x00000200);
83 cd3 |= ((pd3 << 5 ) & 0x00000400)|((pd4 << 6 ) & 0x00000800);
84 cd3 |= ((pd5 << 7 ) & 0x00001000)|((pd6 << 8 ) & 0x00002000);
85 cd3 |= ((pd7 << 9 ) & 0x00004000);
87 cd4 |= ((pd1 << 7 ) & 0x00000100)|((pd2 << 8 ) & 0x00000200);
88 cd4 |= ((pd3 << 9 ) & 0x00000400)|((pd4 << 10) & 0x00000800);
89 cd4 |= ((pd5 << 11) & 0x00001000)|((pd6 << 12) & 0x00002000);
90 cd4 |= ((pd7 << 13) & 0x00004000);
92 cd1 |= ((pd1 >> 12) & 0x00000001)|((pd2 >> 11) & 0x00000002);
93 cd1 |= ((pd3 >> 10) & 0x00000004)|((pd4 >> 9 ) & 0x00000008);
94 cd1 |= ((pd5 >> 8 ) & 0x00000010)|((pd6 >> 7 ) & 0x00000020);
95 cd1 |= ((pd7 >> 6 ) & 0x00000040);
97 cd2 |= ((pd1 >> 8 ) & 0x00000001)|((pd2 >> 7 ) & 0x00000002);
98 cd2 |= ((pd3 >> 6 ) & 0x00000004)|((pd4 >> 5 ) & 0x00000008);
99 cd2 |= ((pd5 >> 4 ) & 0x00000010)|((pd6 >> 3 ) & 0x00000020);
100 cd2 |= ((pd7 >> 2 ) & 0x00000040);
102 cd3 |= ((pd1 >> 4 ) & 0x00000001)|((pd2 >> 3 ) & 0x00000002);
103 cd3 |= ((pd3 >> 2 ) & 0x00000004)|((pd4 >> 1 ) & 0x00000008);
104 cd3 |= ((pd5 ) & 0x00000010)|((pd6 << 1 ) & 0x00000020);
105 cd3 |= ((pd7 << 2 ) & 0x00000040);
107 cd4 |= ((pd1 ) & 0x00000001)|((pd2 << 1 ) & 0x00000002);
108 cd4 |= ((pd3 << 2 ) & 0x00000004)|((pd4 << 3 ) & 0x00000008);
109 cd4 |= ((pd5 << 4 ) & 0x00000010)|((pd6 << 5 ) & 0x00000020);
110 cd4 |= ((pd7 << 6 ) & 0x00000040);
111 #else
112 cd1 = ((pd1 >> 7 ) & 0x00000001)|((pd2 >> 6 ) & 0x00000002);
113 cd1 |= ((pd3 >> 5 ) & 0x00000004)|((pd4 >> 4 ) & 0x00000008);
114 cd1 |= ((pd5 >> 3 ) & 0x00000010)|((pd6 >> 2 ) & 0x00000020);
115 cd1 |= ((pd7 >> 1 ) & 0x00000040);
117 cd2 = ((pd1 >> 3 ) & 0x00000001)|((pd2 >> 2 ) & 0x00000002);
118 cd2 |= ((pd3 >> 1 ) & 0x00000004)|((pd4 ) & 0x00000008);
119 cd2 |= ((pd5 << 1 ) & 0x00000010)|((pd6 << 2 ) & 0x00000020);
120 cd2 |= ((pd7 << 3 ) & 0x00000040);
122 cd3 = ((pd1 >> 15) & 0x00000001)|((pd2 >> 14) & 0x00000002);
123 cd3 |= ((pd3 >> 13) & 0x00000004)|((pd4 >> 12) & 0x00000008);
124 cd3 |= ((pd5 >> 11) & 0x00000010)|((pd6 >> 10) & 0x00000020);
125 cd3 |= ((pd7 >> 9 ) & 0x00000040);
127 cd4 = ((pd1 >> 11) & 0x00000001)|((pd2 >> 10) & 0x00000002);
128 cd4 |= ((pd3 >> 9 ) & 0x00000004)|((pd4 >> 8 ) & 0x00000008);
129 cd4 |= ((pd5 >> 7 ) & 0x00000010)|((pd6 >> 6 ) & 0x00000020);
130 cd4 |= ((pd7 >> 5 ) & 0x00000040);
132 cd1 |= ((pd1 << 2 ) & 0x00000100)|((pd2 << 3 ) & 0x00000200);
133 cd1 |= ((pd3 << 4 ) & 0x00000400)|((pd4 << 5 ) & 0x00000800);
134 cd1 |= ((pd5 << 6 ) & 0x00001000)|((pd6 << 7 ) & 0x00002000);
135 cd1 |= ((pd7 << 8 ) & 0x00004000);
137 cd2 |= ((pd1 << 6 ) & 0x00000100)|((pd2 << 7 ) & 0x00000200);
138 cd2 |= ((pd3 << 8 ) & 0x00000400)|((pd4 << 9 ) & 0x00000800);
139 cd2 |= ((pd5 << 10) & 0x00001000)|((pd6 << 11) & 0x00002000);
140 cd2 |= ((pd7 << 12) & 0x00004000);
142 cd3 |= ((pd1 >> 6 ) & 0x00000100)|((pd2 >> 5 ) & 0x00000200);
143 cd3 |= ((pd3 >> 4 ) & 0x00000400)|((pd4 >> 3 ) & 0x00000800);
144 cd3 |= ((pd5 >> 2 ) & 0x00001000)|((pd6 >> 1 ) & 0x00002000);
145 cd3 |= ((pd7 ) & 0x00004000);
147 cd4 |= ((pd1 >> 2 ) & 0x00000100)|((pd2 >> 1 ) & 0x00000200);
148 cd4 |= ((pd3 ) & 0x00000400)|((pd4 << 1 ) & 0x00000800);
149 cd4 |= ((pd5 << 2 ) & 0x00001000)|((pd6 << 3 ) & 0x00002000);
150 cd4 |= ((pd7 << 4 ) & 0x00004000);
152 cd1 |= ((pd1 << 11) & 0x00010000)|((pd2 << 12) & 0x00020000);
153 cd1 |= ((pd3 << 13) & 0x00040000)|((pd4 << 14) & 0x00080000);
154 cd1 |= ((pd5 << 15) & 0x00100000)|((pd6 << 16) & 0x00200000);
155 cd1 |= ((pd7 << 17) & 0x00400000);
157 cd2 |= ((pd1 << 15) & 0x00010000)|((pd2 << 16) & 0x00020000);
158 cd2 |= ((pd3 << 17) & 0x00040000)|((pd4 << 18) & 0x00080000);
159 cd2 |= ((pd5 << 19) & 0x00100000)|((pd6 << 20) & 0x00200000);
160 cd2 |= ((pd7 << 21) & 0x00400000);
162 cd3 |= ((pd1 << 3 ) & 0x00010000)|((pd2 << 4 ) & 0x00020000);
163 cd3 |= ((pd3 << 5 ) & 0x00040000)|((pd4 << 6 ) & 0x00080000);
164 cd3 |= ((pd5 << 7 ) & 0x00100000)|((pd6 << 8 ) & 0x00200000);
165 cd3 |= ((pd7 << 9 ) & 0x00400000);
167 cd4 |= ((pd1 << 7 ) & 0x00010000)|((pd2 << 8 ) & 0x00020000);
168 cd4 |= ((pd3 << 9 ) & 0x00040000)|((pd4 << 10) & 0x00080000);
169 cd4 |= ((pd5 << 11) & 0x00100000)|((pd6 << 12) & 0x00200000);
170 cd4 |= ((pd7 << 13) & 0x00400000);
172 cd1 |= ((pd1 << 20) & 0x01000000)|((pd2 << 21) & 0x02000000);
173 cd1 |= ((pd3 << 22) & 0x04000000)|((pd4 << 23) & 0x08000000);
174 cd1 |= ((pd5 << 24) & 0x10000000)|((pd6 << 25) & 0x20000000);
175 cd1 |= ((pd7 << 26) & 0x40000000);
177 cd2 |= ((pd1 << 24) & 0x01000000)|((pd2 << 25) & 0x02000000);
178 cd2 |= ((pd3 << 26) & 0x04000000)|((pd4 << 27) & 0x08000000);
179 cd2 |= ((pd5 << 28) & 0x10000000)|((pd6 << 29) & 0x20000000);
180 cd2 |= ((pd7 << 30) & 0x40000000);
182 cd3 |= ((pd1 << 12) & 0x01000000)|((pd2 << 13) & 0x02000000);
183 cd3 |= ((pd3 << 14) & 0x04000000)|((pd4 << 15) & 0x08000000);
184 cd3 |= ((pd5 << 16) & 0x10000000)|((pd6 << 17) & 0x20000000);
185 cd3 |= ((pd7 << 18) & 0x40000000);
187 cd4 |= ((pd1 << 16) & 0x01000000)|((pd2 << 17) & 0x02000000);
188 cd4 |= ((pd3 << 18) & 0x04000000)|((pd4 << 19) & 0x08000000);
189 cd4 |= ((pd5 << 20) & 0x10000000)|((pd6 << 21) & 0x20000000);
190 cd4 |= ((pd7 << 22) & 0x40000000);
191 #endif
193 *cp++ = cd1;
194 *cp++ = cd2;
195 *cp++ = cd3;
196 *cp++ = cd4;