00001 #ifndef CCVT_H
00002 #define CCVT_H
00003
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007
00008 /* Colour ConVerT: going from one colour space to another
00009
00010 Format descriptions:
00011 420i = "4:2:0 interlaced"
00012 YYYY UU YYYY UU even lines
00013 YYYY VV YYYY VV odd lines
00014 U/V data is subsampled by 2 both in horizontal
00015 and vertical directions, and intermixed with the Y values.
00016
00017 420p = "4:2:0 planar"
00018 YYYYYYYY N lines
00019 UUUU N/2 lines
00020 VVVV N/2 lines
00021 U/V is again subsampled, but all the Ys, Us and Vs are placed
00022 together, but in separate buffers. The buffers may be placed in
00023 one piece of contiguous memory though, with Y buffer first,
00024 followed by U, folloed by V.
00025
00026 yuyv = "4:2:2 interlaced"
00027 YUYV YUYV YUYV ... N lines
00028 The U/V data is subsampled by 2 in horizontal direction only.
00029
00030 bgr24 = 3 bytes per pixel, in the order Blue Green Red (whoever came up
00031 with that idea...)
00032 rgb24 = 3 bytes per pixel, in the order Red Green Blue (which is sensible)
00033 rgb32 = 4 bytes per pixel, in the order Red Green Blue Alpha, with
00034 Alpha really being a filler byte (0)
00035 bgr32 = last but not least, 4 bytes per pixel, in the order Blue Green Red
00036 Alpha, Alpha again a filler byte (0)
00037 */
00038
00039 /* Functions in ccvt.S */
00040 /* 4:2:0 YUV interlaced to RGB/BGR */
00041 void ccvt_420i_bgr24(int width, int height, void *src, void *dst);
00042 void ccvt_420i_rgb24(int width, int height, void *src, void *dst);
00043 void ccvt_420i_bgr32(int width, int height, void *src, void *dst);
00044 void ccvt_420i_rgb32(int width, int height, void *src, void *dst);
00045
00046 /* 4:2:0 YUYV interlaced to RGB/BGR */
00047 void ccvt_yuyv_rgb32(int width, int height, void *src, void *dst);
00048 void ccvt_yuyv_bgr32(int width, int height, void *src, void *dst);
00049
00050 /* 4:2:0 YUV planar to RGB/BGR */
00051 void ccvt_420p_rgb32(int width, int height, void *srcy, void *srcu, void *srcv, void *dst);
00052 void ccvt_420p_bgr32(int width, int height, void *srcy, void *srcu, void *srcv, void *dst);
00053
00054 /* RGB/BGR to 4:2:0 YUV interlaced */
00055
00056 /* RGB/BGR to 4:2:0 YUV planar */
00057 void ccvt_rgb24_420p(int width, int height, void *src, void *dsty, void *dstu, void *dstv);
00058 void ccvt_bgr24_420p(int width, int height, void *src, void *dsty, void *dstu, void *dstv);
00059
00060 /* Go from 420i to other yuv formats */
00061 void ccvt_420i_420p(int width, int height, void *src, void *dsty, void *dstu, void *dstv);
00062 void ccvt_420i_yuyv(int width, int height, void *src, void *dst);
00063
00064 #ifdef __cplusplus
00065 }
00066 #endif
00067
00068 #endif
1.2.6 written by Dimitri van Heesch,
© 1997-2001