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/pictureflow.c | |
parent | 67695617a13e9f37f17e3718b03046f6d748a9e1 (diff) |
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/pictureflow.c')
-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) #define SCALE_VAL(val,out) div255((val) * (out) + 127) -static void output_row_transposed(uint32_t row, void * row_in, +static void output_row_8_transposed(uint32_t row, void * row_in, + struct scaler_context *ctx) +{ + pix_t *dest = (pix_t*)ctx->bm->data + row; + pix_t *end = dest + ctx->bm->height * ctx->bm->width; +#ifdef USEGSLIB + uint8_t *qp = (uint8_t*)row_in; + for (; dest < end; dest += ctx->bm->height) + *dest = *qp++; +#else + struct uint8_rgb *qp = (struct uint8_rgb*)row_in; + unsigned r, g, b; + for (; dest < end; dest += ctx->bm->height) + { + r = qp->red; + g = qp->green; + b = (qp++)->blue; + *dest = LCD_RGBPACK_LCD(r,g,b); + } +#endif +} + +static void output_row_32_transposed(uint32_t row, void * row_in, struct scaler_context *ctx) { pix_t *dest = (pix_t*)ctx->bm->data + row; @@ -635,7 +657,7 @@ static void output_row_transposed(uint32_t row, void * row_in, } #ifdef HAVE_LCD_COLOR -static void output_row_transposed_fromyuv(uint32_t row, void * row_in, +static void output_row_32_transposed_fromyuv(uint32_t row, void * row_in, struct scaler_context *ctx) { pix_t *dest = (pix_t*)ctx->bm->data + row; @@ -663,13 +685,14 @@ static unsigned int get_size(struct bitmap *bm) } const struct custom_format format_transposed = { + .output_row_8 = output_row_8_transposed, #ifdef HAVE_LCD_COLOR - .output_row = { - output_row_transposed, - output_row_transposed_fromyuv + .output_row_32 = { + output_row_32_transposed, + output_row_32_transposed_fromyuv }, #else - .output_row = output_row_transposed, + .output_row_32 = output_row_32_transposed, #endif .get_size = get_size }; |