diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-04-17 03:08:25 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-04-17 03:08:25 +0000 |
commit | 5a5a27c5dedc54ca3d9708d58534ee913c4d8bd4 (patch) | |
tree | c2672697f1691cbcf19c67e4f6e781ad686c8b92 /libavcodec/alac.c | |
parent | c49c5e23dc3fb273b46440656f74d416bcc9ab41 (diff) | |
download | ffmpeg-streaming-5a5a27c5dedc54ca3d9708d58534ee913c4d8bd4.zip ffmpeg-streaming-5a5a27c5dedc54ca3d9708d58534ee913c4d8bd4.tar.gz |
Factorize decode_postfix() out.
Originally committed as revision 12873 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/alac.c')
-rw-r--r-- | libavcodec/alac.c | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/libavcodec/alac.c b/libavcodec/alac.c index e99b12b..a99f024 100644 --- a/libavcodec/alac.c +++ b/libavcodec/alac.c @@ -145,6 +145,26 @@ static inline int count_leading_zeros(int32_t input) return 31-av_log2(input); } + +static inline int decode_postfix(GetBitContext *gb, int x, int k, int limit){ + if (k >= limit) + k = limit; + + if (k != 1) { + int extrabits = show_bits(gb, k); + + /* multiply x by 2^k - 1, as part of their strange algorithm */ + x = (x << k) - x; + + if (extrabits > 1) { + x += extrabits - 1; + skip_bits(gb, k); + } else + skip_bits(gb, k - 1); + } + return x; +} + static void bastardized_rice_decompress(ALACContext *alac, int32_t *output_buffer, int output_size, @@ -172,27 +192,11 @@ static void bastardized_rice_decompress(ALACContext *alac, x = get_bits(&alac->gb, readsamplesize); } else { /* standard rice encoding */ - int extrabits; int k; /* size of extra bits */ /* read k, that is bits as is */ k = 31 - count_leading_zeros((history >> 9) + 3); - - if (k >= rice_kmodifier) - k = rice_kmodifier; - - if (k != 1) { - extrabits = show_bits(&alac->gb, k); - - /* multiply x by 2^k - 1, as part of their strange algorithm */ - x = (x << k) - x; - - if (extrabits > 1) { - x += extrabits - 1; - skip_bits(&alac->gb, k); - } else - skip_bits(&alac->gb, k - 1); - } + x= decode_postfix(&alac->gb, x, k, rice_kmodifier); } x_modified = sign_modifier + x; @@ -222,24 +226,10 @@ static void bastardized_rice_decompress(ALACContext *alac, block_size = get_bits(&alac->gb, 16); } else { int k; - int extrabits; k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24; - if (k >= rice_kmodifier) - k = rice_kmodifier; - - x = (x << k) - x; - - extrabits = show_bits(&alac->gb, k); - - if (extrabits < 2) { - skip_bits(&alac->gb, k - 1); - } else { - x += extrabits - 1; - skip_bits(&alac->gb, k); - } - block_size = x; + block_size= decode_postfix(&alac->gb, x, k, rice_kmodifier); } if (block_size > 0) { |