2 ** Planar 2 Chunky routine (C) 2009 Fredrik Wikstrom
5 static void p2c_4 (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
;
10 uint32_t cd1
, cd2
, cd3
, cd4
;
11 uint32_t pd1
, pd2
, pd3
, pd4
;
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 for (y
= 0; y
< height
; y
++) {
19 for (x
= 0; x
< width
; x
++) {
25 #ifdef WORDS_BIGENDIAN
26 cd1
= ((pd1
<< 9 ) & 0x01000000)|((pd2
<< 10) & 0x02000000);
27 cd1
|= ((pd3
<< 11) & 0x04000000)|((pd4
<< 12) & 0x08000000);
29 cd2
= ((pd1
<< 13) & 0x01000000)|((pd2
<< 14) & 0x02000000);
30 cd2
|= ((pd3
<< 15) & 0x04000000)|((pd4
<< 16) & 0x08000000);
32 cd3
= ((pd1
<< 17) & 0x01000000)|((pd2
<< 18) & 0x02000000);
33 cd3
|= ((pd3
<< 19) & 0x04000000)|((pd4
<< 20) & 0x08000000);
35 cd4
= ((pd1
<< 21) & 0x01000000)|((pd2
<< 22) & 0x02000000);
36 cd4
|= ((pd3
<< 23) & 0x04000000)|((pd4
<< 24) & 0x08000000);
38 cd1
|= ((pd1
<< 2 ) & 0x00010000)|((pd2
<< 3 ) & 0x00020000);
39 cd1
|= ((pd3
<< 4 ) & 0x00040000)|((pd4
<< 5 ) & 0x00080000);
41 cd2
|= ((pd1
<< 6 ) & 0x00010000)|((pd2
<< 7 ) & 0x00020000);
42 cd2
|= ((pd3
<< 8 ) & 0x00040000)|((pd4
<< 9 ) & 0x00080000);
44 cd3
|= ((pd1
<< 10) & 0x00010000)|((pd2
<< 11) & 0x00020000);
45 cd3
|= ((pd3
<< 12) & 0x00040000)|((pd4
<< 13) & 0x00080000);
47 cd4
|= ((pd1
<< 14) & 0x00010000)|((pd2
<< 15) & 0x00020000);
48 cd4
|= ((pd3
<< 16) & 0x00040000)|((pd4
<< 17) & 0x00080000);
50 cd1
|= ((pd1
>> 5 ) & 0x00000100)|((pd2
>> 4 ) & 0x00000200);
51 cd1
|= ((pd3
>> 3 ) & 0x00000400)|((pd4
>> 2 ) & 0x00000800);
53 cd2
|= ((pd1
>> 1 ) & 0x00000100)|((pd2
) & 0x00000200);
54 cd2
|= ((pd3
<< 1 ) & 0x00000400)|((pd4
<< 2 ) & 0x00000800);
56 cd3
|= ((pd1
<< 3 ) & 0x00000100)|((pd2
<< 4 ) & 0x00000200);
57 cd3
|= ((pd3
<< 5 ) & 0x00000400)|((pd4
<< 6 ) & 0x00000800);
59 cd4
|= ((pd1
<< 7 ) & 0x00000100)|((pd2
<< 8 ) & 0x00000200);
60 cd4
|= ((pd3
<< 9 ) & 0x00000400)|((pd4
<< 10) & 0x00000800);
62 cd1
|= ((pd1
>> 12) & 0x00000001)|((pd2
>> 11) & 0x00000002);
63 cd1
|= ((pd3
>> 10) & 0x00000004)|((pd4
>> 9 ) & 0x00000008);
65 cd2
|= ((pd1
>> 8 ) & 0x00000001)|((pd2
>> 7 ) & 0x00000002);
66 cd2
|= ((pd3
>> 6 ) & 0x00000004)|((pd4
>> 5 ) & 0x00000008);
68 cd3
|= ((pd1
>> 4 ) & 0x00000001)|((pd2
>> 3 ) & 0x00000002);
69 cd3
|= ((pd3
>> 2 ) & 0x00000004)|((pd4
>> 1 ) & 0x00000008);
71 cd4
|= ((pd1
) & 0x00000001)|((pd2
<< 1 ) & 0x00000002);
72 cd4
|= ((pd3
<< 2 ) & 0x00000004)|((pd4
<< 3 ) & 0x00000008);
74 cd1
= ((pd1
>> 7 ) & 0x00000001)|((pd2
>> 6 ) & 0x00000002);
75 cd1
|= ((pd3
>> 5 ) & 0x00000004)|((pd4
>> 4 ) & 0x00000008);
77 cd2
= ((pd1
>> 3 ) & 0x00000001)|((pd2
>> 2 ) & 0x00000002);
78 cd2
|= ((pd3
>> 1 ) & 0x00000004)|((pd4
) & 0x00000008);
80 cd3
= ((pd1
>> 15) & 0x00000001)|((pd2
>> 14) & 0x00000002);
81 cd3
|= ((pd3
>> 13) & 0x00000004)|((pd4
>> 12) & 0x00000008);
83 cd4
= ((pd1
>> 11) & 0x00000001)|((pd2
>> 10) & 0x00000002);
84 cd4
|= ((pd3
>> 9 ) & 0x00000004)|((pd4
>> 8 ) & 0x00000008);
86 cd1
|= ((pd1
<< 2 ) & 0x00000100)|((pd2
<< 3 ) & 0x00000200);
87 cd1
|= ((pd3
<< 4 ) & 0x00000400)|((pd4
<< 5 ) & 0x00000800);
89 cd2
|= ((pd1
<< 6 ) & 0x00000100)|((pd2
<< 7 ) & 0x00000200);
90 cd2
|= ((pd3
<< 8 ) & 0x00000400)|((pd4
<< 9 ) & 0x00000800);
92 cd3
|= ((pd1
>> 6 ) & 0x00000100)|((pd2
>> 5 ) & 0x00000200);
93 cd3
|= ((pd3
>> 4 ) & 0x00000400)|((pd4
>> 3 ) & 0x00000800);
95 cd4
|= ((pd1
>> 2 ) & 0x00000100)|((pd2
>> 1 ) & 0x00000200);
96 cd4
|= ((pd3
) & 0x00000400)|((pd4
<< 1 ) & 0x00000800);
98 cd1
|= ((pd1
<< 11) & 0x00010000)|((pd2
<< 12) & 0x00020000);
99 cd1
|= ((pd3
<< 13) & 0x00040000)|((pd4
<< 14) & 0x00080000);
101 cd2
|= ((pd1
<< 15) & 0x00010000)|((pd2
<< 16) & 0x00020000);
102 cd2
|= ((pd3
<< 17) & 0x00040000)|((pd4
<< 18) & 0x00080000);
104 cd3
|= ((pd1
<< 3 ) & 0x00010000)|((pd2
<< 4 ) & 0x00020000);
105 cd3
|= ((pd3
<< 5 ) & 0x00040000)|((pd4
<< 6 ) & 0x00080000);
107 cd4
|= ((pd1
<< 7 ) & 0x00010000)|((pd2
<< 8 ) & 0x00020000);
108 cd4
|= ((pd3
<< 9 ) & 0x00040000)|((pd4
<< 10) & 0x00080000);
110 cd1
|= ((pd1
<< 20) & 0x01000000)|((pd2
<< 21) & 0x02000000);
111 cd1
|= ((pd3
<< 22) & 0x04000000)|((pd4
<< 23) & 0x08000000);
113 cd2
|= ((pd1
<< 24) & 0x01000000)|((pd2
<< 25) & 0x02000000);
114 cd2
|= ((pd3
<< 26) & 0x04000000)|((pd4
<< 27) & 0x08000000);
116 cd3
|= ((pd1
<< 12) & 0x01000000)|((pd2
<< 13) & 0x02000000);
117 cd3
|= ((pd3
<< 14) & 0x04000000)|((pd4
<< 15) & 0x08000000);
119 cd4
|= ((pd1
<< 16) & 0x01000000)|((pd2
<< 17) & 0x02000000);
120 cd4
|= ((pd3
<< 18) & 0x04000000)|((pd4
<< 19) & 0x08000000);