From: Andre Noll Date: Sun, 18 Oct 2009 16:08:38 +0000 (+0200) Subject: Replace GET_VLC by an inline funcion and kill get_vlc2(). X-Git-Tag: v0.4.1~67 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=a7722850be9f23daf1e095bc9527ba24faa9719b;hp=18651668774f785d38189eee9d8389fe69428380 Replace GET_VLC by an inline funcion and kill get_vlc2(). --- diff --git a/bitstream.h b/bitstream.h index fe85aba7..df2c0b8b 100644 --- a/bitstream.h +++ b/bitstream.h @@ -152,38 +152,41 @@ void init_vlc(struct vlc *vlc, int nb_bits, int nb_codes, const void *bits, void free_vlc(struct vlc *vlc); /** + * Parse a vlc code. * - * if the vlc code is invalid and max_depth=1 than no bits will be removed - * if the vlc code is invalid and max_depth>1 than the number of bits removed - * is undefined + * \param bits The number of bits which will be read at once, must be + * identical to nb_bits in init_vlc() + * + * \param max_depth The number of times bits bits must be read to completely + * read the longest vlc code = (max_vlc_length + bits - 1) / bits. */ -#define GET_VLC(code, gb, table, bits, max_depth)\ -{\ - int n, index, nb_bits;\ -\ - index= SHOW_UBITS(re, gb, bits);\ - code = table[index][0];\ - n = table[index][1];\ -\ - if(max_depth > 1 && n < 0){\ - LAST_SKIP_BITS(re, gb, bits)\ - UPDATE_CACHE(re, gb)\ -\ - nb_bits = -n;\ -\ - index= SHOW_UBITS(re, gb, nb_bits) + code;\ - code = table[index][0];\ - n = table[index][1];\ - if(max_depth > 2 && n < 0){\ - LAST_SKIP_BITS(re, gb, nb_bits)\ - UPDATE_CACHE(re, gb)\ -\ - nb_bits = -n;\ -\ - index= SHOW_UBITS(re, gb, nb_bits) + code;\ - code = table[index][0];\ - n = table[index][1];\ - }\ - }\ - SKIP_BITS(re, gb, n)\ +static inline int get_vlc(struct getbit_context *gb, VLC_TYPE(*table)[2], + int bits, int max_depth) +{ + int n, idx, nb_bits, code; + + OPEN_READER(re, gb) + UPDATE_CACHE(re, gb) + idx = SHOW_UBITS(re, gb, bits); + code = table[idx][0]; + n = table[idx][1]; + if (max_depth > 1 && n < 0) { + LAST_SKIP_BITS(re, gb, bits) + UPDATE_CACHE(re, gb) + nb_bits = -n; + idx = SHOW_UBITS(re, gb, nb_bits) + code; + code = table[idx][0]; + n = table[idx][1]; + if (max_depth > 2 && n < 0) { + LAST_SKIP_BITS(re, gb, nb_bits) + UPDATE_CACHE(re, gb) + nb_bits = -n; + idx = SHOW_UBITS(re, gb, nb_bits) + code; + code = table[idx][0]; + n = table[idx][1]; + } + } + SKIP_BITS(re, gb, n) + CLOSE_READER(re, gb) + return code; } diff --git a/wmadec_filter.c b/wmadec_filter.c index 67791a60..401dfd25 100644 --- a/wmadec_filter.c +++ b/wmadec_filter.c @@ -574,27 +574,6 @@ static void decode_exp_lsp(struct private_wmadec_data *pwd, int ch) pwd->block_len, lsp_coefs); } -/* - * Parse a vlc code, faster then get_vlc(). - * - * \param bits The number of bits which will be read at once, must be - * identical to nb_bits in init_vlc() - * - * \param max_depth The number of times bits bits must be read to completely - * read the longest vlc code = (max_vlc_length + bits - 1) / bits. - */ -static int get_vlc2(struct getbit_context *s, VLC_TYPE(*table)[2], - int bits, int max_depth) -{ - int code; - - OPEN_READER(re, s) - UPDATE_CACHE(re, s) - GET_VLC(code, s, table, bits, max_depth) - CLOSE_READER(re, s) - return code; -} - /* Decode exponents coded with VLC codes. */ static int decode_exp_vlc(struct private_wmadec_data *pwd, int ch) { @@ -610,7 +589,7 @@ static int decode_exp_vlc(struct private_wmadec_data *pwd, int ch) last_exp = 36; while (q < q_end) { - code = get_vlc2(&pwd->gb, pwd->exp_vlc.table, EXPVLCBITS, EXPMAX); + code = get_vlc(&pwd->gb, pwd->exp_vlc.table, EXPVLCBITS, EXPMAX); if (code < 0) return -1; /* NOTE: this offset is the same as MPEG4 AAC ! */ @@ -816,7 +795,7 @@ static int wma_decode_block(struct private_wmadec_data *pwd) 7) - 19; } else { code = - get_vlc2(&pwd->gb, + get_vlc(&pwd->gb, pwd-> hgain_vlc. table, @@ -869,7 +848,7 @@ static int wma_decode_block(struct private_wmadec_data *pwd) memset(ptr, 0, pwd->block_len * sizeof(int16_t)); for (;;) { code = - get_vlc2(&pwd->gb, coef_vlc->table, VLCBITS, + get_vlc(&pwd->gb, coef_vlc->table, VLCBITS, VLCMAX); if (code < 0) return -1;