diff -urN -x '*.orig' -x '*.rej' -x '*~' -x '.*' OpenJPEG.orig/libopenjpeg/mqc.c OpenJPEG.patched/libopenjpeg/mqc.c
--- OpenJPEG.orig/libopenjpeg/mqc.c 2007-08-06 16:16:00.000000000 -0500
+++ OpenJPEG.patched/libopenjpeg/mqc.c 2007-08-06 19:07:28.000000000 -0500
@@ -68,13 +68,13 @@
@param mqc MQC handle
@return
*/
-static int mqc_mpsexchange(opj_mqc_t *mqc);
+//static int mqc_mpsexchange(opj_mqc_t *mqc);
/**
FIXME: documentation ???
@param mqc MQC handle
@return
*/
-static int mqc_lpsexchange(opj_mqc_t *mqc);
+//static int mqc_lpsexchange(opj_mqc_t *mqc);
/**
Input a byte
@param mqc MQC handle
@@ -271,33 +271,22 @@
}
}
+/*
static int mqc_mpsexchange(opj_mqc_t *mqc) {
- int d;
- if (mqc->a < (*mqc->curctx)->qeval) {
- d = 1 - (*mqc->curctx)->mps;
- *mqc->curctx = (*mqc->curctx)->nlps;
- } else {
- d = (*mqc->curctx)->mps;
- *mqc->curctx = (*mqc->curctx)->nmps;
- }
-
- return d;
+ int d = (*mqc->curctx)->mps;
+ int tmp = (mqc->a < (*mqc->curctx)->qeval);
+ *mqc->curctx = tmp ? (*mqc->curctx)->nlps : (*mqc->curctx)->nmps;
+ return tmp ^ d;
}
static int mqc_lpsexchange(opj_mqc_t *mqc) {
- int d;
- if (mqc->a < (*mqc->curctx)->qeval) {
- mqc->a = (*mqc->curctx)->qeval;
- d = (*mqc->curctx)->mps;
- *mqc->curctx = (*mqc->curctx)->nmps;
- } else {
- mqc->a = (*mqc->curctx)->qeval;
- d = 1 - (*mqc->curctx)->mps;
- *mqc->curctx = (*mqc->curctx)->nlps;
- }
-
- return d;
+ int d = (*mqc->curctx)->mps;
+ int tmp = !(mqc->a < (*mqc->curctx)->qeval);
+ mqc->a = (*mqc->curctx)->qeval;
+ *mqc->curctx = tmp ? (*mqc->curctx)->nlps : (*mqc->curctx)->nmps;
+ return tmp ^ d;
}
+*/
static void mqc_bytein(opj_mqc_t *mqc) {
if (mqc->bp != mqc->end) {
@@ -506,22 +495,27 @@
}
int mqc_decode(opj_mqc_t *mqc) {
- int d;
unsigned int qeval = (*mqc->curctx)->qeval;
mqc->a -= qeval;
+ bool tmp = (mqc->a < qeval);
qeval <<= 16;
- if (mqc->c < qeval) {
- d = mqc_lpsexchange(mqc);
- } else {
+ if (mqc->c >= qeval) {
mqc->c -= qeval;
- if ((mqc->a & 0x8000) == 0) {
- d = mqc_mpsexchange(mqc);
- } else {
+ if (mqc->a & 0x8000) {
return (*mqc->curctx)->mps;
}
+ }else{
+ tmp = !tmp;
+ mqc->a = (*mqc->curctx)->qeval;
}
+
+ opj_mqc_state_t* nmps = (*mqc->curctx)->nmps;
+ opj_mqc_state_t* nlps = (*mqc->curctx)->nlps;
+ int mps = (*mqc->curctx)->mps ^ tmp;
+ *mqc->curctx = tmp ? nlps : nmps;
+
mqc_renormd(mqc);
- return d;
+ return mps;
}
void mqc_resetstates(opj_mqc_t *mqc) {