This should fix FS#10917, and also fix channel swapping i introduced in r23784. Lets...
[kugel-rb.git] / apps / plugins / jpeg / jpeg_decoder.h
blobb86bdaf001e91ae2ca3c1010030e088d1f250547
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * JPEG image viewer
11 * (This is a real mess if it has to be coded in one single C file)
13 * File scrolling addition (C) 2005 Alexander Spyridakis
14 * Copyright (C) 2004 Jörg Hohensohn aka [IDC]Dragon
15 * Heavily borrowed from the IJG implementation (C) Thomas G. Lane
16 * Small & fast downscaling IDCT (C) 2002 by Guido Vollbeding JPEGclub.org
18 * This program is free software; you can redistribute it and/or
19 * modify it under the terms of the GNU General Public License
20 * as published by the Free Software Foundation; either version 2
21 * of the License, or (at your option) any later version.
23 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
24 * KIND, either express or implied.
26 ****************************************************************************/
28 #ifndef _JPEG_JPEG_DECODER_H
29 #define _JPEG_JPEG_DECODER_H
30 #include "jpeg_common.h"
32 struct jpeg
34 int x_size, y_size; /* size of image (can be less than block boundary) */
35 int x_phys, y_phys; /* physical size, block aligned */
36 int x_mbl; /* x dimension of MBL */
37 int y_mbl; /* y dimension of MBL */
38 int blocks; /* blocks per MB */
39 int restart_interval; /* number of MCUs between RSTm markers */
40 int store_pos[4]; /* for Y block ordering */
42 unsigned char* p_entropy_data;
43 unsigned char* p_entropy_end;
45 int quanttable[4][QUANT_TABLE_LENGTH]; /* raw quantization tables 0-3 */
46 int qt_idct[2][QUANT_TABLE_LENGTH]; /* quantization tables for IDCT */
48 struct huffman_table hufftable[2]; /* Huffman tables */
49 struct derived_tbl dc_derived_tbls[2]; /* Huffman-LUTs */
50 struct derived_tbl ac_derived_tbls[2];
52 struct frame_component frameheader[3]; /* Component descriptor */
53 struct scan_component scanheader[3]; /* currently not used */
55 int mcu_membership[6]; /* info per block */
56 int tab_membership[6];
57 int subsample_x[3]; /* info per component */
58 int subsample_y[3];
61 /* various helper functions */
62 void default_huff_tbl(struct jpeg* p_jpeg);
63 void build_lut(struct jpeg* p_jpeg);
64 int process_markers(unsigned char* p_src, long size, struct jpeg* p_jpeg);
66 /* the main decode function */
67 #ifdef HAVE_LCD_COLOR
68 int jpeg_decode(struct jpeg* p_jpeg, unsigned char* p_pixel[3],
69 int downscale, void (*pf_progress)(int current, int total));
70 #else
71 int jpeg_decode(struct jpeg* p_jpeg, unsigned char* p_pixel[1], int downscale,
72 void (*pf_progress)(int current, int total));
73 #endif
76 #endif /* _JPEG_JPEG_DECODER_H */