mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-12 02:04:58 +00:00
Factorize more code.
Originally committed as revision 12874 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
5a5a27c5de
commit
5eeba07ec9
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user