25 #ifndef __FIREVISION_UTILS_COLOR_YUVRGB_H 26 #define __FIREVISION_UTILS_COLOR_YUVRGB_H 28 #include <fvutils/color/yuv.h> 29 #include <fvutils/color/rgb.h> 37 #define YUV2RGB(y, u, v, r, g, b) {\ 38 r = y + ((v*1436) >> 10); \ 39 g = y - ((u*352 + v*731) >> 10); \ 40 b = y + ((u*1814) >> 10); \ 44 r = r > 255 ? 255 : r; \ 45 g = g > 255 ? 255 : g; \ 46 b = b > 255 ? 255 : b; } 49 #define clip(x) (unsigned char)( (x) < 0 ? 0 : ( (x) > 255 ? 255 : (x) ) ) 52 #define yuv411packed_to_rgb(YUV, RGB, width, height) yuv411packed_to_rgb_plainc(YUV, RGB, width, height) 71 void yuv411packed_to_rgb_plainc(
const unsigned char *YUV,
unsigned char *RGB,
72 unsigned int width,
unsigned int height);
90 void yuv422planar_to_rgb_plainc(
const unsigned char *planar,
unsigned char *RGB,
91 unsigned int width,
unsigned int height);
93 void yuv422packed_to_rgb_plainc(
const unsigned char *planar,
unsigned char *RGB,
94 const unsigned int width,
const unsigned int height);
96 void yuv422planar_to_bgr_plainc(
const unsigned char *planar,
unsigned char *BGR,
97 unsigned int width,
unsigned int height);
100 void yuv422planar_to_rgb_with_alpha_plainc(
const unsigned char *planar,
unsigned char *RGB,
101 unsigned int width,
unsigned int height);
103 void yuv422planar_to_bgr_with_alpha_plainc(
const unsigned char *planar,
unsigned char *BGR,
104 unsigned int width,
unsigned int height);
106 void yuv422packed_to_bgr_with_alpha_plainc(
const unsigned char *YUV,
unsigned char *BGR,
107 unsigned int width,
unsigned int height);
110 #if (defined __i386__ || \ 115 void yuv411planar_to_rgb_mmx (
const unsigned char *yuv,
unsigned char *rgb,
116 unsigned int w,
unsigned int h);
122 pixel_yuv_to_rgb(
const unsigned char y,
unsigned u,
unsigned char v,
123 unsigned char *r,
unsigned char *g,
unsigned char *b)
131 *r = clip( (76284 * yt + 104595 * vt ) >> 16 );
132 *g = clip( (76284 * yt - 25625 * ut - 53281 * vt ) >> 16 );
133 *b = clip( (76284 * yt + 132252 * ut ) >> 16 );
150 convert_line_yuv422planar_to_rgb(
const unsigned char *YUV,
unsigned char *RGB,
151 unsigned int width,
unsigned int height,
152 unsigned int yuv_line,
unsigned int rgb_line)
156 const unsigned char *yp, *up, *vp;
158 yp = YUV + (width * yuv_line);
159 up = YUV422_PLANAR_U_PLANE(YUV, width, height) + (width * yuv_line / 2);
160 vp = YUV422_PLANAR_V_PLANE(YUV, width, height) + (width * yuv_line / 2);
162 RGB += 3 * width * rgb_line;
170 pixel_yuv_to_rgb(*yp++, *up, *vp, &(r1->R), &(r1->G), &(r1->B));
171 pixel_yuv_to_rgb(*yp++, *up++, *vp++, &(r2->R), &(r2->G), &(r2->B));