remove (autotools) generated files
[openjpeg.git] / libopenjpeg / mqc.c
index 223cf9f3f8e1a3939b1fe3050db9290683b00e46..5d25238ee68308308fd955ff53ddd4d05da7a5c9 100644 (file)
@@ -1,9 +1,10 @@
 /*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herv� Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,24 +68,23 @@ FIXME: documentation ???
 @param mqc MQC handle
 @return 
 */
-static int mqc_mpsexchange(opj_mqc_t *mqc);
+static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc);
 /**
 FIXME: documentation ???
 @param mqc MQC handle
 @return 
 */
-static int mqc_lpsexchange(opj_mqc_t *mqc);
+static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc);
 /**
 Input a byte
 @param mqc MQC handle
 */
-static void mqc_bytein(opj_mqc_t *mqc);
+static INLINE void mqc_bytein(opj_mqc_t *const mqc);
 /**
 Renormalize mqc->a and mqc->c while decoding
 @param mqc MQC handle
 */
-static void mqc_renormd(opj_mqc_t *mqc);
-
+static INLINE void mqc_renormd(opj_mqc_t *const mqc);
 /*@}*/
 
 /*@}*/
@@ -270,7 +270,7 @@ static void mqc_setbits(opj_mqc_t *mqc) {
        }
 }
 
-static int mqc_mpsexchange(opj_mqc_t *mqc) {
+static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc) {
        int d;
        if (mqc->a < (*mqc->curctx)->qeval) {
                d = 1 - (*mqc->curctx)->mps;
@@ -283,7 +283,7 @@ static int mqc_mpsexchange(opj_mqc_t *mqc) {
        return d;
 }
 
-static int mqc_lpsexchange(opj_mqc_t *mqc) {
+static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc) {
        int d;
        if (mqc->a < (*mqc->curctx)->qeval) {
                mqc->a = (*mqc->curctx)->qeval;
@@ -298,7 +298,15 @@ static int mqc_lpsexchange(opj_mqc_t *mqc) {
        return d;
 }
 
-static void mqc_bytein(opj_mqc_t *mqc) {
+#ifdef MQC_PERF_OPT
+static INLINE void mqc_bytein(opj_mqc_t *const mqc) {
+       unsigned int i = *((unsigned int *) mqc->bp);
+       mqc->c += i & 0xffff00;
+       mqc->ct = i & 0x0f;
+       mqc->bp += (i >> 2) & 0x04;
+}
+#else
+static void mqc_bytein(opj_mqc_t *const mqc) {
        if (mqc->bp != mqc->end) {
                unsigned int c;
                if (mqc->bp + 1 != mqc->end) {
@@ -325,8 +333,9 @@ static void mqc_bytein(opj_mqc_t *mqc) {
                mqc->ct = 8;
        }
 }
+#endif
 
-static void mqc_renormd(opj_mqc_t *mqc) {
+static INLINE void mqc_renormd(opj_mqc_t *const mqc) {
        do {
                if (mqc->ct == 0) {
                        mqc_bytein(mqc);
@@ -343,13 +352,21 @@ static void mqc_renormd(opj_mqc_t *mqc) {
 ==========================================================
 */
 
-opj_mqc_t* mqc_create() {
+opj_mqc_t* mqc_create(void) {
        opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
+#ifdef MQC_PERF_OPT
+       mqc->buffer = NULL;
+#endif
        return mqc;
 }
 
 void mqc_destroy(opj_mqc_t *mqc) {
        if(mqc) {
+#ifdef MQC_PERF_OPT
+               if (mqc->buffer) {
+                       opj_free(mqc->buffer);
+               }
+#endif
                opj_free(mqc);
        }
 }
@@ -370,10 +387,6 @@ void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp) {
        mqc->start = bp;
 }
 
-void mqc_setcurctx(opj_mqc_t *mqc, int ctxno) {
-       mqc->curctx = &mqc->ctxs[ctxno];
-}
-
 void mqc_encode(opj_mqc_t *mqc, int d) {
        if ((*mqc->curctx)->mps == d) {
                mqc_codemps(mqc);
@@ -438,9 +451,9 @@ int mqc_bypass_flush_enc(opj_mqc_t *mqc) {
 
 void mqc_reset_enc(opj_mqc_t *mqc) {
        mqc_resetstates(mqc);
-       mqc_setstate(mqc, 18, 0, 46);
-       mqc_setstate(mqc, 0, 0, 3);
-       mqc_setstate(mqc, 1, 0, 4);
+       mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+       mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+       mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
 }
 
 int mqc_restart_enc(opj_mqc_t *mqc) {
@@ -502,13 +515,52 @@ void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) {
        mqc->bp = bp;
        if (len==0) mqc->c = 0xff << 16;
        else mqc->c = *mqc->bp << 16;
+
+#ifdef MQC_PERF_OPT
+       {
+               unsigned int c;
+               unsigned int *ip;
+               unsigned char *end = mqc->end - 1;
+               mqc->buffer = opj_realloc(mqc->buffer, (2 * len + 1) * sizeof(unsigned int));
+               ip = (unsigned int *) mqc->buffer;
+
+               while (bp != end) {
+                       c = *(bp + 1);
+                       if (*bp == 0xff) {
+                               if (c > 0x8f) {
+                                       *ip = 0x0000ff18;
+                               } else {
+                                       bp++;
+                                       *ip = 0x00000017 | (c << 9);
+                               }
+                       } else {
+                               bp++;
+                               *ip = 0x00000018 | (c << 8);
+                       }
+                       ip++;
+               }
+
+               /* Handle last byte of data */
+               c = 0xff;
+               if (*bp == 0xff) {
+                       *ip = 0x0000ff18;
+               } else {
+                       bp++;
+                       *ip = 0x00000018 | (c << 8);
+               }
+               ip++;
+
+               *ip = 0x0000ff08;
+               mqc->bp = mqc->buffer;
+       }
+#endif
        mqc_bytein(mqc);
        mqc->c <<= 7;
        mqc->ct -= 7;
        mqc->a = 0x8000;
 }
 
-int mqc_decode(opj_mqc_t *mqc) {
+int mqc_decode(opj_mqc_t *const mqc) {
        int d;
        mqc->a -= (*mqc->curctx)->qeval;
        if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {