Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Small jpeg decoder library (Internal header)
  3.  *
  4.  * Copyright (c) 2006, Luc Saillard <luc@saillard.org>
  5.  * Copyright (c) 2012 Intel Corporation.
  6.  * All rights reserved.
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright notice,
  11.  *  this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistributions in binary form must reproduce the above copyright notice,
  14.  *  this list of conditions and the following disclaimer in the documentation
  15.  *  and/or other materials provided with the distribution.
  16.  *
  17.  * - Neither the name of the author nor the names of its contributors may be
  18.  *  used to endorse or promote products derived from this software without
  19.  *  specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  25.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31.  * POSSIBILITY OF SUCH DAMAGE.
  32.  *
  33.  */
  34.  
  35.  
  36. #ifndef __TINYJPEG_INTERNAL_H_
  37. #define __TINYJPEG_INTERNAL_H_
  38.  
  39. #include <setjmp.h>
  40.  
  41. #define SANITY_CHECK 1
  42.  
  43. struct jdec_private;
  44.  
  45. #define HUFFMAN_BITS_SIZE  256
  46.  
  47. #define HUFFMAN_TABLES     4
  48. #define COMPONENTS         4
  49. #define JPEG_MAX_WIDTH     2048
  50. #define JPEG_MAX_HEIGHT    2048
  51. #define JPEG_SCAN_MAX      4
  52.  
  53. enum std_markers {
  54.    DQT  = 0xDB, /* Define Quantization Table */
  55.    SOF  = 0xC0, /* Start of Frame (size information) */
  56.    DHT  = 0xC4, /* Huffman Table */
  57.    SOI  = 0xD8, /* Start of Image */
  58.    SOS  = 0xDA, /* Start of Scan */
  59.    RST  = 0xD0, /* Reset Marker d0 -> .. */
  60.    RST7 = 0xD7, /* Reset Marker .. -> d7 */
  61.    EOI  = 0xD9, /* End of Image */
  62.    DRI  = 0xDD, /* Define Restart Interval */
  63.    APP0 = 0xE0,
  64. };
  65.  
  66.  
  67. struct huffman_table
  68. {
  69.   /*bits and values*/
  70.         unsigned char bits[16];
  71.         unsigned char values[256];
  72. };
  73.  
  74. struct component
  75. {
  76.   unsigned int Hfactor;
  77.   unsigned int Vfactor;
  78.   unsigned char quant_table_index;
  79.   unsigned int cid;
  80. };
  81.  
  82.  
  83. typedef void (*decode_MCU_fct) (struct jdec_private *priv);
  84. typedef void (*convert_colorspace_fct) (struct jdec_private *priv);
  85.  
  86. struct jpeg_sos
  87. {
  88.   unsigned int nr_components;
  89.   struct {
  90.     unsigned int component_id;
  91.     unsigned int dc_selector;
  92.     unsigned int ac_selector;
  93.   }components[4];
  94. };
  95.  
  96. struct jdec_private
  97. {
  98.   /* Public variables */
  99.   unsigned int width[JPEG_SCAN_MAX], height[JPEG_SCAN_MAX];     /* Size of the image */
  100.  
  101.   /* Private variables */
  102.   const unsigned char *stream_begin, *stream_end,*stream_scan;
  103.   unsigned int stream_length;
  104.  
  105.   const unsigned char *stream;  /* Pointer to the current stream */
  106.  
  107.   struct component component_infos[COMPONENTS];
  108.   unsigned int nf_components;
  109.   unsigned char Q_tables[COMPONENTS][64];               /* quantization tables, zigzag*/
  110.   unsigned char Q_tables_valid[COMPONENTS];
  111.   struct huffman_table HTDC[HUFFMAN_TABLES];    /* DC huffman tables   */
  112.   unsigned char HTDC_valid[HUFFMAN_TABLES];
  113.   struct huffman_table HTAC[HUFFMAN_TABLES];    /* AC huffman tables   */
  114.   unsigned char HTAC_valid[HUFFMAN_TABLES];
  115.   struct jpeg_sos cur_sos;  /* current sos values*/
  116.   int default_huffman_table_initialized;
  117.   int restart_interval;
  118. };
  119.  
  120. #endif
  121.  
  122.