From 2ddd71126775726871400f72fedae809af73ce3f Mon Sep 17 00:00:00 2001 From: Gregor Weiss Date: Mon, 23 Sep 2024 13:30:39 +0200 Subject: [PATCH] refactor: move duplicated code into macro (xi) --- src/library/tier1.c | 150 ++++++++------------------------------------ 1 file changed, 26 insertions(+), 124 deletions(-) diff --git a/src/library/tier1.c b/src/library/tier1.c index 09ba03a..77afacc 100755 --- a/src/library/tier1.c +++ b/src/library/tier1.c @@ -120,6 +120,24 @@ k_sig = ((15 * k_h + 5 * k_v + k_d) >> l); \ } +#define calc_xi(stripe, bit_mask, k, l, xi_h, xi_v) \ +{ \ + xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | \ + ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; \ + xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | \ + ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; \ + if(l == 3) \ + { \ + xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); \ + } \ + else if(l == 0) \ + { \ + xi_v |= (((0x08 & stripe[k].stripe_d->sigma) >> 2) | (0x08 & stripe[k].stripe_d->xi)); \ + } \ + xi_h = SIG2XI[xi_h]; \ + xi_v = SIG2XI[xi_v]; \ +} + /************************************************************************************************************\ || ____ _ _ ___ ____ ____ _ _ ____ _ ____ ____ _ _ ____ ___ ____ _ _ ___ ____ || || |___ \/ | |___ |__/ |\ | |__| | | | | |\ | [__ | |__| |\ | | [__ || @@ -1033,24 +1051,7 @@ significance_propagation_enc_pass(bwc_coder *const coder, const int8 b) if(bit & bit_mask) { - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - else if(l == 0) - { - xi_v |= (((0x08 & stripe[k].stripe_d->sigma) >> 2) | (0x08 & stripe[k].stripe_d->xi)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; - + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); mq_bit_encode(coder->bitcoder, (uchar)(((bit_mask & stripe[k].xi) >> l)^XI2CONT[(xi_h << 2) | xi_v][1]), XI2CONT[(xi_h << 2) | xi_v][0]); @@ -1092,20 +1093,7 @@ significance_propagation_enc_pass(bwc_coder *const coder, const int8 b) if(bit & bit_mask) { - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; - + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); mq_bit_encode(coder->bitcoder, (uchar)(((bit_mask & stripe[k].xi) >> l)^XI2CONT[(xi_h << 2) | xi_v][1]), XI2CONT[(xi_h << 2) | xi_v][0]); @@ -1396,24 +1384,7 @@ cleanup_enc_pass(bwc_coder *const coder, const int8 b) } if(bit & bit_mask) { - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - else if(l == 0) - { - xi_v |= (((0x08 & stripe[k].stripe_d->sigma) >> 2) | (0x08 & stripe[k].stripe_d->xi)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; - + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); mq_bit_encode(coder->bitcoder, (uchar)(((bit_mask & stripe[k].xi) >> l)^XI2CONT[(xi_h << 2) | xi_v][1]), XI2CONT[(xi_h << 2) | xi_v][0]); @@ -1438,20 +1409,7 @@ cleanup_enc_pass(bwc_coder *const coder, const int8 b) if(bit & bit_mask) { - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; - + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); mq_bit_encode(coder->bitcoder, (uchar)(((bit_mask & stripe[k].xi) >> l)^XI2CONT[(xi_h << 2) | xi_v][1]), XI2CONT[(xi_h << 2) | xi_v][0]); @@ -1547,23 +1505,7 @@ significance_propagation_dec_pass(bwc_coder *const coder, const int8 b) { stripe[k].bit[b] |= (bit << l); - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - else if(l == 0) - { - xi_v |= (((0x08 & stripe[k].stripe_d->sigma) >> 2) | (0x08 & stripe[k].stripe_d->xi)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; + calc_xi(stripe, bit_mask, l, k, xi_h, xi_v); stripe[k].xi |= ((XI2CONT[(xi_h << 2) | xi_v][1] ^ mq_bit_decode(coder->bitcoder, XI2CONT[(xi_h << 2) | xi_v][0])) << l); @@ -1606,19 +1548,7 @@ significance_propagation_dec_pass(bwc_coder *const coder, const int8 b) { stripe[k].bit[b] |= (bit << l); - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); stripe[k].xi |= ((XI2CONT[(xi_h << 2) | xi_v][1] ^ mq_bit_decode(coder->bitcoder, XI2CONT[(xi_h << 2) | xi_v][0])) << l); @@ -1890,23 +1820,7 @@ cleanup_dec_pass(bwc_coder *const coder, const int8 b) } if(bit & bit_mask) { - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - else if(l == 0) - { - xi_v |= (((0x08 & stripe[k].stripe_d->sigma) >> 2) | (0x08 & stripe[k].stripe_d->xi)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); stripe[k].xi |= ((XI2CONT[(xi_h << 2) | xi_v][1] ^ mq_bit_decode(coder->bitcoder, XI2CONT[(xi_h << 2) | xi_v][0])) << l); @@ -1933,19 +1847,7 @@ cleanup_dec_pass(bwc_coder *const coder, const int8 b) if(bit & bit_mask) { - xi_h = ((bit_mask & stripe[k].stripe_l->sigma) | ((bit_mask & stripe[k].stripe_l->xi) << 2) | - ((bit_mask & stripe[k].stripe_r->sigma) << 1) | ((bit_mask & stripe[k].stripe_r->xi) << 3)) >> l; - - xi_v = ((bit_mask & (stripe[k].sigma >> 1)) | ((bit_mask & (stripe[k].xi >> 1)) << 2) | - ((bit_mask & (stripe[k].sigma << 1)) << 1) | ((bit_mask & (stripe[k].xi << 1)) << 3)) >> l; - - if(l == 3) - { - xi_v |= ((0x01 & stripe[k].stripe_u->sigma) | ((0x01 & stripe[k].stripe_u->xi) << 2)); - } - - xi_h = SIG2XI[xi_h]; - xi_v = SIG2XI[xi_v]; + calc_xi(stripe, bit_mask, k, l, xi_h, xi_v); stripe[k].xi |= ((XI2CONT[(xi_h << 2) | xi_v][1] ^ mq_bit_decode(coder->bitcoder, XI2CONT[(xi_h << 2) | xi_v][0])) << l);