PageRenderTime 20ms CodeModel.GetById 14ms app.highlight 3ms RepoModel.GetById 2ms app.codeStats 0ms

/src/FreeImage/Source/LibOpenJPEG/mqc.h

https://bitbucket.org/cabalistic/ogredeps/
C++ Header | 200 lines | 42 code | 8 blank | 150 comment | 0 complexity | 23df9dcb4ece69dfec926c8abbd6a6e7 MD5 | raw file
  1/*
  2 * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
  3 * Copyright (c) 2002-2007, Professor Benoit Macq
  4 * Copyright (c) 2001-2003, David Janssens
  5 * Copyright (c) 2002-2003, Yannick Verschueren
  6 * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
  7 * Copyright (c) 2005, Herve Drolon, FreeImage Team
  8 * All rights reserved.
  9 *
 10 * Redistribution and use in source and binary forms, with or without
 11 * modification, are permitted provided that the following conditions
 12 * are met:
 13 * 1. Redistributions of source code must retain the above copyright
 14 *    notice, this list of conditions and the following disclaimer.
 15 * 2. Redistributions in binary form must reproduce the above copyright
 16 *    notice, this list of conditions and the following disclaimer in the
 17 *    documentation and/or other materials provided with the distribution.
 18 *
 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 22 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 29 * POSSIBILITY OF SUCH DAMAGE.
 30 */
 31
 32#ifndef __MQC_H
 33#define __MQC_H
 34/**
 35@file mqc.h
 36@brief Implementation of an MQ-Coder (MQC)
 37
 38The functions in MQC.C have for goal to realize the MQ-coder operations. The functions
 39in MQC.C are used by some function in T1.C.
 40*/
 41
 42/** @defgroup MQC MQC - Implementation of an MQ-Coder */
 43/*@{*/
 44
 45/**
 46This struct defines the state of a context.
 47*/
 48typedef struct opj_mqc_state {
 49	/** the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff) */
 50	unsigned int qeval;
 51	/** the Most Probable Symbol (0 or 1) */
 52	int mps;
 53	/** next state if the next encoded symbol is the MPS */
 54	struct opj_mqc_state *nmps;
 55	/** next state if the next encoded symbol is the LPS */
 56	struct opj_mqc_state *nlps;
 57} opj_mqc_state_t;
 58
 59#define MQC_NUMCTXS 19
 60
 61/**
 62MQ coder
 63*/
 64typedef struct opj_mqc {
 65	unsigned int c;
 66	unsigned int a;
 67	unsigned int ct;
 68	unsigned char *bp;
 69	unsigned char *start;
 70	unsigned char *end;
 71	opj_mqc_state_t *ctxs[MQC_NUMCTXS];
 72	opj_mqc_state_t **curctx;
 73#ifdef MQC_PERF_OPT
 74	unsigned char *buffer;
 75#endif
 76} opj_mqc_t;
 77
 78/** @name Exported functions */
 79/*@{*/
 80/* ----------------------------------------------------------------------- */
 81/**
 82Create a new MQC handle 
 83@return Returns a new MQC handle if successful, returns NULL otherwise
 84*/
 85opj_mqc_t* mqc_create(void);
 86/**
 87Destroy a previously created MQC handle
 88@param mqc MQC handle to destroy
 89*/
 90void mqc_destroy(opj_mqc_t *mqc);
 91/**
 92Return the number of bytes written/read since initialisation
 93@param mqc MQC handle
 94@return Returns the number of bytes already encoded
 95*/
 96int mqc_numbytes(opj_mqc_t *mqc);
 97/**
 98Reset the states of all the context of the coder/decoder 
 99(each context is set to a state where 0 and 1 are more or less equiprobable)
100@param mqc MQC handle
101*/
102void mqc_resetstates(opj_mqc_t *mqc);
103/**
104Set the state of a particular context
105@param mqc MQC handle
106@param ctxno Number that identifies the context
107@param msb The MSB of the new state of the context
108@param prob Number that identifies the probability of the symbols for the new state of the context
109*/
110void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob);
111/**
112Initialize the encoder
113@param mqc MQC handle
114@param bp Pointer to the start of the buffer where the bytes will be written
115*/
116void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp);
117/**
118Set the current context used for coding/decoding
119@param mqc MQC handle
120@param ctxno Number that identifies the context
121*/
122#define mqc_setcurctx(mqc, ctxno)	(mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)]
123/**
124Encode a symbol using the MQ-coder
125@param mqc MQC handle
126@param d The symbol to be encoded (0 or 1)
127*/
128void mqc_encode(opj_mqc_t *mqc, int d);
129/**
130Flush the encoder, so that all remaining data is written
131@param mqc MQC handle
132*/
133void mqc_flush(opj_mqc_t *mqc);
134/**
135BYPASS mode switch, initialization operation. 
136JPEG 2000 p 505. 
137<h2>Not fully implemented and tested !!</h2>
138@param mqc MQC handle
139*/
140void mqc_bypass_init_enc(opj_mqc_t *mqc);
141/**
142BYPASS mode switch, coding operation. 
143JPEG 2000 p 505. 
144<h2>Not fully implemented and tested !!</h2>
145@param mqc MQC handle
146@param d The symbol to be encoded (0 or 1)
147*/
148void mqc_bypass_enc(opj_mqc_t *mqc, int d);
149/**
150BYPASS mode switch, flush operation
151<h2>Not fully implemented and tested !!</h2>
152@param mqc MQC handle
153@return Returns 1 (always)
154*/
155int mqc_bypass_flush_enc(opj_mqc_t *mqc);
156/**
157RESET mode switch
158@param mqc MQC handle
159*/
160void mqc_reset_enc(opj_mqc_t *mqc);
161/**
162RESTART mode switch (TERMALL)
163@param mqc MQC handle
164@return Returns 1 (always)
165*/
166int mqc_restart_enc(opj_mqc_t *mqc);
167/**
168RESTART mode switch (TERMALL) reinitialisation
169@param mqc MQC handle
170*/
171void mqc_restart_init_enc(opj_mqc_t *mqc);
172/**
173ERTERM mode switch (PTERM)
174@param mqc MQC handle
175*/
176void mqc_erterm_enc(opj_mqc_t *mqc);
177/**
178SEGMARK mode switch (SEGSYM)
179@param mqc MQC handle
180*/
181void mqc_segmark_enc(opj_mqc_t *mqc);
182/**
183Initialize the decoder
184@param mqc MQC handle
185@param bp Pointer to the start of the buffer from which the bytes will be read
186@param len Length of the input buffer
187*/
188void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len);
189/**
190Decode a symbol
191@param mqc MQC handle
192@return Returns the decoded symbol (0 or 1)
193*/
194int mqc_decode(opj_mqc_t *const mqc);
195/* ----------------------------------------------------------------------- */
196/*@}*/
197
198/*@}*/
199
200#endif /* __MQC_H */