00001 /* 00002 * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium 00003 * Copyright (c) 2002-2007, Professor Benoit Macq 00004 * Copyright (c) 2001-2003, David Janssens 00005 * Copyright (c) 2002-2003, Yannick Verschueren 00006 * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe 00007 * Copyright (c) 2005, Herve Drolon, FreeImage Team 00008 * All rights reserved. 00009 * 00010 * Redistribution and use in source and binary forms, with or without 00011 * modification, are permitted provided that the following conditions 00012 * are met: 00013 * 1. Redistributions of source code must retain the above copyright 00014 * notice, this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright 00016 * notice, this list of conditions and the following disclaimer in the 00017 * documentation and/or other materials provided with the distribution. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00029 * POSSIBILITY OF SUCH DAMAGE. 00030 */ 00031 00032 #ifndef __MQC_H 00033 #define __MQC_H 00034 00044 00048 typedef struct opj_mqc_state { 00050 unsigned int qeval; 00052 int mps; 00054 struct opj_mqc_state *nmps; 00056 struct opj_mqc_state *nlps; 00057 } opj_mqc_state_t; 00058 00059 #define MQC_NUMCTXS 19 00060 00064 typedef struct opj_mqc { 00065 unsigned int c; 00066 unsigned int a; 00067 unsigned int ct; 00068 unsigned char *bp; 00069 unsigned char *start; 00070 unsigned char *end; 00071 opj_mqc_state_t *ctxs[MQC_NUMCTXS]; 00072 opj_mqc_state_t **curctx; 00073 #ifdef MQC_PERF_OPT 00074 unsigned char *buffer; 00075 #endif 00076 } opj_mqc_t; 00077 00080 /* ----------------------------------------------------------------------- */ 00085 opj_mqc_t* mqc_create(void); 00090 void mqc_destroy(opj_mqc_t *mqc); 00096 int mqc_numbytes(opj_mqc_t *mqc); 00102 void mqc_resetstates(opj_mqc_t *mqc); 00110 void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob); 00116 void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp); 00122 #define mqc_setcurctx(mqc, ctxno) (mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)] 00123 00128 void mqc_encode(opj_mqc_t *mqc, int d); 00133 void mqc_flush(opj_mqc_t *mqc); 00140 void mqc_bypass_init_enc(opj_mqc_t *mqc); 00148 void mqc_bypass_enc(opj_mqc_t *mqc, int d); 00155 int mqc_bypass_flush_enc(opj_mqc_t *mqc); 00160 void mqc_reset_enc(opj_mqc_t *mqc); 00166 int mqc_restart_enc(opj_mqc_t *mqc); 00171 void mqc_restart_init_enc(opj_mqc_t *mqc); 00176 void mqc_erterm_enc(opj_mqc_t *mqc); 00181 void mqc_segmark_enc(opj_mqc_t *mqc); 00188 void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len); 00194 int mqc_decode(opj_mqc_t *const mqc); 00195 /* ----------------------------------------------------------------------- */ 00199 00200 #endif /* __MQC_H */