2 ** Planar 2 Chunky routine (C) 2009 Fredrik Wikstrom
5 static void p2c_7 (const uint16_t *planar
, uint32_t plane_size
, uint8_t *chunky
,
6 uint32_t width
, uint32_t height
)
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
;
13 cp
= (uint32_t *)chunky
;
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
++) {
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);
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);