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 } opj_mqc_t; 00074 00077 /* ----------------------------------------------------------------------- */ 00082 opj_mqc_t* mqc_create(void); 00087 void mqc_destroy(opj_mqc_t *mqc); 00093 int mqc_numbytes(opj_mqc_t *mqc); 00099 void mqc_resetstates(opj_mqc_t *mqc); 00107 void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob); 00113 void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp); 00119 #define mqc_setcurctx(mqc, ctxno) (mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)] 00120 00125 void mqc_encode(opj_mqc_t *mqc, int d); 00130 void mqc_flush(opj_mqc_t *mqc); 00137 void mqc_bypass_init_enc(opj_mqc_t *mqc); 00145 void mqc_bypass_enc(opj_mqc_t *mqc, int d); 00152 int mqc_bypass_flush_enc(opj_mqc_t *mqc); 00157 void mqc_reset_enc(opj_mqc_t *mqc); 00163 int mqc_restart_enc(opj_mqc_t *mqc); 00168 void mqc_restart_init_enc(opj_mqc_t *mqc); 00173 void mqc_erterm_enc(opj_mqc_t *mqc); 00178 void mqc_segmark_enc(opj_mqc_t *mqc); 00185 void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len); 00191 int mqc_decode(opj_mqc_t *mqc); 00192 /* ----------------------------------------------------------------------- */ 00196 00197 #endif /* __MQC_H */