Advertisement
Guest User

Untitled

a guest
Dec 12th, 2011
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.56 KB | None | 0 0
  1. /*
  2. ** Planar 2 Chunky routine (C) 2009 Fredrik Wikstrom
  3. **/
  4.  
  5. static void p2c_8 (const uint16_t *planar, uint32_t plane_size, uint8_t *chunky,
  6. uint32_t width, uint32_t height)
  7. {
  8. uint32_t *cp;
  9. const uint16_t *pp1, *pp2, *pp3, *pp4, *pp5, *pp6, *pp7, *pp8;
  10. uint32_t cd1, cd2, cd3, cd4;
  11. uint32_t pd1, pd2, pd3, pd4, pd5, pd6, pd7, pd8;
  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. pp8 = (const uint16_t *)((const uint8_t *)pp7 + plane_size);
  22. for (y = 0; y < height; y++) {
  23. for (x = 0; x < width; x++) {
  24. pd1 = *pp1++;
  25. pd2 = *pp2++;
  26. pd3 = *pp3++;
  27. pd4 = *pp4++;
  28. pd5 = *pp5++;
  29. pd6 = *pp6++;
  30. pd7 = *pp7++;
  31. pd8 = *pp8++;
  32.  
  33. #ifdef WORDS_BIGENDIAN
  34. cd1 = ((pd1 << 9 ) & 0x01000000)|((pd2 << 10) & 0x02000000);
  35. cd1 |= ((pd3 << 11) & 0x04000000)|((pd4 << 12) & 0x08000000);
  36. cd1 |= ((pd5 << 13) & 0x10000000)|((pd6 << 14) & 0x20000000);
  37. cd1 |= ((pd7 << 15) & 0x40000000)|((pd8 << 16) & 0x80000000);
  38.  
  39. cd2 = ((pd1 << 13) & 0x01000000)|((pd2 << 14) & 0x02000000);
  40. cd2 |= ((pd3 << 15) & 0x04000000)|((pd4 << 16) & 0x08000000);
  41. cd2 |= ((pd5 << 17) & 0x10000000)|((pd6 << 18) & 0x20000000);
  42. cd2 |= ((pd7 << 19) & 0x40000000)|((pd8 << 20) & 0x80000000);
  43.  
  44. cd3 = ((pd1 << 17) & 0x01000000)|((pd2 << 18) & 0x02000000);
  45. cd3 |= ((pd3 << 19) & 0x04000000)|((pd4 << 20) & 0x08000000);
  46. cd3 |= ((pd5 << 21) & 0x10000000)|((pd6 << 22) & 0x20000000);
  47. cd3 |= ((pd7 << 23) & 0x40000000)|((pd8 << 24) & 0x80000000);
  48.  
  49. cd4 = ((pd1 << 21) & 0x01000000)|((pd2 << 22) & 0x02000000);
  50. cd4 |= ((pd3 << 23) & 0x04000000)|((pd4 << 24) & 0x08000000);
  51. cd4 |= ((pd5 << 25) & 0x10000000)|((pd6 << 26) & 0x20000000);
  52. cd4 |= ((pd7 << 27) & 0x40000000)|((pd8 << 28) & 0x80000000);
  53.  
  54. cd1 |= ((pd1 << 2 ) & 0x00010000)|((pd2 << 3 ) & 0x00020000);
  55. cd1 |= ((pd3 << 4 ) & 0x00040000)|((pd4 << 5 ) & 0x00080000);
  56. cd1 |= ((pd5 << 6 ) & 0x00100000)|((pd6 << 7 ) & 0x00200000);
  57. cd1 |= ((pd7 << 8 ) & 0x00400000)|((pd8 << 9 ) & 0x00800000);
  58.  
  59. cd2 |= ((pd1 << 6 ) & 0x00010000)|((pd2 << 7 ) & 0x00020000);
  60. cd2 |= ((pd3 << 8 ) & 0x00040000)|((pd4 << 9 ) & 0x00080000);
  61. cd2 |= ((pd5 << 10) & 0x00100000)|((pd6 << 11) & 0x00200000);
  62. cd2 |= ((pd7 << 12) & 0x00400000)|((pd8 << 13) & 0x00800000);
  63.  
  64. cd3 |= ((pd1 << 10) & 0x00010000)|((pd2 << 11) & 0x00020000);
  65. cd3 |= ((pd3 << 12) & 0x00040000)|((pd4 << 13) & 0x00080000);
  66. cd3 |= ((pd5 << 14) & 0x00100000)|((pd6 << 15) & 0x00200000);
  67. cd3 |= ((pd7 << 16) & 0x00400000)|((pd8 << 17) & 0x00800000);
  68.  
  69. cd4 |= ((pd1 << 14) & 0x00010000)|((pd2 << 15) & 0x00020000);
  70. cd4 |= ((pd3 << 16) & 0x00040000)|((pd4 << 17) & 0x00080000);
  71. cd4 |= ((pd5 << 18) & 0x00100000)|((pd6 << 19) & 0x00200000);
  72. cd4 |= ((pd7 << 20) & 0x00400000)|((pd8 << 21) & 0x00800000);
  73.  
  74. cd1 |= ((pd1 >> 5 ) & 0x00000100)|((pd2 >> 4 ) & 0x00000200);
  75. cd1 |= ((pd3 >> 3 ) & 0x00000400)|((pd4 >> 2 ) & 0x00000800);
  76. cd1 |= ((pd5 >> 1 ) & 0x00001000)|((pd6 ) & 0x00002000);
  77. cd1 |= ((pd7 << 1 ) & 0x00004000)|((pd8 << 2 ) & 0x00008000);
  78.  
  79. cd2 |= ((pd1 >> 1 ) & 0x00000100)|((pd2 ) & 0x00000200);
  80. cd2 |= ((pd3 << 1 ) & 0x00000400)|((pd4 << 2 ) & 0x00000800);
  81. cd2 |= ((pd5 << 3 ) & 0x00001000)|((pd6 << 4 ) & 0x00002000);
  82. cd2 |= ((pd7 << 5 ) & 0x00004000)|((pd8 << 6 ) & 0x00008000);
  83.  
  84. cd3 |= ((pd1 << 3 ) & 0x00000100)|((pd2 << 4 ) & 0x00000200);
  85. cd3 |= ((pd3 << 5 ) & 0x00000400)|((pd4 << 6 ) & 0x00000800);
  86. cd3 |= ((pd5 << 7 ) & 0x00001000)|((pd6 << 8 ) & 0x00002000);
  87. cd3 |= ((pd7 << 9 ) & 0x00004000)|((pd8 << 10) & 0x00008000);
  88.  
  89. cd4 |= ((pd1 << 7 ) & 0x00000100)|((pd2 << 8 ) & 0x00000200);
  90. cd4 |= ((pd3 << 9 ) & 0x00000400)|((pd4 << 10) & 0x00000800);
  91. cd4 |= ((pd5 << 11) & 0x00001000)|((pd6 << 12) & 0x00002000);
  92. cd4 |= ((pd7 << 13) & 0x00004000)|((pd8 << 14) & 0x00008000);
  93.  
  94. cd1 |= ((pd1 >> 12) & 0x00000001)|((pd2 >> 11) & 0x00000002);
  95. cd1 |= ((pd3 >> 10) & 0x00000004)|((pd4 >> 9 ) & 0x00000008);
  96. cd1 |= ((pd5 >> 8 ) & 0x00000010)|((pd6 >> 7 ) & 0x00000020);
  97. cd1 |= ((pd7 >> 6 ) & 0x00000040)|((pd8 >> 5 ) & 0x00000080);
  98.  
  99. cd2 |= ((pd1 >> 8 ) & 0x00000001)|((pd2 >> 7 ) & 0x00000002);
  100. cd2 |= ((pd3 >> 6 ) & 0x00000004)|((pd4 >> 5 ) & 0x00000008);
  101. cd2 |= ((pd5 >> 4 ) & 0x00000010)|((pd6 >> 3 ) & 0x00000020);
  102. cd2 |= ((pd7 >> 2 ) & 0x00000040)|((pd8 >> 1 ) & 0x00000080);
  103.  
  104. cd3 |= ((pd1 >> 4 ) & 0x00000001)|((pd2 >> 3 ) & 0x00000002);
  105. cd3 |= ((pd3 >> 2 ) & 0x00000004)|((pd4 >> 1 ) & 0x00000008);
  106. cd3 |= ((pd5 ) & 0x00000010)|((pd6 << 1 ) & 0x00000020);
  107. cd3 |= ((pd7 << 2 ) & 0x00000040)|((pd8 << 3 ) & 0x00000080);
  108.  
  109. cd4 |= ((pd1 ) & 0x00000001)|((pd2 << 1 ) & 0x00000002);
  110. cd4 |= ((pd3 << 2 ) & 0x00000004)|((pd4 << 3 ) & 0x00000008);
  111. cd4 |= ((pd5 << 4 ) & 0x00000010)|((pd6 << 5 ) & 0x00000020);
  112. cd4 |= ((pd7 << 6 ) & 0x00000040)|((pd8 << 7 ) & 0x00000080);
  113. #else
  114. cd1 = ((pd1 >> 7 ) & 0x00000001)|((pd2 >> 6 ) & 0x00000002);
  115. cd1 |= ((pd3 >> 5 ) & 0x00000004)|((pd4 >> 4 ) & 0x00000008);
  116. cd1 |= ((pd5 >> 3 ) & 0x00000010)|((pd6 >> 2 ) & 0x00000020);
  117. cd1 |= ((pd7 >> 1 ) & 0x00000040)|((pd8 ) & 0x00000080);
  118.  
  119. cd2 = ((pd1 >> 3 ) & 0x00000001)|((pd2 >> 2 ) & 0x00000002);
  120. cd2 |= ((pd3 >> 1 ) & 0x00000004)|((pd4 ) & 0x00000008);
  121. cd2 |= ((pd5 << 1 ) & 0x00000010)|((pd6 << 2 ) & 0x00000020);
  122. cd2 |= ((pd7 << 3 ) & 0x00000040)|((pd8 << 4 ) & 0x00000080);
  123.  
  124. cd3 = ((pd1 >> 15) & 0x00000001)|((pd2 >> 14) & 0x00000002);
  125. cd3 |= ((pd3 >> 13) & 0x00000004)|((pd4 >> 12) & 0x00000008);
  126. cd3 |= ((pd5 >> 11) & 0x00000010)|((pd6 >> 10) & 0x00000020);
  127. cd3 |= ((pd7 >> 9 ) & 0x00000040)|((pd8 >> 8 ) & 0x00000080);
  128.  
  129. cd4 = ((pd1 >> 11) & 0x00000001)|((pd2 >> 10) & 0x00000002);
  130. cd4 |= ((pd3 >> 9 ) & 0x00000004)|((pd4 >> 8 ) & 0x00000008);
  131. cd4 |= ((pd5 >> 7 ) & 0x00000010)|((pd6 >> 6 ) & 0x00000020);
  132. cd4 |= ((pd7 >> 5 ) & 0x00000040)|((pd8 >> 4 ) & 0x00000080);
  133.  
  134. cd1 |= ((pd1 << 2 ) & 0x00000100)|((pd2 << 3 ) & 0x00000200);
  135. cd1 |= ((pd3 << 4 ) & 0x00000400)|((pd4 << 5 ) & 0x00000800);
  136. cd1 |= ((pd5 << 6 ) & 0x00001000)|((pd6 << 7 ) & 0x00002000);
  137. cd1 |= ((pd7 << 8 ) & 0x00004000)|((pd8 << 9 ) & 0x00008000);
  138.  
  139. cd2 |= ((pd1 << 6 ) & 0x00000100)|((pd2 << 7 ) & 0x00000200);
  140. cd2 |= ((pd3 << 8 ) & 0x00000400)|((pd4 << 9 ) & 0x00000800);
  141. cd2 |= ((pd5 << 10) & 0x00001000)|((pd6 << 11) & 0x00002000);
  142. cd2 |= ((pd7 << 12) & 0x00004000)|((pd8 << 13) & 0x00008000);
  143.  
  144. cd3 |= ((pd1 >> 6 ) & 0x00000100)|((pd2 >> 5 ) & 0x00000200);
  145. cd3 |= ((pd3 >> 4 ) & 0x00000400)|((pd4 >> 3 ) & 0x00000800);
  146. cd3 |= ((pd5 >> 2 ) & 0x00001000)|((pd6 >> 1 ) & 0x00002000);
  147. cd3 |= ((pd7 ) & 0x00004000)|((pd8 << 1 ) & 0x00008000);
  148.  
  149. cd4 |= ((pd1 >> 2 ) & 0x00000100)|((pd2 >> 1 ) & 0x00000200);
  150. cd4 |= ((pd3 ) & 0x00000400)|((pd4 << 1 ) & 0x00000800);
  151. cd4 |= ((pd5 << 2 ) & 0x00001000)|((pd6 << 3 ) & 0x00002000);
  152. cd4 |= ((pd7 << 4 ) & 0x00004000)|((pd8 << 5 ) & 0x00008000);
  153.  
  154. cd1 |= ((pd1 << 11) & 0x00010000)|((pd2 << 12) & 0x00020000);
  155. cd1 |= ((pd3 << 13) & 0x00040000)|((pd4 << 14) & 0x00080000);
  156. cd1 |= ((pd5 << 15) & 0x00100000)|((pd6 << 16) & 0x00200000);
  157. cd1 |= ((pd7 << 17) & 0x00400000)|((pd8 << 18) & 0x00800000);
  158.  
  159. cd2 |= ((pd1 << 15) & 0x00010000)|((pd2 << 16) & 0x00020000);
  160. cd2 |= ((pd3 << 17) & 0x00040000)|((pd4 << 18) & 0x00080000);
  161. cd2 |= ((pd5 << 19) & 0x00100000)|((pd6 << 20) & 0x00200000);
  162. cd2 |= ((pd7 << 21) & 0x00400000)|((pd8 << 22) & 0x00800000);
  163.  
  164. cd3 |= ((pd1 << 3 ) & 0x00010000)|((pd2 << 4 ) & 0x00020000);
  165. cd3 |= ((pd3 << 5 ) & 0x00040000)|((pd4 << 6 ) & 0x00080000);
  166. cd3 |= ((pd5 << 7 ) & 0x00100000)|((pd6 << 8 ) & 0x00200000);
  167. cd3 |= ((pd7 << 9 ) & 0x00400000)|((pd8 << 10) & 0x00800000);
  168.  
  169. cd4 |= ((pd1 << 7 ) & 0x00010000)|((pd2 << 8 ) & 0x00020000);
  170. cd4 |= ((pd3 << 9 ) & 0x00040000)|((pd4 << 10) & 0x00080000);
  171. cd4 |= ((pd5 << 11) & 0x00100000)|((pd6 << 12) & 0x00200000);
  172. cd4 |= ((pd7 << 13) & 0x00400000)|((pd8 << 14) & 0x00800000);
  173.  
  174. cd1 |= ((pd1 << 20) & 0x01000000)|((pd2 << 21) & 0x02000000);
  175. cd1 |= ((pd3 << 22) & 0x04000000)|((pd4 << 23) & 0x08000000);
  176. cd1 |= ((pd5 << 24) & 0x10000000)|((pd6 << 25) & 0x20000000);
  177. cd1 |= ((pd7 << 26) & 0x40000000)|((pd8 << 27) & 0x80000000);
  178.  
  179. cd2 |= ((pd1 << 24) & 0x01000000)|((pd2 << 25) & 0x02000000);
  180. cd2 |= ((pd3 << 26) & 0x04000000)|((pd4 << 27) & 0x08000000);
  181. cd2 |= ((pd5 << 28) & 0x10000000)|((pd6 << 29) & 0x20000000);
  182. cd2 |= ((pd7 << 30) & 0x40000000)|((pd8 << 31) & 0x80000000);
  183.  
  184. cd3 |= ((pd1 << 12) & 0x01000000)|((pd2 << 13) & 0x02000000);
  185. cd3 |= ((pd3 << 14) & 0x04000000)|((pd4 << 15) & 0x08000000);
  186. cd3 |= ((pd5 << 16) & 0x10000000)|((pd6 << 17) & 0x20000000);
  187. cd3 |= ((pd7 << 18) & 0x40000000)|((pd8 << 19) & 0x80000000);
  188.  
  189. cd4 |= ((pd1 << 16) & 0x01000000)|((pd2 << 17) & 0x02000000);
  190. cd4 |= ((pd3 << 18) & 0x04000000)|((pd4 << 19) & 0x08000000);
  191. cd4 |= ((pd5 << 20) & 0x10000000)|((pd6 << 21) & 0x20000000);
  192. cd4 |= ((pd7 << 22) & 0x40000000)|((pd8 << 23) & 0x80000000);
  193. #endif
  194.  
  195. *cp++ = cd1;
  196. *cp++ = cd2;
  197. *cp++ = cd3;
  198. *cp++ = cd4;
  199. }
  200. }
  201. }
  202.  
  203.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement