summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
authorAndrew Mahone <andrew.mahone@gmail.com>2009-05-01 23:24:23 +0000
committerAndrew Mahone <andrew.mahone@gmail.com>2009-05-01 23:24:23 +0000
commit60d420938372477226184fb9012de7f6b4ea2d83 (patch)
tree086926f469d87635a483bfff55ea50898bdd0e1c /apps/plugins
parentb22516f995ef4a448251b883b0737d4aa0abdb84 (diff)
downloadrockbox-60d420938372477226184fb9012de7f6b4ea2d83.zip
rockbox-60d420938372477226184fb9012de7f6b4ea2d83.tar.gz
rockbox-60d420938372477226184fb9012de7f6b4ea2d83.tar.bz2
rockbox-60d420938372477226184fb9012de7f6b4ea2d83.tar.xz
Add core JPEG reader, adapted from the JPEG plugin's decoder, with some changes to prevent include conflicts between the two decoders.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20836 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/jpeg/jpeg_decoder.h68
-rw-r--r--apps/plugins/test_core_jpeg.c89
-rw-r--r--apps/plugins/viewers.config3
3 files changed, 93 insertions, 67 deletions
diff --git a/apps/plugins/jpeg/jpeg_decoder.h b/apps/plugins/jpeg/jpeg_decoder.h
index f4dbeaa..b86bdaf 100644
--- a/apps/plugins/jpeg/jpeg_decoder.h
+++ b/apps/plugins/jpeg/jpeg_decoder.h
@@ -27,62 +27,7 @@
#ifndef _JPEG_JPEG_DECODER_H
#define _JPEG_JPEG_DECODER_H
-
-#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */
-
-struct derived_tbl
-{
- /* Basic tables: (element [0] of each array is unused) */
- long mincode[17]; /* smallest code of length k */
- long maxcode[18]; /* largest code of length k (-1 if none) */
- /* (maxcode[17] is a sentinel to ensure huff_DECODE terminates) */
- int valptr[17]; /* huffval[] index of 1st symbol of length k */
-
- /* Back link to public Huffman table (needed only in slow_DECODE) */
- int* pub;
-
- /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of
- the input data stream. If the next Huffman code is no more
- than HUFF_LOOKAHEAD bits long, we can obtain its length and
- the corresponding symbol directly from these tables. */
- int look_nbits[1<<HUFF_LOOKAHEAD]; /* # bits, or 0 if too long */
- unsigned char look_sym[1<<HUFF_LOOKAHEAD]; /* symbol, or unused */
-};
-
-#define QUANT_TABLE_LENGTH 64
-
-/* for type of Huffman table */
-#define DC_LEN 28
-#define AC_LEN 178
-
-struct huffman_table
-{ /* length and code according to JFIF format */
- int huffmancodes_dc[DC_LEN];
- int huffmancodes_ac[AC_LEN];
-};
-
-struct frame_component
-{
- int ID;
- int horizontal_sampling;
- int vertical_sampling;
- int quanttable_select;
-};
-
-struct scan_component
-{
- int ID;
- int DC_select;
- int AC_select;
-};
-
-struct bitstream
-{
- unsigned long get_buffer; /* current bit-extraction buffer */
- int bits_left; /* # of unused bits in it */
- unsigned char* next_input_byte;
- unsigned char* input_end; /* upper limit +1 */
-};
+#include "jpeg_common.h"
struct jpeg
{
@@ -113,17 +58,6 @@ struct jpeg
int subsample_y[3];
};
-
-/* possible return flags for process_markers() */
-#define HUFFTAB 0x0001 /* with huffman table */
-#define QUANTTAB 0x0002 /* with quantization table */
-#define APP0_JFIF 0x0004 /* with APP0 segment following JFIF standard */
-#define FILL_FF 0x0008 /* with 0xFF padding bytes at begin/end */
-#define SOF0 0x0010 /* with SOF0-Segment */
-#define DHT 0x0020 /* with Definition of huffman tables */
-#define SOS 0x0040 /* with Start-of-Scan segment */
-#define DQT 0x0080 /* with definition of quantization table */
-
/* various helper functions */
void default_huff_tbl(struct jpeg* p_jpeg);
void build_lut(struct jpeg* p_jpeg);
diff --git a/apps/plugins/test_core_jpeg.c b/apps/plugins/test_core_jpeg.c
new file mode 100644
index 0000000..5df69b5
--- /dev/null
+++ b/apps/plugins/test_core_jpeg.c
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// __ \_/ ___\| |/ /| __ \ / __ \ \/ /
+ * Jukebox | | ( (__) ) \___| ( | \_\ ( (__) ) (
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 Andrew Mahone
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "plugin.h"
+#include "lib/grey.h"
+PLUGIN_HEADER
+
+/* different graphics libraries */
+#if LCD_DEPTH < 8
+#define USEGSLIB
+GREY_INFO_STRUCT
+#define MYLCD(fn) grey_ub_ ## fn
+#define MYLCD_UPDATE()
+#define MYXLCD(fn) grey_ub_ ## fn
+#define CFORMAT &format_grey
+#else
+#define MYLCD(fn) rb->lcd_ ## fn
+#define MYLCD_UPDATE() rb->lcd_update();
+#define MYXLCD(fn) xlcd_ ## fn
+#define CFORMAT NULL
+#endif
+
+/* this is the plugin entry point */
+enum plugin_status plugin_start(const void* parameter)
+{
+ size_t plugin_buf_len;
+ unsigned char * plugin_buf =
+ (unsigned char *)rb->plugin_get_buffer(&plugin_buf_len);
+ static char filename[MAX_PATH];
+ struct bitmap bm = {
+ .width = LCD_WIDTH,
+ .height = LCD_HEIGHT,
+ };
+ int ret;
+
+ if(!parameter) return PLUGIN_ERROR;
+
+ rb->strcpy(filename, parameter);
+
+#ifdef USEGSLIB
+ long greysize;
+ if (!grey_init(plugin_buf, plugin_buf_len, GREY_ON_COP,
+ LCD_WIDTH, LCD_HEIGHT, &greysize))
+ {
+ rb->splash(HZ, "grey buf error");
+ return PLUGIN_ERROR;
+ }
+ plugin_buf += greysize;
+ plugin_buf_len -= greysize;
+#endif
+ bm.data = plugin_buf;
+ ret = rb->read_jpeg_file(filename, &bm, plugin_buf_len,
+ FORMAT_NATIVE|FORMAT_RESIZE|FORMAT_KEEP_ASPECT,
+ CFORMAT);
+ if (ret < 1)
+ return PLUGIN_ERROR;
+#ifdef USEGSLIB
+ grey_show(true);
+ grey_ub_gray_bitmap((fb_data *)bm.data, (LCD_WIDTH - bm.width) >> 1,
+ (LCD_HEIGHT - bm.height) >> 1, bm.width, bm.height);
+#else
+ rb->lcd_bitmap((fb_data *)bm.data, (LCD_WIDTH - bm.width) >> 1,
+ (LCD_HEIGHT - bm.height) >> 1, bm.width, bm.height);
+#endif
+ MYLCD_UPDATE();
+ while (rb->get_action(CONTEXT_STD,1) != ACTION_STD_OK) rb->yield();
+#ifdef USEGSLIB
+ grey_release();
+#endif
+ return PLUGIN_OK;
+}
diff --git a/apps/plugins/viewers.config b/apps/plugins/viewers.config
index ff77dd8..09d0455 100644
--- a/apps/plugins/viewers.config
+++ b/apps/plugins/viewers.config
@@ -27,6 +27,9 @@ wav,viewers/wavplay,9
wav,viewers/wavview,10
wav,viewers/test_codec,-
bmp,viewers/test_greylib_bitmap_scale,-
+jpeg,viewers/test_core_jpeg,-
+jpe,viewers/test_core_jpeg,-
+jpg,viewers/test_core_jpeg,-
bmp,apps/rockpaint,11
bmp,games/sliding_puzzle,11
mpg,viewers/mpegplayer,4