PR #894 (without BOOK implementation) dev-restart
authorAntonin Descampe <antonin@gmail.com>
Fri, 3 Mar 2017 16:00:57 +0000 (17:00 +0100)
committerAntonin Descampe <antonin@gmail.com>
Fri, 3 Mar 2017 16:00:57 +0000 (17:00 +0100)
src/lib/openjp2/mqc.c
src/lib/openjp2/t1.c

index 7119c3a5eec753a3f751480dba02f1784750d14c..f5523ffa7a30acf579fa1d6ce23bd6d90ba9f558 100644 (file)
@@ -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;
        }
index 453d29089ffd8469216e8ff183ce72b81e8aabaf..d4d4c73ffef3ae8870f233773a964cd96ac20869 100644 (file)
@@ -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);