/Modules/yuv.h

http://unladen-swallow.googlecode.com/ · C++ Header · 99 lines · 59 code · 7 blank · 33 comment · 0 complexity · e754be872d1fb503ab43dee968b00249 MD5 · raw file

  1. #ifndef Py_YUV_H
  2. #define Py_YUV_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /*
  7. * SVideo YUV 4:1:1 format.
  8. *
  9. * 4 consecutive quadwords describe 8 pixels on 2 lines, as depicted
  10. * below. An array of (width/4) of the below structure describes 2
  11. * scan lines.
  12. *
  13. * +-------------------+
  14. * | 00 | 01 | 02 | 03 | . . .
  15. * +-------------------+
  16. * | 10 | 11 | 12 | 13 | . . .
  17. * +-------------------+
  18. */
  19. struct yuv411 {
  20. struct {
  21. unsigned int dummy:8;
  22. unsigned int y0:8;
  23. unsigned int u0:2;
  24. unsigned int v0:2;
  25. unsigned int y1:8;
  26. unsigned int u1:2;
  27. unsigned int v1:2;
  28. } v[4];
  29. };
  30. #define YUV411_Y00(y) (y).v[0].y0
  31. #define YUV411_Y01(y) (y).v[1].y0
  32. #define YUV411_Y02(y) (y).v[2].y0
  33. #define YUV411_Y03(y) (y).v[3].y0
  34. #define YUV411_Y10(y) (y).v[0].y1
  35. #define YUV411_Y11(y) (y).v[1].y1
  36. #define YUV411_Y12(y) (y).v[2].y1
  37. #define YUV411_Y13(y) (y).v[3].y1
  38. #define YUV411_U00(y) ((y).v[0].u0<<6|(y).v[1].u0<<4|(y).v[2].u0<<2|(y).v[3].u0)
  39. #define YUV411_U01(y) YUV411_U00(y)
  40. #define YUV411_U02(y) YUV411_U00(y)
  41. #define YUV411_U03(y) YUV411_U00(y)
  42. #define YUV411_U10(y) ((y).v[0].u1<<6|(y).v[1].u1<<4|(y).v[2].u1<<2|(y).v[3].u1)
  43. #define YUV411_U11(y) YUV411_U10(y)
  44. #define YUV411_U12(y) YUV411_U10(y)
  45. #define YUV411_U13(y) YUV411_U10(y)
  46. #define YUV411_V00(y) ((y).v[0].v0<<6|(y).v[1].v0<<4|(y).v[2].v0<<2|(y).v[3].v0)
  47. #define YUV411_V01(y) YUV411_V00(y)
  48. #define YUV411_V02(y) YUV411_V00(y)
  49. #define YUV411_V03(y) YUV411_V00(y)
  50. #define YUV411_V10(y) ((y).v[0].v1<<6|(y).v[1].v1<<4|(y).v[2].v1<<2|(y).v[3].v1)
  51. #define YUV411_V11(y) YUV411_V10(y)
  52. #define YUV411_V12(y) YUV411_V10(y)
  53. #define YUV411_V13(y) YUV411_V10(y)
  54. /*
  55. * Compression Library YUV 4:2:2 format.
  56. *
  57. * 1 longword describes 2 pixels.
  58. *
  59. * +-------+
  60. * | 0 | 1 |
  61. * +-------+
  62. */
  63. struct yuv422 {
  64. unsigned int u:8;
  65. unsigned int y0:8;
  66. unsigned int v:8;
  67. unsigned int y1:8;
  68. };
  69. #define YUV422_Y0(y) (y).y0
  70. #define YUV422_Y1(y) (y).y1
  71. #define YUV422_U0(y) (y).u
  72. #define YUV422_U1(y) (y).u
  73. #define YUV422_V0(y) (y).v
  74. #define YUV422_V1(y) (y).v
  75. /*
  76. * Compression library YUV 4:2:2 Duplicate Chroma format.
  77. *
  78. * This is like the previous format, but the U and V values are
  79. * duplicated vertically (and hence there is some redundancy in the
  80. * data). With other words, lines 2*n and 2*n+1 have the same U and V
  81. * values but different Y values.
  82. */
  83. /*
  84. * Conversion functions.
  85. */
  86. void yuv_sv411_to_cl422dc(int, void *, void *, int, int);
  87. void yuv_sv411_to_cl422dc_quartersize(int, void *, void *, int, int);
  88. void yuv_sv411_to_cl422dc_sixteenthsize(int, void *, void *, int, int);
  89. #ifdef __cplusplus
  90. }
  91. #endif
  92. #endif /* !Py_YUV_H */