+/* </summary> */
+static void dwt_decode_1_(int *a, int dn, int sn, int cas) {
+ int i;
+
+ if (!cas) {
+ if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */
+ for (i = 0; i < sn; i++) S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
+ for (i = 0; i < dn; i++) D(i) += (S_(i) + S_(i + 1)) >> 1;
+ }
+ } else {
+ if (!sn && dn == 1) /* NEW : CASE ONE ELEMENT */
+ S(0) /= 2;
+ else {
+ for (i = 0; i < sn; i++) D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
+ for (i = 0; i < dn; i++) S(i) += (DD_(i) + DD_(i - 1)) >> 1;
+ }
+ }
+}
+
+/* <summary> */
+/* Inverse 5-3 wavelet tranform in 1-D. */
+/* </summary> */
+static void dwt_decode_1(dwt_t *v) {
+ dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
+}
+
+/* <summary> */
+/* Forward 9-7 wavelet transform in 1-D. */
+/* </summary> */
+static void dwt_encode_1_real(int *a, int dn, int sn, int cas) {
+ int i;
+ if (!cas) {
+ if ((dn > 0) || (sn > 1)) { /* NEW : CASE ONE ELEMENT */
+ for (i = 0; i < dn; i++)
+ D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
+ for (i = 0; i < sn; i++)
+ S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
+ for (i = 0; i < dn; i++)
+ D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
+ for (i = 0; i < sn; i++)
+ S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
+ for (i = 0; i < dn; i++)
+ D(i) = fix_mul(D(i), 5038); /*5038 */
+ for (i = 0; i < sn; i++)
+ S(i) = fix_mul(S(i), 6659); /*6660 */
+ }
+ } else {
+ if ((sn > 0) || (dn > 1)) { /* NEW : CASE ONE ELEMENT */
+ for (i = 0; i < dn; i++)
+ S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
+ for (i = 0; i < sn; i++)
+ D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
+ for (i = 0; i < dn; i++)
+ S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
+ for (i = 0; i < sn; i++)
+ D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
+ for (i = 0; i < dn; i++)
+ S(i) = fix_mul(S(i), 5038); /*5038 */
+ for (i = 0; i < sn; i++)
+ D(i) = fix_mul(D(i), 6659); /*6660 */
+ }
+ }
+}
+
+static void dwt_decode_sm(dwt_t* v, int k, int n, int x) {
+ int m = k > n ? n : k;
+ int l = v->mem[1]; //D(0);
+ int j;
+ int i;
+ for (i = 0; i < m; i++) {
+ j = l;
+ WS(i) -= fix_mul( ( l = WD(i) ) + j , x);
+ }
+ if( i < k ) {
+ l = fix_mul( l + l , x );
+ for (; i < k; i++)
+ WS(i) -= l;
+ }
+}
+
+static void dwt_decode_sp(dwt_t* v, int k, int n, int x) {
+ int m = k > n ? n : k;
+ int l = v->mem[1]; //D(0);
+ int j;
+ int i;
+ for (i = 0; i < m; i++) {
+ j = l;
+ WS(i) += fix_mul( ( l = WD(i) ) + j , x);
+ }
+ if( i < k ) {
+ l = fix_mul( l + l , x );
+ for (; i < k; i++)
+ WS(i) += l;
+ }
+}
+
+static void dwt_decode_dm(dwt_t* v, int k, int n, int x) {
+ int m = k >= n ? n-1 : k;
+ int l = v->mem[0]; //S(0);
+ int i;
+ int j;
+ for (i = 0; i < m; i++) {
+ j = l;
+ WD(i) -= fix_mul( ( l = WS(i+1) ) + j , x);
+ }
+ if( i < k ) {
+ l = fix_mul( l + l , x );
+ for (; i < k; i++)
+ WD(i) -= l;
+ }
+}
+
+static void dwt_decode_dp(dwt_t* v, int k, int n, int x) {
+ int m = k >= n ? n-1 : k;
+ int l = v->mem[0]; //S(0);
+ int i;
+ int j;
+ for (i = 0; i < m; i++) {
+ j = l;
+ WD(i) += fix_mul( ( l = WS(i+1) ) + j , x);
+ }
+
+ if( i < k ) {
+ l = fix_mul( l + l , x );
+ for (; i < k; i++)
+ WD(i) += l;
+ }
+}
+
+
+/* <summary> */
+/* Inverse 9-7 wavelet transform in 1-D. */
+/* </summary> */
+static void dwt_decode_1_real(dwt_t* v) {
+ int i;
+ if (!v->cas) {
+ if ((v->dn > 0) || (v->sn > 1)) { /* NEW : CASE ONE ELEMENT */
+ for (i = 0; i < v->sn; i++)
+ WS(i) = fix_mul(WS(i), 10078); /* 10076 */
+ for (i = 0; i < v->dn; i++)
+ WD(i) = fix_mul(WD(i), 13318); /* 13320 */
+ dwt_decode_sm(v, v->sn, v->dn, 3633);
+ dwt_decode_dm(v, v->dn, v->sn, 7233);
+ dwt_decode_sp(v, v->sn, v->dn, 434);
+ dwt_decode_dp(v, v->dn, v->sn, 12994);
+ }
+ } else {
+ if ((v->sn > 0) || (v->dn > 1)) { /* NEW : CASE ONE ELEMENT */
+ for (i = 0; i < v->sn; i++)
+ WD(i) = fix_mul(WD(i), 10078); /* 10076 */
+ for (i = 0; i < v->dn; i++)
+ WS(i) = fix_mul(WS(i), 13318); /* 13320 */
+ dwt_decode_dm(v, v->sn, v->dn, 3633);
+ dwt_decode_sm(v, v->dn, v->sn, 7233);
+ dwt_decode_dp(v, v->sn, v->dn, 434);
+ dwt_decode_sp(v, v->dn, v->sn, 12994);
+ }
+ }