From bfdcca770b082fe6d831e35737d416658d1394e5 Mon Sep 17 00:00:00 2001 From: Antonin Descampe Date: Fri, 3 Mar 2017 17:00:57 +0100 Subject: [PATCH] PR #894 (without BOOK implementation) --- src/lib/openjp2/mqc.c | 4 ++++ src/lib/openjp2/t1.c | 11 ++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lib/openjp2/mqc.c b/src/lib/openjp2/mqc.c index 7119c3a5..f5523ffa 100644 --- a/src/lib/openjp2/mqc.c +++ b/src/lib/openjp2/mqc.c @@ -324,10 +324,12 @@ void opj_mqc_flush(opj_mqc_t *mqc) { if (*mqc->bp != 0xff) { mqc->bp++; + *mqc->bp = 0; } } void opj_mqc_bypass_init_enc(opj_mqc_t *mqc) { + opj_mqc_byteout(mqc); mqc->c = 0; mqc->ct = 8; /*if (*mqc->bp == 0xff) { @@ -362,6 +364,8 @@ OPJ_UINT32 opj_mqc_bypass_flush_enc(opj_mqc_t *mqc) { } mqc->bp++; *mqc->bp = (OPJ_BYTE)mqc->c; + mqc->bp++; + *mqc->bp = 0; mqc->ct = 8; mqc->c = 0; } diff --git a/src/lib/openjp2/t1.c b/src/lib/openjp2/t1.c index 453d2908..d4d4c73f 100644 --- a/src/lib/openjp2/t1.c +++ b/src/lib/openjp2/t1.c @@ -2102,9 +2102,9 @@ static void opj_t1_encode_cblk(opj_t1_t *t1, /* Code switch "RESTART" (i.e. TERMALL) */ if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) { if (type == T1_TYPE_RAW) { - opj_mqc_flush(mqc); + /*opj_mqc_flush(mqc);*/ + opj_mqc_bypass_flush_enc(mqc); correction = 1; - /* correction = mqc_bypass_flush_enc(); */ } else { /* correction = mqc_restart_enc(); */ opj_mqc_flush(mqc); correction = 1; @@ -2114,9 +2114,9 @@ static void opj_t1_encode_cblk(opj_t1_t *t1, if (((bpno < ((OPJ_INT32) (cblk->numbps) - 4) && (passtype > 0)) || ((bpno == ((OPJ_INT32)cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) { if (type == T1_TYPE_RAW) { - opj_mqc_flush(mqc); + /*opj_mqc_flush(mqc);*/ + opj_mqc_bypass_flush_enc(mqc); correction = 1; - /* correction = mqc_bypass_flush_enc(); */ } else { /* correction = mqc_restart_enc(); */ opj_mqc_flush(mqc); correction = 1; @@ -2132,7 +2132,8 @@ static void opj_t1_encode_cblk(opj_t1_t *t1, bpno--; } - if (pass->term && bpno > 0) { + /*if (pass->term && bpno > 0) {*/ + if (pass->term && (bpno > 0 || (bpno == 0 && passtype < 2))) { type = ((bpno < ((OPJ_INT32) (cblk->numbps) - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ; if (type == T1_TYPE_RAW) opj_mqc_bypass_init_enc(mqc);