Commit d9837434 authored by Justin Ruggles's avatar Justin Ruggles

alac: limit the rice param before passing to decode_scalar()

reduces the number of parameters to decode_scalar() and slightly simplifies
the code
parent 6e91f622
...@@ -77,17 +77,14 @@ typedef struct { ...@@ -77,17 +77,14 @@ typedef struct {
int extra_bits; /**< number of extra bits beyond 16-bit */ int extra_bits; /**< number of extra bits beyond 16-bit */
} ALACContext; } ALACContext;
static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsamplesize){ static inline int decode_scalar(GetBitContext *gb, int k, int readsamplesize)
{
int x = get_unary_0_9(gb); int x = get_unary_0_9(gb);
if (x > 8) { /* RICE THRESHOLD */ if (x > 8) { /* RICE THRESHOLD */
/* use alternative encoding */ /* use alternative encoding */
x = get_bits(gb, readsamplesize); x = get_bits(gb, readsamplesize);
} else { } else if (k != 1) {
if (k >= limit)
k = limit;
if (k != 1) {
int extrabits = show_bits(gb, k); int extrabits = show_bits(gb, k);
/* multiply x by 2^k - 1, as part of their strange algorithm */ /* multiply x by 2^k - 1, as part of their strange algorithm */
...@@ -98,7 +95,6 @@ static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsam ...@@ -98,7 +95,6 @@ static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsam
skip_bits(gb, k); skip_bits(gb, k);
} else } else
skip_bits(gb, k - 1); skip_bits(gb, k - 1);
}
} }
return x; return x;
} }
...@@ -123,7 +119,8 @@ static void bastardized_rice_decompress(ALACContext *alac, ...@@ -123,7 +119,8 @@ static void bastardized_rice_decompress(ALACContext *alac,
/* read k, that is bits as is */ /* read k, that is bits as is */
k = av_log2((history >> 9) + 3); k = av_log2((history >> 9) + 3);
x = decode_scalar(&alac->gb, k, alac->rice_limit, readsamplesize); k = FFMIN(k, alac->rice_limit);
x = decode_scalar(&alac->gb, k, readsamplesize);
x_modified = sign_modifier + x; x_modified = sign_modifier + x;
final_val = (x_modified + 1) / 2; final_val = (x_modified + 1) / 2;
...@@ -148,8 +145,9 @@ static void bastardized_rice_decompress(ALACContext *alac, ...@@ -148,8 +145,9 @@ static void bastardized_rice_decompress(ALACContext *alac,
sign_modifier = 1; sign_modifier = 1;
k = 7 - av_log2(history) + ((history + 16) >> 6 /* / 64 */); k = 7 - av_log2(history) + ((history + 16) >> 6 /* / 64 */);
k = FFMIN(k, alac->rice_limit);
block_size = decode_scalar(&alac->gb, k, alac->rice_limit, 16); block_size = decode_scalar(&alac->gb, k, 16);
if (block_size > 0) { if (block_size > 0) {
if(block_size >= output_size - output_count){ if(block_size >= output_size - output_count){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment