OpenJPEG  1.5.1
mqc.h
Go to the documentation of this 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 
44 
48 typedef struct opj_mqc_state {
50  unsigned int qeval;
52  int mps;
58 
59 #define MQC_NUMCTXS 19
60 
64 typedef 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;
73 #ifdef MQC_PERF_OPT
74  unsigned char *buffer;
75 #endif
76 } opj_mqc_t;
77 
80 /* ----------------------------------------------------------------------- */
85 opj_mqc_t* mqc_create(void);
90 void mqc_destroy(opj_mqc_t *mqc);
96 int mqc_numbytes(opj_mqc_t *mqc);
102 void mqc_resetstates(opj_mqc_t *mqc);
110 void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob);
116 void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp);
122 #define mqc_setcurctx(mqc, ctxno) (mqc)->curctx = &(mqc)->ctxs[(int)(ctxno)]
123 
128 void mqc_encode(opj_mqc_t *mqc, int d);
133 void mqc_flush(opj_mqc_t *mqc);
140 void mqc_bypass_init_enc(opj_mqc_t *mqc);
148 void mqc_bypass_enc(opj_mqc_t *mqc, int d);
160 void mqc_reset_enc(opj_mqc_t *mqc);
166 int mqc_restart_enc(opj_mqc_t *mqc);
176 void mqc_erterm_enc(opj_mqc_t *mqc);
181 void mqc_segmark_enc(opj_mqc_t *mqc);
188 void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len);
194 int mqc_decode(opj_mqc_t *const mqc);
195 /* ----------------------------------------------------------------------- */
199 
200 #endif /* __MQC_H */
void mqc_flush(opj_mqc_t *mqc)
Flush the encoder, so that all remaining data is written.
Definition: mqc.c:398
void mqc_encode(opj_mqc_t *mqc, int d)
Encode a symbol using the MQ-coder.
Definition: mqc.c:390
unsigned char * start
Definition: mqc.h:69
opj_mqc_state_t ** curctx
Definition: mqc.h:72
#define MQC_NUMCTXS
Definition: mqc.h:59
void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
Initialize the decoder.
Definition: mqc.c:511
unsigned int ct
Definition: mqc.h:67
void mqc_destroy(opj_mqc_t *mqc)
Destroy a previously created MQC handle.
Definition: mqc.c:363
opj_mqc_state_t * ctxs[MQC_NUMCTXS]
Definition: mqc.h:71
This struct defines the state of a context.
Definition: mqc.h:48
void mqc_restart_init_enc(opj_mqc_t *mqc)
RESTART mode switch (TERMALL) reinitialisation.
Definition: mqc.c:475
unsigned int c
Definition: mqc.h:65
void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
Set the state of a particular context.
Definition: mqc.c:588
struct opj_mqc_state * nmps
next state if the next encoded symbol is the MPS
Definition: mqc.h:54
unsigned int qeval
the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff)
Definition: mqc.h:50
void mqc_bypass_enc(opj_mqc_t *mqc, int d)
BYPASS mode switch, coding operation.
Definition: mqc.c:418
struct opj_mqc opj_mqc_t
MQ coder.
int mps
the Most Probable Symbol (0 or 1)
Definition: mqc.h:52
int mqc_numbytes(opj_mqc_t *mqc)
Return the number of bytes written/read since initialisation.
Definition: mqc.c:374
unsigned int a
Definition: mqc.h:66
void mqc_erterm_enc(opj_mqc_t *mqc)
ERTERM mode switch (PTERM)
Definition: mqc.c:487
void mqc_resetstates(opj_mqc_t *mqc)
Reset the states of all the context of the coder/decoder (each context is set to a state where 0 and ...
Definition: mqc.c:581
unsigned char * bp
Definition: mqc.h:68
struct opj_mqc_state opj_mqc_state_t
This struct defines the state of a context.
void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
Initialize the encoder.
Definition: mqc.c:378
void mqc_segmark_enc(opj_mqc_t *mqc)
SEGMARK mode switch (SEGSYM)
Definition: mqc.c:502
struct opj_mqc_state * nlps
next state if the next encoded symbol is the LPS
Definition: mqc.h:56
int mqc_bypass_flush_enc(opj_mqc_t *mqc)
BYPASS mode switch, flush operation.
Definition: mqc.c:432
unsigned char * end
Definition: mqc.h:70
MQ coder.
Definition: mqc.h:64
void mqc_reset_enc(opj_mqc_t *mqc)
RESET mode switch.
Definition: mqc.c:452
int mqc_restart_enc(opj_mqc_t *mqc)
RESTART mode switch (TERMALL)
Definition: mqc.c:459
opj_mqc_t * mqc_create(void)
Create a new MQC handle.
Definition: mqc.c:355
void mqc_bypass_init_enc(opj_mqc_t *mqc)
BYPASS mode switch, initialization operation.
Definition: mqc.c:410
int mqc_decode(opj_mqc_t *const mqc)
Decode a symbol.
Definition: mqc.c:562