Mercurial > mplayer.hg
comparison postproc/rgb2rgb.c @ 16739:e91f944f6ed9
Change unsigned->signed and int->long, this fits the asm code better on 64
bit systems.
Also fixes several crashes because (long)-i is incorrect if i is unsigned.
author | reimar |
---|---|
date | Wed, 12 Oct 2005 12:11:27 +0000 |
parents | fed5d4ab5e5f |
children | 08cac43f1e38 |
comparison
equal
deleted
inserted
replaced
16738:482b7842476e | 16739:e91f944f6ed9 |
---|---|
16 #include "../bswap.h" | 16 #include "../bswap.h" |
17 #include "../libvo/fastmemcpy.h" | 17 #include "../libvo/fastmemcpy.h" |
18 | 18 |
19 #define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit | 19 #define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit |
20 | 20 |
21 void (*rgb24to32)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 21 void (*rgb24to32)(const uint8_t *src,uint8_t *dst,long src_size); |
22 void (*rgb24to16)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 22 void (*rgb24to16)(const uint8_t *src,uint8_t *dst,long src_size); |
23 void (*rgb24to15)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 23 void (*rgb24to15)(const uint8_t *src,uint8_t *dst,long src_size); |
24 void (*rgb32to24)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 24 void (*rgb32to24)(const uint8_t *src,uint8_t *dst,long src_size); |
25 void (*rgb32to16)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 25 void (*rgb32to16)(const uint8_t *src,uint8_t *dst,long src_size); |
26 void (*rgb32to15)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 26 void (*rgb32to15)(const uint8_t *src,uint8_t *dst,long src_size); |
27 void (*rgb15to16)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 27 void (*rgb15to16)(const uint8_t *src,uint8_t *dst,long src_size); |
28 void (*rgb15to24)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 28 void (*rgb15to24)(const uint8_t *src,uint8_t *dst,long src_size); |
29 void (*rgb15to32)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 29 void (*rgb15to32)(const uint8_t *src,uint8_t *dst,long src_size); |
30 void (*rgb16to15)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 30 void (*rgb16to15)(const uint8_t *src,uint8_t *dst,long src_size); |
31 void (*rgb16to24)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 31 void (*rgb16to24)(const uint8_t *src,uint8_t *dst,long src_size); |
32 void (*rgb16to32)(const uint8_t *src,uint8_t *dst,unsigned src_size); | 32 void (*rgb16to32)(const uint8_t *src,uint8_t *dst,long src_size); |
33 //void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 33 //void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size); |
34 void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 34 void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, long src_size); |
35 void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 35 void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, long src_size); |
36 void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 36 void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, long src_size); |
37 void (*rgb32tobgr32)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 37 void (*rgb32tobgr32)(const uint8_t *src, uint8_t *dst, long src_size); |
38 //void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 38 //void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long src_size); |
39 void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 39 void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, long src_size); |
40 void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, unsigned src_size); | 40 void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, long src_size); |
41 | 41 |
42 void (*yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | 42 void (*yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
43 unsigned int width, unsigned int height, | 43 long width, long height, |
44 int lumStride, int chromStride, int dstStride); | 44 long lumStride, long chromStride, long dstStride); |
45 void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | 45 void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
46 unsigned int width, unsigned int height, | 46 long width, long height, |
47 int lumStride, int chromStride, int dstStride); | 47 long lumStride, long chromStride, long dstStride); |
48 void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | 48 void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
49 unsigned int width, unsigned int height, | 49 long width, long height, |
50 int lumStride, int chromStride, int dstStride); | 50 long lumStride, long chromStride, long dstStride); |
51 void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, | 51 void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, |
52 unsigned int width, unsigned int height, | 52 long width, long height, |
53 int lumStride, int chromStride, int srcStride); | 53 long lumStride, long chromStride, long srcStride); |
54 void (*rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, | 54 void (*rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, |
55 unsigned int width, unsigned int height, | 55 long width, long height, |
56 int lumStride, int chromStride, int srcStride); | 56 long lumStride, long chromStride, long srcStride); |
57 void (*planar2x)(const uint8_t *src, uint8_t *dst, int width, int height, int srcStride, int dstStride); | 57 void (*planar2x)(const uint8_t *src, uint8_t *dst, long width, long height, |
58 long srcStride, long dstStride); | |
58 void (*interleaveBytes)(uint8_t *src1, uint8_t *src2, uint8_t *dst, | 59 void (*interleaveBytes)(uint8_t *src1, uint8_t *src2, uint8_t *dst, |
59 unsigned width, unsigned height, int src1Stride, | 60 long width, long height, long src1Stride, |
60 int src2Stride, int dstStride); | 61 long src2Stride, long dstStride); |
61 void (*vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2, | 62 void (*vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2, |
62 uint8_t *dst1, uint8_t *dst2, | 63 uint8_t *dst1, uint8_t *dst2, |
63 unsigned width, unsigned height, | 64 long width, long height, |
64 int srcStride1, int srcStride2, | 65 long srcStride1, long srcStride2, |
65 int dstStride1, int dstStride2); | 66 long dstStride1, long dstStride2); |
66 void (*yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, | 67 void (*yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, |
67 uint8_t *dst, | 68 uint8_t *dst, |
68 unsigned width, unsigned height, | 69 long width, long height, |
69 int srcStride1, int srcStride2, | 70 long srcStride1, long srcStride2, |
70 int srcStride3, int dstStride); | 71 long srcStride3, long dstStride); |
71 | 72 |
72 #if defined(ARCH_X86) || defined(ARCH_X86_64) | 73 #if defined(ARCH_X86) || defined(ARCH_X86_64) |
73 static const uint64_t mmx_null __attribute__((aligned(8))) = 0x0000000000000000ULL; | 74 static const uint64_t mmx_null __attribute__((aligned(8))) = 0x0000000000000000ULL; |
74 static const uint64_t mmx_one __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; | 75 static const uint64_t mmx_one __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; |
75 static const uint64_t mask32b attribute_used __attribute__((aligned(8))) = 0x000000FF000000FFULL; | 76 static const uint64_t mask32b attribute_used __attribute__((aligned(8))) = 0x000000FF000000FFULL; |
319 } | 320 } |
320 | 321 |
321 /** | 322 /** |
322 * Pallete is assumed to contain bgr32 | 323 * Pallete is assumed to contain bgr32 |
323 */ | 324 */ |
324 void palette8torgb32(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 325 void palette8torgb32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
325 { | 326 { |
326 unsigned i; | 327 long i; |
327 | 328 |
328 /* | 329 /* |
329 for(i=0; i<num_pixels; i++) | 330 for(i=0; i<num_pixels; i++) |
330 ((unsigned *)dst)[i] = ((unsigned *)palette)[ src[i] ]; | 331 ((unsigned *)dst)[i] = ((unsigned *)palette)[ src[i] ]; |
331 */ | 332 */ |
345 #endif | 346 #endif |
346 dst+= 4; | 347 dst+= 4; |
347 } | 348 } |
348 } | 349 } |
349 | 350 |
350 void palette8tobgr32(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 351 void palette8tobgr32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
351 { | 352 { |
352 unsigned i; | 353 long i; |
353 for(i=0; i<num_pixels; i++) | 354 for(i=0; i<num_pixels; i++) |
354 { | 355 { |
355 #ifdef WORDS_BIGENDIAN | 356 #ifdef WORDS_BIGENDIAN |
356 dst[3]= palette[ src[i]*4+0 ]; | 357 dst[3]= palette[ src[i]*4+0 ]; |
357 dst[2]= palette[ src[i]*4+1 ]; | 358 dst[2]= palette[ src[i]*4+1 ]; |
369 } | 370 } |
370 | 371 |
371 /** | 372 /** |
372 * Pallete is assumed to contain bgr32 | 373 * Pallete is assumed to contain bgr32 |
373 */ | 374 */ |
374 void palette8torgb24(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 375 void palette8torgb24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
375 { | 376 { |
376 unsigned i; | 377 long i; |
377 /* | 378 /* |
378 writes 1 byte o much and might cause alignment issues on some architectures? | 379 writes 1 byte o much and might cause alignment issues on some architectures? |
379 for(i=0; i<num_pixels; i++) | 380 for(i=0; i<num_pixels; i++) |
380 ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[ src[i] ]; | 381 ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[ src[i] ]; |
381 */ | 382 */ |
387 dst[2]= palette[ src[i]*4+0 ]; | 388 dst[2]= palette[ src[i]*4+0 ]; |
388 dst+= 3; | 389 dst+= 3; |
389 } | 390 } |
390 } | 391 } |
391 | 392 |
392 void palette8tobgr24(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 393 void palette8tobgr24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
393 { | 394 { |
394 unsigned i; | 395 long i; |
395 /* | 396 /* |
396 writes 1 byte o much and might cause alignment issues on some architectures? | 397 writes 1 byte o much and might cause alignment issues on some architectures? |
397 for(i=0; i<num_pixels; i++) | 398 for(i=0; i<num_pixels; i++) |
398 ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[ src[i] ]; | 399 ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[ src[i] ]; |
399 */ | 400 */ |
408 } | 409 } |
409 | 410 |
410 /** | 411 /** |
411 * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette | 412 * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette |
412 */ | 413 */ |
413 void palette8torgb16(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 414 void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
414 { | 415 { |
415 unsigned i; | 416 long i; |
416 for(i=0; i<num_pixels; i++) | 417 for(i=0; i<num_pixels; i++) |
417 ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ]; | 418 ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ]; |
418 } | 419 } |
419 void palette8tobgr16(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 420 void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
420 { | 421 { |
421 unsigned i; | 422 long i; |
422 for(i=0; i<num_pixels; i++) | 423 for(i=0; i<num_pixels; i++) |
423 ((uint16_t *)dst)[i] = bswap_16(((uint16_t *)palette)[ src[i] ]); | 424 ((uint16_t *)dst)[i] = bswap_16(((uint16_t *)palette)[ src[i] ]); |
424 } | 425 } |
425 | 426 |
426 /** | 427 /** |
427 * Pallete is assumed to contain bgr15, see rgb32to15 to convert the palette | 428 * Pallete is assumed to contain bgr15, see rgb32to15 to convert the palette |
428 */ | 429 */ |
429 void palette8torgb15(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 430 void palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
430 { | 431 { |
431 unsigned i; | 432 long i; |
432 for(i=0; i<num_pixels; i++) | 433 for(i=0; i<num_pixels; i++) |
433 ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ]; | 434 ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ]; |
434 } | 435 } |
435 void palette8tobgr15(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette) | 436 void palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
436 { | 437 { |
437 unsigned i; | 438 long i; |
438 for(i=0; i<num_pixels; i++) | 439 for(i=0; i<num_pixels; i++) |
439 ((uint16_t *)dst)[i] = bswap_16(((uint16_t *)palette)[ src[i] ]); | 440 ((uint16_t *)dst)[i] = bswap_16(((uint16_t *)palette)[ src[i] ]); |
440 } | 441 } |
441 | 442 |
442 void rgb32tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 443 void rgb32tobgr24(const uint8_t *src, uint8_t *dst, long src_size) |
443 { | 444 { |
444 unsigned i; | 445 long i; |
445 unsigned num_pixels = src_size >> 2; | 446 long num_pixels = src_size >> 2; |
446 for(i=0; i<num_pixels; i++) | 447 for(i=0; i<num_pixels; i++) |
447 { | 448 { |
448 dst[3*i + 0] = src[4*i + 2]; | 449 dst[3*i + 0] = src[4*i + 2]; |
449 dst[3*i + 1] = src[4*i + 1]; | 450 dst[3*i + 1] = src[4*i + 1]; |
450 dst[3*i + 2] = src[4*i + 0]; | 451 dst[3*i + 2] = src[4*i + 0]; |
451 } | 452 } |
452 } | 453 } |
453 | 454 |
454 void rgb24tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 455 void rgb24tobgr32(const uint8_t *src, uint8_t *dst, long src_size) |
455 { | 456 { |
456 unsigned i; | 457 long i; |
457 for(i=0; 3*i<src_size; i++) | 458 for(i=0; 3*i<src_size; i++) |
458 { | 459 { |
459 dst[4*i + 0] = src[3*i + 2]; | 460 dst[4*i + 0] = src[3*i + 2]; |
460 dst[4*i + 1] = src[3*i + 1]; | 461 dst[4*i + 1] = src[3*i + 1]; |
461 dst[4*i + 2] = src[3*i + 0]; | 462 dst[4*i + 2] = src[3*i + 0]; |
462 dst[4*i + 3] = 0; | 463 dst[4*i + 3] = 0; |
463 } | 464 } |
464 } | 465 } |
465 | 466 |
466 void rgb16tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 467 void rgb16tobgr32(const uint8_t *src, uint8_t *dst, long src_size) |
467 { | 468 { |
468 const uint16_t *end; | 469 const uint16_t *end; |
469 uint8_t *d = (uint8_t *)dst; | 470 uint8_t *d = (uint8_t *)dst; |
470 const uint16_t *s = (uint16_t *)src; | 471 const uint16_t *s = (uint16_t *)src; |
471 end = s + src_size/2; | 472 end = s + src_size/2; |
478 *d++ = (bgr&0x1F)<<3; | 479 *d++ = (bgr&0x1F)<<3; |
479 *d++ = 0; | 480 *d++ = 0; |
480 } | 481 } |
481 } | 482 } |
482 | 483 |
483 void rgb16tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 484 void rgb16tobgr24(const uint8_t *src, uint8_t *dst, long src_size) |
484 { | 485 { |
485 const uint16_t *end; | 486 const uint16_t *end; |
486 uint8_t *d = (uint8_t *)dst; | 487 uint8_t *d = (uint8_t *)dst; |
487 const uint16_t *s = (const uint16_t *)src; | 488 const uint16_t *s = (const uint16_t *)src; |
488 end = s + src_size/2; | 489 end = s + src_size/2; |
494 *d++ = (bgr&0x7E0)>>3; | 495 *d++ = (bgr&0x7E0)>>3; |
495 *d++ = (bgr&0x1F)<<3; | 496 *d++ = (bgr&0x1F)<<3; |
496 } | 497 } |
497 } | 498 } |
498 | 499 |
499 void rgb16tobgr16(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 500 void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size) |
500 { | 501 { |
501 unsigned i; | 502 long i; |
502 unsigned num_pixels = src_size >> 1; | 503 long num_pixels = src_size >> 1; |
503 | 504 |
504 for(i=0; i<num_pixels; i++) | 505 for(i=0; i<num_pixels; i++) |
505 { | 506 { |
506 unsigned b,g,r; | 507 unsigned b,g,r; |
507 register uint16_t rgb; | 508 register uint16_t rgb; |
511 b = (rgb&0xF800)>>11; | 512 b = (rgb&0xF800)>>11; |
512 dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11); | 513 dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11); |
513 } | 514 } |
514 } | 515 } |
515 | 516 |
516 void rgb16tobgr15(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 517 void rgb16tobgr15(const uint8_t *src, uint8_t *dst, long src_size) |
517 { | 518 { |
518 unsigned i; | 519 long i; |
519 unsigned num_pixels = src_size >> 1; | 520 long num_pixels = src_size >> 1; |
520 | 521 |
521 for(i=0; i<num_pixels; i++) | 522 for(i=0; i<num_pixels; i++) |
522 { | 523 { |
523 unsigned b,g,r; | 524 unsigned b,g,r; |
524 register uint16_t rgb; | 525 register uint16_t rgb; |
528 b = (rgb&0xF800)>>11; | 529 b = (rgb&0xF800)>>11; |
529 dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10); | 530 dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10); |
530 } | 531 } |
531 } | 532 } |
532 | 533 |
533 void rgb15tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 534 void rgb15tobgr32(const uint8_t *src, uint8_t *dst, long src_size) |
534 { | 535 { |
535 const uint16_t *end; | 536 const uint16_t *end; |
536 uint8_t *d = (uint8_t *)dst; | 537 uint8_t *d = (uint8_t *)dst; |
537 const uint16_t *s = (const uint16_t *)src; | 538 const uint16_t *s = (const uint16_t *)src; |
538 end = s + src_size/2; | 539 end = s + src_size/2; |
545 *d++ = (bgr&0x1F)<<3; | 546 *d++ = (bgr&0x1F)<<3; |
546 *d++ = 0; | 547 *d++ = 0; |
547 } | 548 } |
548 } | 549 } |
549 | 550 |
550 void rgb15tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 551 void rgb15tobgr24(const uint8_t *src, uint8_t *dst, long src_size) |
551 { | 552 { |
552 const uint16_t *end; | 553 const uint16_t *end; |
553 uint8_t *d = (uint8_t *)dst; | 554 uint8_t *d = (uint8_t *)dst; |
554 const uint16_t *s = (uint16_t *)src; | 555 const uint16_t *s = (uint16_t *)src; |
555 end = s + src_size/2; | 556 end = s + src_size/2; |
561 *d++ = (bgr&0x3E0)>>2; | 562 *d++ = (bgr&0x3E0)>>2; |
562 *d++ = (bgr&0x1F)<<3; | 563 *d++ = (bgr&0x1F)<<3; |
563 } | 564 } |
564 } | 565 } |
565 | 566 |
566 void rgb15tobgr16(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 567 void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size) |
567 { | 568 { |
568 unsigned i; | 569 long i; |
569 unsigned num_pixels = src_size >> 1; | 570 long num_pixels = src_size >> 1; |
570 | 571 |
571 for(i=0; i<num_pixels; i++) | 572 for(i=0; i<num_pixels; i++) |
572 { | 573 { |
573 unsigned b,g,r; | 574 unsigned b,g,r; |
574 register uint16_t rgb; | 575 register uint16_t rgb; |
578 b = (rgb&0x7C00)>>10; | 579 b = (rgb&0x7C00)>>10; |
579 dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11); | 580 dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11); |
580 } | 581 } |
581 } | 582 } |
582 | 583 |
583 void rgb15tobgr15(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 584 void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size) |
584 { | 585 { |
585 unsigned i; | 586 long i; |
586 unsigned num_pixels = src_size >> 1; | 587 long num_pixels = src_size >> 1; |
587 | 588 |
588 for(i=0; i<num_pixels; i++) | 589 for(i=0; i<num_pixels; i++) |
589 { | 590 { |
590 unsigned b,g,r; | 591 unsigned b,g,r; |
591 register uint16_t rgb; | 592 register uint16_t rgb; |
595 b = (rgb&0x7C00)>>10; | 596 b = (rgb&0x7C00)>>10; |
596 dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10); | 597 dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10); |
597 } | 598 } |
598 } | 599 } |
599 | 600 |
600 void rgb8tobgr8(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 601 void rgb8tobgr8(const uint8_t *src, uint8_t *dst, long src_size) |
601 { | 602 { |
602 unsigned i; | 603 long i; |
603 unsigned num_pixels = src_size; | 604 long num_pixels = src_size; |
604 for(i=0; i<num_pixels; i++) | 605 for(i=0; i<num_pixels; i++) |
605 { | 606 { |
606 unsigned b,g,r; | 607 unsigned b,g,r; |
607 register uint8_t rgb; | 608 register uint8_t rgb; |
608 rgb = src[i]; | 609 rgb = src[i]; |