diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-04-17 03:21:15 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-04-17 03:21:15 +0000 |
commit | 5eeba07ec92c8e068e9501d54e1d79af82dc347d (patch) | |
tree | 1f5dd6ca44ddb93e0519e168281a1d3624b2d364 /libavcodec/alac.c | |
parent | 5a5a27c5dedc54ca3d9708d58534ee913c4d8bd4 (diff) | |
download | ffmpeg-5eeba07ec92c8e068e9501d54e1d79af82dc347d.tar.gz |
Factorize more code.
Originally committed as revision 12874 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/alac.c')
-rw-r--r-- | libavcodec/alac.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/libavcodec/alac.c b/libavcodec/alac.c index a99f024ceb..11e9847b44 100644 --- a/libavcodec/alac.c +++ b/libavcodec/alac.c @@ -146,7 +146,14 @@ static inline int count_leading_zeros(int32_t input) } -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 @@ static inline int decode_postfix(GetBitContext *gb, int x, int k, int limit){ } else skip_bits(gb, k - 1); } + } return x; } @@ -184,20 +192,12 @@ static void bastardized_rice_decompress(ALACContext *alac, 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 @@ static void bastardized_rice_decompress(ALACContext *alac, /* 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); |