25 #include <fvutils/color/rgbyuv.h> 26 #include <fvutils/color/yuv.h> 27 #include <fvutils/color/rgb.h> 28 #include <fvutils/color/colorspaces.h> 38 rgb_to_yuy2(
const unsigned char *RGB,
unsigned char *YUV,
unsigned int width,
unsigned int height)
41 int y0, y1, u0, u1, v0, v1 ;
44 for (i = 0, j = 0; i < 3 * width * height; i += 6, j += 4) {
48 RGB2YUV(r, g, b, y0, u0 , v0);
52 RGB2YUV(r, g, b, y1, u1 , v1);
54 YUV[j + 1] = (u0+u1)/2;
56 YUV[j + 3] = (v0+v1)/2;
78 rgb_to_yuv411packed_plainc(
const unsigned char *RGB,
unsigned char *YUV,
79 unsigned int width,
unsigned int height)
81 unsigned int i = 0, j = 0;
82 int y[4] = {0, 0, 0, 0}, u, v;
87 while (i < (width * height)) {
89 for (
unsigned int k = 0; j <= 4; ++j) {
90 RGB2YUV(r->R, r->G, r->B, y[k], u, v);
117 convert_line_rgb_to_yuv422planar(
const unsigned char *RGB,
unsigned char *YUV,
118 unsigned int width,
unsigned int height,
119 unsigned int rgb_line,
unsigned int yuv_line)
122 int y1, y2, u1, u2, v1, v2;
124 unsigned char *yp, *up, *vp;
126 yp = YUV + (width * yuv_line);
127 up = YUV422_PLANAR_U_PLANE(YUV, width, height) + (width * yuv_line / 2);
128 vp = YUV422_PLANAR_V_PLANE(YUV, width, height) + (width * yuv_line / 2);
130 RGB += 3 * width * rgb_line;
138 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
139 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
143 *up++ = (u1 + u2) / 2;
144 *vp++ = (v1 + v2) / 2;
161 rgb_to_yuv422planar_plainc(
const unsigned char *RGB,
unsigned char *YUV,
162 unsigned int width,
unsigned int height)
165 int y1, y2, u1, u2, v1, v2;
167 unsigned char *yp, *up, *vp;
170 up = YUV422_PLANAR_U_PLANE(YUV, width, height);
171 vp = YUV422_PLANAR_V_PLANE(YUV, width, height);
173 while (i < (width * height)) {
179 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
180 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
184 *up++ = (u1 + u2) / 2;
185 *vp++ = (v1 + v2) / 2;
203 convert_line_rgb_to_yuv422packed(
const unsigned char *RGB,
unsigned char *YUV,
204 unsigned int width,
unsigned int height,
205 unsigned int rgb_line,
unsigned int yuv_line)
208 int y1, y2, u1, u2, v1, v2;
212 p = YUV + (width * yuv_line) * 2;
214 RGB += 3 * width * rgb_line;
222 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
223 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
225 *p++ = (u1 + u2) / 2;
227 *p++ = (v1 + v2) / 2;
245 rgb_to_yuv422packed_plainc(
const unsigned char *RGB,
unsigned char *YUV,
246 unsigned int width,
unsigned int height)
249 int y1, y2, u1, u2, v1, v2;
255 while (i < (width * height)) {
261 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
262 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
264 *p++ = (u1 + u2) / 2;
266 *p++ = (v1 + v2) / 2;
275 rgb_planar_to_yuv422packed_plainc(
const unsigned char *rgb_planar,
unsigned char *YUV,
276 unsigned int width,
unsigned int height)
278 const unsigned char *r = rgb_planar;
279 const unsigned char *g = rgb_planar + (width * height);
280 const unsigned char *b = rgb_planar + (width * height * 2);
283 int y1, y2, u1, u2, v1, v2;
285 unsigned char r1, r2, g1, g2, b1, b2;
289 while (i < (width * height)) {
297 RGB2YUV(r1, g1, b1, y1, u1, v1);
298 RGB2YUV(r2, g2, b2, y2, u2, v2);
300 *p++ = (u1 + u2) / 2;
302 *p++ = (v1 + v2) / 2;
319 bgr_to_yuv422planar_plainc(
const unsigned char *BGR,
unsigned char *YUV,
320 unsigned int width,
unsigned int height)
323 int y1, y2, u1, u2, v1, v2;
325 unsigned char *yp, *up, *vp;
328 up = YUV422_PLANAR_U_PLANE(YUV, width, height);
329 vp = YUV422_PLANAR_V_PLANE(YUV, width, height);
331 while (i < (width * height)) {
337 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
338 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
342 *up++ = (u1 + u2) / 2;
343 *vp++ = (v1 + v2) / 2;