1 /* 2 * The copyright in this software is being made available under the 2-clauses 3 * BSD License, included below. This software may be subject to other third 4 * party and contributor rights, including patent rights, and no such rights 5 * are granted under this license. 6 * 7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium 8 * Copyright (c) 2002-2014, Professor Benoit Macq 9 * Copyright (c) 2001-2003, David Janssens 10 * Copyright (c) 2002-2003, Yannick Verschueren 11 * Copyright (c) 2003-2007, Francois-Olivier Devaux 12 * Copyright (c) 2003-2014, Antonin Descampe 13 * Copyright (c) 2005, Herve Drolon, FreeImage Team 14 * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <[email protected]> 15 * All rights reserved. 16 * 17 * Redistribution and use in source and binary forms, with or without 18 * modification, are permitted provided that the following conditions 19 * are met: 20 * 1. Redistributions of source code must retain the above copyright 21 * notice, this list of conditions and the following disclaimer. 22 * 2. Redistributions in binary form must reproduce the above copyright 23 * notice, this list of conditions and the following disclaimer in the 24 * documentation and/or other materials provided with the distribution. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 27 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 30 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39 #ifndef OPJ_MQC_H 40 #define OPJ_MQC_H 41 42 #include "opj_common.h" 43 44 /** 45 @file mqc.h 46 @brief Implementation of an MQ-Coder (MQC) 47 48 The functions in MQC.C have for goal to realize the MQ-coder operations. The functions 49 in MQC.C are used by some function in T1.C. 50 */ 51 52 /** @defgroup MQC MQC - Implementation of an MQ-Coder */ 53 /*@{*/ 54 55 /** 56 This struct defines the state of a context. 57 */ 58 typedef struct opj_mqc_state { 59 /** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */ 60 OPJ_UINT32 qeval; 61 /** the Most Probable Symbol (0 or 1) */ 62 OPJ_UINT32 mps; 63 /** next state if the next encoded symbol is the MPS */ 64 const struct opj_mqc_state *nmps; 65 /** next state if the next encoded symbol is the LPS */ 66 const struct opj_mqc_state *nlps; 67 } opj_mqc_state_t; 68 69 #define MQC_NUMCTXS 19 70 71 /** 72 MQ coder 73 */ 74 typedef struct opj_mqc { 75 /** temporary buffer where bits are coded or decoded */ 76 OPJ_UINT32 c; 77 /** only used by MQ decoder */ 78 OPJ_UINT32 a; 79 /** number of bits already read or free to write */ 80 OPJ_UINT32 ct; 81 /* only used by decoder, to count the number of times a terminating 0xFF >0x8F marker is read */ 82 OPJ_UINT32 end_of_byte_stream_counter; 83 /** pointer to the current position in the buffer */ 84 OPJ_BYTE *bp; 85 /** pointer to the start of the buffer */ 86 OPJ_BYTE *start; 87 /** pointer to the end of the buffer */ 88 OPJ_BYTE *end; 89 /** Array of contexts */ 90 const opj_mqc_state_t *ctxs[MQC_NUMCTXS]; 91 /** Active context */ 92 const opj_mqc_state_t **curctx; 93 /* lut_ctxno_zc shifted by (1 << 9) * bandno */ 94 const OPJ_BYTE* lut_ctxno_zc_orient; 95 /** Original value of the 2 bytes at end[0] and end[1] */ 96 OPJ_BYTE backup[OPJ_COMMON_CBLK_DATA_EXTRA]; 97 } opj_mqc_t; 98 99 #define BYPASS_CT_INIT 0xDEADBEEF 100 101 #include "mqc_inl.h" 102 103 /** @name Exported functions */ 104 /*@{*/ 105 /* ----------------------------------------------------------------------- */ 106 107 /** 108 Return the number of bytes written/read since initialisation 109 @param mqc MQC handle 110 @return Returns the number of bytes already encoded 111 */ 112 OPJ_UINT32 opj_mqc_numbytes(opj_mqc_t *mqc); 113 /** 114 Reset the states of all the context of the coder/decoder 115 (each context is set to a state where 0 and 1 are more or less equiprobable) 116 @param mqc MQC handle 117 */ 118 void opj_mqc_resetstates(opj_mqc_t *mqc); 119 /** 120 Set the state of a particular context 121 @param mqc MQC handle 122 @param ctxno Number that identifies the context 123 @param msb The MSB of the new state of the context 124 @param prob Number that identifies the probability of the symbols for the new state of the context 125 */ 126 void opj_mqc_setstate(opj_mqc_t *mqc, OPJ_UINT32 ctxno, OPJ_UINT32 msb, 127 OPJ_INT32 prob); 128 /** 129 Initialize the encoder 130 @param mqc MQC handle 131 @param bp Pointer to the start of the buffer where the bytes will be written 132 */ 133 void opj_mqc_init_enc(opj_mqc_t *mqc, OPJ_BYTE *bp); 134 /** 135 Set the current context used for coding/decoding 136 @param mqc MQC handle 137 @param ctxno Number that identifies the context 138 */ 139 #define opj_mqc_setcurctx(mqc, ctxno) (mqc)->curctx = &(mqc)->ctxs[(OPJ_UINT32)(ctxno)] 140 141 /** 142 Flush the encoder, so that all remaining data is written 143 @param mqc MQC handle 144 */ 145 void opj_mqc_flush(opj_mqc_t *mqc); 146 /** 147 BYPASS mode switch, initialization operation. 148 JPEG 2000 p 505. 149 @param mqc MQC handle 150 */ 151 void opj_mqc_bypass_init_enc(opj_mqc_t *mqc); 152 153 /** Return number of extra bytes to add to opj_mqc_numbytes() for the² 154 size of a non-terminating BYPASS pass 155 @param mqc MQC handle 156 @param erterm 1 if ERTERM is enabled, 0 otherwise 157 */ 158 OPJ_UINT32 opj_mqc_bypass_get_extra_bytes(opj_mqc_t *mqc, OPJ_BOOL erterm); 159 160 /** 161 BYPASS mode switch, coding operation. 162 JPEG 2000 p 505. 163 @param mqc MQC handle 164 @param d The symbol to be encoded (0 or 1) 165 */ 166 void opj_mqc_bypass_enc(opj_mqc_t *mqc, OPJ_UINT32 d); 167 /** 168 BYPASS mode switch, flush operation 169 @param mqc MQC handle 170 @param erterm 1 if ERTERM is enabled, 0 otherwise 171 */ 172 void opj_mqc_bypass_flush_enc(opj_mqc_t *mqc, OPJ_BOOL erterm); 173 /** 174 RESET mode switch 175 @param mqc MQC handle 176 */ 177 void opj_mqc_reset_enc(opj_mqc_t *mqc); 178 179 #ifdef notdef 180 /** 181 RESTART mode switch (TERMALL) 182 @param mqc MQC handle 183 @return Returns 1 (always) 184 */ 185 OPJ_UINT32 opj_mqc_restart_enc(opj_mqc_t *mqc); 186 #endif 187 188 /** 189 RESTART mode switch (TERMALL) reinitialisation 190 @param mqc MQC handle 191 */ 192 void opj_mqc_restart_init_enc(opj_mqc_t *mqc); 193 /** 194 ERTERM mode switch (PTERM) 195 @param mqc MQC handle 196 */ 197 void opj_mqc_erterm_enc(opj_mqc_t *mqc); 198 /** 199 SEGMARK mode switch (SEGSYM) 200 @param mqc MQC handle 201 */ 202 void opj_mqc_segmark_enc(opj_mqc_t *mqc); 203 204 /** 205 Initialize the decoder for MQ decoding. 206 207 opj_mqc_finish_dec() must be absolutely called after finishing the decoding 208 passes, so as to restore the bytes temporarily overwritten. 209 210 @param mqc MQC handle 211 @param bp Pointer to the start of the buffer from which the bytes will be read 212 Note that OPJ_COMMON_CBLK_DATA_EXTRA bytes at the end of the buffer 213 will be temporarily overwritten with an artificial 0xFF 0xFF marker. 214 (they will be backuped in the mqc structure to be restored later) 215 So bp must be at least len + OPJ_COMMON_CBLK_DATA_EXTRA large, and 216 writable. 217 @param len Length of the input buffer 218 @param extra_writable_bytes Indicate how many bytes after len are writable. 219 This is to indicate your consent that bp must be 220 large enough. 221 */ 222 void opj_mqc_init_dec(opj_mqc_t *mqc, OPJ_BYTE *bp, OPJ_UINT32 len, 223 OPJ_UINT32 extra_writable_bytes); 224 225 /** 226 Initialize the decoder for RAW decoding. 227 228 opj_mqc_finish_dec() must be absolutely called after finishing the decoding 229 passes, so as to restore the bytes temporarily overwritten. 230 231 @param mqc MQC handle 232 @param bp Pointer to the start of the buffer from which the bytes will be read 233 Note that OPJ_COMMON_CBLK_DATA_EXTRA bytes at the end of the buffer 234 will be temporarily overwritten with an artificial 0xFF 0xFF marker. 235 (they will be backuped in the mqc structure to be restored later) 236 So bp must be at least len + OPJ_COMMON_CBLK_DATA_EXTRA large, and 237 writable. 238 @param len Length of the input buffer 239 @param extra_writable_bytes Indicate how many bytes after len are writable. 240 This is to indicate your consent that bp must be 241 large enough. 242 */ 243 void opj_mqc_raw_init_dec(opj_mqc_t *mqc, OPJ_BYTE *bp, OPJ_UINT32 len, 244 OPJ_UINT32 extra_writable_bytes); 245 246 247 /** 248 Terminate RAW/MQC decoding 249 250 This restores the bytes temporarily overwritten by opj_mqc_init_dec()/ 251 opj_mqc_raw_init_dec() 252 253 @param mqc MQC handle 254 */ 255 void opq_mqc_finish_dec(opj_mqc_t *mqc); 256 257 /** 258 Decode a symbol 259 @param mqc MQC handle 260 @return Returns the decoded symbol (0 or 1) 261 */ 262 /*static INLINE OPJ_UINT32 opj_mqc_decode(opj_mqc_t * const mqc);*/ 263 /* ----------------------------------------------------------------------- */ 264 /*@}*/ 265 266 /*@}*/ 267 268 #endif /* OPJ_MQC_H */ 269