syslinux/com32/lib/jpeg/decode1.c
<<
>>
Prefs
   1/*
   2 * Small jpeg decoder library
   3 *
   4 * Copyright (c) 2006, Luc Saillard <luc@saillard.org>
   5 * All rights reserved.
   6 * Redistribution and use in source and binary forms, with or without
   7 * modification, are permitted provided that the following conditions are met:
   8 *
   9 * - Redistributions of source code must retain the above copyright notice,
  10 *  this list of conditions and the following disclaimer.
  11 *
  12 * - Redistributions in binary form must reproduce the above copyright notice,
  13 *  this list of conditions and the following disclaimer in the documentation
  14 *  and/or other materials provided with the distribution.
  15 *
  16 * - Neither the name of the author nor the names of its contributors may be
  17 *  used to endorse or promote products derived from this software without
  18 *  specific prior written permission.
  19 *
  20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30 * POSSIBILITY OF SUCH DAMAGE.
  31 *
  32 */
  33
  34#include <stdio.h>
  35#include <stdlib.h>
  36#include <string.h>
  37#include <stdint.h>
  38
  39#include "tinyjpeg.h"
  40#include "tinyjpeg-internal.h"
  41
  42/*
  43 * Decode a 1x1 directly in 1 color
  44 */
  45static void decode_MCU_1x1_1plane(struct jdec_private *priv)
  46{
  47  // Y
  48  tinyjpeg_process_Huffman_data_unit(priv, cY);
  49  IDCT(&priv->component_infos[cY], priv->Y, 8);
  50
  51  // Cb
  52  tinyjpeg_process_Huffman_data_unit(priv, cCb);
  53  IDCT(&priv->component_infos[cCb], priv->Cb, 8);
  54
  55  // Cr
  56  tinyjpeg_process_Huffman_data_unit(priv, cCr);
  57  IDCT(&priv->component_infos[cCr], priv->Cr, 8);
  58}
  59
  60
  61/*
  62 * Decode a 2x1
  63 *  .-------.
  64 *  | 1 | 2 |
  65 *  `-------'
  66 */
  67static void decode_MCU_2x1_1plane(struct jdec_private *priv)
  68{
  69  // Y
  70  tinyjpeg_process_Huffman_data_unit(priv, cY);
  71  IDCT(&priv->component_infos[cY], priv->Y, 16);
  72  tinyjpeg_process_Huffman_data_unit(priv, cY);
  73  IDCT(&priv->component_infos[cY], priv->Y+8, 16);
  74
  75  // Cb
  76  tinyjpeg_process_Huffman_data_unit(priv, cCb);
  77
  78  // Cr
  79  tinyjpeg_process_Huffman_data_unit(priv, cCr);
  80}
  81
  82
  83/*
  84 * Decode a 2x2 directly in GREY format (8bits)
  85 *  .-------.
  86 *  | 1 | 2 |
  87 *  |---+---|
  88 *  | 3 | 4 |
  89 *  `-------'
  90 */
  91static void decode_MCU_2x2_1plane(struct jdec_private *priv)
  92{
  93  // Y
  94  tinyjpeg_process_Huffman_data_unit(priv, cY);
  95  IDCT(&priv->component_infos[cY], priv->Y, 16);
  96  tinyjpeg_process_Huffman_data_unit(priv, cY);
  97  IDCT(&priv->component_infos[cY], priv->Y+8, 16);
  98  tinyjpeg_process_Huffman_data_unit(priv, cY);
  99  IDCT(&priv->component_infos[cY], priv->Y+64*2, 16);
 100  tinyjpeg_process_Huffman_data_unit(priv, cY);
 101  IDCT(&priv->component_infos[cY], priv->Y+64*2+8, 16);
 102
 103  // Cb
 104  tinyjpeg_process_Huffman_data_unit(priv, cCb);
 105
 106  // Cr
 107  tinyjpeg_process_Huffman_data_unit(priv, cCr);
 108}
 109
 110/*
 111 * Decode a 1x2 mcu
 112 *  .---.
 113 *  | 1 |
 114 *  |---|
 115 *  | 2 |
 116 *  `---'
 117 */
 118static void decode_MCU_1x2_1plane(struct jdec_private *priv)
 119{
 120  // Y
 121  tinyjpeg_process_Huffman_data_unit(priv, cY);
 122  IDCT(&priv->component_infos[cY], priv->Y, 8);
 123  tinyjpeg_process_Huffman_data_unit(priv, cY);
 124  IDCT(&priv->component_infos[cY], priv->Y+64, 8);
 125
 126  // Cb
 127  tinyjpeg_process_Huffman_data_unit(priv, cCb);
 128
 129  // Cr
 130  tinyjpeg_process_Huffman_data_unit(priv, cCr);
 131}
 132
 133const decode_MCU_fct tinyjpeg_decode_mcu_1comp_table[4] = {
 134   decode_MCU_1x1_1plane,
 135   decode_MCU_1x2_1plane,
 136   decode_MCU_2x1_1plane,
 137   decode_MCU_2x2_1plane,
 138};
 139
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.