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) {