From b60e53d27ff399f5ad9d38f9a64622b04a0ef895 Mon Sep 17 00:00:00 2001 From: amiconn Date: Tue, 4 Nov 2008 23:46:04 +0000 Subject: [PATCH] Some entropy decoder tweaks. Also removed unnecessary 'tmp' variables. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19008 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/demac/libdemac/entropy.c | 13 ++++++++----- apps/codecs/demac/libdemac/rangecoding.h | 28 +++++++++------------------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/apps/codecs/demac/libdemac/entropy.c b/apps/codecs/demac/libdemac/entropy.c index 1ef5bc4dc..86ea06d38 100644 --- a/apps/codecs/demac/libdemac/entropy.c +++ b/apps/codecs/demac/libdemac/entropy.c @@ -141,10 +141,13 @@ static inline void update_rice(struct rice_t* rice, int x) if (rice->k == 0) { rice->k = 1; - } else if (rice->ksum < ((uint32_t)1 << (rice->k + 4))) { - rice->k--; - } else if (rice->ksum >= ((uint32_t)1 << (rice->k + 5))) { - rice->k++; + } else { + uint32_t lim = 1 << (rice->k + 4); + if (rice->ksum < lim) { + rice->k--; + } else if (rice->ksum >= 2 * lim) { + rice->k++; + } } } @@ -178,7 +181,7 @@ static inline int entropy_decode3980(struct rice_t* rice) base_hi = range_decode_culfreq((pivot >> lo_bits) + 1); range_decode_update(1, base_hi); - base_lo = range_decode_culfreq(1 << lo_bits); + base_lo = range_decode_culshift(lo_bits); range_decode_update(1, base_lo); base = (base_hi << lo_bits) + base_lo; diff --git a/apps/codecs/demac/libdemac/rangecoding.h b/apps/codecs/demac/libdemac/rangecoding.h index 9c26344ec..c96886e32 100644 --- a/apps/codecs/demac/libdemac/rangecoding.h +++ b/apps/codecs/demac/libdemac/rangecoding.h @@ -62,12 +62,9 @@ static int bytebufferoffset IBSS_ATTR; static inline void skip_byte(void) { - if (bytebufferoffset) { - bytebufferoffset--; - } else { - bytebufferoffset = 3; - bytebuffer += 4; - } + bytebufferoffset--; + bytebuffer += bytebufferoffset & 4; + bytebufferoffset &= 3; } static inline int read_byte(void) @@ -122,23 +119,17 @@ static inline void range_dec_normalize(void) /* or: totf is (code_value)1<>shift; - tmp = rc.low/rc.help; - return tmp; + rc.help = rc.range >> shift; + return rc.low / rc.help; } @@ -146,9 +137,8 @@ static inline int range_decode_culshift(int shift) /* sy_f is the interval length (frequency of the symbol) */ /* lt_f is the lower end (frequency sum of < symbols) */ static inline void range_decode_update(int sy_f, int lt_f) -{ int tmp; - tmp = rc.help * lt_f; - rc.low -= tmp; +{ + rc.low -= rc.help * lt_f; rc.range = rc.help * sy_f; } -- 2.11.4.GIT