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
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
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.
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.
32 static unsigned char *bio_start, *bio_end, *bio_bp;
33 static unsigned int bio_buf;
36 extern jmp_buf j2k_error;
39 /// Number of bytes written.
42 return bio_bp-bio_start;
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) {
60 bio_buf = (bio_buf << 8) & 0xffff;
61 bio_ct = bio_buf == 0xff00 ? 7 : 8;
62 if (bio_bp >= bio_end)
64 *bio_bp++ = bio_buf >> 8;
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);
87 return (bio_buf>>bio_ct)&1;
93 /// <param name="n">Number of bits to read</param>
97 for (i=n-1; i>=0; i--) {
111 if ( bio_byteout()) return 1;;
120 if ((bio_buf&0xff)==0xff) {
121 if( bio_bytein()) return 1;