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 */
opj_mqc::end
unsigned char * end
Definition: mqc.h:70
opj_mqc_state_t
struct opj_mqc_state opj_mqc_state_t
This struct defines the state of a context.
mqc_bypass_flush_enc
int mqc_bypass_flush_enc(opj_mqc_t *mqc)
BYPASS mode switch, flush operation.
Definition: mqc.c:432
opj_mqc::c
unsigned int c
Definition: mqc.h:65
mqc_init_enc
void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
Initialize the encoder.
Definition: mqc.c:378
mqc_flush
void mqc_flush(opj_mqc_t *mqc)
Flush the encoder, so that all remaining data is written.
Definition: mqc.c:398
opj_mqc
MQ coder.
Definition: mqc.h:64
opj_free
#define opj_free(m)
Deallocates or frees a memory block.
Definition: opj_malloc.h:152
mqc_mpsexchange
static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc)
FIXME: documentation ???
Definition: mqc.c:273
opj_malloc
#define opj_malloc(size)
Allocate an uninitialized memory block.
Definition: opj_malloc.h:51
T1_CTXNO_UNI
#define T1_CTXNO_UNI
Definition: t1.h:78
mqc_init_dec
void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
Initialize the decoder.
Definition: mqc.c:511
opj_mqc_state::nmps
struct opj_mqc_state * nmps
next state if the next encoded symbol is the MPS
Definition: mqc.h:54
mqc_bypass_init_enc
void mqc_bypass_init_enc(opj_mqc_t *mqc)
BYPASS mode switch, initialization operation.
Definition: mqc.c:410
mqc_bytein
static INLINE void mqc_bytein(opj_mqc_t *const mqc)
Input a byte.
Definition: mqc.c:309
T1_CTXNO_AGG
#define T1_CTXNO_AGG
Definition: t1.h:77
T1_CTXNO_ZC
#define T1_CTXNO_ZC
Definition: t1.h:74
opj_mqc::a
unsigned int a
Definition: mqc.h:66
mqc_destroy
void mqc_destroy(opj_mqc_t *mqc)
Destroy a previously created MQC handle.
Definition: mqc.c:363
mqc_erterm_enc
void mqc_erterm_enc(opj_mqc_t *mqc)
ERTERM mode switch (PTERM)
Definition: mqc.c:487
mqc_decode
int mqc_decode(opj_mqc_t *const mqc)
Decode a symbol.
Definition: mqc.c:562
opj_mqc::curctx
opj_mqc_state_t ** curctx
Definition: mqc.h:72
mqc_init_dec
void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
Initialize the decoder.
Definition: mqc.c:511
mqc_restart_enc
int mqc_restart_enc(opj_mqc_t *mqc)
RESTART mode switch (TERMALL)
Definition: mqc.c:459
opj_mqc_state::nlps
struct opj_mqc_state * nlps
next state if the next encoded symbol is the LPS
Definition: mqc.h:56
mqc_lpsexchange
static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc)
FIXME: documentation ???
Definition: mqc.c:286
mqc_restart_init_enc
void mqc_restart_init_enc(opj_mqc_t *mqc)
RESTART mode switch (TERMALL) reinitialisation.
Definition: mqc.c:475
mqc_restart_init_enc
void mqc_restart_init_enc(opj_mqc_t *mqc)
RESTART mode switch (TERMALL) reinitialisation.
Definition: mqc.c:475
opj_realloc
#define opj_realloc(m, s)
Reallocate memory blocks.
Definition: opj_malloc.h:142
mqc_states
static opj_mqc_state_t mqc_states[47 *2]
Definition: mqc.c:95
mqc_bypass_flush_enc
int mqc_bypass_flush_enc(opj_mqc_t *mqc)
BYPASS mode switch, flush operation.
Definition: mqc.c:432
mqc_renormd
static INLINE void mqc_renormd(opj_mqc_t *const mqc)
Renormalize mqc->a and mqc->c while decoding.
Definition: mqc.c:338
opj_includes.h
mqc_codemps
static void mqc_codemps(opj_mqc_t *mqc)
Encode the most probable symbol.
Definition: mqc.c:239
mqc_create
opj_mqc_t * mqc_create(void)
Create a new MQC handle.
Definition: mqc.c:355
mqc_restart_enc
int mqc_restart_enc(opj_mqc_t *mqc)
RESTART mode switch (TERMALL)
Definition: mqc.c:459
mqc_reset_enc
void mqc_reset_enc(opj_mqc_t *mqc)
RESET mode switch.
Definition: mqc.c:452
mqc_resetstates
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
mqc_segmark_enc
void mqc_segmark_enc(opj_mqc_t *mqc)
SEGMARK mode switch (SEGSYM)
Definition: mqc.c:502
mqc_destroy
void mqc_destroy(opj_mqc_t *mqc)
Destroy a previously created MQC handle.
Definition: mqc.c:363
mqc_renorme
static void mqc_renorme(opj_mqc_t *mqc)
Renormalize mqc->a and mqc->c while encoding, so that mqc->a stays between 0x8000 and 0x10000.
Definition: mqc.c:228
mqc_erterm_enc
void mqc_erterm_enc(opj_mqc_t *mqc)
ERTERM mode switch (PTERM)
Definition: mqc.c:487
mqc_decode
int mqc_decode(opj_mqc_t *const mqc)
Decode a symbol.
Definition: mqc.c:562
mqc_encode
void mqc_encode(opj_mqc_t *mqc, int d)
Encode a symbol using the MQ-coder.
Definition: mqc.c:390
opj_mqc::ctxs
opj_mqc_state_t * ctxs[MQC_NUMCTXS]
Definition: mqc.h:71
mqc_setstate
void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
Set the state of a particular context.
Definition: mqc.c:588
mqc_codelps
static void mqc_codelps(opj_mqc_t *mqc)
Encode the most least symbol.
Definition: mqc.c:254
mqc_numbytes
int mqc_numbytes(opj_mqc_t *mqc)
Return the number of bytes written/read since initialisation.
Definition: mqc.c:374
mqc_bypass_enc
void mqc_bypass_enc(opj_mqc_t *mqc, int d)
BYPASS mode switch, coding operation.
Definition: mqc.c:418
mqc_encode
void mqc_encode(opj_mqc_t *mqc, int d)
Encode a symbol using the MQ-coder.
Definition: mqc.c:390
opj_mqc::bp
unsigned char * bp
Definition: mqc.h:68
mqc_setstate
void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
Set the state of a particular context.
Definition: mqc.c:588
mqc_create
opj_mqc_t * mqc_create(void)
Create a new MQC handle.
Definition: mqc.c:355
mqc_bypass_init_enc
void mqc_bypass_init_enc(opj_mqc_t *mqc)
BYPASS mode switch, initialization operation.
Definition: mqc.c:410
mqc_reset_enc
void mqc_reset_enc(opj_mqc_t *mqc)
RESET mode switch.
Definition: mqc.c:452
mqc_segmark_enc
void mqc_segmark_enc(opj_mqc_t *mqc)
SEGMARK mode switch (SEGSYM)
Definition: mqc.c:502
mqc_numbytes
int mqc_numbytes(opj_mqc_t *mqc)
Return the number of bytes written/read since initialisation.
Definition: mqc.c:374
mqc_byteout
static void mqc_byteout(opj_mqc_t *mqc)
Output a byte, doing bit-stuffing if necessary.
Definition: mqc.c:198
INLINE
#define INLINE
Definition: opj_includes.h:75
opj_mqc_state::mps
int mps
the Most Probable Symbol (0 or 1)
Definition: mqc.h:52
opj_mqc::ct
unsigned int ct
Definition: mqc.h:67
opj_mqc_state
This struct defines the state of a context.
Definition: mqc.h:48
mqc_setbits
static void mqc_setbits(opj_mqc_t *mqc)
Fill mqc->c with 1's for flushing.
Definition: mqc.c:265
opj_mqc_state::qeval
unsigned int qeval
the probability of the Least Probable Symbol (0.75->0x8000, 1.5->0xffff)
Definition: mqc.h:50
opj_mqc::start
unsigned char * start
Definition: mqc.h:69
mqc_bypass_enc
void mqc_bypass_enc(opj_mqc_t *mqc, int d)
BYPASS mode switch, coding operation.
Definition: mqc.c:418
opj_mqc_t
struct opj_mqc opj_mqc_t
MQ coder.
mqc_resetstates
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
mqc_setcurctx
#define mqc_setcurctx(mqc, ctxno)
Set the current context used for coding/decoding.
Definition: mqc.h:122
MQC_NUMCTXS
#define MQC_NUMCTXS
Definition: mqc.h:59
mqc_init_enc
void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
Initialize the encoder.
Definition: mqc.c:378
mqc_flush
void mqc_flush(opj_mqc_t *mqc)
Flush the encoder, so that all remaining data is written.
Definition: mqc.c:398