Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Copyright (c) 2001-2002, David Janssens
  3.  * Copyright (c) 2003, Yannick Verschueren
  4.  * Copyright (c) 2003,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in the
  14.  *    documentation and/or other materials provided with the distribution.
  15.  *
  16.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  17.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  20.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  21.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  22.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  23.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  24.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  25.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  26.  * POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. #include "bio.h"
  30. #include <setjmp.h>
  31.  
  32. static unsigned char *bio_start, *bio_end, *bio_bp;
  33. static unsigned int bio_buf;
  34. static int bio_ct;
  35.  
  36. extern jmp_buf j2k_error;
  37.  
  38. /// <summary>
  39. /// Number of bytes written.
  40. /// </summary>
  41. int bio_numbytes() {
  42.     return bio_bp-bio_start;
  43. }
  44.  
  45. /// <summary>
  46. /// Init decoder.
  47. /// </summary>
  48. /// <param name="bp">Input buffer</param>
  49. /// <param name="len">Input buffer length</param>
  50. void bio_init_dec(unsigned char *bp, int len) {
  51.     bio_start=bp;
  52.     bio_end=bp+len;
  53.     bio_bp=bp;
  54.     bio_buf=0;
  55.     bio_ct=0;
  56. }
  57.  
  58. int bio_byteout()
  59. {
  60.         bio_buf = (bio_buf << 8) & 0xffff;
  61.         bio_ct = bio_buf == 0xff00 ? 7 : 8;
  62.         if (bio_bp >= bio_end)
  63.                 return 1;
  64.         *bio_bp++ = bio_buf >> 8;
  65.         return 0;
  66. }
  67.  
  68. /// <summary>
  69. /// Read byte.
  70. /// </summary>
  71. int bio_bytein() {
  72.     bio_buf=(bio_buf<<8)&0xffff;
  73.     bio_ct=bio_buf==0xff00?7:8;
  74.     if (bio_bp>=bio_end) return 1; //longjmp(j2k_error, 1);
  75.     bio_buf|=*bio_bp++;
  76.     return 0;
  77. }
  78.  
  79. /// <summary>
  80. /// Read bit.
  81. /// </summary>
  82. int bio_getbit() {
  83.     if (bio_ct==0) {
  84.         bio_bytein();
  85.     }
  86.     bio_ct--;
  87.     return (bio_buf>>bio_ct)&1;
  88. }
  89.  
  90. /// <summary>
  91. /// Read bits.
  92. /// </summary>
  93. /// <param name="n">Number of bits to read</param>
  94. int bio_read(int n) {
  95.     int i, v;
  96.     v=0;
  97.     for (i=n-1; i>=0; i--) {
  98.         v+=bio_getbit()<<i;
  99.     }
  100.     return v;
  101. }
  102.  
  103. /// <summary>
  104. /// Flush bits.
  105. /// </summary>
  106. int bio_flush() {
  107.     bio_ct=0;
  108.     bio_byteout();
  109.     if (bio_ct==7) {
  110.         bio_ct=0;
  111.        if ( bio_byteout()) return 1;;
  112.     }
  113.     return 0;
  114. }
  115.  
  116. /// <summary>
  117. /// </summary>
  118. int bio_inalign() {
  119.     bio_ct=0;
  120.     if ((bio_buf&0xff)==0xff) {
  121.        if( bio_bytein()) return 1;
  122.         bio_ct=0;
  123.     }
  124.     return 0;
  125. }
  126.