| @@ -70,19 +70,16 @@ typedef struct { | |||
| int32_t *extra_bits_buffer[MAX_CHANNELS]; | |||
| /* stuff from setinfo */ | |||
| uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max samples per frame? */ | |||
| uint8_t setinfo_sample_size; /* 0x10 */ | |||
| uint8_t setinfo_rice_historymult; /* 0x28 */ | |||
| uint8_t setinfo_rice_initialhistory; /* 0x0a */ | |||
| uint8_t setinfo_rice_kmodifier; /* 0x0e */ | |||
| /* end setinfo stuff */ | |||
| uint32_t setinfo_max_samples_per_frame; | |||
| uint8_t setinfo_sample_size; | |||
| uint8_t setinfo_rice_historymult; | |||
| uint8_t setinfo_rice_initialhistory; | |||
| uint8_t setinfo_rice_kmodifier; | |||
| int extra_bits; /**< number of extra bits beyond 16-bit */ | |||
| } ALACContext; | |||
| 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 */ | |||
| @@ -109,14 +106,13 @@ static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsam | |||
| } | |||
| static void bastardized_rice_decompress(ALACContext *alac, | |||
| int32_t *output_buffer, | |||
| int output_size, | |||
| int readsamplesize, /* arg_10 */ | |||
| int rice_initialhistory, /* arg424->b */ | |||
| int rice_kmodifier, /* arg424->d */ | |||
| int rice_historymult, /* arg424->c */ | |||
| int rice_kmodifier_mask /* arg424->e */ | |||
| ) | |||
| int32_t *output_buffer, | |||
| int output_size, | |||
| int readsamplesize, | |||
| int rice_initialhistory, | |||
| int rice_kmodifier, | |||
| int rice_historymult, | |||
| int rice_kmodifier_mask) | |||
| { | |||
| int output_count; | |||
| unsigned int history = rice_initialhistory; | |||
| @@ -203,10 +199,8 @@ static void predictor_decompress_fir_adapt(int32_t *error_buffer, | |||
| return; | |||
| } | |||
| if (predictor_coef_num == 0x1f) { /* 11111 - max value of predictor_coef_num */ | |||
| /* second-best case scenario for fir decompression, | |||
| * error describes a small difference from the previous sample only | |||
| */ | |||
| if (predictor_coef_num == 31) { | |||
| /* simple 1st-order prediction */ | |||
| if (output_size <= 1) | |||
| return; | |||
| for (i = 0; i < output_size - 1; i++) { | |||
| @@ -231,9 +225,7 @@ static void predictor_decompress_fir_adapt(int32_t *error_buffer, | |||
| buffer_out[i+1] = val; | |||
| } | |||
| /* 4 and 8 are very common cases (the only ones i've seen). these | |||
| * should be unrolled and optimized | |||
| */ | |||
| /* NOTE: 4 and 8 are very common cases that could be optimized. */ | |||
| /* general case */ | |||
| if (predictor_coef_num > 0) { | |||
| @@ -371,14 +363,10 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data, | |||
| return AVERROR_INVALIDDATA; | |||
| } | |||
| /* 2^result = something to do with output waiting. | |||
| * perhaps matters if we read > 1 frame in a pass? | |||
| */ | |||
| skip_bits(&alac->gb, 4); | |||
| skip_bits(&alac->gb, 4); /* element instance tag */ | |||
| skip_bits(&alac->gb, 12); /* unused header bits */ | |||
| skip_bits(&alac->gb, 12); /* unknown, skip 12 bits */ | |||
| /* the output sample size is stored soon */ | |||
| /* the number of output samples is stored in the frame */ | |||
| hassize = get_bits1(&alac->gb); | |||
| alac->extra_bits = get_bits(&alac->gb, 2) << 3; | |||
| @@ -578,7 +566,6 @@ static int alac_set_info(ALACContext *alac) | |||
| bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4 | |||
| /* buffer size / 2 ? */ | |||
| alac->setinfo_max_samples_per_frame = bytestream2_get_be32u(&gb); | |||
| if (alac->setinfo_max_samples_per_frame >= UINT_MAX/4){ | |||
| av_log(alac->avctx, AV_LOG_ERROR, | |||