summaryrefslogtreecommitdiffstats
path: root/apps/plugins/pictureflow
diff options
context:
space:
mode:
authorAndrew Mahone <andrew.mahone@gmail.com>2009-05-09 07:31:27 +0000
committerAndrew Mahone <andrew.mahone@gmail.com>2009-05-09 07:31:27 +0000
commit91efc162564cd9c04677e2e38550cde21995b06e (patch)
treec927cefc7f12a49396541dbac246dc76ca444c71 /apps/plugins/pictureflow
parent67695617a13e9f37f17e3718b03046f6d748a9e1 (diff)
downloadrockbox-91efc162564cd9c04677e2e38550cde21995b06e.tar.gz
rockbox-91efc162564cd9c04677e2e38550cde21995b06e.tar.bz2
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.c35
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
};