Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
  3.  * Copyright (c) 2002-2007, Professor Benoit Macq
  4.  * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
  5.  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  18.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  21.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  22.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  23.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  24.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  25.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  26.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  27.  * POSSIBILITY OF SUCH DAMAGE.
  28.  */
  29.  
  30. #include "opj_includes.h"
  31.  
  32. /*
  33. ==========================================================
  34.    local functions
  35. ==========================================================
  36. */
  37.  
  38.  
  39. /*
  40. ==========================================================
  41.    RAW encoding interface
  42. ==========================================================
  43. */
  44.  
  45. opj_raw_t* raw_create(void) {
  46.         opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
  47.         return raw;
  48. }
  49.  
  50. void raw_destroy(opj_raw_t *raw) {
  51.         if(raw) {
  52.                 opj_free(raw);
  53.         }
  54. }
  55.  
  56. int raw_numbytes(opj_raw_t *raw) {
  57.         return raw->bp - raw->start;
  58. }
  59.  
  60. void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len) {
  61.         raw->start = bp;
  62.         raw->lenmax = len;
  63.         raw->len = 0;
  64.         raw->c = 0;
  65.         raw->ct = 0;
  66. }
  67.  
  68. int raw_decode(opj_raw_t *raw) {
  69.         int d;
  70.         if (raw->ct == 0) {
  71.                 raw->ct = 8;
  72.                 if (raw->len == raw->lenmax) {
  73.                         raw->c = 0xff;
  74.                 } else {
  75.                         if (raw->c == 0xff) {
  76.                                 raw->ct = 7;
  77.                         }
  78.                         raw->c = *(raw->start + raw->len);
  79.                         raw->len++;
  80.                 }
  81.         }
  82.         raw->ct--;
  83.         d = (raw->c >> raw->ct) & 0x01;
  84.        
  85.         return d;
  86. }
  87.  
  88.