51 void (*
yv12toyuy2)(
const uint8_t *ysrc,
const uint8_t *usrc,
const uint8_t *vsrc, uint8_t *dst,
53 int lumStride,
int chromStride,
int dstStride);
54 void (*
yv12touyvy)(
const uint8_t *ysrc,
const uint8_t *usrc,
const uint8_t *vsrc, uint8_t *dst,
56 int lumStride,
int chromStride,
int dstStride);
57 void (*
yuv422ptoyuy2)(
const uint8_t *ysrc,
const uint8_t *usrc,
const uint8_t *vsrc, uint8_t *dst,
59 int lumStride,
int chromStride,
int dstStride);
60 void (*
yuv422ptouyvy)(
const uint8_t *ysrc,
const uint8_t *usrc,
const uint8_t *vsrc, uint8_t *dst,
62 int lumStride,
int chromStride,
int dstStride);
63 void (*
yuy2toyv12)(
const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
65 int lumStride,
int chromStride,
int srcStride);
66 void (*
rgb24toyv12)(
const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
68 int lumStride,
int chromStride,
int srcStride);
70 int srcStride,
int dstStride);
73 int src2Stride,
int dstStride);
75 uint8_t *dst1, uint8_t *dst2,
77 int srcStride1,
int srcStride2,
78 int dstStride1,
int dstStride2);
82 int srcStride1,
int srcStride2,
83 int srcStride3,
int dstStride);
86 int lumStride,
int chromStride,
int srcStride);
89 int lumStride,
int chromStride,
int srcStride);
92 int lumStride,
int chromStride,
int srcStride);
95 int lumStride,
int chromStride,
int srcStride);
97 #define RGB2YUV_SHIFT 8
98 #define BY ((int)( 0.098*(1<<RGB2YUV_SHIFT)+0.5))
99 #define BV ((int)(-0.071*(1<<RGB2YUV_SHIFT)+0.5))
100 #define BU ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
101 #define GY ((int)( 0.504*(1<<RGB2YUV_SHIFT)+0.5))
102 #define GV ((int)(-0.368*(1<<RGB2YUV_SHIFT)+0.5))
103 #define GU ((int)(-0.291*(1<<RGB2YUV_SHIFT)+0.5))
104 #define RY ((int)( 0.257*(1<<RGB2YUV_SHIFT)+0.5))
105 #define RV ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
106 #define RU ((int)(-0.148*(1<<RGB2YUV_SHIFT)+0.5))
126 void rgb32to24(
const uint8_t *src, uint8_t *dst,
int src_size)
129 int num_pixels = src_size >> 2;
130 for (i=0; i<num_pixels; i++) {
133 dst[3*i + 0] = src[4*i + 1];
134 dst[3*i + 1] = src[4*i + 2];
135 dst[3*i + 2] = src[4*i + 3];
137 dst[3*i + 0] = src[4*i + 2];
138 dst[3*i + 1] = src[4*i + 1];
139 dst[3*i + 2] = src[4*i + 0];
144 void rgb24to32(
const uint8_t *src, uint8_t *dst,
int src_size)
147 for (i=0; 3*i<src_size; i++) {
151 dst[4*i + 1] = src[3*i + 0];
152 dst[4*i + 2] = src[3*i + 1];
153 dst[4*i + 3] = src[3*i + 2];
155 dst[4*i + 0] = src[3*i + 2];
156 dst[4*i + 1] = src[3*i + 1];
157 dst[4*i + 2] = src[3*i + 0];
167 const uint16_t *s = (
const uint16_t *)src;
168 end = s + src_size/2;
170 register uint16_t bgr;
174 *d++ = (bgr&0x1F)<<3;
175 *d++ = (bgr&0x7E0)>>3;
176 *d++ = (bgr&0xF800)>>8;
178 *d++ = (bgr&0xF800)>>8;
179 *d++ = (bgr&0x7E0)>>3;
180 *d++ = (bgr&0x1F)<<3;
186 void rgb12to15(
const uint8_t *src, uint8_t *dst,
int src_size)
189 uint16_t *d = (uint16_t *)dst;
190 const uint16_t *s = (
const uint16_t *)src;
191 uint16_t rgb,
r,
g,
b;
192 end = s + src_size / 2;
198 r = (r << 3) | ((r & 0x800) >> 1);
199 g = (g << 2) | ((g & 0x080) >> 2);
200 b = (b << 1) | ( b >> 3);
205 void rgb16to24(
const uint8_t *src, uint8_t *dst,
int src_size)
209 const uint16_t *s = (
const uint16_t *)src;
210 end = s + src_size/2;
212 register uint16_t bgr;
214 *d++ = (bgr&0xF800)>>8;
215 *d++ = (bgr&0x7E0)>>3;
216 *d++ = (bgr&0x1F)<<3;
223 int num_pixels = src_size >> 1;
225 for (i=0; i<num_pixels; i++) {
226 unsigned rgb = ((
const uint16_t*)src)[i];
227 ((uint16_t*)dst)[i] = (rgb>>11) | (rgb&0x7E0) | (rgb<<11);
234 int num_pixels = src_size >> 1;
236 for (i=0; i<num_pixels; i++) {
237 unsigned rgb = ((
const uint16_t*)src)[i];
238 ((uint16_t*)dst)[i] = (rgb>>11) | ((rgb&0x7C0)>>1) | ((rgb&0x1F)<<10);
246 const uint16_t *s = (
const uint16_t *)src;
247 end = s + src_size/2;
249 register uint16_t bgr;
253 *d++ = (bgr&0x1F)<<3;
254 *d++ = (bgr&0x3E0)>>2;
255 *d++ = (bgr&0x7C00)>>7;
257 *d++ = (bgr&0x7C00)>>7;
258 *d++ = (bgr&0x3E0)>>2;
259 *d++ = (bgr&0x1F)<<3;
265 void rgb15to24(
const uint8_t *src, uint8_t *dst,
int src_size)
269 const uint16_t *s = (
const uint16_t *)src;
270 end = s + src_size/2;
272 register uint16_t bgr;
274 *d++ = (bgr&0x7C00)>>7;
275 *d++ = (bgr&0x3E0)>>2;
276 *d++ = (bgr&0x1F)<<3;
283 int num_pixels = src_size >> 1;
285 for (i=0; i<num_pixels; i++) {
286 unsigned rgb = ((
const uint16_t*)src)[i];
287 ((uint16_t*)dst)[i] = ((rgb&0x7C00)>>10) | ((rgb&0x3E0)<<1) | (rgb<<11);
294 int num_pixels = src_size >> 1;
296 for (i=0; i<num_pixels; i++) {
298 unsigned rgb = ((
const uint16_t*)src)[i];
300 ((uint16_t*)dst)[i] = (br>>10) | (rgb&0x3E0) | (br<<10);
306 uint16_t *d = (uint16_t*)dst;
307 uint16_t *s = (uint16_t*)src;
309 int num_pixels = src_size >> 1;
311 for (i = 0; i < num_pixels; i++) {
313 d[i] = (rgb << 8 | rgb & 0xF0 | rgb >> 8) & 0xFFF;
317 void bgr8torgb8(
const uint8_t *src, uint8_t *dst,
int src_size)
320 int num_pixels = src_size;
321 for (i=0; i<num_pixels; i++) {
323 register uint8_t rgb;
328 dst[i] = ((b<<1)&0x07) | ((g&0x07)<<3) | ((r&0x03)<<6);
332 #define DEFINE_SHUFFLE_BYTES(a, b, c, d) \
333 void shuffle_bytes_##a##b##c##d(const uint8_t *src, uint8_t *dst, int src_size) \
337 for (i = 0; i < src_size; i+=4) { \
338 dst[i + 0] = src[i + a]; \
339 dst[i + 1] = src[i + b]; \
340 dst[i + 2] = src[i + c]; \
341 dst[i + 3] = src[i + d]; \