diff --git a/src/library/tier1.c b/src/library/tier1.c index 1bc59fc..09ba03a 100755 --- a/src/library/tier1.c +++ b/src/library/tier1.c @@ -99,6 +99,27 @@ mq_bit_encode(bitcoder, 0, CONTEXT_UNI); \ } +#define calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig) \ +{ \ + k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); \ + k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); \ + k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + \ + (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); \ + if(l == 3) \ + { \ + k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); \ + k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + \ + (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; \ + } \ + else if(l == 0) \ + { \ + k_v += ((0x08 & stripe[k].stripe_d->sigma) >> 3); \ + k_d += ((0x08 & stripe[k].stripe_d->stripe_l->sigma) + \ + (0x08 & stripe[k].stripe_d->stripe_r->sigma)) >> 3; \ + } \ + k_sig = ((15 * k_h + 5 * k_v + k_d) >> l); \ +} + /************************************************************************************************************\ || ____ _ _ ___ ____ ____ _ _ ____ _ ____ ____ _ _ ____ ___ ____ _ _ ___ ____ || || |___ \/ | |___ |__/ |\ | |__| | | | | |\ | [__ | |__| |\ | | [__ || @@ -1004,27 +1025,7 @@ significance_propagation_enc_pass(bwc_coder *const coder, const int8 b) { if(!(stripe[k].sigma & bit_mask)) { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - else if(l == 0) - { - k_v += ((0x08 & stripe[k].stripe_d->sigma) >> 3); - k_d += ((0x08 & stripe[k].stripe_d->stripe_l->sigma) + - (0x08 & stripe[k].stripe_d->stripe_r->sigma)) >> 3; - } - - k_sig = ((15 * k_h + 5 * k_v + k_d) >> l); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); if(k_sig) { @@ -1083,21 +1084,7 @@ significance_propagation_enc_pass(bwc_coder *const coder, const int8 b) { if(!(stripe[k].sigma & bit_mask)) { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - - k_sig = ((15 * k_h + 5 * k_v + k_d) >> l); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); if(k_sig && (stripe[k].sigma^bit_mask)) { @@ -1338,6 +1325,7 @@ cleanup_enc_pass(bwc_coder *const coder, const int8 b) uint64 k, x; int64 mse; uint16 k_h, k_v, k_d; + uint16 k_sig; uint16 xi_h, xi_v; uint8 bit_mask, l; uint8 dist_shift, dist_corr; @@ -1403,27 +1391,8 @@ cleanup_enc_pass(bwc_coder *const coder, const int8 b) } else { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - else if(l == 0) - { - k_v += ((0x08 & stripe[k].stripe_d->sigma) >> 3); - k_d += ((0x08 & stripe[k].stripe_d->stripe_l->sigma) + - (0x08 & stripe[k].stripe_d->stripe_r->sigma)) >> 3; - } - - mq_bit_encode(coder->bitcoder, (uchar)((bit >> l) & 0x01), coder->sig2context[(15 * k_h + 5 * k_v + k_d) >> l]); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); + mq_bit_encode(coder->bitcoder, (uchar)((bit >> l) & 0x01), coder->sig2context[k_sig]); } if(bit & bit_mask) { @@ -1464,21 +1433,8 @@ cleanup_enc_pass(bwc_coder *const coder, const int8 b) { if(!(stripe[k].sigma & bit_mask) && !(stripe[k].pi & bit_mask)) { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - - mq_bit_encode(coder->bitcoder, (uchar)((bit >> l) & 0x01), coder->sig2context[(15 * k_h + 5 * k_v + k_d) >> l]); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); + mq_bit_encode(coder->bitcoder, (uchar)((bit >> l) & 0x01), coder->sig2context[k_sig]); if(bit & bit_mask) { @@ -1581,27 +1537,7 @@ significance_propagation_dec_pass(bwc_coder *const coder, const int8 b) { if(!(stripe[k].sigma & bit_mask)) { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - else if(l == 0) - { - k_v += ((0x08 & stripe[k].stripe_d->sigma) >> 3); - k_d += ((0x08 & stripe[k].stripe_d->stripe_l->sigma) + - (0x08 & stripe[k].stripe_d->stripe_r->sigma)) >> 3; - } - - k_sig = ((15 * k_h + 5 * k_v + k_d) >> l); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); if(k_sig) { @@ -1660,21 +1596,7 @@ significance_propagation_dec_pass(bwc_coder *const coder, const int8 b) { if(!(stripe[k].sigma & bit_mask)) { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - - k_sig = ((15 * k_h + 5 * k_v + k_d) >> l); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); if(k_sig && (stripe[k].sigma^bit_mask)) { @@ -1906,6 +1828,7 @@ cleanup_dec_pass(bwc_coder *const coder, const int8 b) uint64 i, j; uint64 k, x; uint16 k_h, k_v, k_d; + uint16 k_sig; uint16 xi_h, xi_v; uint8 bit_mask, l; uint8 bit; @@ -1962,27 +1885,8 @@ cleanup_dec_pass(bwc_coder *const coder, const int8 b) } else { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - else if(l == 0) - { - k_v += ((0x08 & stripe[k].stripe_d->sigma) >> 3); - k_d += ((0x08 & stripe[k].stripe_d->stripe_l->sigma) + - (0x08 & stripe[k].stripe_d->stripe_r->sigma)) >> 3; - } - - bit |= (mq_bit_decode(coder->bitcoder, coder->sig2context[(15 * k_h + 5 * k_v + k_d) >> l]) << l); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); + bit |= (mq_bit_decode(coder->bitcoder, coder->sig2context[k_sig]) << l); } if(bit & bit_mask) { @@ -2024,21 +1928,8 @@ cleanup_dec_pass(bwc_coder *const coder, const int8 b) { if(!(stripe[k].sigma & bit_mask) && !(stripe[k].pi & bit_mask)) { - k_h = (stripe[k].stripe_l->sigma & bit_mask) + (stripe[k].stripe_r->sigma & bit_mask); - - k_v = ((bit_mask & (stripe[k].sigma >> 1)) + (bit_mask & (stripe[k].sigma << 1))); - - k_d = ((bit_mask & (stripe[k].stripe_l->sigma >> 1)) + (bit_mask & (stripe[k].stripe_l->sigma << 1)) + - (bit_mask & (stripe[k].stripe_r->sigma >> 1)) + (bit_mask & (stripe[k].stripe_r->sigma << 1))); - - if(l == 3) - { - k_v += ((0x01 & stripe[k].stripe_u->sigma) << 3); - k_d += ((0x01 & stripe[k].stripe_u->stripe_l->sigma) + - (0x01 & stripe[k].stripe_u->stripe_r->sigma)) << 3; - } - - bit |= (mq_bit_decode(coder->bitcoder, coder->sig2context[(15 * k_h + 5 * k_v + k_d) >> l]) << l); + calc_k_sig(stripe, bit_mask, k, l, k_h, k_v, k_d, k_sig); + bit |= (mq_bit_decode(coder->bitcoder, coder->sig2context[k_sig]) << l); if(bit & bit_mask) {