Mercurial > libavcodec.hg
changeset 6626:a2f1a461dac6 libavcodec
Factorize more code.
author | michael |
---|---|
date | Thu, 17 Apr 2008 03:21:15 +0000 |
parents | 1f4a86db7835 |
children | 33a41b13fbfe |
files | alac.c |
diffstat | 1 files changed, 12 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/alac.c Thu Apr 17 03:08:25 2008 +0000 +++ b/alac.c Thu Apr 17 03:21:15 2008 +0000 @@ -146,7 +146,14 @@ } -static inline int decode_postfix(GetBitContext *gb, int x, int k, int limit){ +static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsamplesize){ + /* read x - number of 1s before 0 represent the rice */ + int x = get_unary_0_9(gb); + + if (x > 8) { /* RICE THRESHOLD */ + /* use alternative encoding */ + x = get_bits(gb, readsamplesize); + } else { if (k >= limit) k = limit; @@ -162,6 +169,7 @@ } else skip_bits(gb, k - 1); } + } return x; } @@ -184,20 +192,12 @@ int32_t x_modified; int32_t final_val; - /* read x - number of 1s before 0 represent the rice */ - x = get_unary_0_9(&alac->gb); - - if (x > 8) { /* RICE THRESHOLD */ - /* use alternative encoding */ - x = get_bits(&alac->gb, readsamplesize); - } else { /* standard rice encoding */ int k; /* size of extra bits */ /* read k, that is bits as is */ k = 31 - count_leading_zeros((history >> 9) + 3); - x= decode_postfix(&alac->gb, x, k, rice_kmodifier); - } + x= decode_scalar(&alac->gb, k, rice_kmodifier, readsamplesize); x_modified = sign_modifier + x; final_val = (x_modified + 1) / 2; @@ -216,21 +216,13 @@ /* special case: there may be compressed blocks of 0 */ if ((history < 128) && (output_count+1 < output_size)) { - int block_size; + int block_size, k; sign_modifier = 1; - x = get_unary_0_9(&alac->gb); - - if (x > 8) { - block_size = get_bits(&alac->gb, 16); - } else { - int k; - k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24; - block_size= decode_postfix(&alac->gb, x, k, rice_kmodifier); - } + block_size= decode_scalar(&alac->gb, k, rice_kmodifier, 16); if (block_size > 0) { memset(&output_buffer[output_count+1], 0, block_size * 4);