56 p = malloc(length / 8);
57 q = malloc(length / 8);
58 r = malloc(length / 8);
59 s = malloc(length / 8);
60 t = malloc(length / 8);
61 u = malloc(length / 8);
62 v = malloc(length / 8);
63 w = malloc(length / 8);
65 if(p == NULL || q == NULL || r == NULL || s == NULL || t == NULL || u == NULL || v == NULL || w == NULL)
78 for(i = 0; i < length; i += 8)
80 p[i / 8] = (uint8_t)(interleaved[i] & 0x80);
81 p[i / 8] += (interleaved[i + 1] & 0x80) >> 1;
82 p[i / 8] += (interleaved[i + 2] & 0x80) >> 2;
83 p[i / 8] += (interleaved[i + 3] & 0x80) >> 3;
84 p[i / 8] += (interleaved[i + 4] & 0x80) >> 4;
85 p[i / 8] += (interleaved[i + 5] & 0x80) >> 5;
86 p[i / 8] += (interleaved[i + 6] & 0x80) >> 6;
87 p[i / 8] += (interleaved[i + 7] & 0x80) >> 7;
89 q[i / 8] = (uint8_t)((interleaved[i] & 0x40) << 1);
90 q[i / 8] += interleaved[i + 1] & 0x40;
91 q[i / 8] += (interleaved[i + 2] & 0x40) >> 1;
92 q[i / 8] += (interleaved[i + 3] & 0x40) >> 2;
93 q[i / 8] += (interleaved[i + 4] & 0x40) >> 3;
94 q[i / 8] += (interleaved[i + 5] & 0x40) >> 4;
95 q[i / 8] += (interleaved[i + 6] & 0x40) >> 5;
96 q[i / 8] += (interleaved[i + 7] & 0x40) >> 6;
98 r[i / 8] = (uint8_t)((interleaved[i] & 0x20) << 2);
99 r[i / 8] += (interleaved[i + 1] & 0x20) << 1;
100 r[i / 8] += interleaved[i + 2] & 0x20;
101 r[i / 8] += (interleaved[i + 3] & 0x20) >> 1;
102 r[i / 8] += (interleaved[i + 4] & 0x20) >> 2;
103 r[i / 8] += (interleaved[i + 5] & 0x20) >> 3;
104 r[i / 8] += (interleaved[i + 6] & 0x20) >> 4;
105 r[i / 8] += (interleaved[i + 7] & 0x20) >> 5;
107 s[i / 8] = (uint8_t)((interleaved[i] & 0x10) << 3);
108 s[i / 8] += (interleaved[i + 1] & 0x10) << 2;
109 s[i / 8] += (interleaved[i + 2] & 0x10) << 1;
110 s[i / 8] += interleaved[i + 3] & 0x10;
111 s[i / 8] += (interleaved[i + 4] & 0x10) >> 1;
112 s[i / 8] += (interleaved[i + 5] & 0x10) >> 2;
113 s[i / 8] += (interleaved[i + 6] & 0x10) >> 3;
114 s[i / 8] += (interleaved[i + 7] & 0x10) >> 4;
116 t[i / 8] = (uint8_t)((interleaved[i] & 0x08) << 4);
117 t[i / 8] += (interleaved[i + 1] & 0x08) << 3;
118 t[i / 8] += (interleaved[i + 2] & 0x08) << 2;
119 t[i / 8] += (interleaved[i + 3] & 0x08) << 1;
120 t[i / 8] += interleaved[i + 4] & 0x08;
121 t[i / 8] += (interleaved[i + 5] & 0x08) >> 1;
122 t[i / 8] += (interleaved[i + 6] & 0x08) >> 2;
123 t[i / 8] += (interleaved[i + 7] & 0x08) >> 3;
125 u[i / 8] = (uint8_t)((interleaved[i] & 0x04) << 5);
126 u[i / 8] += (interleaved[i + 1] & 0x04) << 4;
127 u[i / 8] += (interleaved[i + 2] & 0x04) << 3;
128 u[i / 8] += (interleaved[i + 3] & 0x04) << 2;
129 u[i / 8] += (interleaved[i + 4] & 0x04) << 1;
130 u[i / 8] += interleaved[i + 5] & 0x04;
131 u[i / 8] += (interleaved[i + 6] & 0x04) >> 1;
132 u[i / 8] += (interleaved[i + 7] & 0x04) >> 2;
134 v[i / 8] = (uint8_t)((interleaved[i] & 0x02) << 6);
135 v[i / 8] += (interleaved[i + 1] & 0x02) << 5;
136 v[i / 8] += (interleaved[i + 2] & 0x02) << 4;
137 v[i / 8] += (interleaved[i + 3] & 0x02) << 3;
138 v[i / 8] += (interleaved[i + 4] & 0x02) << 2;
139 v[i / 8] += (interleaved[i + 5] & 0x02) << 1;
140 v[i / 8] += interleaved[i + 6] & 0x02;
141 v[i / 8] += (interleaved[i + 7] & 0x02) >> 1;
143 w[i / 8] = (uint8_t)((interleaved[i] & 0x01) << 7);
144 w[i / 8] += (interleaved[i + 1] & 0x01) << 6;
145 w[i / 8] += (interleaved[i + 2] & 0x01) << 5;
146 w[i / 8] += (interleaved[i + 3] & 0x01) << 4;
147 w[i / 8] += (interleaved[i + 4] & 0x01) << 3;
148 w[i / 8] += (interleaved[i + 5] & 0x01) << 2;
149 w[i / 8] += (interleaved[i + 6] & 0x01) << 1;
150 w[i / 8] += interleaved[i + 7] & 0x01;
153 q_start = length / 8 * 1;
154 r_start = length / 8 * 2;
155 s_start = length / 8 * 3;
156 t_start = length / 8 * 4;
157 u_start = length / 8 * 5;
158 v_start = length / 8 * 6;
159 w_start = length / 8 * 7;
161 for(i = 0; i < length / 8; i++)
163 sequential[i] = p[i];
164 sequential[q_start + i] = q[i];
165 sequential[r_start + i] = r[i];
166 sequential[s_start + i] = s[i];
167 sequential[t_start + i] = t[i];
168 sequential[u_start + i] = u[i];
169 sequential[v_start + i] = v[i];
170 sequential[w_start + i] = w[i];
199 uint8_t *p = malloc(length / 8);
200 uint8_t *q = malloc(length / 8);
201 uint8_t *r = malloc(length / 8);
202 uint8_t *s = malloc(length / 8);
203 uint8_t *t = malloc(length / 8);
204 uint8_t *u = malloc(length / 8);
205 uint8_t *v = malloc(length / 8);
206 uint8_t *w = malloc(length / 8);
208 if(p == NULL || q == NULL || r == NULL || s == NULL || t == NULL || u == NULL || v == NULL || w == NULL)
221 size_t q_start = length / 8 * 1;
222 size_t r_start = length / 8 * 2;
223 size_t s_start = length / 8 * 3;
224 size_t t_start = length / 8 * 4;
225 size_t u_start = length / 8 * 5;
226 size_t v_start = length / 8 * 6;
227 size_t w_start = length / 8 * 7;
229 for(i = 0; i < length / 8; i++)
231 p[i] = sequential[i];
232 q[i] = sequential[q_start + i];
233 r[i] = sequential[r_start + i];
234 s[i] = sequential[s_start + i];
235 t[i] = sequential[t_start + i];
236 u[i] = sequential[u_start + i];
237 v[i] = sequential[v_start + i];
238 w[i] = sequential[w_start + i];
241 memset(interleaved, 0, length);
243 for(i = 0; i < length; i += 8)
245 interleaved[i] += (p[i / 8] & 0x80) == 0x80 ? 0x80 : 0;
246 interleaved[i + 1] += (p[i / 8] & 0x40) == 0x40 ? 0x80 : 0;
247 interleaved[i + 2] += (p[i / 8] & 0x20) == 0x20 ? 0x80 : 0;
248 interleaved[i + 3] += (p[i / 8] & 0x10) == 0x10 ? 0x80 : 0;
249 interleaved[i + 4] += (p[i / 8] & 0x08) == 0x08 ? 0x80 : 0;
250 interleaved[i + 5] += (p[i / 8] & 0x04) == 0x04 ? 0x80 : 0;
251 interleaved[i + 6] += (p[i / 8] & 0x02) == 0x02 ? 0x80 : 0;
252 interleaved[i + 7] += (p[i / 8] & 0x01) == 0x01 ? 0x80 : 0;
254 interleaved[i] += (q[i / 8] & 0x80) == 0x80 ? 0x40 : 0;
255 interleaved[i + 1] += (q[i / 8] & 0x40) == 0x40 ? 0x40 : 0;
256 interleaved[i + 2] += (q[i / 8] & 0x20) == 0x20 ? 0x40 : 0;
257 interleaved[i + 3] += (q[i / 8] & 0x10) == 0x10 ? 0x40 : 0;
258 interleaved[i + 4] += (q[i / 8] & 0x08) == 0x08 ? 0x40 : 0;
259 interleaved[i + 5] += (q[i / 8] & 0x04) == 0x04 ? 0x40 : 0;
260 interleaved[i + 6] += (q[i / 8] & 0x02) == 0x02 ? 0x40 : 0;
261 interleaved[i + 7] += (q[i / 8] & 0x01) == 0x01 ? 0x40 : 0;
263 interleaved[i] += (r[i / 8] & 0x80) == 0x80 ? 0x20 : 0;
264 interleaved[i + 1] += (r[i / 8] & 0x40) == 0x40 ? 0x20 : 0;
265 interleaved[i + 2] += (r[i / 8] & 0x20) == 0x20 ? 0x20 : 0;
266 interleaved[i + 3] += (r[i / 8] & 0x10) == 0x10 ? 0x20 : 0;
267 interleaved[i + 4] += (r[i / 8] & 0x08) == 0x08 ? 0x20 : 0;
268 interleaved[i + 5] += (r[i / 8] & 0x04) == 0x04 ? 0x20 : 0;
269 interleaved[i + 6] += (r[i / 8] & 0x02) == 0x02 ? 0x20 : 0;
270 interleaved[i + 7] += (r[i / 8] & 0x01) == 0x01 ? 0x20 : 0;
272 interleaved[i] += (s[i / 8] & 0x80) == 0x80 ? 0x10 : 0;
273 interleaved[i + 1] += (s[i / 8] & 0x40) == 0x40 ? 0x10 : 0;
274 interleaved[i + 2] += (s[i / 8] & 0x20) == 0x20 ? 0x10 : 0;
275 interleaved[i + 3] += (s[i / 8] & 0x10) == 0x10 ? 0x10 : 0;
276 interleaved[i + 4] += (s[i / 8] & 0x08) == 0x08 ? 0x10 : 0;
277 interleaved[i + 5] += (s[i / 8] & 0x04) == 0x04 ? 0x10 : 0;
278 interleaved[i + 6] += (s[i / 8] & 0x02) == 0x02 ? 0x10 : 0;
279 interleaved[i + 7] += (s[i / 8] & 0x01) == 0x01 ? 0x10 : 0;
281 interleaved[i] += (t[i / 8] & 0x80) == 0x80 ? 0x08 : 0;
282 interleaved[i + 1] += (t[i / 8] & 0x40) == 0x40 ? 0x08 : 0;
283 interleaved[i + 2] += (t[i / 8] & 0x20) == 0x20 ? 0x08 : 0;
284 interleaved[i + 3] += (t[i / 8] & 0x10) == 0x10 ? 0x08 : 0;
285 interleaved[i + 4] += (t[i / 8] & 0x08) == 0x08 ? 0x08 : 0;
286 interleaved[i + 5] += (t[i / 8] & 0x04) == 0x04 ? 0x08 : 0;
287 interleaved[i + 6] += (t[i / 8] & 0x02) == 0x02 ? 0x08 : 0;
288 interleaved[i + 7] += (t[i / 8] & 0x01) == 0x01 ? 0x08 : 0;
290 interleaved[i] += (u[i / 8] & 0x80) == 0x80 ? 0x04 : 0;
291 interleaved[i + 1] += (u[i / 8] & 0x40) == 0x40 ? 0x04 : 0;
292 interleaved[i + 2] += (u[i / 8] & 0x20) == 0x20 ? 0x04 : 0;
293 interleaved[i + 3] += (u[i / 8] & 0x10) == 0x10 ? 0x04 : 0;
294 interleaved[i + 4] += (u[i / 8] & 0x08) == 0x08 ? 0x04 : 0;
295 interleaved[i + 5] += (u[i / 8] & 0x04) == 0x04 ? 0x04 : 0;
296 interleaved[i + 6] += (u[i / 8] & 0x02) == 0x02 ? 0x04 : 0;
297 interleaved[i + 7] += (u[i / 8] & 0x01) == 0x01 ? 0x04 : 0;
299 interleaved[i] += (v[i / 8] & 0x80) == 0x80 ? 0x02 : 0;
300 interleaved[i + 1] += (v[i / 8] & 0x40) == 0x40 ? 0x02 : 0;
301 interleaved[i + 2] += (v[i / 8] & 0x20) == 0x20 ? 0x02 : 0;
302 interleaved[i + 3] += (v[i / 8] & 0x10) == 0x10 ? 0x02 : 0;
303 interleaved[i + 4] += (v[i / 8] & 0x08) == 0x08 ? 0x02 : 0;
304 interleaved[i + 5] += (v[i / 8] & 0x04) == 0x04 ? 0x02 : 0;
305 interleaved[i + 6] += (v[i / 8] & 0x02) == 0x02 ? 0x02 : 0;
306 interleaved[i + 7] += (v[i / 8] & 0x01) == 0x01 ? 0x02 : 0;
308 interleaved[i] += (w[i / 8] & 0x80) == 0x80 ? 0x01 : 0;
309 interleaved[i + 1] += (w[i / 8] & 0x40) == 0x40 ? 0x01 : 0;
310 interleaved[i + 2] += (w[i / 8] & 0x20) == 0x20 ? 0x01 : 0;
311 interleaved[i + 3] += (w[i / 8] & 0x10) == 0x10 ? 0x01 : 0;
312 interleaved[i + 4] += (w[i / 8] & 0x08) == 0x08 ? 0x01 : 0;
313 interleaved[i + 5] += (w[i / 8] & 0x04) == 0x04 ? 0x01 : 0;
314 interleaved[i + 6] += (w[i / 8] & 0x02) == 0x02 ? 0x01 : 0;
315 interleaved[i + 7] += (w[i / 8] & 0x01) == 0x01 ? 0x01 : 0;