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 register 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 register unsigned int i = 0, j = 0;
82 register int y[4] = {0, 0, 0, 0}, u, v;
84 register unsigned int su = 0;
85 register unsigned int sv = 0;
87 while (i < (width * height)) {
89 for (
register 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)
121 register unsigned int i = 0;
122 register int y1, y2, u1, u2, v1, v2;
123 register RGB_t *r1, *r2;
124 register 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)
164 register unsigned int i = 0;
165 register int y1, y2, u1, u2, v1, v2;
166 register RGB_t *r1, *r2;
167 register 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)
207 register unsigned int i = 0;
208 register int y1, y2, u1, u2, v1, v2;
209 register RGB_t *r1, *r2;
210 register unsigned char *p;
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;
244 rgb_to_yuv422packed_plainc(
const unsigned char *RGB,
unsigned char *YUV,
245 unsigned int width,
unsigned int height)
247 register unsigned int i = 0;
248 register int y1, y2, u1, u2, v1, v2;
249 register RGB_t *r1, *r2;
250 register unsigned char *p;
254 while (i < (width * height)) {
260 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
261 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
263 *p++ = (u1 + u2) / 2;
265 *p++ = (v1 + v2) / 2;
282 bgr_to_yuv422planar_plainc(
const unsigned char *BGR,
unsigned char *YUV,
283 unsigned int width,
unsigned int height)
285 register unsigned int i = 0;
286 register int y1, y2, u1, u2, v1, v2;
287 register BGR_t *r1, *r2;
288 register unsigned char *yp, *up, *vp;
291 up = YUV422_PLANAR_U_PLANE(YUV, width, height);
292 vp = YUV422_PLANAR_V_PLANE(YUV, width, height);
294 while (i < (width * height)) {
300 RGB2YUV(r1->R, r1->G, r1->B, y1, u1, v1);
301 RGB2YUV(r2->R, r2->G, r2->B, y2, u2, v2);
305 *up++ = (u1 + u2) / 2;
306 *vp++ = (v1 + v2) / 2;