diff options
author | Andrew Mahone <andrew.mahone@gmail.com> | 2009-05-09 07:31:27 +0000 |
---|---|---|
committer | Andrew Mahone <andrew.mahone@gmail.com> | 2009-05-09 07:31:27 +0000 |
commit | 91efc162564cd9c04677e2e38550cde21995b06e (patch) | |
tree | c927cefc7f12a49396541dbac246dc76ca444c71 /apps/plugins/pictureflow | |
parent | 67695617a13e9f37f17e3718b03046f6d748a9e1 (diff) | |
download | rockbox-91efc162564cd9c04677e2e38550cde21995b06e.tar.gz rockbox-91efc162564cd9c04677e2e38550cde21995b06e.zip |
Split 8-bit-to-native conversion in bmp.c into a function, add support for plugging unscaled output in BMP and JPEG loaders, use output_row_8_native in JPEG decoder when possible.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20884 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/pictureflow')
-rw-r--r-- | apps/plugins/pictureflow/pictureflow.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 82dc9748ec..6dd034c9a9 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c | |||
@@ -607,7 +607,29 @@ static inline uint32_t div255(uint32_t val) | |||
607 | 607 | ||
608 | #define SCALE_VAL(val,out) div255((val) * (out) + 127) | 608 | #define SCALE_VAL(val,out) div255((val) * (out) + 127) |
609 | 609 | ||
610 | static void output_row_transposed(uint32_t row, void * row_in, | 610 | static void output_row_8_transposed(uint32_t row, void * row_in, |
611 | struct scaler_context *ctx) | ||
612 | { | ||
613 | pix_t *dest = (pix_t*)ctx->bm->data + row; | ||
614 | pix_t *end = dest + ctx->bm->height * ctx->bm->width; | ||
615 | #ifdef USEGSLIB | ||
616 | uint8_t *qp = (uint8_t*)row_in; | ||
617 | for (; dest < end; dest += ctx->bm->height) | ||
618 | *dest = *qp++; | ||
619 | #else | ||
620 | struct uint8_rgb *qp = (struct uint8_rgb*)row_in; | ||
621 | unsigned r, g, b; | ||
622 | for (; dest < end; dest += ctx->bm->height) | ||
623 | { | ||
624 | r = qp->red; | ||
625 | g = qp->green; | ||
626 | b = (qp++)->blue; | ||
627 | *dest = LCD_RGBPACK_LCD(r,g,b); | ||
628 | } | ||
629 | #endif | ||
630 | } | ||
631 | |||
632 | static void output_row_32_transposed(uint32_t row, void * row_in, | ||
611 | struct scaler_context *ctx) | 633 | struct scaler_context *ctx) |
612 | { | 634 | { |
613 | pix_t *dest = (pix_t*)ctx->bm->data + row; | 635 | pix_t *dest = (pix_t*)ctx->bm->data + row; |
@@ -635,7 +657,7 @@ static void output_row_transposed(uint32_t row, void * row_in, | |||
635 | } | 657 | } |
636 | 658 | ||
637 | #ifdef HAVE_LCD_COLOR | 659 | #ifdef HAVE_LCD_COLOR |
638 | static void output_row_transposed_fromyuv(uint32_t row, void * row_in, | 660 | static void output_row_32_transposed_fromyuv(uint32_t row, void * row_in, |
639 | struct scaler_context *ctx) | 661 | struct scaler_context *ctx) |
640 | { | 662 | { |
641 | pix_t *dest = (pix_t*)ctx->bm->data + row; | 663 | pix_t *dest = (pix_t*)ctx->bm->data + row; |
@@ -663,13 +685,14 @@ static unsigned int get_size(struct bitmap *bm) | |||
663 | } | 685 | } |
664 | 686 | ||
665 | const struct custom_format format_transposed = { | 687 | const struct custom_format format_transposed = { |
688 | .output_row_8 = output_row_8_transposed, | ||
666 | #ifdef HAVE_LCD_COLOR | 689 | #ifdef HAVE_LCD_COLOR |
667 | .output_row = { | 690 | .output_row_32 = { |
668 | output_row_transposed, | 691 | output_row_32_transposed, |
669 | output_row_transposed_fromyuv | 692 | output_row_32_transposed_fromyuv |
670 | }, | 693 | }, |
671 | #else | 694 | #else |
672 | .output_row = output_row_transposed, | 695 | .output_row_32 = output_row_32_transposed, |
673 | #endif | 696 | #endif |
674 | .get_size = get_size | 697 | .get_size = get_size |
675 | }; | 698 | }; |